From 655132fb059cfa70fb338d54f1bb0fb48198fb0f Mon Sep 17 00:00:00 2001
From: Valery Kharseko <vharseko@3a-systems.ru>
Date: Wed, 02 Sep 2026 06:44:10 +0000
Subject: [PATCH] [#873] Give each backend its own compressed schema trees (#881)

---
 opendj-server-legacy/src/main/java/org/opends/server/backends/pdb/PDBStorage.java |   40 ++++++++++++++++++++++++++++++++++++++++
 1 files changed, 40 insertions(+), 0 deletions(-)

diff --git a/opendj-server-legacy/src/main/java/org/opends/server/backends/pdb/PDBStorage.java b/opendj-server-legacy/src/main/java/org/opends/server/backends/pdb/PDBStorage.java
index ea23395..e99db98 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/backends/pdb/PDBStorage.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/backends/pdb/PDBStorage.java
@@ -468,6 +468,12 @@
     }
 
     @Override
+    public boolean treeExists(TreeName treeName)
+    {
+      return PDBStorage.this.treeExists(treeName);
+    }
+
+    @Override
     public Cursor<ByteString, ByteString> openCursor(final TreeName treeName)
     {
       try
@@ -691,6 +697,12 @@
     }
 
     @Override
+    public boolean treeExists(TreeName treeName)
+    {
+      return delegate.treeExists(treeName);
+    }
+
+    @Override
     public void openTree(TreeName treeName, boolean createOnDemand)
     {
       if (createOnDemand)
@@ -820,6 +832,13 @@
     }
 
     @Override
+    public boolean treeExists(TreeName treeName)
+    {
+      // No volume was ever opened, so nothing is stored.
+      return false;
+    }
+
+    @Override
     public <T> T read(ReadOperation<T> operation) throws Exception
     {
       return operation.run(this);
@@ -832,6 +851,27 @@
     }
   }
 
+  /**
+   * Tells whether the volume holds a tree of that name. Deliberately not implemented by asking for
+   * an {@link Exchange}: {@code getExchange(volume, name, true)} would create the tree being tested,
+   * and with {@code false} Persistit reports its absence by throwing.
+   */
+  boolean treeExists(final TreeName treeName)
+  {
+    if (volume == null)
+    {
+      return false;
+    }
+    try
+    {
+      return volume.getTree(treeName.toString(), false) != null;
+    }
+    catch (PersistitException e)
+    {
+      throw new StorageRuntimeException(e);
+    }
+  }
+
   Exchange getNewExchange(final TreeName treeName, final boolean create) throws PersistitException
   {
     final Exchange ex = db.getExchange(volume, treeName.toString(), create);

--
Gitblit v1.10.0