In practice, restriction tracker methods are called via a 
RestrictionTrackerObserver, which synchronizes 
(https://github.com/apache/beam/blob/master/sdks/java/fn-execution/src/main/java/org/apache/beam/sdk/fn/splittabledofn/RestrictionTrackers.java)

-----Original Message-----
From: Jan Lukavský <je...@seznam.cz> 
Sent: Thursday, July 29, 2021 1:59 PM
To: dev@beam.apache.org
Subject: Synchronization of RestrictionTrackers

Hi,

I have come across something that looks like a bug to me, but I'm not sure of 
that. If I understand it correctly,
RestrictionTracker.trySplit() and RestrictionTracker.tryClaim() methods are 
necessarily called from different threads. That implies, that modifying some 
fields inside these methods might require synchronization. Looking here [1], I 
didn't find anything that should ensure atomicity and consistency of these 
methods. If anything I'd expect the lastClaimedOffset and lastAttemptedOffset 
be volatile. But probably the problem is deeper. Is this a bug, or am I missing 
something?

  Jan

[1]
https://github.com/apache/beam/blob/939fa99ce943a30da46cb3d67c924d524fbf1be4/sdks/java/core/src/main/java/org/apache/beam/sdk/transforms/splittabledofn/OffsetRangeTracker.java#L44

Reply via email to