diff options
Diffstat (limited to 'src/main/java/com/amazon/carbonado/capability')
-rw-r--r-- | src/main/java/com/amazon/carbonado/capability/ResyncCapability.java | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/src/main/java/com/amazon/carbonado/capability/ResyncCapability.java b/src/main/java/com/amazon/carbonado/capability/ResyncCapability.java index 502fc5c..337afb0 100644 --- a/src/main/java/com/amazon/carbonado/capability/ResyncCapability.java +++ b/src/main/java/com/amazon/carbonado/capability/ResyncCapability.java @@ -46,8 +46,63 @@ public interface ResyncCapability extends Capability { throws RepositoryException;
/**
+ * Re-synchronizes replicated storables against the master repository.
+ *
+ * @param type type of storable to re-sync
+ * @param listener optional listener which gets notified as storables are re-sync'd
+ * @param desiredSpeed throttling parameter - 1.0 = full speed, 0.5 = half
+ * speed, 0.1 = one-tenth speed, etc
+ * @param filter optional query filter to limit which objects get re-sync'ed
+ * @param filterValues filter values for optional filter
+ * @since 1.2
+ */
+ <S extends Storable> void resync(Class<S> type,
+ Listener<? super S> listener,
+ double desiredSpeed,
+ String filter,
+ Object... filterValues)
+ throws RepositoryException;
+
+ /**
* Returns the immediate master Repository, for manual comparison. Direct
* updates to the master will likely create inconsistencies.
*/
Repository getMasterRepository();
+
+ /**
+ * Defines callbacks which are invoked as storables get re-sync'd. The
+ * callback is invoked in the scope of the resync transaction. If any
+ * exception is thrown, the immediate changes are rolled back and the
+ * entire repository resync operation is aborted.
+ *
+ * <p>The listener implementation should return quickly from the callback
+ * methods, to avoid lingering transactions. If the listener is used to
+ * invoke special repair operations, they should be placed into a task
+ * queue. A separate thread can then perform the repairs outside the resync
+ * transaction.
+ */
+ public static interface Listener<S> {
+ /**
+ * Called when a storable was inserted as part of a resync.
+ *
+ * @param newStorable storable which was inserted, never null
+ */
+ void inserted(S newStorable);
+
+ /**
+ * Called when a storable was updated as part of a resync. Both old and
+ * new storables have a matching primary key.
+ *
+ * @param oldStorable storable which was deleted, never null
+ * @param newStorable storable which was inserted, never null
+ */
+ void updated(S oldStorable, S newStorable);
+
+ /**
+ * Called when a storable was deleted as part of a resync.
+ *
+ * @param oldStorable storable which was deleted, never null
+ */
+ void deleted(S oldStorable);
+ }
}
|