From 774272578900c27258f497fd01da347de49e430f Mon Sep 17 00:00:00 2001
From: Valery Kharseko <vharseko@3a-systems.ru>
Date: Tue, 22 Sep 2026 09:09:49 +0000
Subject: [PATCH] [#930] Build the names a JDBC backend gives its own trees once, from the id it was created with (#1007)

---
 opendj-server-legacy/src/test/java/org/opends/server/backends/jdbc/TestCase.java |   19 ++++++++++++++++---
 1 files changed, 16 insertions(+), 3 deletions(-)

diff --git a/opendj-server-legacy/src/test/java/org/opends/server/backends/jdbc/TestCase.java b/opendj-server-legacy/src/test/java/org/opends/server/backends/jdbc/TestCase.java
index e60e01d..49f26c1 100644
--- a/opendj-server-legacy/src/test/java/org/opends/server/backends/jdbc/TestCase.java
+++ b/opendj-server-legacy/src/test/java/org/opends/server/backends/jdbc/TestCase.java
@@ -2909,9 +2909,10 @@
 
 	/**
 	 * What a clear leaves standing it reports, and it reports it as what it is: a table stamped with a
-	 * tree of a base DN this backend serves is its own and can be removed by hand, while a table of a
-	 * backend sharing this database (#873) is that backend's business and no part of this outcome.
-	 * Told apart by the stamp of #866 and by nothing else - a table name is a bare hash.
+	 * tree of a base DN this backend serves, or with one of the trees this backend names after its own
+	 * id, is its own and can be removed by hand, while a table of a backend sharing this database
+	 * (#873) is that backend's business and no part of this outcome. Told apart by the stamp of #866
+	 * and by nothing else - a table name is a bare hash.
 	 */
 	@Test
 	public void testAClearReportsTheTablesItCanAttributeToThisBackend() throws Exception {
@@ -2922,6 +2923,9 @@
 		final DN neighbourBaseDN = DN.valueOf("dc=clear-report-neighbour,dc=com");
 		final TreeName neighbourTree = new TreeName(neighbourBaseDN.toNormalizedUrlSafeString(), "id2entry");
 		final JDBCStorage storage = new JDBCStorage(createBackendCfg(getBackendId() + "_reported", baseDN), null);
+		// one of the pair this backend names after its own id (#881) rather than after a base DN: such
+		// a table is this backend's own by a term of the decision that no base DN of it can answer for
+		final TreeName ownSchema = new TreeName(storage.ownCompressedSchemaBaseDN(), "compressed_attributes");
 		final JDBCStorage neighbour =
 			new JDBCStorage(createBackendCfg(getBackendId() + "_reportedNeighbour", neighbourBaseDN), null);
 		try {
@@ -2930,6 +2934,7 @@
 				@Override
 				public void run(WriteableTransaction txn) throws Exception {
 					txn.openTree(owned, true);
+					txn.openTree(ownSchema, true);
 				}
 			});
 			neighbour.open(AccessMode.READ_WRITE);
@@ -2959,6 +2964,8 @@
 					"a table of a base DN this backend serves was not reported as its own: " + leftovers.ours);
 				assertFalse(leftovers.unattributed.toString().toLowerCase().contains(storage.getTableName(owned).toLowerCase()),
 					"a table this backend can name was reported as attributable to nobody: " + leftovers.unattributed);
+				assertTrue(leftovers.ours.toString().toLowerCase().contains(storage.getTableName(ownSchema).toLowerCase()),
+					"a table of this backend's own compressed schema pair was not reported as its own: " + leftovers.ours);
 				assertTrue(leftovers.unreadable.isEmpty(),
 					"the stamp of a table this database does give up was reported as unreadable: " + leftovers.unreadable);
 			}
@@ -2969,6 +2976,7 @@
 			// purpose is dropped here by hand, as the report says such a table has to be
 			clearQuietly(storage);
 			dropTableIfExists(storage.getTableName(owned));
+			dropTableIfExists(storage.getTableName(ownSchema));
 		}
 	}
 
@@ -2995,6 +3003,11 @@
 			assertNotNull(theirs, "the database would not say which tables the neighbour is holding");
 			assertTrue(theirs.ours.toString().toLowerCase().contains(other.getTableName(otherTree).toLowerCase()),
 				"the table left unreported is one the scan does not reach at all: " + theirs.ours);
+			// and the catalog standing beside it is that backend's own: the clear of the case above
+			// dropped its own catalog by hand, so this is where a catalog is there to be reported
+			assertTrue(theirs.ours.toString().toLowerCase()
+					.contains(other.getTableName(other.getCatalogTree()).toLowerCase()),
+				"a backend's own standing catalog was not reported as its own: " + theirs.ours);
 		}
 	}
 

--
Gitblit v1.10.0