}
}
- void sealOnly() {
- parent.onTransactionSealed(this);
- final boolean success = STATE_UPDATER.compareAndSet(this, OPEN, SEALED);
- Verify.verify(success, "Attempted to replay seal on %s", this);
+ /**
+ * Seal this transaction. If this method reports false, the caller needs to deal with propagating the seal operation
+ * towards the successor.
+ *
+ * @return True if seal operation was successful, false if this proxy has a successor.
+ */
+ boolean sealOnly() {
+ return sealState();
}
/**
* @return True if seal operation was successful, false if this proxy has a successor.
*/
boolean sealAndSend(final Optional<Long> enqueuedTicks) {
- parent.onTransactionSealed(this);
+ return sealState();
+ }
+ private boolean sealState() {
+ parent.onTransactionSealed(this);
// Transition internal state to sealed and detect presence of a successor
return STATE_UPDATER.compareAndSet(this, OPEN, SEALED);
}
*/
package org.opendaylight.controller.cluster.databroker.actors.dds;
+import static com.google.common.base.Verify.verify;
+
import com.google.common.util.concurrent.FluentFuture;
import com.google.common.util.concurrent.ListenableFuture;
import com.google.common.util.concurrent.SettableFuture;
// Persistence protocol implies we are sealed, propagate the marker, but hold off doing other actions
// until we know what we are going to do.
if (markSealed()) {
- sealOnly();
+ if (!sealOnly()) {
+ LOG.debug("Proxy {} has a successor, which should receive seal through a separate request", this);
+ }
}
final TransactionRequest<?> tmp;
// Persistence protocol implies we are sealed, propagate the marker, but hold off doing other actions
// until we know what we are going to do.
if (markSealed()) {
- sealOnly();
+ verify(sealOnly(), "Attempted to replay seal on %s", this);
}
final TransactionRequest<?> tmp;