From c812ed5adc17a8e3b3af4e27593fc43a6eaa46fd Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Fri, 19 Dec 2014 14:52:14 +0000
Subject: [PATCH] OPENDJ-1602 New pluggable storage based backend

---
 opendj3-server-dev/src/server/org/opends/server/backends/pluggable/EntryContainer.java |   31 ++++++++++++++++++++++++++++++-
 1 files changed, 30 insertions(+), 1 deletions(-)

diff --git a/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/EntryContainer.java b/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/EntryContainer.java
index d0f593a..8319cf8 100644
--- a/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/EntryContainer.java
+++ b/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/EntryContainer.java
@@ -1092,7 +1092,36 @@
     }
     catch (Exception e)
     {
-      throw new StorageRuntimeException(e);
+      throwAllowedExceptionTypes(e, DirectoryException.class, CanceledOperationException.class);
+    }
+  }
+
+  private <E1 extends Exception, E2 extends Exception>
+      void throwAllowedExceptionTypes(Exception e, Class<E1> clazz1, Class<E2> clazz2)
+          throws E1, E2
+  {
+    throwIfPossible(e, clazz1, clazz2);
+    if (e.getCause() != null)
+    {
+      throwIfPossible(e.getCause(), clazz1, clazz2);
+    }
+    else if (e instanceof StorageRuntimeException)
+    {
+      throw (StorageRuntimeException) e;
+    }
+    throw new StorageRuntimeException(e);
+  }
+
+  private <E1 extends Exception, E2 extends Exception> void throwIfPossible(final Throwable cause, Class<E1> clazz1,
+      Class<E2> clazz2) throws E1, E2
+  {
+    if (clazz1.isAssignableFrom(cause.getClass()))
+    {
+      throw clazz1.cast(cause);
+    }
+    else if (clazz2.isAssignableFrom(cause.getClass()))
+    {
+      throw clazz2.cast(cause);
     }
   }
 

--
Gitblit v1.10.0