From 2d596c11d8c08d2e9fa9550500d0477570469054 Mon Sep 17 00:00:00 2001
From: Matthew Swift <matthew.swift@forgerock.com>
Date: Fri, 27 Feb 2015 22:46:41 +0000
Subject: [PATCH] OPENDJ-1848: Remove Storage getRMW and putIfAbsent methods
---
opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/Index.java | 10 +++++++---
1 files changed, 7 insertions(+), 3 deletions(-)
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/Index.java b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/Index.java
index fd6cc3c..9d9ef1d 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/Index.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/Index.java
@@ -233,20 +233,24 @@
return;
}
- if(maintainCount)
+ if (maintainCount)
{
updateKeyWithRMW(txn, key, deletedIDs, addedIDs);
}
else
{
+ /*
+ * Avoid taking a write lock on a record which has hit all IDs because it is likely to be a
+ * point of contention.
+ */
ByteString value = read(txn, key, false);
- if(value != null)
+ if (value != null)
{
EntryIDSet entryIDList = new EntryIDSet(key, value);
if (entryIDList.isDefined())
{
updateKeyWithRMW(txn, key, deletedIDs, addedIDs);
- }
+ } // else the record exists but we've hit all IDs.
}
else
{
--
Gitblit v1.10.0