Andi,

A couple of questions about this...

- Why does each view need its own timezone? I understand that indexing requires tying the floating timezone to a particular timezone, and that reindexing is necessary when the particular timezone changes, but it seems simpler to force the change to happen in lockstep (one view reindexes; the rest wait during indexing, then refresh) than to allow every view to have its own timezone.... partly because I don't understand how the reindexing can work:

- You say that when one view's timezone changes, reindexing occurs. Indexes are persisted, though - doesn't that mean that views will fight over this? Or will we end up with an index per timezone?

Thanks,
...Bryan

Andi Vajda wrote:

Because we index floating events, changing the system timezone or the ICUtzinfo.default timezone needs to be done with care. Namely, it can't be done globally as it is now in chandler as that causes indexes with floating events to get out of order. Bug 9508 is just the tip of the iceberg.

Instead, the default timezone needs to be set per view and persisted. All direct uses of ICUtzinfo's static methods and attributes need to be re-routed though a view.

Since this change is quite big, I created a branch of the chandler tree (sharing external and interal with trunk) at [1] that implements the following changes:

  - All static accesses to ICUtzinfo such as ICUtzinfo.default,
ICUtzinfo.floating, ICUtzinfo.getInstance(), etc.. are re-routed via a
    new view feature, called view.tzinfo, that has the same APIs as
    ICUtzinfo's static APIs.

  - A view now persists its default timezone.

  - view.tzinfo caches UTC, GMT, and floating as view.tzinfo.UTC and
    view.tzinfo.GMT. The floating timezone no-longer delegates all its
operations to ICUtzinfo.default but instead wraps view.tzinfo.default.
    When view.tzinfo.default is changed, so is what view.tzinfo.floating
    wraps.

- Almost (except some unit tests) everywhere ICUtzinfo was used statically,
    I changed it to an equivalent view.tzinfo call.

- A lot of code still had to change to accomodate having a view nearby to enable such view-based timezone access. At this time, all unit tests pass
    on the branch. I have yet to try functional tests.

  - When view's timezone is changed in one of the following ways
     . assigning view.tzinfo.default
     . calling view.tzinfo.setDefault
     . refreshing to a version with a new timezone
     . changing the system timezone and restarting chandler
a callback is invoked with the view and the new timezone as arguments.
    This callback, settable via the 'ontzchange' repository and view
    init keywords needs to be implemented by the application so that it
invokes the relevant reindexing code to make sure that floating events
    actually float instead of being stuck like boat anchors.
Currently, this callback is set in Utility.py and just logs the timezone
    change.

- When chandler is started, the UI view's default timezone is set to the system timezone. This can be overriden with a new --tz command line arg
    whose purpose is testing and debugging.

Please, take some time to review this branch, especially once I have functional tests passing. All unit tests pass already.
I hope to have functional tests passing either tonight or Wednesday.

If no one objects to these changes, I intend to merge this branch into the trunk on Thursday or Friday.

Andi..

[1] svn+ssh://svn.osafoundation.org/svn/chandler/branches/chandler-tz
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

Open Source Applications Foundation "chandler-dev" mailing list
http://lists.osafoundation.org/mailman/listinfo/chandler-dev

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

Open Source Applications Foundation "chandler-dev" mailing list
http://lists.osafoundation.org/mailman/listinfo/chandler-dev

Reply via email to