Thursday, August 04, 2005

Was it a race condition?

ECal# provides two types of APIs to get a list of calendar events present in a calendar.

First type is based on "Query/Response" and the other is "Compare-with-last-fetched-items-and-return-the-final-list" sort of method.

In Beagle, the new Evolution Calendar backend that Joe Shaw is working on calls "GetChanges", second-type method, to get a list of what-so-ever-has-happened since last call. Once things are setup properly, GetItems() is called. GetItems() works on "Query/Response" basis and once the query is setup and the Start() method is called, the results satisfying the query are returned immediately, causing Beagle to re-index them immediately.

Where the heck is the race-condition here?

Well, the first-time "results" of the query are the same calendar-events that are already indexed. So, it might appear like a race-condition, but, in reality, it is not. Perhaps, can be called "an unwanted" condition, though, cannot be avoided.

To handle this safely, the new CalComponent class exposes a property called LastModified, with which the first-set-of-results can be compared and avoided from a "re-indexing".


Anonymous said...

Nice site!
[url=]My homepage[/url] | [url=]Cool site[/url]

Anonymous said...

Great work!
My homepage | Please visit

Anonymous said...

Great work! |