Class MultimasterReplication

    • Constructor Detail

      • MultimasterReplication

        public MultimasterReplication()
    • Method Detail

      • findDomain

        public static LDAPReplicationDomain findDomain​(Dn dn,
                                                       PluginOperation pluginOp,
                                                       ServerContext serverContext)
        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.
        serverContext - The server context.
        Returns:
        The domain for this DN.
      • findDomain

        public static LDAPReplicationDomain findDomain​(Dn dn,
                                                       ServerContext serverContext)
        Finds the domain for a given DN.
        Parameters:
        dn - The DN for which the domain must be returned.
        serverContext - The server context.
        Returns:
        The domain for this DN.
      • createNewDomainIfEnabled

        public LDAPReplicationDomain createNewDomainIfEnabled​(ServerContext serverContext,
                                                              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.
        Parameters:
        serverContext - The server context
        configuration - The entry with the configuration of this domain.
        Returns:
        The domain created or null if it is disabled or a problem occurred.
      • deleteDomain

        public static void deleteDomain​(Dn dn)
        Deletes a domain.
        Parameters:
        dn - the base DN of the domain to delete.
      • isConfigurationAddAcceptable

        public boolean isConfigurationAddAcceptable​(ReplicationDomainCfg configuration,
                                                    List<LocalizableMessage> unacceptableReasons)
        Description copied from interface: ConfigurationAddListener
        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.
      • handleConflictResolution

        public SynchronizationProviderResult handleConflictResolution​(PreOperationModifyOperation modifyOperation)
        Description copied from class: SynchronizationProvider
        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)
        Description copied from class: SynchronizationProvider
        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.
      • handleConflictResolution

        public SynchronizationProviderResult handleConflictResolution​(PreOperationDeleteOperation deleteOperation)
        Description copied from class: SynchronizationProvider
        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.
      • handleConflictResolution

        public SynchronizationProviderResult handleConflictResolution​(PreOperationModifyDNOperation modifyDNOperation)
        Description copied from class: SynchronizationProvider
        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.
      • doPreOperation

        public SynchronizationProviderResult doPreOperation​(PreOperationModifyOperation modifyOperation)
        Description copied from class: SynchronizationProvider
        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)
        Description copied from class: SynchronizationProvider
        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.
      • doPreOperation

        public SynchronizationProviderResult doPreOperation​(PreOperationModifyDNOperation modifyDnOp)
        Description copied from class: SynchronizationProvider
        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:
        modifyDnOp - 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.
      • doPreOperation

        public SynchronizationProviderResult doPreOperation​(PreOperationAddOperation addOperation)
        Description copied from class: SynchronizationProvider
        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.
      • synchronizeOfflineChanges

        public void synchronizeOfflineChanges​(Collection<ChangeRecord> changes)
        Description copied from class: SynchronizationProvider
        Synchronizes changes that have occurred to server data while the server was offline. This may happen when the server detects that the schema has been updated while the server was offline or if new symmetric keys have been added, e.g when performing an offline encrypted backup or import.

        At the time this method is called, the changes will have already been applied to the local server. As such, this method must make a best effort attempt to process the associated changes, and is not allowed to throw any exceptions.

        Specified by:
        synchronizeOfflineChanges in class SynchronizationProvider<ReplicationSynchronizationProviderCfg>
        Parameters:
        changes - The set of changes that have been made to the server while it was offline.
      • processBackupBegin

        public void processBackupBegin​(LocalBackend<?> backend)
        Description copied from interface: BackupTaskListener
        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.
      • processBackupEnd

        public void processBackupEnd​(LocalBackend<?> backend)
        Description copied from interface: BackupTaskListener
        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.
      • processRestoreBegin

        public void processRestoreBegin​(LocalBackend<?> backend)
        Description copied from interface: RestoreTaskListener
        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.
      • processRestoreEnd

        public void processRestoreEnd​(LocalBackend<?> backend)
        Description copied from interface: RestoreTaskListener
        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.
      • processImportBegin

        public void processImportBegin​(LocalBackend<?> backend,
                                       LDIFImportConfig config)
        Description copied from interface: ImportTaskListener
        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​(LocalBackend<?> backend,
                                     LDIFImportConfig config,
                                     boolean successful)
        Description copied from interface: ImportTaskListener
        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​(LocalBackend<?> backend,
                                       LDIFExportConfig config)
        Description copied from interface: ExportTaskListener
        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​(LocalBackend<?> backend,
                                     LDIFExportConfig config,
                                     boolean successful)
        Description copied from interface: ExportTaskListener
        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.
      • getDomainDns

        public static Collection<Dn> getDomainDns()
        Returns the DNs of the replication domains.
        Returns:
        the DNs of the replication domains.
      • getConnectionTimeoutMS

        public static int getConnectionTimeoutMS()
        Returns the connection timeout in milli-seconds.
        Returns:
        The connection timeout in milli-seconds.
      • getUnreachableReplicationServers

        public static MultimasterReplication.UnreachableReplicationServers getUnreachableReplicationServers​(int numberOfRSes)
        Returns temporarily unreachable Replication Servers.
        Parameters:
        numberOfRSes - the number of replication servers currently active
        Returns:
        temporarily unreachable Replication Servers
      • resetUnreachableReplicationServers

        public static void resetUnreachableReplicationServers()
        Resets the state of the unreachable replication servers to empty.
      • notifyReplicaOfflineMsgHasBeenSentByDS

        public void notifyReplicaOfflineMsgHasBeenSentByDS​(Dn baseDn)
        Description copied from interface: ShutdownSynchronizer
        Notifies an offline message has been sent by the DS for the provided domain.
        Specified by:
        notifyReplicaOfflineMsgHasBeenSentByDS in interface ShutdownSynchronizer
        Parameters:
        baseDn - the domain for which the offline message has been sent.
      • notifyReplicaOfflineMsgHasBeenForwardedToRS

        public void notifyReplicaOfflineMsgHasBeenForwardedToRS​(Dn baseDn)
        Description copied from interface: ShutdownSynchronizer
        Notifies the offline message for the provided domain has been forwarded to a RS.
        Specified by:
        notifyReplicaOfflineMsgHasBeenForwardedToRS in interface ShutdownSynchronizer
        Parameters:
        baseDn - the domain for which the offline message has been forwarded.
      • waitForReplicaOfflineMessageToBeForwardedToRS

        public void waitForReplicaOfflineMessageToBeForwardedToRS​(Dn baseDn)
        Description copied from interface: ShutdownSynchronizer
        Waits until a Replication Server can proceed with shutdown.

        The shutdown can be performed only when the offline message have been forwarded to all remote replications servers, or if the timeout has been reached.

        Specified by:
        waitForReplicaOfflineMessageToBeForwardedToRS in interface ShutdownSynchronizer
        Parameters:
        baseDn - the domain for which the offline message should be forwarded.
      • clearReplicaOfflineMsgNotifications

        public void clearReplicaOfflineMsgNotifications​(Dn baseDn)
        Description copied from interface: ShutdownSynchronizer
        Clear the notifications for the provided domain. In other words, reset the counter of offline messages to forward to remote replication servers to zero.

        If the synchronization has failed or must be aborted for any reason, this method allows to reset the synchronizer to a clean state. For example, if a ReplicaOfflineMsg is ignored due to a DS in a bad data status, the shutdown for the peer DS should not wait for the forwarding of the message to other replication servers.

        Specified by:
        clearReplicaOfflineMsgNotifications in interface ShutdownSynchronizer
        Parameters:
        baseDn - the domain for which the notifications must be cleared