[Chandler-dev] About timezone changes and usage of ICUtzinfo

Andi Vajda vajda at osafoundation.org
Mon Jun 18 16:29:39 PDT 2007


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


More information about the chandler-dev mailing list