From 84bb6ab9cbba563663839ba574620b29832ff0ae Mon Sep 17 00:00:00 2001
From: Matthew Swift <matthew.swift@forgerock.com>
Date: Tue, 23 Sep 2014 08:48:39 +0000
Subject: [PATCH] OPENDJ-1375 CR-4618: prevent deadlocks when updating id2subtree using IndexBuffers
---
opendj-sdk/opends/src/server/org/opends/server/backends/jeb/IndexBuffer.java | 8 +++++++-
1 files changed, 7 insertions(+), 1 deletions(-)
diff --git a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/IndexBuffer.java b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/IndexBuffer.java
index 3930130..52da2d0 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/IndexBuffer.java
+++ b/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 =
--
Gitblit v1.10.0