From b6644c452624e2de72d7ddf37b1603de887a26a0 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.
---
opends/src/server/org/opends/server/replication/server/ReplicationBackend.java | 75 +++++++++++++++++++++++++++----------
1 files changed, 54 insertions(+), 21 deletions(-)
diff --git a/opends/src/server/org/opends/server/replication/server/ReplicationBackend.java b/opends/src/server/org/opends/server/replication/server/ReplicationBackend.java
index bace04f..49cfb23 100644
--- a/opends/src/server/org/opends/server/replication/server/ReplicationBackend.java
+++ b/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.
*/
--
Gitblit v1.10.0