Uploaded image for project: 'Sling'
  1. Sling
  2. SLING-8854

In-file and In-memory queue-providers for Forward Distribution report incorrect value for processing "Attempts"

    XMLWordPrintableJSON

    Details

      Description

      ForwardDistributionAgentFactory allows specifying "In-Memory" and "In-File" queue-providers [0]. Both these implementations are provided by SimpleDistributionQueue [1].

      While responding to a queue-processing request, the head of the queue is fetched to create a DistributionQueueEntry, which encapsulates a DistributionQueueItemStatus. While retrieving the queue-head-entry, the number-of-attempts are also incremented by 1, implying one more processing-attempt to have happened on a given queue-item. [2]

      The trouble arises from the fact that SimpleDistributionQueue#getHead ends up being called from at least three other places:

      1. Queue status Health Check [3], which is a periodic job
      2. UI (via ExtendedDistributionServiceResourceProvider) [4]
      3. Distribution Queue status MBean [5]

      Out of these, #1 is most troublesome - because of its periodic nature, the number of Attempts for a queue-item that's being processed (or, is blocked) will keep on increasing without corresponding dequeue-attempts.
      Due to #2, everytime the queue status is delivered to the UI, the attempt would again increase. Similar would be the case of MBean invocations.

      This needs to be addressed. Notably, "Sling Jobs" based queue doesn't suffer from this issue because it relies on retry-counts as maintained by Sling Job Execution Engine.

      [0] https://github.com/apache/sling-org-apache-sling-distribution-core/blob/deb3d2ae33c4f4678c8503091a9fffdbb141e569/src/main/java/org/apache/sling/distribution/agent/impl/ForwardDistributionAgentFactory.java#L258-L262
      [1] https://github.com/apache/sling-org-apache-sling-distribution-core/blob/deb3d2ae33c4f4678c8503091a9fffdbb141e569/src/main/java/org/apache/sling/distribution/queue/impl/simple/SimpleDistributionQueue.java
      [2] https://github.com/apache/sling-org-apache-sling-distribution-core/blob/deb3d2ae33c4f4678c8503091a9fffdbb141e569/src/main/java/org/apache/sling/distribution/queue/impl/simple/SimpleDistributionQueue.java#L110-L112
      [3] https://github.com/apache/sling-org-apache-sling-distribution-core/blob/deb3d2ae33c4f4678c8503091a9fffdbb141e569/src/main/java/org/apache/sling/distribution/monitor/DistributionQueueHealthCheck.java#L113
      [4] https://github.com/apache/sling-org-apache-sling-distribution-core/blob/deb3d2ae33c4f4678c8503091a9fffdbb141e569/src/main/java/org/apache/sling/distribution/resources/impl/ExtendedDistributionServiceResourceProvider.java#L158
      [5] https://github.com/apache/sling-org-apache-sling-distribution-core/blob/deb3d2ae33c4f4678c8503091a9fffdbb141e569/src/main/java/org/apache/sling/distribution/monitor/impl/DistributionQueueMBeanImpl.java#L62-L91

        Attachments

          Issue Links

            Activity

              People

              • Assignee:
                marett Timothee Maret
                Reporter:
                ashishc Ashish Chopra
              • Votes:
                0 Vote for this issue
                Watchers:
                3 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved:

                  Time Tracking

                  Estimated:
                  Original Estimate - Not Specified
                  Not Specified
                  Remaining:
                  Remaining Estimate - 0h
                  0h
                  Logged:
                  Time Spent - 1h 10m
                  1h 10m