Joerg Hoh created SLING-13271:
---------------------------------
Summary: Concurrent addJob calls corrupt the unsynchronized
roundRobinMap in TopologyCapabilities
Key: SLING-13271
URL: https://issues.apache.org/jira/browse/SLING-13271
Project: Sling
Issue Type: Improvement
Components: Event
Affects Versions: Event Impl 4.4.0
Reporter: Joerg Hoh
{{TopologyCapabilities.roundRobinMap}} is a plain {{HashMap}} that is
read-modify-written ({{{}get{}}} then {{{}put{}}}) without any synchronization.
The single shared {{TopologyCapabilities}} instance is reached from the public
{{JobManager.addJob(...)}} API (via {{{}detectTarget(...){}}}), which is called
by arbitrary client threads with no lock in between, so multiple threads can
mutate the same {{HashMap}} concurrently.
h3. Impact
* *Lost updates:* concurrent job submissions for the same topic can read the
same round-robin index and be dispatched to the same instance, defeating even
job distribution across the cluster.
* *Map corruption:* unsynchronized concurrent {{HashMap.put}} can corrupt the
map's internal table during resize, causing wrong/stale lookups or a spinning
lookup. Because this map backs target selection for all topics, the impact is
not limited to the racing topic.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)