/*
|
* The contents of this file are subject to the terms of the Common Development and
|
* Distribution License (the License). You may not use this file except in compliance with the
|
* License.
|
*
|
* You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the
|
* specific language governing permission and limitations under the License.
|
*
|
* When distributing Covered Software, include this CDDL Header Notice in each file and include
|
* the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL
|
* Header, with the fields enclosed by brackets [] replaced by your own identifying
|
* information: "Portions Copyright [year] [name of copyright owner]".
|
*
|
* Copyright 2006-2008 Sun Microsystems, Inc.
|
* Portions Copyright 2015 ForgeRock AS.
|
* Portions Copyright 2026 3A Systems, LLC.
|
*/
|
package org.opends.server.replication.plugin;
|
|
import org.opends.server.replication.protocol.LDAPUpdateMsg;
|
|
/**
|
* A delivery in the shared replay queue, associating an update with its domain.
|
* Cancellation belongs to this delivery, so an enqueue or claim failure can release
|
* it without acquiring the pending-changes lock or cancelling a newer retry.
|
*/
|
public class UpdateToReplay
|
{
|
private final LDAPUpdateMsg updateMessage;
|
private final LDAPReplicationDomain replicationDomain;
|
private volatile boolean cancelled;
|
|
/**
|
* Construct the object associating the update message with the replication
|
* domain that must be used to replay it (the on it comes from).
|
* @param updateMessage The update message
|
* @param replicationDomain The replication domain to use for replaying the
|
* change from the update message
|
*/
|
public UpdateToReplay(LDAPUpdateMsg updateMessage,
|
LDAPReplicationDomain replicationDomain)
|
{
|
this.updateMessage = updateMessage;
|
this.replicationDomain = replicationDomain;
|
}
|
|
/**
|
* Releases a failed hand-off without a lock or allocation, even on an OOME road.
|
* A stale cancellation affects only this delivery, never the retry which replaced it.
|
*/
|
void cancel()
|
{
|
cancel(true);
|
}
|
|
/** Cancels this delivery, optionally requesting another session. */
|
void cancel(boolean requestRestart)
|
{
|
cancelled = true;
|
if (requestRestart && replicationDomain != null)
|
{
|
replicationDomain.requestSessionRestart();
|
}
|
}
|
|
boolean isCancelled()
|
{
|
return cancelled;
|
}
|
|
/**
|
* Getter for update message.
|
* @return The update message
|
*/
|
public LDAPUpdateMsg getUpdateMessage()
|
{
|
return updateMessage;
|
}
|
|
/**
|
* Getter for replication domain.
|
* @return The replication domain
|
*/
|
public LDAPReplicationDomain getReplicationDomain()
|
{
|
return replicationDomain;
|
}
|
}
|