From a6aa4d5279c2a7ab9aa87e80488e90cafae69e69 Mon Sep 17 00:00:00 2001 From: "Brian S. O'Neill" Date: Fri, 6 Jun 2008 00:18:14 +0000 Subject: Added listener callback for replicated repository resync. --- .../carbonado/capability/ResyncCapability.java | 55 ++++++++++++++++++++++ 1 file changed, 55 insertions(+) (limited to 'src/main/java/com/amazon/carbonado/capability') 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 @@ -45,9 +45,64 @@ public interface ResyncCapability extends Capability { Object... filterValues) 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 + */ + void resync(Class type, + Listener 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. + * + *

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 { + /** + * 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); + } } -- cgit v1.2.3