Track skipped transactions
[controller.git] / opendaylight / md-sal / sal-distributed-datastore / src / main / java / org / opendaylight / controller / cluster / datastore / ShardDataTreeMetadata.java
index 47d07c0892f4e73f5c03dd6a8bb617862aaedd8f..76719f94f839f13f127dc3ed180fa6c4fffdf733 100644 (file)
@@ -8,30 +8,62 @@
 package org.opendaylight.controller.cluster.datastore;
 
 import com.google.common.base.Verify;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.controller.cluster.access.concepts.LocalHistoryIdentifier;
 import org.opendaylight.controller.cluster.access.concepts.TransactionIdentifier;
 import org.opendaylight.controller.cluster.datastore.persisted.ShardDataTreeSnapshotMetadata;
+import org.opendaylight.controller.cluster.datastore.utils.ImmutableUnsignedLongSet;
 
 abstract class ShardDataTreeMetadata<T extends ShardDataTreeSnapshotMetadata<T>> {
-    final void applySnapshot(@Nonnull final ShardDataTreeSnapshotMetadata<?> snapshot) {
+    /**
+     * Apply a recovered metadata snapshot.
+     *
+     * @param snapshot Metadata snapshot
+     */
+    final void applySnapshot(final @NonNull ShardDataTreeSnapshotMetadata<?> snapshot) {
         Verify.verify(getSupportedType().isInstance(snapshot), "Snapshot %s misrouted to handler of %s", snapshot,
             getSupportedType());
         doApplySnapshot(getSupportedType().cast(snapshot));
     }
 
+    /**
+     * Reset metadata to empty state.
+     */
     abstract void reset();
 
-    abstract void doApplySnapshot(@Nonnull T snapshot);
+    /**
+     * Apply a recovered metadata snapshot. This is not a public entrypoint, just an interface between the base class
+     * and its subclasses.
+     *
+     * @param snapshot Metadata snapshot
+     */
+    abstract void doApplySnapshot(@NonNull T snapshot);
 
-    abstract @Nonnull Class<T> getSupportedType();
+    /**
+     * Return the type of metadata snapshot this object supports.
+     *
+     * @return Metadata type
+     */
+    abstract @NonNull Class<T> getSupportedType();
 
+    /**
+     * Take a snapshot of current metadata state.
+     *
+     * @return Metadata snapshot, or null if the metadata is empty.
+     */
     abstract @Nullable T toSnapshot();
 
     // Lifecycle events
+
+    abstract void onTransactionAborted(TransactionIdentifier txId);
+
     abstract void onTransactionCommitted(TransactionIdentifier txId);
 
+    abstract void onTransactionPurged(TransactionIdentifier txId);
+
+    abstract void onTransactionsSkipped(LocalHistoryIdentifier historyId, ImmutableUnsignedLongSet txIds);
+
     abstract void onHistoryCreated(LocalHistoryIdentifier historyId);
 
     abstract void onHistoryClosed(LocalHistoryIdentifier historyId);