org.opends.server.replication.plugin
Class MultimasterReplication

java.lang.Object
  extended by org.opends.server.api.SynchronizationProvider<ReplicationSynchronizationProviderCfg>
      extended by org.opends.server.replication.plugin.MultimasterReplication
All Implemented Interfaces:
ConfigurationAddListener<ReplicationDomainCfg>, ConfigurationChangeListener<ReplicationSynchronizationProviderCfg>, ConfigurationDeleteListener<ReplicationDomainCfg>, BackupTaskListener, ExportTaskListener, ImportTaskListener, RestoreTaskListener

public class MultimasterReplication
extends SynchronizationProvider<ReplicationSynchronizationProviderCfg>
implements ConfigurationAddListener<ReplicationDomainCfg>, ConfigurationDeleteListener<ReplicationDomainCfg>, ConfigurationChangeListener<ReplicationSynchronizationProviderCfg>, BackupTaskListener, RestoreTaskListener, ImportTaskListener, ExportTaskListener

This class is used to load the Replication code inside the JVM and to trigger initialization of the replication. It also extends the SynchronizationProvider class in order to have some replication code running during the operation process as pre-op, conflictRsolution, and post-op.


Constructor Summary
MultimasterReplication()
           
 
Method Summary
 ConfigChangeResult applyConfigurationAdd(ReplicationDomainCfg configuration)
          Adds a new configuration to this add listener.
 ConfigChangeResult applyConfigurationChange(ReplicationSynchronizationProviderCfg configuration)
          Applies the configuration changes to this change listener.
 ConfigChangeResult applyConfigurationDelete(ReplicationDomainCfg configuration)
          Deletes an existing configuration from this delete listener.
 void completeSynchronizationProvider()
          Performs any necessary final initialization processing for this synchronization provider.
static ReplicationDomain createNewDomain(ReplicationDomainCfg configuration)
          Creates a new domain from its configEntry, do the necessary initialization and starts it so that it is fully operational when this method returns.
static void deleteDomain(DN dn)
          Deletes a domain.
 void doPostOperation(PostOperationAddOperation addOperation)
          Performs any necessary synchronization processing that may be needed after the provided add operation is performed.
 void doPostOperation(PostOperationDeleteOperation deleteOperation)
          Performs any necessary synchronization processing that may be needed after the provided delete operation is performed.
 void doPostOperation(PostOperationModifyDNOperation modifyDNOperation)
          Performs any necessary synchronization processing that may be needed after the provided modify DN operation is performed.
 void doPostOperation(PostOperationModifyOperation modifyOperation)
          Performs any necessary synchronization processing that may be needed after the provided modify operation is performed.
 SynchronizationProviderResult doPreOperation(PreOperationAddOperation addOperation)
          Performs any necessary synchronization processing that may be needed before the provided add operation is performed.
 SynchronizationProviderResult doPreOperation(PreOperationDeleteOperation deleteOperation)
          Performs any necessary synchronization processing that may be needed before the provided delete operation is performed.
 SynchronizationProviderResult doPreOperation(PreOperationModifyDNOperation modifyDNOperation)
          Performs any necessary synchronization processing that may be needed before the provided modify DN operation is performed.
 SynchronizationProviderResult doPreOperation(PreOperationModifyOperation modifyOperation)
          Performs any necessary synchronization processing that may be needed before the provided modify operation is performed.
 void finalizeSynchronizationProvider()
          Performs any necessary finalization for this synchronization provider.
static ReplicationDomain findDomain(DN dn, PluginOperation pluginOp)
          Finds the domain for a given DN.
 ReplicationServerListener getReplicationServerListener()
          Returns the replication server listener associated to that Multimaster Replication.
 SynchronizationProviderResult handleConflictResolution(PreOperationAddOperation addOperation)
          Performs any necessary synchronization processing for the operation that may be needed early on to deal with any potential conflict resolution or updates to historical data.
 SynchronizationProviderResult handleConflictResolution(PreOperationDeleteOperation deleteOperation)
          Performs any necessary synchronization processing for the operation that may be needed early on to deal with any potential conflict resolution or updates to historical data.
 SynchronizationProviderResult handleConflictResolution(PreOperationModifyDNOperation modifyDNOperation)
          Performs any necessary synchronization processing for the operation that may be needed early on to deal with any potential conflict resolution or updates to historical data.
 SynchronizationProviderResult handleConflictResolution(PreOperationModifyOperation modifyOperation)
          Performs any necessary synchronization processing for the operation that may be needed early on to deal with any potential conflict resolution or updates to historical data.
 void initializeSynchronizationProvider(ReplicationSynchronizationProviderCfg configuration)
          Performs any initialization that might be necessary for this synchronization provider.
 boolean isConfigurationAddAcceptable(ReplicationDomainCfg configuration, java.util.List<Message> unacceptableReasons)
          Indicates whether the proposed addition of a new configuration is acceptable to this add listener.
 boolean isConfigurationChangeAcceptable(ReplicationSynchronizationProviderCfg configuration, java.util.List<Message> unacceptableReasons)
          Indicates whether the proposed change to the configuration is acceptable to this change listener.
 boolean isConfigurationDeleteAcceptable(ReplicationDomainCfg configuration, java.util.List<Message> unacceptableReasons)
          Indicates whether the proposed deletion of an existing configuration is acceptable to this delete listener.
 void processBackupBegin(Backend backend, BackupConfig config)
          Performs any processing that might be necessary just before the server begins processing on a backup task.
 void processBackupEnd(Backend backend, BackupConfig config, boolean successful)
          Performs any processing that might be necessary after the server has completed processing on a backup task.
 void processExportBegin(Backend backend, LDIFExportConfig config)
          Performs any processing that might be necessary just before the server begins processing on an LDIF export task.
 void processExportEnd(Backend backend, LDIFExportConfig config, boolean successful)
          Performs any processing that might be necessary after the server has completed processing on an LDIF export task.
 void processImportBegin(Backend backend, LDIFImportConfig config)
          Performs any processing that might be necessary just before the server begins processing on an LDIF import task.
 void processImportEnd(Backend backend, LDIFImportConfig config, boolean successful)
          Performs any processing that might be necessary after the server has completed processing on an LDIF import task.
 void processRestoreBegin(Backend backend, RestoreConfig config)
          Performs any processing that might be necessary just before the server begins processing on a restore task.
 void processRestoreEnd(Backend backend, RestoreConfig config, boolean successful)
          Performs any processing that might be necessary after the server has completed processing on a restore task.
 void processSchemaChange(java.util.List<Modification> modifications)
          This method is called whenever the server detects a modification of the schema done by directly modifying the backing files of the schema backend.
 
Methods inherited from class org.opends.server.api.SynchronizationProvider
isConfigurationAcceptable
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

MultimasterReplication

public MultimasterReplication()
Method Detail

findDomain

public static ReplicationDomain findDomain(DN dn,
                                           PluginOperation pluginOp)
Finds the domain for a given DN.

Parameters:
dn - The DN for which the domain must be returned.
pluginOp - An optional operation for which the check is done. Can be null is the request has no associated operation.
Returns:
The domain for this DN.

createNewDomain

public static ReplicationDomain createNewDomain(ReplicationDomainCfg configuration)
                                         throws ConfigException
Creates a new domain from its configEntry, do the necessary initialization and starts it so that it is fully operational when this method returns.

Parameters:
configuration - The entry whith the configuration of this domain.
Returns:
The domain created.
Throws:
ConfigException - When the configuration is not valid.

deleteDomain

public static void deleteDomain(DN dn)
Deletes a domain.

Parameters:
dn - : the base DN of the domain to delete.

initializeSynchronizationProvider

public void initializeSynchronizationProvider(ReplicationSynchronizationProviderCfg configuration)
                                       throws ConfigException
Performs any initialization that might be necessary for this synchronization provider.

Specified by:
initializeSynchronizationProvider in class SynchronizationProvider<ReplicationSynchronizationProviderCfg>
Parameters:
configuration - The configuration information for this synchronization provider.
Throws:
ConfigException - If the provided entry does not contain a valid configuration for this synchronization provider.

isConfigurationAddAcceptable

public boolean isConfigurationAddAcceptable(ReplicationDomainCfg configuration,
                                            java.util.List<Message> unacceptableReasons)
Indicates whether the proposed addition of a new configuration is acceptable to this add listener.

Specified by:
isConfigurationAddAcceptable in interface ConfigurationAddListener<ReplicationDomainCfg>
Parameters:
configuration - The configuration that will be added.
unacceptableReasons - A list that can be used to hold messages about why the provided configuration is not acceptable.
Returns:
Returns true if the proposed addition is acceptable, or false if it is not.

applyConfigurationAdd

public ConfigChangeResult applyConfigurationAdd(ReplicationDomainCfg configuration)
Adds a new configuration to this add listener.

Specified by:
applyConfigurationAdd in interface ConfigurationAddListener<ReplicationDomainCfg>
Parameters:
configuration - The configuration that will be added.
Returns:
Returns information about the result of adding the configuration.

doPostOperation

public void doPostOperation(PostOperationAddOperation addOperation)
Performs any necessary synchronization processing that may be needed after the provided add operation is performed. This method will be invoked immediately after processing the add operation in the backend and releasing the lock on the target entry.

Specified by:
doPostOperation in class SynchronizationProvider<ReplicationSynchronizationProviderCfg>
Parameters:
addOperation - The add operation to be processed.

doPostOperation

public void doPostOperation(PostOperationDeleteOperation deleteOperation)
Performs any necessary synchronization processing that may be needed after the provided delete operation is performed. This method will be invoked immediately after processing the delete operation in the backend and releasing the lock on the target entry.

Specified by:
doPostOperation in class SynchronizationProvider<ReplicationSynchronizationProviderCfg>
Parameters:
deleteOperation - The delete operation to be processed.

doPostOperation

public void doPostOperation(PostOperationModifyDNOperation modifyDNOperation)
Performs any necessary synchronization processing that may be needed after the provided modify DN operation is performed. This method will be invoked immediately after processing the modify DN operation in the backend and releasing the lock on the target entry.

Specified by:
doPostOperation in class SynchronizationProvider<ReplicationSynchronizationProviderCfg>
Parameters:
modifyDNOperation - The modify DN operation to be processed.

doPostOperation

public void doPostOperation(PostOperationModifyOperation modifyOperation)
Performs any necessary synchronization processing that may be needed after the provided modify operation is performed. This method will be invoked immediately after processing the modify operation in the backend and releasing the lock on the target entry.

Specified by:
doPostOperation in class SynchronizationProvider<ReplicationSynchronizationProviderCfg>
Parameters:
modifyOperation - The modify operation to be processed.

handleConflictResolution

public SynchronizationProviderResult handleConflictResolution(PreOperationModifyOperation modifyOperation)
Performs any necessary synchronization processing for the operation that may be needed early on to deal with any potential conflict resolution or updates to historical data. This method will be invoked immediately after a lock is acquired on the target entry.

Overrides:
handleConflictResolution in class SynchronizationProvider<ReplicationSynchronizationProviderCfg>
Parameters:
modifyOperation - The modify operation to be processed.
Returns:
Information about the result of the synchronization provider processing. Note that if the provider indicates that processing should end for the operation, it must set the result code for the operation and should also set the response message.

handleConflictResolution

public SynchronizationProviderResult handleConflictResolution(PreOperationAddOperation addOperation)
                                                       throws DirectoryException
Performs any necessary synchronization processing for the operation that may be needed early on to deal with any potential conflict resolution or updates to historical data. This method will be invoked immediately after a lock is acquired on the target entry.

Overrides:
handleConflictResolution in class SynchronizationProvider<ReplicationSynchronizationProviderCfg>
Parameters:
addOperation - The add operation to be processed.
Returns:
Information about the result of the synchronization provider processing. Note that if the provider indicates that processing should end for the operation, it must set the result code for the operation and should also set the response message.
Throws:
DirectoryException - If a problem occurs during synchronization processing.

handleConflictResolution

public SynchronizationProviderResult handleConflictResolution(PreOperationDeleteOperation deleteOperation)
                                                       throws DirectoryException
Performs any necessary synchronization processing for the operation that may be needed early on to deal with any potential conflict resolution or updates to historical data. This method will be invoked immediately after a lock is acquired on the target entry.

Overrides:
handleConflictResolution in class SynchronizationProvider<ReplicationSynchronizationProviderCfg>
Parameters:
deleteOperation - The delete operation to be processed.
Returns:
Information about the result of the synchronization provider processing. Note that if the provider indicates that processing should end for the operation, it must set the result code for the operation and should also set the response message.
Throws:
DirectoryException - If a problem occurs during synchronization processing.

handleConflictResolution

public SynchronizationProviderResult handleConflictResolution(PreOperationModifyDNOperation modifyDNOperation)
                                                       throws DirectoryException
Performs any necessary synchronization processing for the operation that may be needed early on to deal with any potential conflict resolution or updates to historical data. This method will be invoked immediately after a lock is acquired on the target entry.

Overrides:
handleConflictResolution in class SynchronizationProvider<ReplicationSynchronizationProviderCfg>
Parameters:
modifyDNOperation - The modify DN operation to be processed.
Returns:
Information about the result of the synchronization provider processing. Note that if the provider indicates that processing should end for the operation, it must set the result code for the operation and should also set the response message.
Throws:
DirectoryException - If a problem occurs during synchronization processing.

doPreOperation

public SynchronizationProviderResult doPreOperation(PreOperationModifyOperation modifyOperation)
Performs any necessary synchronization processing that may be needed before the provided modify operation is performed. This method will be invoked immediately before processing the modify operation in the backend.

Specified by:
doPreOperation in class SynchronizationProvider<ReplicationSynchronizationProviderCfg>
Parameters:
modifyOperation - The modify operation to be processed.
Returns:
Information about the result of the synchronization provider processing. Note that if the provider indicates that processing should end for the operation, it must set the result code for the operation and should also set the response message.

doPreOperation

public SynchronizationProviderResult doPreOperation(PreOperationDeleteOperation deleteOperation)
                                             throws DirectoryException
Performs any necessary synchronization processing that may be needed before the provided delete operation is performed. This method will be invoked immediately before processing the delete operation in the backend.

Specified by:
doPreOperation in class SynchronizationProvider<ReplicationSynchronizationProviderCfg>
Parameters:
deleteOperation - The delete operation to be processed.
Returns:
Information about the result of the synchronization provider processing. Note that if the provider indicates that processing should end for the operation, it must set the result code for the operation and should also set the response message.
Throws:
DirectoryException - If a problem occurs during synchronization processing.

doPreOperation

public SynchronizationProviderResult doPreOperation(PreOperationModifyDNOperation modifyDNOperation)
                                             throws DirectoryException
Performs any necessary synchronization processing that may be needed before the provided modify DN operation is performed. This method will be invoked immediately before processing the modify DN operation in the backend.

Specified by:
doPreOperation in class SynchronizationProvider<ReplicationSynchronizationProviderCfg>
Parameters:
modifyDNOperation - The modify DN operation to be processed.
Returns:
Information about the result of the synchronization provider processing. Note that if the provider indicates that processing should end for the operation, it must set the result code for the operation and should also set the response message.
Throws:
DirectoryException - If a problem occurs during synchronization processing.

doPreOperation

public SynchronizationProviderResult doPreOperation(PreOperationAddOperation addOperation)
Performs any necessary synchronization processing that may be needed before the provided add operation is performed. This method will be invoked immediately before processing the add operation in the backend.

Specified by:
doPreOperation in class SynchronizationProvider<ReplicationSynchronizationProviderCfg>
Parameters:
addOperation - The add operation to be processed.
Returns:
Information about the result of the synchronization provider processing. Note that if the provider indicates that processing should end for the operation, it must set the result code for the operation and should also set the response message.

finalizeSynchronizationProvider

public void finalizeSynchronizationProvider()
Performs any necessary finalization for this synchronization provider. This will be called just after the provider has been deregistered with the server but before it has been unloaded.

Overrides:
finalizeSynchronizationProvider in class SynchronizationProvider<ReplicationSynchronizationProviderCfg>

processSchemaChange

public void processSchemaChange(java.util.List<Modification> modifications)
This method is called whenever the server detects a modification of the schema done by directly modifying the backing files of the schema backend. Call the schema Domain if it exists.

Specified by:
processSchemaChange in class SynchronizationProvider<ReplicationSynchronizationProviderCfg>
Parameters:
modifications - The list of modifications that was applied to the schema.

processBackupBegin

public void processBackupBegin(Backend backend,
                               BackupConfig config)
Performs any processing that might be necessary just before the server begins processing on a backup task. This may include flushing any outstanding writes to disk so they are included in the backup and/or pausing interaction with the provided backend while the backup is in progress.

Specified by:
processBackupBegin in interface BackupTaskListener
Parameters:
backend - The backend to be archived.
config - Configuration information about the backup to be performed.

processBackupEnd

public void processBackupEnd(Backend backend,
                             BackupConfig config,
                             boolean successful)
Performs any processing that might be necessary after the server has completed processing on a backup task. Note that this will always be called when backup processing completes, regardless of whether it was successful.

Specified by:
processBackupEnd in interface BackupTaskListener
Parameters:
backend - The backend that was archived.
config - Configuration information about the backup that was performed.
successful - Indicates whether the backup operation completed successfully.

processRestoreBegin

public void processRestoreBegin(Backend backend,
                                RestoreConfig config)
Performs any processing that might be necessary just before the server begins processing on a restore task. This should include pausing interaction with the provided backend while the restore is in progress.

Specified by:
processRestoreBegin in interface RestoreTaskListener
Parameters:
backend - The backend to be restored.
config - Configuration information about the restore to be performed.

processRestoreEnd

public void processRestoreEnd(Backend backend,
                              RestoreConfig config,
                              boolean successful)
Performs any processing that might be necessary after the server has completed processing on a restore task. Note that this will always be called when restore processing completes, regardless of whether it was successful.

Specified by:
processRestoreEnd in interface RestoreTaskListener
Parameters:
backend - The backend that was restored.
config - Configuration information about the restore that was performed.
successful - Indicates whether the restore operation completed successfully.

processImportBegin

public void processImportBegin(Backend backend,
                               LDIFImportConfig config)
Performs any processing that might be necessary just before the server begins processing on an LDIF import task. This should include pausing interaction with the provided backend while the import is in progress.

Specified by:
processImportBegin in interface ImportTaskListener
Parameters:
backend - The backend to be imported.
config - Configuration information about the LDIF import to be performed.

processImportEnd

public void processImportEnd(Backend backend,
                             LDIFImportConfig config,
                             boolean successful)
Performs any processing that might be necessary after the server has completed processing on an LDIF import task. Note that this will always be called when import processing completes, regardless of whether it was successful.

Specified by:
processImportEnd in interface ImportTaskListener
Parameters:
backend - The backend that was imported.
config - Configuration information about the LDIF import that was performed.
successful - Indicates whether the import operation completed successfully.

processExportBegin

public void processExportBegin(Backend backend,
                               LDIFExportConfig config)
Performs any processing that might be necessary just before the server begins processing on an LDIF export task. This may include flushing any outstanding writes to disk so they are included in the export and/or pausing interaction with the provided backend while the export is in progress.

Specified by:
processExportBegin in interface ExportTaskListener
Parameters:
backend - The backend to be exported.
config - Configuration information about the LDIF export to be performed.

processExportEnd

public void processExportEnd(Backend backend,
                             LDIFExportConfig config,
                             boolean successful)
Performs any processing that might be necessary after the server has completed processing on an LDIF export task. Note that this will always be called when export processing completes, regardless of whether it was successful.

Specified by:
processExportEnd in interface ExportTaskListener
Parameters:
backend - The backend that was exported.
config - Configuration information about the LDIF export that was performed.
successful - Indicates whether the export operation completed successfully.

applyConfigurationDelete

public ConfigChangeResult applyConfigurationDelete(ReplicationDomainCfg configuration)
Deletes an existing configuration from this delete listener.

Specified by:
applyConfigurationDelete in interface ConfigurationDeleteListener<ReplicationDomainCfg>
Parameters:
configuration - The existing configuration that will be deleted.
Returns:
Returns information about the result of deleting the configuration.

isConfigurationDeleteAcceptable

public boolean isConfigurationDeleteAcceptable(ReplicationDomainCfg configuration,
                                               java.util.List<Message> unacceptableReasons)
Indicates whether the proposed deletion of an existing configuration is acceptable to this delete listener.

Specified by:
isConfigurationDeleteAcceptable in interface ConfigurationDeleteListener<ReplicationDomainCfg>
Parameters:
configuration - The configuration that will be deleted.
unacceptableReasons - A list that can be used to hold messages about why the provided configuration is not acceptable.
Returns:
Returns true if the proposed deletion is acceptable, or false if it is not.

getReplicationServerListener

public ReplicationServerListener getReplicationServerListener()
Returns the replication server listener associated to that Multimaster Replication.

Returns:
the listener.

isConfigurationChangeAcceptable

public boolean isConfigurationChangeAcceptable(ReplicationSynchronizationProviderCfg configuration,
                                               java.util.List<Message> unacceptableReasons)
Indicates whether the proposed change to the configuration is acceptable to this change listener.

Specified by:
isConfigurationChangeAcceptable in interface ConfigurationChangeListener<ReplicationSynchronizationProviderCfg>
Parameters:
configuration - The new configuration containing the changes.
unacceptableReasons - A list that can be used to hold messages about why the provided configuration is not acceptable.
Returns:
Returns true if the proposed change is acceptable, or false if it is not.

applyConfigurationChange

public ConfigChangeResult applyConfigurationChange(ReplicationSynchronizationProviderCfg configuration)
Applies the configuration changes to this change listener.

Specified by:
applyConfigurationChange in interface ConfigurationChangeListener<ReplicationSynchronizationProviderCfg>
Parameters:
configuration - The new configuration containing the changes.
Returns:
Returns information about the result of changing the configuration.

completeSynchronizationProvider

public void completeSynchronizationProvider()
Performs any necessary final initialization processing for this synchronization provider. This will be called just after the provider has been registered with the server but before it has been unloaded.

Overrides:
completeSynchronizationProvider in class SynchronizationProvider<ReplicationSynchronizationProviderCfg>