Repository: cassandra Updated Branches: refs/heads/trunk 35750e805 -> 7925f91dc
Allocate ReentrantLock on-demand in java11 AtomicBTreePartitionerBase patch by jasobrown; reviewed by Robert Stupp for CASSANDRA-14637 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/7925f91d Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/7925f91d Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/7925f91d Branch: refs/heads/trunk Commit: 7925f91dc842834c39504b5f9a68db9b5c9fd879 Parents: 35750e8 Author: Jason Brown <[email protected]> Authored: Fri Aug 10 07:31:28 2018 -0700 Committer: Jason Brown <[email protected]> Committed: Tue Aug 14 09:48:40 2018 -0700 ---------------------------------------------------------------------- CHANGES.txt | 1 + .../cassandra/db/partitions/AtomicBTreePartitionBase.java | 7 ++++++- 2 files changed, 7 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/7925f91d/CHANGES.txt ---------------------------------------------------------------------- diff --git a/CHANGES.txt b/CHANGES.txt index 52933c8..67e85f6 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 4.0 + * Allocate ReentrantLock on-demand in java11 AtomicBTreePartitionerBase (CASSANDRA-14637) * Make all existing virtual tables use LocalPartitioner (CASSANDRA-14640) * Revert 4.0 GC alg back to CMS (CASANDRA-14636) * Remove hardcoded java11 jvm args in idea workspace files (CASSANDRA-14627) http://git-wip-us.apache.org/repos/asf/cassandra/blob/7925f91d/src/java11/org/apache/cassandra/db/partitions/AtomicBTreePartitionBase.java ---------------------------------------------------------------------- diff --git a/src/java11/org/apache/cassandra/db/partitions/AtomicBTreePartitionBase.java b/src/java11/org/apache/cassandra/db/partitions/AtomicBTreePartitionBase.java index ac1a11d..56359a2 100644 --- a/src/java11/org/apache/cassandra/db/partitions/AtomicBTreePartitionBase.java +++ b/src/java11/org/apache/cassandra/db/partitions/AtomicBTreePartitionBase.java @@ -18,6 +18,7 @@ package org.apache.cassandra.db.partitions; +import java.util.concurrent.atomic.AtomicReferenceFieldUpdater; import java.util.concurrent.locks.ReentrantLock; import org.slf4j.Logger; @@ -38,7 +39,8 @@ public abstract class AtomicBTreePartitionBase extends AbstractBTreePartition } // Replacement for Unsafe.monitorEnter/monitorExit. - private final ReentrantLock lock = new ReentrantLock(); + private volatile ReentrantLock lock; + private static final AtomicReferenceFieldUpdater<AtomicBTreePartitionBase, ReentrantLock> lockUpdater = AtomicReferenceFieldUpdater.newUpdater(AtomicBTreePartitionBase.class, ReentrantLock.class, "lock"); static { @@ -50,6 +52,9 @@ public abstract class AtomicBTreePartitionBase extends AbstractBTreePartition protected final void acquireLock() { + if (lock == null) + lockUpdater.compareAndSet(this, null, new ReentrantLock()); + lock.lock(); } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
