From 0df071f4aab05eb5aee458d2aafb48c0dc65b309 Mon Sep 17 00:00:00 2001
From: matthew_swift <matthew_swift@localhost>
Date: Mon, 21 Jan 2008 12:10:39 +0000
Subject: [PATCH] Fix issues 2831 and 1948.
---
opendj-sdk/opends/src/server/org/opends/server/backends/jeb/BackupManager.java | 25 +-
opendj-sdk/opends/src/server/org/opends/server/backends/jeb/ImportJob.java | 15 +-
opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/backends/jeb/TestBackendImpl.java | 4
opendj-sdk/opends/build.xml | 1
opendj-sdk/opends/src/server/org/opends/server/core/AbandonOperationBasis.java | 4
opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationBackend.java | 75 +++++++---
opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/FileSystemEntryCacheTestCase.java | 3
opendj-sdk/opends/src/server/org/opends/server/backends/jeb/VLVIndexBuilder.java | 51 ++----
opendj-sdk/opends/src/server/org/opends/server/backends/jeb/BackendImpl.java | 48 ++++--
opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationServer.java | 5
opendj-sdk/opends/src/messages/messages/replication.properties | 2
opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/ReplicationServerTest.java | 42 ++++-
opendj-sdk/opends/resource/config/config.ldif | 2
opendj-sdk/opends/src/server/org/opends/server/backends/jeb/IndexMergeThread.java | 26 +--
opendj-sdk/opends/tests/unit-tests-testng/resource/config-changes.ldif | 2
opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/TestCaseUtils.java | 9
opendj-sdk/opends/src/server/org/opends/server/backends/jeb/RootContainer.java | 19 +
opendj-sdk/opends/src/server/org/opends/server/backends/jeb/AttributeIndexBuilder.java | 50 +++---
opendj-sdk/opends/src/server/org/opends/server/backends/jeb/VLVIndexMergeThread.java | 20 +-
opendj-sdk/opends/src/admin/defn/org/opends/server/admin/std/LocalDBBackendConfiguration.xml | 12 +
20 files changed, 235 insertions(+), 180 deletions(-)
diff --git a/opendj-sdk/opends/build.xml b/opendj-sdk/opends/build.xml
index 2e3a873..2e9e55c 100644
--- a/opendj-sdk/opends/build.xml
+++ b/opendj-sdk/opends/build.xml
@@ -795,6 +795,7 @@
<mkdir dir="${pdir}/config/messages" />
<mkdir dir="${pdir}/config/MakeLDIF" />
<mkdir dir="${pdir}/db" />
+ <mkdir dir="${pdir}/import-tmp" />
<mkdir dir="${pdir}/changelogDb" />
<mkdir dir="${pdir}/ldif" />
<mkdir dir="${pdir}/legal-notices" />
diff --git a/opendj-sdk/opends/resource/config/config.ldif b/opendj-sdk/opends/resource/config/config.ldif
index f37b819..4284459 100644
--- a/opendj-sdk/opends/resource/config/config.ldif
+++ b/opendj-sdk/opends/resource/config/config.ldif
@@ -180,7 +180,7 @@
ds-cfg-subtree-delete-size-limit: 100000
ds-cfg-subtree-delete-batch-size: 5000
ds-cfg-preload-time-limit: 0 seconds
-ds-cfg-import-temp-directory: importTmp
+ds-cfg-import-temp-directory: import-tmp
ds-cfg-import-buffer-size: 256 megabytes
ds-cfg-import-queue-size: 100
ds-cfg-import-pass-size: 0
diff --git a/opendj-sdk/opends/src/admin/defn/org/opends/server/admin/std/LocalDBBackendConfiguration.xml b/opendj-sdk/opends/src/admin/defn/org/opends/server/admin/std/LocalDBBackendConfiguration.xml
index 04714a4..2f8b794 100644
--- a/opendj-sdk/opends/src/admin/defn/org/opends/server/admin/std/LocalDBBackendConfiguration.xml
+++ b/opendj-sdk/opends/src/admin/defn/org/opends/server/admin/std/LocalDBBackendConfiguration.xml
@@ -164,6 +164,11 @@
<adm:requires-admin-action>
<adm:component-restart />
</adm:requires-admin-action>
+ <adm:default-behavior>
+ <adm:defined>
+ <adm:value>db</adm:value>
+ </adm:defined>
+ </adm:default-behavior>
<adm:syntax>
<adm:string />
</adm:syntax>
@@ -332,9 +337,6 @@
</adm:profile>
</adm:property>
<adm:property name="import-temp-directory" mandatory="true">
- <adm:TODO>
- Default to something derived from the backend-id
- </adm:TODO>
<adm:synopsis>
Specifies the location of the directory that will be used for the
files used to hold temporary information that will be used during
@@ -355,7 +357,9 @@
</adm:none>
</adm:requires-admin-action>
<adm:default-behavior>
- <adm:undefined />
+ <adm:defined>
+ <adm:value>import-tmp</adm:value>
+ </adm:defined>
</adm:default-behavior>
<adm:syntax>
<adm:string />
diff --git a/opendj-sdk/opends/src/messages/messages/replication.properties b/opendj-sdk/opends/src/messages/messages/replication.properties
index dba9531..b0d9875 100644
--- a/opendj-sdk/opends/src/messages/messages/replication.properties
+++ b/opendj-sdk/opends/src/messages/messages/replication.properties
@@ -259,4 +259,6 @@
sending request to get remote monitor data
SEVERE_ERR_EXCEPTION_REPLAYING_REPLICATION_MESSAGE_109=An Exception was caught \
while replaying replication message : %s
+SEVERE_ERR_REPLICATION_SERVER_CONFIG_NOT_FOUND_110=The replication server \
+ configuration could not be found
diff --git a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/AttributeIndexBuilder.java b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/AttributeIndexBuilder.java
index 82188e9..a30db7a 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/AttributeIndexBuilder.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/AttributeIndexBuilder.java
@@ -22,7 +22,7 @@
* CDDL HEADER END
*
*
- * Portions Copyright 2006-2007 Sun Microsystems, Inc.
+ * Portions Copyright 2006-2008 Sun Microsystems, Inc.
*/
package org.opends.server.backends.jeb;
@@ -56,29 +56,29 @@
public class AttributeIndexBuilder implements IndexBuilder
{
/**
- * The import context.
+ * The directory in which temporary merge files are held.
*/
- private ImportContext importContext;
+ private final File tempDir;
/**
* The index database.
*/
- private Index index;
+ private final Index index;
/**
* The indexer to generate the index keys.
*/
- private Indexer indexer;
+ private final Indexer indexer;
/**
* The write buffer.
*/
- ArrayList<IndexMod> buffer;
+ private ArrayList<IndexMod> buffer;
/**
* The write buffer size.
*/
- private int bufferSize;
+ private final int bufferSize;
/**
* Current output file number.
@@ -86,31 +86,28 @@
private int fileNumber = 0;
/**
- * The index entry limit.
- */
- private int entryLimit;
-
- /**
* A unique prefix for temporary files to prevent conflicts.
*/
- private String fileNamePrefix;
+ private final String fileNamePrefix;
/**
* Indicates whether we are replacing existing data or not.
*/
- private boolean replaceExisting = false;
+ private final boolean replaceExisting;
- private ByteArrayOutputStream addBytesStream = new ByteArrayOutputStream();
- private ByteArrayOutputStream delBytesStream = new ByteArrayOutputStream();
+ private final ByteArrayOutputStream addBytesStream =
+ new ByteArrayOutputStream();
+ private final ByteArrayOutputStream delBytesStream =
+ new ByteArrayOutputStream();
- private DataOutputStream addBytesDataStream;
- private DataOutputStream delBytesDataStream;
+ private final DataOutputStream addBytesDataStream;
+ private final DataOutputStream delBytesDataStream;
/**
* A file name filter to identify temporary files we have written.
*/
- private FilenameFilter filter = new FilenameFilter()
+ private final FilenameFilter filter = new FilenameFilter()
{
public boolean accept(File d, String name)
{
@@ -129,10 +126,13 @@
public AttributeIndexBuilder(ImportContext importContext,
Index index, int entryLimit, long bufferSize)
{
- this.importContext = importContext;
+ File parentDir = getFileForPath(importContext.getConfig()
+ .getImportTempDirectory());
+ this.tempDir = new File(parentDir,
+ importContext.getConfig().getBackendId());
+
this.index = index;
this.indexer = index.indexer;
- this.entryLimit = entryLimit;
this.bufferSize = (int)bufferSize/100;
long tid = Thread.currentThread().getId();
fileNamePrefix = index.getName() + "_" + tid + "_";
@@ -149,8 +149,6 @@
public void startProcessing()
{
// Clean up any work files left over from a previous run.
- File tempDir = getFileForPath(
- importContext.getConfig().getImportTempDirectory());
File[] files = tempDir.listFiles(filter);
if (files != null)
{
@@ -225,6 +223,8 @@
return index.getEntryLimitExceededCount();
}
+
+
/**
* Record the insertion of an entry ID.
* @param key The index key.
@@ -299,9 +299,7 @@
// Start a new file.
fileNumber++;
String fileName = fileNamePrefix + String.valueOf(fileNumber);
- File file = new File(getFileForPath(
- importContext.getConfig().getImportTempDirectory()),
- fileName);
+ File file = new File(tempDir, fileName);
BufferedOutputStream bufferedStream =
new BufferedOutputStream(new FileOutputStream(file));
DataOutputStream dataStream = new DataOutputStream(bufferedStream);
diff --git a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/BackendImpl.java b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/BackendImpl.java
index bbdb7a8..f1fc614 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/BackendImpl.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/BackendImpl.java
@@ -119,8 +119,8 @@
/**
* A list of monitor providers created for this backend instance.
*/
- private ArrayList<MonitorProvider> monitorProviders =
- new ArrayList<MonitorProvider>();
+ private ArrayList<MonitorProvider<?>> monitorProviders =
+ new ArrayList<MonitorProvider<?>>();
/**
* The base DNs defined for this backend instance.
@@ -132,13 +132,6 @@
*/
private static HashSet<String> supportedControls;
- /**
- * The features supported by this backend.
- */
- private static HashSet<String> supportedFeatures = new HashSet<String>(0);
-
-
-
static
{
// Set our supported controls.
@@ -150,6 +143,18 @@
supportedControls.add(OID_VLV_REQUEST_CONTROL);
}
+ /**
+ * The features supported by this backend.
+ */
+ private static HashSet<String> supportedFeatures;
+
+ static {
+ // Set our supported features.
+ supportedFeatures = new HashSet<String>();
+
+ //NYI
+ }
+
/**
@@ -226,7 +231,9 @@
*/
private long checksumDbEnv() {
- File backendDirectory = getFileForPath(cfg.getDBDirectory());
+ File parentDirectory = getFileForPath(cfg.getDBDirectory());
+ File backendDirectory = new File(parentDirectory, cfg.getBackendId());
+
List<File> jdbFiles = new ArrayList<File>();
if(backendDirectory.isDirectory())
{
@@ -391,12 +398,12 @@
}
// Deregister our monitor providers.
- for (MonitorProvider monitor : monitorProviders)
+ for (MonitorProvider<?> monitor : monitorProviders)
{
DirectoryServer.deregisterMonitorProvider(
monitor.getMonitorInstanceName().toLowerCase());
}
- monitorProviders = new ArrayList<MonitorProvider>();
+ monitorProviders = new ArrayList<MonitorProvider<?>>();
// We presume the server will prevent more operations coming into this
// backend, but there may be existing operations already in the
@@ -561,7 +568,7 @@
@Override()
public HashSet<String> getSupportedFeatures()
{
- return new HashSet<String>(); //NYI
+ return supportedFeatures;
}
@@ -1179,8 +1186,8 @@
// environment and re-open it. Only do this when we are
// importing to all the base DNs in the backend or if the backend only
// have one base DN.
-
- File backendDirectory = getFileForPath(cfg.getDBDirectory());
+ File parentDirectory = getFileForPath(cfg.getDBDirectory());
+ File backendDirectory = new File(parentDirectory, cfg.getBackendId());
EnvManager.removeFiles(backendDirectory.getPath());
envConfig.setReadOnly(false);
envConfig.setAllowCreate(true);
@@ -1440,7 +1447,9 @@
{
BackupManager backupManager =
new BackupManager(getBackendID());
- backupManager.createBackup(cfg, backupConfig);
+ File parentDir = getFileForPath(cfg.getDBDirectory());
+ File backendDir = new File(parentDir, cfg.getBackendId());
+ backupManager.createBackup(backendDir, backupConfig);
}
@@ -1468,7 +1477,9 @@
{
BackupManager backupManager =
new BackupManager(getBackendID());
- backupManager.restoreBackup(cfg, restoreConfig);
+ File parentDir = getFileForPath(cfg.getDBDirectory());
+ File backendDir = new File(parentDir, cfg.getBackendId());
+ backupManager.restoreBackup(backendDir, restoreConfig);
}
@@ -1656,7 +1667,8 @@
throws ConfigException, JebException
{
// Determine the backend database directory.
- File backendDirectory = getFileForPath(cfg.getDBDirectory());
+ File parentDirectory = getFileForPath(cfg.getDBDirectory());
+ File backendDirectory = new File(parentDirectory, cfg.getBackendId());
EnvManager.removeFiles(backendDirectory.getPath());
}
diff --git a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/BackupManager.java b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/BackupManager.java
index 6b88b97..dfa2ac4 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/BackupManager.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/BackupManager.java
@@ -22,7 +22,7 @@
* CDDL HEADER END
*
*
- * Portions Copyright 2006-2007 Sun Microsystems, Inc.
+ * Portions Copyright 2006-2008 Sun Microsystems, Inc.
*/
package org.opends.server.backends.jeb;
import org.opends.messages.Message;
@@ -66,7 +66,8 @@
import static org.opends.messages.JebMessages.*;
import static org.opends.server.util.ServerConstants.*;
import static org.opends.server.util.StaticUtils.*;
-import org.opends.server.admin.std.server.LocalDBBackendCfg;
+
+
/**
* A backup manager for JE backends.
@@ -133,12 +134,12 @@
* log files that are unchanged since the previous backup. The remaining
* zip entries are the JE log files themselves, which, for an incremental,
* only include those files that have changed.
- * @param cfg The configuration of the backend instance for
+ * @param backendDir The directory of the backend instance for
* which the backup is required.
* @param backupConfig The configuration to use when performing the backup.
* @throws DirectoryException If a Directory Server error occurs.
*/
- public void createBackup(LocalDBBackendCfg cfg, BackupConfig backupConfig)
+ public void createBackup(File backendDir, BackupConfig backupConfig)
throws DirectoryException
{
// Get the properties to use for the backup.
@@ -220,7 +221,6 @@
// If this is an incremental, determine the base backup for this backup.
HashSet<String> dependencies = new HashSet<String>();
BackupInfo baseBackup = null;
- File backendDir = getFileForPath(cfg.getDBDirectory());
/*
FilenameFilter backupTagFilter = new FilenameFilter()
{
@@ -711,12 +711,12 @@
/**
* Restore a JE backend from backup, or verify the backup.
- * @param cfg The configuration of the backend instance to be
+ * @param backendDir The configuration of the backend instance to be
* restored.
* @param restoreConfig The configuration to use when performing the restore.
* @throws DirectoryException If a Directory Server error occurs.
*/
- public void restoreBackup(LocalDBBackendCfg cfg,
+ public void restoreBackup(File backendDir,
RestoreConfig restoreConfig)
throws DirectoryException
{
@@ -729,8 +729,7 @@
// Create a restore directory with a different name to the backend
// directory.
- File currentDir = getFileForPath(cfg.getDBDirectory());
- File restoreDir = new File(currentDir.getPath() + "-restore-" + backupID);
+ File restoreDir = new File(backendDir.getPath() + "-restore-" + backupID);
if (!verifyOnly)
{
File[] files = restoreDir.listFiles();
@@ -803,7 +802,7 @@
// Delete the current backend directory and rename the restore directory.
if (!verifyOnly)
{
- File[] files = currentDir.listFiles();
+ File[] files = backendDir.listFiles();
if (files != null)
{
for (File f : files)
@@ -811,11 +810,11 @@
f.delete();
}
}
- currentDir.delete();
- if (!restoreDir.renameTo(currentDir))
+ backendDir.delete();
+ if (!restoreDir.renameTo(backendDir))
{
Message msg = ERR_JEB_CANNOT_RENAME_RESTORE_DIRECTORY.get(
- restoreDir.getPath(), currentDir.getPath());
+ restoreDir.getPath(), backendDir.getPath());
throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
msg);
}
diff --git a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/ImportJob.java b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/ImportJob.java
index ebafd98..c9f3967 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/ImportJob.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/ImportJob.java
@@ -124,7 +124,7 @@
/**
* The number of merge passes.
*/
- int mergePassNumber = 1;
+ private int mergePassNumber = 1;
/**
@@ -235,8 +235,9 @@
startTime = System.currentTimeMillis();
// Create a temporary work directory.
- File tempDir = getFileForPath(config.getImportTempDirectory());
- if(!tempDir.exists() && !tempDir.mkdir())
+ File parentDir = getFileForPath(config.getImportTempDirectory());
+ File tempDir = new File(parentDir, config.getBackendId());
+ if(!tempDir.exists() && !tempDir.mkdirs())
{
Message msg = ERR_JEB_IMPORT_CREATE_TMPDIR_ERROR.get(
String.valueOf(tempDir));
@@ -828,7 +829,7 @@
* @throws DatabaseException If an error occurs in the JE database.
* @throws JebException If an error occurs in the JE backend.
*/
- public void processEntry(ImportContext importContext, Entry entry)
+ private void processEntry(ImportContext importContext, Entry entry)
throws JebException, DatabaseException
{
DN entryDN = entry.getDN();
@@ -963,7 +964,7 @@
if (txn != null)
{
- importContext.getEntryContainer().transactionCommit(txn);
+ EntryContainer.transactionCommit(txn);
txn = null;
}
}
@@ -971,7 +972,7 @@
{
if (txn != null)
{
- importContext.getEntryContainer().transactionAbort(txn);
+ EntryContainer.transactionAbort(txn);
}
}
}
@@ -1215,7 +1216,7 @@
/**
* This class reports progress of the import job at fixed intervals.
*/
- class ProgressTask extends TimerTask
+ private final class ProgressTask extends TimerTask
{
/**
* The number of entries that had been read at the time of the
diff --git a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/IndexMergeThread.java b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/IndexMergeThread.java
index 44cd948..16eaf15 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/IndexMergeThread.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/IndexMergeThread.java
@@ -22,7 +22,7 @@
* CDDL HEADER END
*
*
- * Portions Copyright 2006-2007 Sun Microsystems, Inc.
+ * Portions Copyright 2006-2008 Sun Microsystems, Inc.
*/
package org.opends.server.backends.jeb;
import org.opends.messages.Message;
@@ -57,7 +57,7 @@
* A thread to merge a set of intermediate files from an index builder
* into an index database.
*/
-public class IndexMergeThread extends DirectoryThread
+final class IndexMergeThread extends DirectoryThread
{
/**
* The tracer object for the debug logger.
@@ -73,35 +73,30 @@
/**
* The configuration of the JE backend containing the index.
*/
- LocalDBBackendCfg config;
+ private LocalDBBackendCfg config;
/**
* The LDIF import configuration, which indicates whether we are
* appending to existing data.
*/
- LDIFImportConfig ldifImportConfig;
+ private LDIFImportConfig ldifImportConfig;
/**
* The indexer to generate and compare index keys.
*/
- Indexer indexer;
+ private Indexer indexer;
/**
* The index database being written.
*/
- Index index;
+ private Index index;
/**
* The index entry limit.
*/
- int entryLimit;
-
- /**
- * The name of the index for use in file names and log messages.
- */
- String indexName;
+ private int entryLimit;
/**
* Indicates whether we are replacing existing data or not.
@@ -134,7 +129,7 @@
* @param index The index database to be written.
* @param entryLimit The configured index entry limit.
*/
- IndexMergeThread(LocalDBBackendCfg config,
+ public IndexMergeThread(LocalDBBackendCfg config,
LDIFImportConfig ldifImportConfig,
Index index, int entryLimit)
{
@@ -176,7 +171,7 @@
* written to the index.
* @throws Exception If an error occurs.
*/
- public void merge() throws Exception
+ private void merge() throws Exception
{
// An ordered map of the current input keys from each file.
OctetStringKeyComparator comparator =
@@ -185,7 +180,8 @@
new TreeMap<ASN1OctetString, MergeValue>(comparator);
// Open all the files.
- File tempDir = getFileForPath(config.getImportTempDirectory());
+ File parentDir = getFileForPath(config.getImportTempDirectory());
+ File tempDir = new File(parentDir, config.getBackendId());
File[] files = tempDir.listFiles(filter);
if (files == null || files.length == 0)
diff --git a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/RootContainer.java b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/RootContainer.java
index 42a0de5..09507b7 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/RootContainer.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/RootContainer.java
@@ -143,7 +143,8 @@
throws DatabaseException, ConfigException
{
// Determine the backend database directory.
- File backendDirectory = getFileForPath(config.getDBDirectory());
+ File parentDirectory = getFileForPath(config.getDBDirectory());
+ File backendDirectory = new File(parentDirectory, config.getBackendId());
// Create the directory if it doesn't exist.
if (!backendDirectory.exists())
@@ -724,8 +725,10 @@
{
boolean acceptable = true;
- File backendDirectory = getFileForPath(cfg.getDBDirectory());
- //Make sure the directory either alreadly exists or is able to create.
+ File parentDirectory = getFileForPath(config.getDBDirectory());
+ File backendDirectory = new File(parentDirectory, config.getBackendId());
+
+ //Make sure the directory either already exists or is able to create.
if (!backendDirectory.exists())
{
if(!backendDirectory.mkdirs())
@@ -806,7 +809,7 @@
EnvironmentConfig oldEnvConfig = env.getConfig();
EnvironmentConfig newEnvConfig =
ConfigurableEnvironment.parseConfigEntry(cfg);
- Map paramsMap = EnvironmentParams.SUPPORTED_PARAMS;
+ Map<?,?> paramsMap = EnvironmentParams.SUPPORTED_PARAMS;
// Iterate through native JE properties.
SortedSet<String> jeProperties = cfg.getJEProperty();
@@ -875,7 +878,9 @@
// Create the directory if it doesn't exist.
if(!cfg.getDBDirectory().equals(this.config.getDBDirectory()))
{
- File backendDirectory = getFileForPath(cfg.getDBDirectory());
+ File parentDirectory = getFileForPath(config.getDBDirectory());
+ File backendDirectory =
+ new File(parentDirectory, config.getBackendId());
if (!backendDirectory.exists())
{
@@ -946,7 +951,9 @@
// Get the backend database backendDirectory permissions and apply
if(FilePermission.canSetPermissions())
{
- File backendDirectory = getFileForPath(cfg.getDBDirectory());
+ File parentDirectory = getFileForPath(config.getDBDirectory());
+ File backendDirectory = new File(parentDirectory,
+ config.getBackendId());
try
{
if(!FilePermission.setPermissions(backendDirectory,
diff --git a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/VLVIndexBuilder.java b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/VLVIndexBuilder.java
index 8766ba7..87dd3f6 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/VLVIndexBuilder.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/VLVIndexBuilder.java
@@ -22,7 +22,7 @@
* CDDL HEADER END
*
*
- * Portions Copyright 2006-2007 Sun Microsystems, Inc.
+ * Portions Copyright 2006-2008 Sun Microsystems, Inc.
*/
package org.opends.server.backends.jeb;
@@ -33,7 +33,6 @@
import java.io.*;
import com.sleepycat.je.DatabaseException;
-import com.sleepycat.je.Transaction;
/**
* This class is used to create an VLV vlvIndex for an import process.
@@ -50,29 +49,29 @@
public class VLVIndexBuilder implements IndexBuilder
{
/**
- * The import context.
+ * The directory in which temporary merge files are held.
*/
- private ImportContext importContext;
+ private final File tempDir;
/**
* The vlvIndex database.
*/
- private VLVIndex vlvIndex;
+ private final VLVIndex vlvIndex;
/**
* The add write buffer.
*/
- TreeMap<SortValues,EntryID> addBuffer;
+ private TreeMap<SortValues,EntryID> addBuffer;
/**
* The delete write buffer.
*/
- TreeMap<SortValues,EntryID> delBuffer;
+ private TreeMap<SortValues,EntryID> delBuffer;
/**
* The write buffer size.
*/
- private int bufferSize;
+ private final int bufferSize;
/**
* Current output file number.
@@ -82,24 +81,17 @@
/**
* A unique prefix for temporary files to prevent conflicts.
*/
- private String fileNamePrefix;
+ private final String fileNamePrefix;
/**
* Indicates whether we are replacing existing data or not.
*/
- private boolean replaceExisting = false;
-
-
- private ByteArrayOutputStream addBytesStream = new ByteArrayOutputStream();
- private ByteArrayOutputStream delBytesStream = new ByteArrayOutputStream();
-
- private DataOutputStream addBytesDataStream;
- private DataOutputStream delBytesDataStream;
+ private final boolean replaceExisting;
/**
* A file name filter to identify temporary files we have written.
*/
- private FilenameFilter filter = new FilenameFilter()
+ private final FilenameFilter filter = new FilenameFilter()
{
public boolean accept(File d, String name)
{
@@ -117,16 +109,18 @@
public VLVIndexBuilder(ImportContext importContext,
VLVIndex vlvIndex, long bufferSize)
{
- this.importContext = importContext;
+ File parentDir = getFileForPath(importContext.getConfig()
+ .getImportTempDirectory());
+ this.tempDir = new File(parentDir,
+ importContext.getConfig().getBackendId());
+
this.vlvIndex = vlvIndex;
this.bufferSize = (int)bufferSize/100;
long tid = Thread.currentThread().getId();
- fileNamePrefix = vlvIndex.getName() + "_" + tid + "_";
- replaceExisting =
+ this.fileNamePrefix = vlvIndex.getName() + "_" + tid + "_";
+ this.replaceExisting =
importContext.getLDIFImportConfig().appendToExistingData() &&
importContext.getLDIFImportConfig().replaceExistingEntries();
- addBytesDataStream = new DataOutputStream(addBytesStream);
- delBytesDataStream = new DataOutputStream(delBytesStream);
}
/**
@@ -135,8 +129,6 @@
public void startProcessing()
{
// Clean up any work files left over from a previous run.
- File tempDir = getFileForPath(
- importContext.getConfig().getImportTempDirectory());
File[] files = tempDir.listFiles(filter);
if (files != null)
{
@@ -156,7 +148,6 @@
public void processEntry(Entry oldEntry, Entry newEntry, EntryID entryID)
throws DatabaseException, IOException, DirectoryException
{
- Transaction txn = null;
SortValues newValues = new SortValues(entryID, newEntry,
vlvIndex.sortOrder);
// Update the vlvIndex for this entry.
@@ -244,9 +235,7 @@
// Start a new file.
fileNumber++;
String fileName = fileNamePrefix + String.valueOf(fileNumber) + "_add";
- File file = new File(getFileForPath(
- importContext.getConfig().getImportTempDirectory()),
- fileName);
+ File file = new File(tempDir, fileName);
BufferedOutputStream bufferedStream =
new BufferedOutputStream(new FileOutputStream(file));
DataOutputStream dataStream = new DataOutputStream(bufferedStream);
@@ -279,9 +268,7 @@
if (replaceExisting)
{
fileName = fileNamePrefix + String.valueOf(fileNumber) + "_del";
- file = new File(getFileForPath(
- importContext.getConfig().getImportTempDirectory()),
- fileName);
+ file = new File(tempDir, fileName);
bufferedStream =
new BufferedOutputStream(new FileOutputStream(file));
dataStream = new DataOutputStream(bufferedStream);
diff --git a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/VLVIndexMergeThread.java b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/VLVIndexMergeThread.java
index 13ecd66..85d4664 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/VLVIndexMergeThread.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/backends/jeb/VLVIndexMergeThread.java
@@ -22,7 +22,7 @@
* CDDL HEADER END
*
*
- * Portions Copyright 2006-2007 Sun Microsystems, Inc.
+ * Portions Copyright 2006-2008 Sun Microsystems, Inc.
*/
package org.opends.server.backends.jeb;
import org.opends.messages.Message;
@@ -51,7 +51,7 @@
* A thread to merge a set of intermediate files from an vlvIndex builder
* into an vlvIndex database.
*/
-public class VLVIndexMergeThread extends DirectoryThread
+class VLVIndexMergeThread extends DirectoryThread
{
/**
* The tracer object for the debug logger.
@@ -67,23 +67,18 @@
/**
* The configuration of the JE backend containing the vlvIndex.
*/
- LocalDBBackendCfg config;
+ private LocalDBBackendCfg config;
/**
* The LDIF import configuration, which indicates whether we are
* appending to existing data.
*/
- LDIFImportConfig ldifImportConfig;
+ private LDIFImportConfig ldifImportConfig;
/**
* The vlvIndex database being written.
*/
- VLVIndex vlvIndex;
-
- /**
- * The name of the vlvIndex for use in file names and log messages.
- */
- String indexName;
+ private VLVIndex vlvIndex;
/**
* Indicates whether we are replacing existing data or not.
@@ -121,7 +116,7 @@
* whether we are appending to existing data.
* @param vlvIndex The vlvIndex database to be written.
*/
- VLVIndexMergeThread(LocalDBBackendCfg config,
+ public VLVIndexMergeThread(LocalDBBackendCfg config,
LDIFImportConfig ldifImportConfig,
VLVIndex vlvIndex)
{
@@ -170,7 +165,8 @@
public void merge() throws Exception
{
// Open all the files.
- File tempDir = getFileForPath(config.getImportTempDirectory());
+ File parentDir = getFileForPath(config.getImportTempDirectory());
+ File tempDir = new File(parentDir, config.getBackendId());
File[] files = tempDir.listFiles(filter);
if (files == null || files.length == 0)
diff --git a/opendj-sdk/opends/src/server/org/opends/server/core/AbandonOperationBasis.java b/opendj-sdk/opends/src/server/org/opends/server/core/AbandonOperationBasis.java
index 3494be1..2425f4e 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/core/AbandonOperationBasis.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/core/AbandonOperationBasis.java
@@ -22,7 +22,7 @@
* CDDL HEADER END
*
*
- * Portions Copyright 2007 Sun Microsystems, Inc.
+ * Portions Copyright 2007-2008 Sun Microsystems, Inc.
*/
package org.opends.server.core;
import org.opends.messages.Message;
@@ -133,8 +133,6 @@
boolean sendNotification, Message message
)
{
- // Since abandon operations can't be cancelled, we don't need to do anything
- // but forward the request on to the client connection.
clientConnection.disconnect(disconnectReason, sendNotification,
message);
}
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationBackend.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationBackend.java
index bace04f..49cfb23 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationBackend.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationBackend.java
@@ -32,11 +32,12 @@
import static org.opends.server.loggers.ErrorLogger.logError;
import static org.opends.server.loggers.debug.DebugLogger.debugEnabled;
import static org.opends.server.loggers.debug.DebugLogger.getTracer;
-import static org.opends.server.util.StaticUtils.getExceptionMessage;
+import static org.opends.server.util.StaticUtils.*;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
+import java.io.File;
import java.io.IOException;
import java.io.StringReader;
import java.util.ArrayList;
@@ -54,8 +55,12 @@
import org.opends.messages.Message;
import org.opends.server.admin.Configuration;
+import org.opends.server.admin.server.ServerManagementContext;
import org.opends.server.admin.std.server.BackendCfg;
-import org.opends.server.admin.std.server.LocalDBBackendCfg;
+import org.opends.server.admin.std.server.ReplicationServerCfg;
+import org.opends.server.admin.std.server.ReplicationSynchronizationProviderCfg;
+import org.opends.server.admin.std.server.RootCfg;
+import org.opends.server.admin.std.server.SynchronizationProviderCfg;
import org.opends.server.api.Backend;
import org.opends.server.api.SynchronizationProvider;
import org.opends.server.backends.jeb.BackupManager;
@@ -146,15 +151,12 @@
// The set of supported features for this backend.
private HashSet<String> supportedFeatures;
- // The directory associated with this backend.
- private BackupDirectory backendDirectory;
-
- ReplicationServer server;
+ private ReplicationServer server;
/**
* The configuration of this backend.
*/
- private LocalDBBackendCfg cfg;
+ private BackendCfg cfg;
/**
* The number of milliseconds between job progress reports.
@@ -215,12 +217,10 @@
if (config != null)
{
Validator.ensureTrue(config instanceof BackendCfg);
- cfg = (LocalDBBackendCfg)config;
+ cfg = (BackendCfg)config;
DN[] baseDNs = new DN[cfg.getBaseDN().size()];
cfg.getBaseDN().toArray(baseDNs);
setBaseDNs(baseDNs);
- backendDirectory = new BackupDirectory(
- cfg.getDBDirectory(), null);
}
}
@@ -333,7 +333,7 @@
{
try
{
- server = retrievesReplicationServer();
+ server = getReplicationServer();
if (server == null)
{
return 0;
@@ -998,9 +998,10 @@
public void createBackup(BackupConfig backupConfig)
throws DirectoryException
{
- BackupManager backupManager =
- new BackupManager(getBackendID());
- backupManager.createBackup(cfg, backupConfig);
+ BackupManager backupManager = new BackupManager(getBackendID());
+ File backendDir = getFileForPath(getReplicationServerCfg()
+ .getReplicationDBDirectory());
+ backupManager.createBackup(backendDir, backupConfig);
}
@@ -1015,7 +1016,7 @@
{
BackupManager backupManager =
new BackupManager(getBackendID());
- backupManager.removeBackup(this.backendDirectory, backupID);
+ backupManager.removeBackup(backupDirectory, backupID);
}
@@ -1040,7 +1041,9 @@
{
BackupManager backupManager =
new BackupManager(getBackendID());
- backupManager.restoreBackup(cfg, restoreConfig);
+ File backendDir = getFileForPath(getReplicationServerCfg()
+ .getReplicationDBDirectory());
+ backupManager.restoreBackup(backendDir, restoreConfig);
}
@@ -1081,7 +1084,7 @@
/**
* This class reports progress of the export job at fixed intervals.
*/
- class ProgressTask extends TimerTask
+ private final class ProgressTask extends TimerTask
{
/**
* The number of entries that had been exported at the time of the
@@ -1180,7 +1183,7 @@
if (server==null)
{
- server = retrievesReplicationServer();
+ server = getReplicationServer();
if (server == null)
{
@@ -1234,13 +1237,12 @@
* @return The server retrieved
* @throws DirectoryException When it occurs.
*/
- protected static ReplicationServer retrievesReplicationServer()
- throws DirectoryException
+ private ReplicationServer getReplicationServer() throws DirectoryException
{
ReplicationServer replicationServer = null;
DirectoryServer.getSynchronizationProviders();
- for (SynchronizationProvider provider :
+ for (SynchronizationProvider<?> provider :
DirectoryServer.getSynchronizationProviders())
{
if (provider instanceof MultimasterReplication)
@@ -1257,6 +1259,37 @@
return replicationServer;
}
+ // Find the replication server configuration associated with this
+ // replication backend.
+ private ReplicationServerCfg getReplicationServerCfg()
+ throws DirectoryException {
+ RootCfg root = ServerManagementContext.getInstance().getRootConfiguration();
+
+ for (String name : root.listSynchronizationProviders()) {
+ SynchronizationProviderCfg cfg;
+ try {
+ cfg = root.getSynchronizationProvider(name);
+ } catch (ConfigException e) {
+ throw new DirectoryException(ResultCode.OPERATIONS_ERROR,
+ ERR_REPLICATION_SERVER_CONFIG_NOT_FOUND.get(), e);
+ }
+ if (cfg instanceof ReplicationSynchronizationProviderCfg) {
+ ReplicationSynchronizationProviderCfg scfg =
+ (ReplicationSynchronizationProviderCfg) cfg;
+ try {
+ return scfg.getReplicationServer();
+ } catch (ConfigException e) {
+ throw new DirectoryException(ResultCode.OPERATIONS_ERROR,
+ ERR_REPLICATION_SERVER_CONFIG_NOT_FOUND.get(), e);
+ }
+ }
+ }
+
+ // No replication server found.
+ throw new DirectoryException(ResultCode.OPERATIONS_ERROR,
+ ERR_REPLICATION_SERVER_CONFIG_NOT_FOUND.get());
+ }
+
/**
* Writer class to read/write from/to a bytearray.
*/
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationServer.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationServer.java
index 31088dd..c297ba9 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationServer.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationServer.java
@@ -835,15 +835,12 @@
"dn: ds-cfg-backend-id="+backendId+",cn=Backends,cn=config",
"objectClass: top",
"objectClass: ds-cfg-backend",
- "objectClass: ds-cfg-local-db-backend",
"ds-cfg-base-dn: dc="+backendId,
"ds-cfg-enabled: true",
"ds-cfg-writability-mode: enabled",
"ds-cfg-java-class: " +
"org.opends.server.replication.server.ReplicationBackend",
- "ds-cfg-backend-id: " + backendId,
- "ds-cfg-import-temp-directory: importReplChangesTmp",
- "ds-cfg-db-directory: " + dbDirname);
+ "ds-cfg-backend-id: " + backendId);
LDIFImportConfig ldifImportConfig = new LDIFImportConfig(
new StringReader(ldif));
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/resource/config-changes.ldif b/opendj-sdk/opends/tests/unit-tests-testng/resource/config-changes.ldif
index 2ca81f4..3fe188f 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/resource/config-changes.ldif
+++ b/opendj-sdk/opends/tests/unit-tests-testng/resource/config-changes.ldif
@@ -422,7 +422,7 @@
ds-cfg-index-entry-limit: 1
ds-cfg-subtree-delete-size-limit: 100000
ds-cfg-preload-time-limit: 0 seconds
-ds-cfg-import-temp-directory: importTmp
+ds-cfg-import-temp-directory: import-tmp
ds-cfg-import-buffer-size: 256 megabytes
ds-cfg-import-queue-size: 100
ds-cfg-import-pass-size: 0
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/TestCaseUtils.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/TestCaseUtils.java
index 6f6c32a..0f0f32b 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/TestCaseUtils.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/TestCaseUtils.java
@@ -22,7 +22,7 @@
* CDDL HEADER END
*
*
- * Portions Copyright 2006-2007 Sun Microsystems, Inc.
+ * Portions Copyright 2006-2008 Sun Microsystems, Inc.
*/
package org.opends.server;
@@ -235,9 +235,10 @@
//db_unindexed is the forth backend used by the unindexed search privilege
//test cases
String[] subDirectories = { "bak", "bin", "changelogDb", "classes",
- "config", "db", "db_verify", "ldif", "lib",
- "locks", "logs", "db_rebuild", "db_unindexed",
- "db_index_test", "db_import_test"};
+ "config", "db", "import-tmp", "db_verify",
+ "ldif", "lib", "locks", "logs", "db_rebuild",
+ "db_unindexed", "db_index_test",
+ "db_import_test"};
for (String s : subDirectories)
{
new File(testRoot, s).mkdir();
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/backends/jeb/TestBackendImpl.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/backends/jeb/TestBackendImpl.java
index 74b0b5d..00982fa 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/backends/jeb/TestBackendImpl.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/backends/jeb/TestBackendImpl.java
@@ -22,7 +22,7 @@
* CDDL HEADER END
*
*
- * Portions Copyright 2006-2007 Sun Microsystems, Inc.
+ * Portions Copyright 2006-2008 Sun Microsystems, Inc.
*/
package org.opends.server.backends.jeb;
@@ -1376,7 +1376,7 @@
"ds-cfg-backend-id: indexRoot",
"ds-cfg-db-directory:: " +
Base64.encode(homeDirName.getBytes()),
- "ds-cfg-import-temp-directory: importTmp");
+ "ds-cfg-import-temp-directory: import-tmp");
LocalDBBackendCfg cfg = AdminTestCaseUtils.getConfiguration(
LocalDBBackendCfgDefn.getInstance(), configEntry);
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/FileSystemEntryCacheTestCase.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/FileSystemEntryCacheTestCase.java
index cf80800..9969510 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/FileSystemEntryCacheTestCase.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/extensions/FileSystemEntryCacheTestCase.java
@@ -22,7 +22,7 @@
* CDDL HEADER END
*
*
- * Portions Copyright 2007 Sun Microsystems, Inc.
+ * Portions Copyright 2007-2008 Sun Microsystems, Inc.
*/
package org.opends.server.extensions;
@@ -137,7 +137,6 @@
TestCaseUtils.dsconfig("create-backend", "--backend-name", "cacheTest",
"--type", "local-db", "--set", "db-directory:" + jeDir, "--set",
"base-dn:o=cachetest", "--set",
- "import-temp-directory:importTmp", "--set",
"writability-mode:enabled", "--set", "enabled:true");
// Finalize this cache so it can be reconfigured.
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/ReplicationServerTest.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/ReplicationServerTest.java
index 210d849..98b6a97 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/ReplicationServerTest.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/ReplicationServerTest.java
@@ -22,7 +22,7 @@
* CDDL HEADER END
*
*
- * Portions Copyright 2006-2007 Sun Microsystems, Inc.
+ * Portions Copyright 2006-2008 Sun Microsystems, Inc.
*/
package org.opends.server.replication.server;
@@ -48,6 +48,7 @@
import java.util.UUID;
import org.opends.server.TestCaseUtils;
+import org.opends.server.api.SynchronizationProvider;
import org.opends.server.backends.task.TaskState;
import org.opends.server.core.DirectoryServer;
import org.opends.server.core.ModifyDNOperationBasis;
@@ -60,7 +61,9 @@
import org.opends.server.replication.common.ChangeNumber;
import org.opends.server.replication.common.ChangeNumberGenerator;
import org.opends.server.replication.common.ServerState;
+import org.opends.server.replication.plugin.MultimasterReplication;
import org.opends.server.replication.plugin.ReplicationBroker;
+import org.opends.server.replication.plugin.ReplicationServerListener;
import org.opends.server.replication.protocol.AddMsg;
import org.opends.server.replication.protocol.DeleteMsg;
import org.opends.server.replication.protocol.ModifyDNMsg;
@@ -126,9 +129,30 @@
replicationServerPort = socket.getLocalPort();
socket.close();
- ReplServerFakeConfiguration conf =
- new ReplServerFakeConfiguration(replicationServerPort, null, 0, 1, 0, 0, null);
- replicationServer = new ReplicationServer(conf);;
+ TestCaseUtils.dsconfig(
+ "create-replication-server",
+ "--provider-name", "Multimaster Synchronization",
+ "--set", "replication-port:" + replicationServerPort,
+ "--set", "replication-server-id:1");
+
+ DirectoryServer.getSynchronizationProviders();
+ for (SynchronizationProvider<?> provider : DirectoryServer
+ .getSynchronizationProviders()) {
+ if (provider instanceof MultimasterReplication) {
+ MultimasterReplication mmp = (MultimasterReplication) provider;
+ ReplicationServerListener list = mmp.getReplicationServerListener();
+ if (list != null) {
+ replicationServer = list.getReplicationServer();
+ if (replicationServer != null) {
+ break;
+ }
+ }
+ }
+ }
+
+// ReplServerFakeConfiguration conf =
+// new ReplServerFakeConfiguration(replicationServerPort, null, 0, 1, 0, 0, null);
+// replicationServer = new ReplicationServer(conf);;
}
private void debugInfo(String s)
@@ -449,7 +473,7 @@
*/
private void stopChangelog() throws Exception
{
- replicationServer.remove();
+ shutdown();
configure();
newClient();
newClientWithFirstChanges();
@@ -920,10 +944,10 @@
@AfterClass()
public void shutdown() throws Exception
{
- if (replicationServer != null) {
- replicationServer.remove();
- replicationServer = null;
- }
+ TestCaseUtils.dsconfig(
+ "delete-replication-server",
+ "--provider-name", "Multimaster Synchronization");
+ replicationServer = null;
}
/**
--
Gitblit v1.10.0