mirror of https://github.com/OpenIdentityPlatform/OpenDJ.git

boli
31.03.2007 90b5a1ce685dc1aaad65067d8bea7b3a6d9ad0fc
Fixed an issue where contention on a index key might cause the index to become corrupt. The index now uses the useNoOverwrite method to insert a 
new key to prevent the race condition.

Fix for issue 2180

1 files modified
15 ■■■■■ changed files
opendj-sdk/opends/src/server/org/opends/server/backends/jeb/Index.java 15 ●●●●● patch | view | raw | blame | history
opendj-sdk/opends/src/server/org/opends/server/backends/jeb/Index.java
@@ -187,7 +187,10 @@
    DatabaseEntry entryIDData = entryID.getDatabaseEntry();
    DatabaseEntry data = new DatabaseEntry();
    boolean success = true;
    boolean done = false;
    while(!done)
    {
    status = read(txn, key, data, lockMode);
    if (status == OperationStatus.SUCCESS)
@@ -219,12 +222,22 @@
      byte[] after = entryIDList.toDatabase();
      data.setData(after);
      put(txn, key, data);
        done = true;
    }
    else
    {
      if(rebuildRunning || trusted)
      {
        put(txn, key, entryIDData);
          status = insert(txn, key, entryIDData);
          if(status == OperationStatus.SUCCESS)
          {
            done = true;
          }
        }
        else
        {
          done = true;
        }
      }
    }