#539: Product-scope TracAdmin commands don't take effect until tracd is 
restarted
------------------------+-------------------------------
  Reporter:  rjollos    |      Owner:  rjollos
      Type:  defect     |     Status:  review
  Priority:  major      |  Milestone:  Release 8
 Component:  dashboard  |    Version:
Resolution:             |   Keywords:  tracadmin command
------------------------+-------------------------------

Comment (by olemis):

 I just remembered now what were these patches all about . Once upon a time
 I just submitted the code to synchronize product config files, which was a
 subtle feature request considering comment:4 .

 Like I just said in comment:13 components on/off status is influenced by
 two levels of cache stored in environment's `enabled` and `_rules`
 attributes. The goal of
 [attachment:t539_r1545950_product_component_dyn_status.diff attached
 patch] is to watch for modification time of product env's config lock file
 (introduced in previous patches ;) . If values loaded in memory are
 outdated then firstly product env's config is reloaded. Cached data
 influencing component state is cleared as well.

 It is a fact that components will be enabled in product context only if
 they are enabled in the global environment as well. Therefore cache
 invalidation takes place for both product and global env. In its current
 form this approach may be inefficient (and there's an inline FIXME tag in
 for this ;) e.g. in a global env having n products with updated config
 values then even if global config does not change at all its cache will
 invalidated O(n) times . This means that global [components] section will
 be (systematicly and unnecessarily) reloaded every time a configuration
 value is added in a product. This might lead to serious performance
 penalties and overhead, but works as expected. @rjollos : since this
 belongs in our Trac copy and maight be backported to Trac then I thought
 I'd rather delegate such improvements for you to move forward with this
 ticket if you do not mind , otherwise let me know and I'll focus on a new
 patch.

 Ideally cache invalidation should work like this

 ||= Global config =||= Product config =||= Global on/off cache =||=
 Product on/off cache =||
 || outdated        || unchanged        || invalidate (clear)    ||
 invalidate (clear)     ||
 || outdated        || outdated         || invalidate (clear)    ||
 invalidate (clear)     ||
 || unchanged       || outdated         || keep in-memory copy   ||
 invalidate (clear)     ||
 || unchanged       || unchanged        || keep in-memory copy   || keep
 in-memory copy    ||

 ... and another potentially useful optimization may consist in computing a
 diff upon [components] section (rather than whole config modification
 time) to decide whether cached on/off data have to be cleared or not .
 This may be overkill though

 The [http://pastebin.com/urQsMENh test report] illustrates that there are
 no regressions . Details follow

 {{{#!sh

 $ hg qapplied
 t539/t539_r1516428_test_product_config_sync.diff
 t539/t539_r1516428_product_config_sync.diff
 t539/t539_r1516428_test_product_config_sync.2.diff
 t539/t539_r1545950_product_component_dyn_status.diff

 $ hg log -r qparent
 changeset:   497:e260cdce0b83
 tag:         qparent
 tag:         svn-1545950
 user:        rjollos@13f79535-47bb-0310-9956-ffa450edef68
 date:        Wed Nov 27 07:21:58 2013 +0000
 summary:     0.8dev: Integrate change from [trac 12268].

 }}}

 PS: There are a number of adjustments in test code to consider values not
 formerly written in environment stub's config at testing time .

-- 
Ticket URL: <https://issues.apache.org/bloodhound/ticket/539#comment:14>
Apache Bloodhound <https://issues.apache.org/bloodhound/>
The Apache Bloodhound issue tracker

Reply via email to