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