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

Matthew Swift
23.48.2014 84bb6ab9cbba563663839ba574620b29832ff0ae
OPENDJ-1375 CR-4618: prevent deadlocks when updating id2subtree using IndexBuffers

Lock entry ID keys in descending order (children then parents) in order to be
consistent with id2subtree updates performed for single entry add and delete
operations.
1 files modified
8 ■■■■ changed files
opendj-sdk/opends/src/server/org/opends/server/backends/jeb/IndexBuffer.java 8 ●●●● patch | view | raw | blame | history
opendj-sdk/opends/src/server/org/opends/server/backends/jeb/IndexBuffer.java
@@ -22,6 +22,7 @@
 *
 *
 *      Copyright 2006-2008 Sun Microsystems, Inc.
 *      Portions copyright 2014 ForgeRock AS.
 */
package org.opends.server.backends.jeb;
@@ -215,8 +216,13 @@
    if(bufferedValues != null)
    {
      /*
       * OPENDJ-1375: add keys in reverse order to be consistent with single
       * entry processing in add/delete processing. This is necessary in order
       * to avoid deadlocks.
       */
      Iterator<Map.Entry<byte[], BufferedIndexValues>> keyIterator =
          bufferedValues.entrySet().iterator();
          bufferedValues.descendingMap().entrySet().iterator();
      while(keyIterator.hasNext())
      {
        Map.Entry<byte[], BufferedIndexValues> bufferedKey =