[
https://issues.apache.org/jira/browse/SLING-13356?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Christian Schneider resolved SLING-13356.
-----------------------------------------
Resolution: Fixed
> ResourceDistributionPackageCleanup deletes all disposable packages in a
> single unbounded JCR commit
> ---------------------------------------------------------------------------------------------------
>
> Key: SLING-13356
> URL: https://issues.apache.org/jira/browse/SLING-13356
> Project: Sling
> Issue Type: Bug
> Affects Versions: Content Distribution Core 0.7.4
> Reporter: Christian Schneider
> Assignee: Christian Schneider
> Priority: Major
> Fix For: Content Distribution Core 0.8.0
>
>
> {{ResourceDistributionPackageCleanup.run()}} iterates every disposable
> package and calls {{delete(false)}} (no commit) on each one inside the loop —
> the only {{commit()}} happens once, after the whole loop finishes. On a
> resource-persisted distribution agent with a large package backlog, this
> becomes a single unbounded transaction.
> We saw a real case where a distribution agent accumulated a backlog of
> roughly 1.5-1.75 million disposable packages. The resulting single commit (~7
> million node deletions) never completed and put the underlying JCR repository
> under sustained load until the backlog was cleared out-of-band.
> Proposed fix: commit in bounded batches inside the loop instead of once at
> the end — track packages deleted since the last commit, and call {{commit()}}
> once a configurable batch size is reached (falling back to today's
> single-commit-at-the-end behavior when unset or ≤ 0). Will attach a patch.
> Related: SLING-10743 — same class, same package-path pattern in its own
> example, but a different root cause (concurrent-instance arbitration, already
> fixed).
--
This message was sent by Atlassian Jira
(v8.20.10#820010)