From 7bc10ef426f7701c51eb1e9abcccb0e90540c6e5 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

---
 opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/persistit/PersistItStorage.java |    2 +-
 opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/EntryContainer.java   |   31 ++++++++++++++++++++++++++++++-
 2 files changed, 31 insertions(+), 2 deletions(-)

diff --git a/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/persistit/PersistItStorage.java b/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/persistit/PersistItStorage.java
index d99a600..d1ddb79 100644
--- a/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/persistit/PersistItStorage.java
+++ b/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/persistit/PersistItStorage.java
@@ -259,7 +259,7 @@
         @Override
         public void truncateTree(TreeName treeName) {
             try {
-                volume.truncate();
+                getExchange(treeName).removeAll();
             } catch (PersistitException e) {
                 throw new StorageRuntimeException(e);
             }
diff --git a/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/EntryContainer.java b/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/EntryContainer.java
index d0f593a..8319cf8 100644
--- a/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/EntryContainer.java
+++ b/opendj-sdk/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