From db364b9d90deb67f8c9928d79299d68512853efb Mon Sep 17 00:00:00 2001
From: Nicolas Capponi <nicolas.capponi@forgerock.com>
Date: Mon, 22 Sep 2014 08:51:16 +0000
Subject: [PATCH] OPENDJ-1389 – Add support for replication changelog DB rotation Implemented a log based on multiple log files
---
opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/ReSyncTest.java | 1
opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/ChangeNumberControlPluginTestCase.java | 1
opendj3-server-dev/src/server/org/opends/server/loggers/TimeLimitRotationPolicy.java | 2
opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/HistoricalTest.java | 1
opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/TestCaseUtils.java | 7 ++
opendj3-server-dev/src/server/org/opends/server/loggers/RotationPolicy.java | 9 +-
opendj3-server-dev/src/messages/messages/replication.properties | 24 +++++++
opendj3-server-dev/src/server/org/opends/server/replication/common/CSN.java | 3 +
opendj3-server-dev/src/server/org/opends/server/loggers/RotatableLogFile.java | 51 +++++++++++++++++
opendj3-server-dev/src/server/org/opends/server/loggers/FixedTimeRotationPolicy.java | 2
opendj3-server-dev/src/server/org/opends/server/loggers/MeteredStream.java | 15 ++++
opendj3-server-dev/src/server/org/opends/server/loggers/MultifileTextWriter.java | 18 +----
opendj3-server-dev/src/server/org/opends/server/loggers/SizeBasedRotationPolicy.java | 2
13 files changed, 112 insertions(+), 24 deletions(-)
diff --git a/opendj3-server-dev/src/messages/messages/replication.properties b/opendj3-server-dev/src/messages/messages/replication.properties
index 881b08f..4178833 100644
--- a/opendj3-server-dev/src/messages/messages/replication.properties
+++ b/opendj3-server-dev/src/messages/messages/replication.properties
@@ -584,4 +584,26 @@
file and actual domain directories found in file system. Expected domain ids : '%s'. \
Actual domain ids found in file system: '%s'
ERR_CHANGELOG_UNABLE_TO_UPDATE_DOMAIN_STATE_FILE_265=Could not create a new domain \
- id %s for domain DN %s and save it in domain state file '%s"
\ No newline at end of file
+ id %s for domain DN %s and save it in domain state file '%s"
+ERR_CHANGELOG_UNABLE_TO_GET_CURSOR_READER_POSITION_LOG_FILE_266=Could not get reader \
+ position for cursor in log file '%s'
+ERR_CHANGELOG_UNABLE_TO_DECODE_KEY_FROM_STRING_267=Could not decode the key from \
+ string [%s]
+ERR_CHANGELOG_CURSOR_OPENED_WHILE_CLEANING_LOG_268=When cleaning log '%s', \
+ found %d cursor(s) still opened on the log
+ERR_CHANGELOG_CURSOR_OPENED_WHILE_CLOSING_LOG_269=When closing log '%s', \
+ found %d cursor(s) still opened on the log
+ERR_CHANGELOG_UNABLE_TO_INITIALIZE_LOG_270=Could not initialize \
+ the log '%s'
+ERR_CHANGELOG_UNABLE_TO_RETRIEVE_KEY_BOUNDS_FROM_FILE_271=Could not \
+ retrieve key bounds from log file '%s'
+ERR_CHANGELOG_UNABLE_TO_RETRIEVE_READ_ONLY_LOG_FILES_LIST_272=Could not \
+ retrieve read-only log files from log '%s'
+ERR_CHANGELOG_UNABLE_TO_DELETE_LOG_FILE_WHILE_PURGING_273=While purging log, could not \
+ delete log file(s): '%s'
+ERR_CHANGELOG_UNREFERENCED_LOG_WHILE_RELEASING_274 =The following log \
+ '%s' must be released but it is not referenced."
+ERR_CHANGELOG_UNABLE_TO_RENAME_HEAD_LOG_FILE_275=Could not rename \
+ head log file from '%s' to '%s'
+INFO_CHANGELOG_LOG_FILE_ROTATION_276=Rotation needed for log file '%s', \
+ size of head log file is %d bytes
\ No newline at end of file
diff --git a/opendj3-server-dev/src/server/org/opends/server/loggers/FixedTimeRotationPolicy.java b/opendj3-server-dev/src/server/org/opends/server/loggers/FixedTimeRotationPolicy.java
index 3106e18..8e2f808 100644
--- a/opendj3-server-dev/src/server/org/opends/server/loggers/FixedTimeRotationPolicy.java
+++ b/opendj3-server-dev/src/server/org/opends/server/loggers/FixedTimeRotationPolicy.java
@@ -107,7 +107,7 @@
/**
* {@inheritDoc}
*/
- public boolean rotateFile(MultifileTextWriter writer)
+ public boolean rotateFile(RotatableLogFile writer)
{
Calendar lastRotationTime = writer.getLastRotationTime();
diff --git a/opendj3-server-dev/src/server/org/opends/server/loggers/MeteredStream.java b/opendj3-server-dev/src/server/org/opends/server/loggers/MeteredStream.java
index 59c053d..803284b 100644
--- a/opendj3-server-dev/src/server/org/opends/server/loggers/MeteredStream.java
+++ b/opendj3-server-dev/src/server/org/opends/server/loggers/MeteredStream.java
@@ -22,6 +22,7 @@
*
*
* Copyright 2006-2008 Sun Microsystems, Inc.
+ * Portions Copyright 2014 ForgeRock AS
*/
package org.opends.server.loggers;
@@ -33,7 +34,7 @@
* (a) forwards all its output to a target stream
* (b) keeps track of how many bytes have been written.
*/
-class MeteredStream extends OutputStream
+public final class MeteredStream extends OutputStream
{
OutputStream out;
long written;
@@ -45,7 +46,7 @@
* @param out The target output stream to keep track of.
* @param written The number of bytes written to the stream.
*/
- MeteredStream(OutputStream out, long written)
+ public MeteredStream(OutputStream out, long written)
{
this.out = out;
this.written = written;
@@ -111,5 +112,15 @@
{
out.close();
}
+
+ /**
+ * Returns the number of bytes written in this stream.
+ *
+ * @return the number of bytes
+ */
+ public long getBytesWritten()
+ {
+ return written;
+ }
}
diff --git a/opendj3-server-dev/src/server/org/opends/server/loggers/MultifileTextWriter.java b/opendj3-server-dev/src/server/org/opends/server/loggers/MultifileTextWriter.java
index 04ec74d..4b4b09d 100644
--- a/opendj3-server-dev/src/server/org/opends/server/loggers/MultifileTextWriter.java
+++ b/opendj3-server-dev/src/server/org/opends/server/loggers/MultifileTextWriter.java
@@ -59,7 +59,7 @@
* new one named in accordance with a specified FileNamingPolicy.
*/
class MultifileTextWriter
- implements ServerShutdownListener, TextWriter,
+ implements ServerShutdownListener, TextWriter, RotatableLogFile,
ConfigurationChangeListener<SizeLimitLogRotationPolicyCfg>
{
@@ -662,11 +662,8 @@
this.actions = actions;
}
- /**
- * Retrieves the number of bytes written to the current log file.
- *
- * @return The number of bytes written to the current log file.
- */
+ /** {@inheritDoc} */
+ @Override
public long getBytesWritten()
{
return outputStream.written;
@@ -694,13 +691,8 @@
return lastCleanCount;
}
- /**
- * Retrieves the last time a log file was rotated in this instance of
- * Directory Server. If a log rotation never
- * occurred, this value will be the time the server started.
- *
- * @return The last time log rotation occurred.
- */
+ /** {@inheritDoc} */
+ @Override
public Calendar getLastRotationTime()
{
return lastRotationTime;
diff --git a/opendj3-server-dev/src/server/org/opends/server/loggers/RotatableLogFile.java b/opendj3-server-dev/src/server/org/opends/server/loggers/RotatableLogFile.java
new file mode 100644
index 0000000..eaf33db
--- /dev/null
+++ b/opendj3-server-dev/src/server/org/opends/server/loggers/RotatableLogFile.java
@@ -0,0 +1,51 @@
+/*
+ * 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 legal-notices/CDDLv1_0.txt
+ * or http://forgerock.org/license/CDDLv1.0.html.
+ * 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 legal-notices/CDDLv1_0.txt.
+ * 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
+ *
+ *
+ * Copyright 2014 ForgeRock AS.
+ */
+package org.opends.server.loggers;
+
+import java.util.Calendar;
+
+/**
+ * Represents a file that can be rotated based on size or on time.
+ */
+public interface RotatableLogFile
+{
+
+ /**
+ * Retrieves the number of bytes written to the file.
+ *
+ * @return The number of bytes written to the file.
+ */
+ long getBytesWritten();
+
+ /**
+ * Retrieves the last time the file was rotated. If a file rotation never
+ * occurred, this value will be the time the server started.
+ *
+ * @return The last time file rotation occurred.
+ */
+ Calendar getLastRotationTime();
+
+}
diff --git a/opendj3-server-dev/src/server/org/opends/server/loggers/RotationPolicy.java b/opendj3-server-dev/src/server/org/opends/server/loggers/RotationPolicy.java
index 06cff95..b8df554 100644
--- a/opendj3-server-dev/src/server/org/opends/server/loggers/RotationPolicy.java
+++ b/opendj3-server-dev/src/server/org/opends/server/loggers/RotationPolicy.java
@@ -61,14 +61,13 @@
/**
- * This method indicates if the log file should be
- * rotated or not.
+ * This method indicates if the log file should be rotated or not.
*
- * @param writer The multi file writer writing the file to be
- * checked.
+ * @param writer
+ * the file writer to be checked.
* @return true if the log file should be rotated, false otherwise.
*/
- public boolean rotateFile(MultifileTextWriter writer);
+ public boolean rotateFile(RotatableLogFile writer);
}
diff --git a/opendj3-server-dev/src/server/org/opends/server/loggers/SizeBasedRotationPolicy.java b/opendj3-server-dev/src/server/org/opends/server/loggers/SizeBasedRotationPolicy.java
index 2aba920..361a2e8 100644
--- a/opendj3-server-dev/src/server/org/opends/server/loggers/SizeBasedRotationPolicy.java
+++ b/opendj3-server-dev/src/server/org/opends/server/loggers/SizeBasedRotationPolicy.java
@@ -98,7 +98,7 @@
* @param writer The multi file text writer writing the log file.
* @return true if the file needs to be rotated, false otherwise.
*/
- public boolean rotateFile(MultifileTextWriter writer)
+ public boolean rotateFile(RotatableLogFile writer)
{
long fileSize = writer.getBytesWritten();
diff --git a/opendj3-server-dev/src/server/org/opends/server/loggers/TimeLimitRotationPolicy.java b/opendj3-server-dev/src/server/org/opends/server/loggers/TimeLimitRotationPolicy.java
index c4b59bb..c0955b5 100644
--- a/opendj3-server-dev/src/server/org/opends/server/loggers/TimeLimitRotationPolicy.java
+++ b/opendj3-server-dev/src/server/org/opends/server/loggers/TimeLimitRotationPolicy.java
@@ -91,7 +91,7 @@
* @param writer The mutli file text writer written the log file.
* @return true if the file should be rotated, false otherwise.
*/
- public boolean rotateFile(MultifileTextWriter writer)
+ public boolean rotateFile(RotatableLogFile writer)
{
long currInterval = TimeThread.getTime() -
writer.getLastRotationTime().getTimeInMillis();
diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/common/CSN.java b/opendj3-server-dev/src/server/org/opends/server/replication/common/CSN.java
index 932cb1e..73f248b 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/common/CSN.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/common/CSN.java
@@ -61,6 +61,9 @@
*/
public static final int STRING_ENCODING_LENGTH = 28;
+ /** The maximum possible value for a CSN. */
+ public static final CSN MAX_CSN_VALUE = new CSN(Long.MAX_VALUE, Integer.MAX_VALUE, Short.MAX_VALUE);
+
private static final long serialVersionUID = -8802722277749190740L;
private final long timeStamp;
/**
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/TestCaseUtils.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/TestCaseUtils.java
index ed7580b..d11da4d 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/TestCaseUtils.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/TestCaseUtils.java
@@ -1105,6 +1105,13 @@
return new File(testResourceDir, filename);
}
+ public static File getUnitTestRootPath()
+ {
+ final String buildRoot = System.getProperty(PROPERTY_BUILD_ROOT);
+ final String path = System.getProperty(PROPERTY_BUILD_DIR, buildRoot + File.separator + "build");
+ return new File(path, "unit-tests");
+ }
+
/**
* Prevent instantiation.
*/
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/ChangeNumberControlPluginTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/ChangeNumberControlPluginTestCase.java
index af297a8..c767e26 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/ChangeNumberControlPluginTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/ChangeNumberControlPluginTestCase.java
@@ -79,6 +79,7 @@
+ "cn: Replication Server\n"
+ "ds-cfg-replication-port: " + replServerPort + "\n"
+ "ds-cfg-replication-db-directory: ChangeNumberControlDbTest\n"
+ + "ds-cfg-replication-db-implementation: " + replicationDbImplementation + "\n"
+ "ds-cfg-replication-server-id: 103\n";
// suffix synchronized
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/ReSyncTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/ReSyncTest.java
index 405bf07..dc1994e 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/ReSyncTest.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/ReSyncTest.java
@@ -93,6 +93,7 @@
+ "cn: Replication Server\n"
+ "ds-cfg-replication-port:" + replServerPort + "\n"
+ "ds-cfg-replication-db-directory: ReSyncTest\n"
+ + "ds-cfg-replication-db-implementation: " + replicationDbImplementation + "\n"
+ "ds-cfg-replication-server-id: 104\n";
// suffix synchronized
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/HistoricalTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/HistoricalTest.java
index a166411..e7bc708 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/HistoricalTest.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/HistoricalTest.java
@@ -84,6 +84,7 @@
+ "cn: replication Server\n"
+ "ds-cfg-replication-port: " + replServerPort + "\n"
+ "ds-cfg-replication-db-directory: HistoricalTest\n"
+ + "ds-cfg-replication-db-implementation: " + replicationDbImplementation + "\n"
+ "ds-cfg-replication-server-id: 102\n";
// The suffix to be synchronized.
--
Gitblit v1.10.0