From d2ec418d6010332f55828d53c613a3c3e9d03d9e Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Thu, 05 Sep 2013 09:32:32 +0000
Subject: [PATCH] OPENDJ-1116 Introduce abstraction for the changelog DB
---
opends/src/server/org/opends/server/replication/server/ReplicationServer.java | 31 +++++++++++++++----------------
1 files changed, 15 insertions(+), 16 deletions(-)
diff --git a/opends/src/server/org/opends/server/replication/server/ReplicationServer.java b/opends/src/server/org/opends/server/replication/server/ReplicationServer.java
index 11f6507..7ea509d 100644
--- a/opends/src/server/org/opends/server/replication/server/ReplicationServer.java
+++ b/opends/src/server/org/opends/server/replication/server/ReplicationServer.java
@@ -914,18 +914,6 @@
TRACER.debugCaught(DebugLogLevel.WARNING, ignored);
}
}
-
- try
- {
- lastGeneratedChangeNumber = cnIndexDB.getLastChangeNumber();
- }
- catch (Exception ignored)
- {
- if (debugEnabled())
- {
- TRACER.debugCaught(DebugLogLevel.WARNING, ignored);
- }
- }
}
}
}
@@ -1638,16 +1626,19 @@
if (cnIndexDB == null)
{
cnIndexDB = new DraftCNDbHandler(this, this.dbEnv);
- lastGeneratedChangeNumber = cnIndexDB.getLastChangeNumber();
+ final CNIndexData lastCNData = cnIndexDB.getLastCNIndexData();
+ // initialization of the lastGeneratedChangeNumebr from the DB content
+ // if DB is empty => lastCNData is null => Default to 0
+ lastGeneratedChangeNumber =
+ (lastCNData != null) ? lastCNData.getChangeNumber() : 0;
}
return cnIndexDB;
}
catch (Exception e)
{
TRACER.debugCaught(DebugLogLevel.ERROR, e);
- MessageBuilder mb = new MessageBuilder();
- mb.append(ERR_DRAFT_CHANGENUMBER_DATABASE.get(""));
- throw new DirectoryException(OPERATIONS_ERROR, mb.toMessage(), e);
+ Message message = ERR_CHANGENUMBER_DATABASE.get(e.getMessage());
+ throw new DirectoryException(OPERATIONS_ERROR, message, e);
}
}
}
@@ -1715,6 +1706,14 @@
String domainForLastCN = null;
if (firstCNData != null)
{
+ if (lastCNData == null)
+ {
+ // Edge case: DB was cleaned or closed in between call to getFirst*()
+ // and getLast*(). The only remaining solution is to fail fast.
+ throw new ChangelogException(
+ ERR_READING_FIRST_THEN_LAST_IN_CHANGENUMBER_DATABASE.get());
+ }
+
dbEmpty = false;
firstChangeNumber = firstCNData.getChangeNumber();
lastChangeNumber = lastCNData.getChangeNumber();
--
Gitblit v1.10.0