• Vincent Pelletier's avatar
    Products.CMFActivity.ActivityTool: Improve behaviour on single-node instances. · 041642d0
    Vincent Pelletier authored
    - Ignore node preference when spawning activities.
      Otherwise, activities which are not spawned with a preferred node will
      get an effective priority penalty compared to same-priority activities
      spawned *with* a node preference, despite both being to execute by the
      same processing node.
    - Break activity processing loop when the current processing node is also
      the activity validation node.
      This avoids pathological cases of activity accumulation, for example when
      reindexing an entire site: _recurseCallMethod is spawned in
      processing_node=0, but immediateReindexObject is spawned in
      processing_node=-1 because of serialization_tag dependency, so with such
      loop _recurseCallMethod will be executed over and over, piling indexation
      activities up until _recurseCallMethod does not self-respawn.
      In turn, such activity accumulation lead to an increased overhead, and
      decreased activity processing efficiency.
      This may also allow multi-node instances to more reliably use the
      validation node as a processing node.
    
    The cost for multi-node instances of these changes should be absolutely
    minimal (no extra IO necessary, minimal extra code).
    A possible drawback on single-node instances is that tic period may become
    more important because process_timer will return more often.
    041642d0
ActivityTool.py 72.9 KB