Description
Consider the following update scenario:
Thread 1: Transaction tx = txStart() { get(key); // Acquires lock; seq.incrementAndGet(); } Thread 2: seq.incrementAndGet();
Let's now assume that:
- Sequence is exhausted and needs a non-local update
- Thread 1 acquired lock on topology version N
- Topology version changes
- Thread 2 now calls incrementAndGet(), acquires lock and starts transaction which waits for topology version N+1 to become available
- Thread 1 attemts to incrementAndGet().
Since the lock is already held, thread 2 waits for the concurrent update to complete