From 642e1f844e7b37d2d8306c4d4300123f46f85558 Mon Sep 17 00:00:00 2001
From: Fabio Pistolesi <fabio.pistolesi@forgerock.com>
Date: Tue, 24 Feb 2015 13:35:36 +0000
Subject: [PATCH] OPENDJ-1800 Find a better way to manage database prefix names in a Storage

---
 opendj-server-legacy/src/main/java/org/opends/server/backends/persistit/PersistItStorage.java |   34 ++++++++++++++++++++++------------
 1 files changed, 22 insertions(+), 12 deletions(-)

diff --git a/opendj-server-legacy/src/main/java/org/opends/server/backends/persistit/PersistItStorage.java b/opendj-server-legacy/src/main/java/org/opends/server/backends/persistit/PersistItStorage.java
index c7cd72f..3a3a43b 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/backends/persistit/PersistItStorage.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/backends/persistit/PersistItStorage.java
@@ -231,7 +231,7 @@
     {
       try
       {
-        final Tree tree = volume.getTree(treeName.toString(), true);
+        final Tree tree = volume.getTree(mangleTreeName(treeName), true);
         trees.put(treeName, tree);
       }
       catch (final PersistitException e)
@@ -401,8 +401,7 @@
     }
 
     @Override
-    public void renameTree(final TreeName oldTreeName,
-        final TreeName newTreeName)
+    public void renameTree(final TreeName oldTreeName, final TreeName newTreeName)
     {
       throw new UnsupportedOperationException();
     }
@@ -473,6 +472,12 @@
       }
       exchanges.clear();
     }
+
+    private Exchange getNewExchange(final TreeName treeName, final boolean create)
+        throws PersistitException
+    {
+      return db.getExchange(volume, mangleTreeName(treeName), create);
+    }
   }
 
   private static void clearAndCreateDbDir(final File dbDir)
@@ -640,10 +645,21 @@
     return new ImporterImpl();
   }
 
-  /** {@inheritDoc} */
-  public String toSafeSuffixName(final String suffix)
+  private String mangleTreeName(final TreeName treeName)
   {
-    return suffix.replaceAll("[,=]", "_");
+    StringBuilder mangled = new StringBuilder();
+    String name = treeName.toString();
+
+    for (int idx = 0; idx < name.length(); idx++)
+    {
+      char ch = name.charAt(idx);
+      if (ch == '=' || ch == ',')
+      {
+        ch = '_';
+      }
+      mangled.append(ch);
+    }
+    return mangled.toString();
   }
 
   /** {@inheritDoc} */
@@ -722,12 +738,6 @@
     return value;
   }
 
-  private Exchange getNewExchange(final TreeName treeName, final boolean create)
-      throws PersistitException
-  {
-    return db.getExchange(volume, treeName.toString(), create);
-  }
-
   private ByteString keyToBytes(final Key key)
   {
     return ByteString.wrap(key.reset().decodeByteArray());

--
Gitblit v1.10.0