From 70923036a7321b1a08f66e5ea400f8ca49f65d36 Mon Sep 17 00:00:00 2001
From: coulbeck <coulbeck@localhost>
Date: Thu, 17 May 2007 22:19:57 +0000
Subject: [PATCH] Issue 1614: backend refuses to open when essential index missing. Need to preserve org.opends.server.synchronization.plugin.HistoricalCsnOrderingMatchingRule to maintain compatibility with databases created by older builds.
---
opendj-sdk/opends/src/server/org/opends/server/synchronization/plugin/HistoricalCsnOrderingMatchingRule.java | 91 +++++++++++++++++++++++++++++++++++++++++++++
opendj-sdk/opends/src/server/org/opends/server/backends/jeb/Index.java | 1
2 files changed, 92 insertions(+), 0 deletions(-)
diff --git a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/Index.java b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/Index.java
index d367cdd..44e7778 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/Index.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/Index.java
@@ -138,6 +138,7 @@
public void open(DatabaseConfig dbConfig) throws DatabaseException
{
this.dbConfig = dbConfig;
+ this.dbConfig.setOverrideBtreeComparator(true);
this.dbConfig.setBtreeComparator(comparator.getClass());
getDatabase();
}
diff --git a/opendj-sdk/opends/src/server/org/opends/server/synchronization/plugin/HistoricalCsnOrderingMatchingRule.java b/opendj-sdk/opends/src/server/org/opends/server/synchronization/plugin/HistoricalCsnOrderingMatchingRule.java
new file mode 100644
index 0000000..93fedc0
--- /dev/null
+++ b/opendj-sdk/opends/src/server/org/opends/server/synchronization/plugin/HistoricalCsnOrderingMatchingRule.java
@@ -0,0 +1,91 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License"). You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE
+ * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
+ * add the following below this CDDL HEADER, with the fields enclosed
+ * by brackets "[]" replaced with your own identifying information:
+ * Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ *
+ *
+ * Portions Copyright 2007 Sun Microsystems, Inc.
+ */
+
+package org.opends.server.synchronization.plugin;
+
+import org.opends.server.api.OrderingMatchingRule;
+import org.opends.server.core.DirectoryServer;
+
+import java.util.Comparator;
+
+/**
+ * This class maintains compatibility with databases created before the
+ * org.opends.server.synchronization package was renamed. The class
+ * was used as a JE custom btree comparator in the ds-sync-hist attribute
+ * index, so older databases expect it to exist. This class now just
+ * implements the comparator interface and delegates to the matching rule
+ * comparator found in the replication package.
+ */
+public class HistoricalCsnOrderingMatchingRule implements Comparator<byte[]>
+{
+ /**
+ * The historicalCsnOrderingMatch matching rule in the replication package.
+ */
+ private static OrderingMatchingRule rule = null;
+
+
+ /**
+ * Compares its two arguments for order. Returns a negative integer,
+ * zero, or a positive integer as the first argument is less than, equal
+ * to, or greater than the second.<p>
+ * <p/>
+ * The implementor must ensure that <tt>sgn(compare(x, y)) ==
+ * -sgn(compare(y, x))</tt> for all <tt>x</tt> and <tt>y</tt>. (This
+ * implies that <tt>compare(x, y)</tt> must throw an exception if and only
+ * if <tt>compare(y, x)</tt> throws an exception.)<p>
+ * <p/>
+ * The implementor must also ensure that the relation is transitive:
+ * <tt>((compare(x, y)>0) && (compare(y, z)>0))</tt> implies
+ * <tt>compare(x, z)>0</tt>.<p>
+ * <p/>
+ * Finally, the implementer must ensure that <tt>compare(x, y)==0</tt>
+ * implies that <tt>sgn(compare(x, z))==sgn(compare(y, z))</tt> for all
+ * <tt>z</tt>.<p>
+ * <p/>
+ * It is generally the case, but <i>not</i> strictly required that
+ * <tt>(compare(x, y)==0) == (x.equals(y))</tt>. Generally speaking,
+ * any comparator that violates this condition should clearly indicate
+ * this fact. The recommended language is "Note: this comparator
+ * imposes orderings that are inconsistent with equals."
+ *
+ * @param o1 the first object to be compared.
+ * @param o2 the second object to be compared.
+ * @return a negative integer, zero, or a positive integer as the
+ * first argument is less than, equal to, or greater than the
+ * second.
+ */
+ public int compare(byte[] o1, byte[] o2)
+ {
+ if (rule == null)
+ {
+ rule = DirectoryServer.
+ getOrderingMatchingRule("historicalCsnOrderingMatch");
+ }
+ return rule.compare(o1, o2);
+ }
+
+}
--
Gitblit v1.10.0