[Kolab-devel] 10.000 events in a Resource Calendar
Jeroen van Meeuwen (Kolab Systems)
vanmeeuwen at kolabsys.com
Tue May 22 14:26:23 CEST 2012
On 2012-05-22 12:16, Martin Konold wrote:
> Am Dienstag, 22. Mai 2012, 11:55:35 schrieb Jeroen van Meeuwen:
>
> Hi Jeroen,
>
Hi Martin,
>> > - Freebusy only changes when new IMAP objects are created in a
>> > calendar (remember that there is no modify)
>>
>> This assumption is fairly flawed, since removing events from a
>> calendar
>> does not add new IMAP objects but MUST update free/busy.
>
> No this is not a flaw in any way. A delete operation is handled
> exactly like
> and together with write operations. (E.g. EVERY modify is actually a
> delete+write operation by nature of how Kolab storage works)
>
Let's take a step back, because we're confusing the issue in OP.
The following *actually* happens when an event is deleted (whether "the
idea behind 0(1)" design or not);
- Adding or editing an event to a calendar obviously adds a new object
to IMAP.
- To remove an event from a calendar, the message could be flagged
\Deleted in IMAP, and (possibly) the folder is expunged (doesn't
matter),
- This is *not* a write operation that adds a new object to IMAP. It
does bump UIDVALIDITY, but... see below.
- The *client* is to trigger the Free/Busy update,
- CONDSTORE (required for UIDVALIDITY) is not enabled on Kolab 2.3
(Cyrus IMAP 2.3) mailboxes by default,
- The Free/Busy mechanism has little to hold on to, to see what has
changed, unless it maintains a local cache of at least the UIDs of the
message it used when it last generated the (partial) Free/Busy,
- Retrieval of relevant events to the relevant period in time could be
made faster using sorting and retrieving the newest objects first,
- The client triggering Free/Busy does not simply HEAD a URL and
disconnects, as this would impede the slice of time any web server code
has available to do what it needs to do. Therefore, a client keeps open
the connection (and uses GET/POST) until the web server performing the
Free/Busy updating is done. This is considered a blocking operation for
clients that cannot do this in the background.
- Obtaining 10.000 events from a single folder can (relatively easily)
take > 30 seconds.
>> > - Kolab creates partial freebusy information whenever a new object
>> is
>> > written to a calendar folder in IMAP
>>
>> Euh, as far as I know, it is the client software that triggers an
>> update of the free/busy, and not the Kolab server itself, and unless
>> the
>> client is multi-threaded like Kontact it is also a blocking
>> operation.
>
> Sorry this is non-sense.
Thank you for your balanced and well-formulated opinion.
> The Kolab client _triggers_ the creation of of the
> freebusy information. Such a trigger is trivially non-blocking and
> the time
> required is totally independent of the folders size (perfect O(1).
> There is no need for multi-threading here.
>
As I've illustrated before, it's not like Kolab uses FPM or any other
FastCGI-like implementation, and it's not like the client can simple
HEAD a URI and be done with it (close the connection).
> The main point here is that the Client trigger the update of the
> partial
> freebusy data but they never wait nor block. (A trigger is simply an
> http call which immediately returns and hints the server that the
> freebusy needs to be
> updated)
>
It only that were true. It sounds very good in theory, but theory is a
place up north in Narnia. In the real world, there is nothing that
"hints" the server and nothing to follow up on such "hint". It is the
client that is actively involved and waiting for the Free/Busy
information to be updated as part of the trigger URI it is hitting.
>> > - When an invitation e.g. via iTip arives you simply need to check
>> > for an overlap with the freebusy list of the user involved
>> (freebusy is the
>> > set union of the partial freebusy lists)
>>
>> See the former, ...
>>
>> While Free/Busy and the way that it is going to work is in flux, and
>> while Free/Busy will itself need to do somewhat the same "query"
>> against
>> raw IMAP, I'm inclined to seek ways the querying itself can be
>> improved.
>
> Sorry, but you really got things wrong. The basic idea behind Kolab
> is NOT to think in terms of a relational database including terms of
> doing queries all
> the time.
>
> This is the essential clue behind Kolab that it is so extremly
> scalable.
>
> Introducing all these "query" concepts will lead to loosing this
> unique
> property.
>
Well, unique != good and most certainly unique != best. At most, unique
<> common.
To be honest, the "extremely scalable" argument is starting to get to
be completely wasted on me.
Every time it is used, it is used as the ultimate argument against
something, but it misses merit in that the scalability parameter to a
Kolab deployment is never removed nor reduced by any of the developments
or ideas to move forward. While you may disagree with that, I have to
conclude "no-SQL storage" is being confused and arbitrarily substituted
with "caches, possibly in SQL".
> IMHO the Kolab 3.0 architectures runs in the wrong direction.
>
You are entitled to that opinion, of course, but I also appreciate it
may be an opinion based on ideas and developments we discuss that need
to be cleared up in more detail more so than being opposed.
That said, I appreciate your thoughts very much. I have nothing but the
greatest respect for you, I hope you know that. I applaud your efforts
holding on to the original Kolab ideas, and I will were I can.
Kind regards,
Jeroen van Meeuwen
--
Systems Architect, Kolab Systems AG
e: vanmeeuwen at kolabsys.com
m: +44 74 2516 3817
w: http://www.kolabsys.com
pgp: 9342 BF08
More information about the devel
mailing list