From 0a9135e3444bbefde6188f456b9c9772a816096d Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Wed, 18 Sep 2013 15:17:14 +0000
Subject: [PATCH] OPENDJ-1116 Introduce abstraction for the changelog DB
---
opends/src/server/org/opends/server/replication/server/changelog/je/ReplicationDbEnv.java | 72 +++++++++++++++++++----------------
1 files changed, 39 insertions(+), 33 deletions(-)
diff --git a/opends/src/server/org/opends/server/replication/server/changelog/je/ReplicationDbEnv.java b/opends/src/server/org/opends/server/replication/server/changelog/je/ReplicationDbEnv.java
index 4f1f166..8db0837 100644
--- a/opends/src/server/org/opends/server/replication/server/changelog/je/ReplicationDbEnv.java
+++ b/opends/src/server/org/opends/server/replication/server/changelog/je/ReplicationDbEnv.java
@@ -37,6 +37,8 @@
import org.opends.server.replication.server.ChangelogState;
import org.opends.server.replication.server.ReplicationServer;
import org.opends.server.replication.server.changelog.api.ChangelogException;
+import org.opends.server.types.DN;
+import org.opends.server.types.DirectoryException;
import com.sleepycat.je.*;
@@ -190,29 +192,29 @@
final String stringData = toString(data.getData());
if (debugEnabled())
- debug("read (" + GENERATION_ID_TAG + " generationId baseDn) OR "
+ debug("read (" + GENERATION_ID_TAG + " generationId baseDN) OR "
+ "(serverId baseDN): " + stringData);
final String[] str = stringData.split(FIELD_SEPARATOR, 3);
if (str[0].equals(GENERATION_ID_TAG))
{
long generationId = toLong(str[1]);
- String baseDn = str[2];
+ DN baseDN = DN.decode(str[2]);
if (debugEnabled())
- debug("has read baseDn=" + baseDn + " generationId=" +generationId);
+ debug("has read baseDN=" + baseDN + " generationId=" +generationId);
- result.setDomainGenerationId(baseDn, generationId);
+ result.setDomainGenerationId(baseDN, generationId);
}
else
{
int serverId = toInt(str[0]);
- String baseDn = str[1];
+ DN baseDN = DN.decode(str[1]);
if (debugEnabled())
- debug("has read: baseDn=" + baseDn + " serverId=" + serverId);
+ debug("has read: baseDN=" + baseDN + " serverId=" + serverId);
- result.addServerIdToDomain(serverId, baseDn);
+ result.addServerIdToDomain(serverId, baseDN);
}
status = cursor.getNext(key, data, LockMode.DEFAULT);
@@ -224,6 +226,10 @@
{
throw new ChangelogException(e);
}
+ catch (DirectoryException e)
+ {
+ throw new ChangelogException(e);
+ }
finally
{
close(cursor);
@@ -290,37 +296,37 @@
/**
* Finds or creates the database used to store changes from the server with
- * the given serverId and the given baseDn.
+ * the given serverId and the given baseDN.
*
* @param serverId
* The server id that identifies the server.
- * @param baseDn
- * The baseDn that identifies the domain.
+ * @param baseDN
+ * The baseDN that identifies the domain.
* @param generationId
* The generationId associated to this domain.
* @return the Database.
* @throws ChangelogException
* in case of underlying Exception.
*/
- public Database getOrAddDb(int serverId, String baseDn, long generationId)
+ public Database getOrAddDb(int serverId, DN baseDN, long generationId)
throws ChangelogException
{
if (debugEnabled())
- debug("ReplicationDbEnv.getOrAddDb(" + serverId + ", " + baseDn + ", "
+ debug("ReplicationDbEnv.getOrAddDb(" + serverId + ", " + baseDN + ", "
+ generationId + ")");
try
{
// JNR: redundant info is stored between the key and data down below.
// It is probably ok since "changelogstate" DB does not receive a high
// volume of inserts.
- final String serverIdToBaseDn = buildServerIdKey(baseDn, serverId);
+ final String serverIdToBaseDn = buildServerIdKey(baseDN, serverId);
// Opens the DB for the changes received from this server on this domain.
Database db = openDatabase(serverIdToBaseDn);
putInChangelogStateDBIfNotExist(serverIdToBaseDn, serverIdToBaseDn);
- putInChangelogStateDBIfNotExist(buildGenIdKey(baseDn),
- buildGenIdData(baseDn, generationId));
+ putInChangelogStateDBIfNotExist(buildGenIdKey(baseDN),
+ buildGenIdData(baseDN, generationId));
return db;
}
catch (RuntimeException e)
@@ -329,20 +335,20 @@
}
}
- private String buildGenIdKey(String baseDn)
+ private String buildGenIdKey(DN baseDN)
{
- return GENERATION_ID_TAG + FIELD_SEPARATOR + baseDn;
+ return GENERATION_ID_TAG + FIELD_SEPARATOR + baseDN.toNormalizedString();
}
- private String buildServerIdKey(String baseDn, int serverId)
+ private String buildServerIdKey(DN baseDN, int serverId)
{
- return serverId + FIELD_SEPARATOR + baseDn;
+ return serverId + FIELD_SEPARATOR + baseDN.toNormalizedString();
}
- private String buildGenIdData(String baseDn, long generationId)
+ private String buildGenIdData(DN baseDN, long generationId)
{
return GENERATION_ID_TAG + FIELD_SEPARATOR + generationId + FIELD_SEPARATOR
- + baseDn;
+ + baseDN.toNormalizedString();
}
private void putInChangelogStateDBIfNotExist(String keyString,
@@ -420,31 +426,31 @@
}
/**
- * Clears the provided generationId associated to the provided baseDn from the
+ * Clears the provided generationId associated to the provided baseDN from the
* state Db.
*
- * @param baseDn
- * The baseDn for which the generationID must be cleared.
+ * @param baseDN
+ * The baseDN for which the generationID must be cleared.
*/
- public void clearGenerationId(String baseDn)
+ public void clearGenerationId(DN baseDN)
{
- deleteFromChangelogStateDB(buildGenIdKey(baseDn),
- "clearGenerationId(baseDN=" + baseDn + ")");
+ deleteFromChangelogStateDB(buildGenIdKey(baseDN),
+ "clearGenerationId(baseDN=" + baseDN + ")");
}
/**
- * Clears the provided serverId associated to the provided baseDn from the
+ * Clears the provided serverId associated to the provided baseDN from the
* state Db.
*
- * @param baseDn
- * The baseDn for which the generationID must be cleared.
+ * @param baseDN
+ * The baseDN for which the serverId must be cleared.
* @param serverId
* The serverId to remove from the Db.
*/
- public void clearServerId(String baseDn, int serverId)
+ public void clearServerId(DN baseDN, int serverId)
{
- deleteFromChangelogStateDB(buildServerIdKey(baseDn, serverId),
- "clearServerId(baseDN=" + baseDn + " , serverId=" + serverId + ")");
+ deleteFromChangelogStateDB(buildServerIdKey(baseDN, serverId),
+ "clearServerId(baseDN=" + baseDN + " , serverId=" + serverId + ")");
}
private void deleteFromChangelogStateDB(String keyString,
--
Gitblit v1.10.0