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

Matthew Swift
23.48.2014 c79f027cb401c62f326e936634e4ce78d4b46e20
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
opends/src/server/org/opends/server/backends/jeb/IndexBuffer.java 8 ●●●● patch | view | raw | blame | history
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 =