From 341e3975fefdf5e2fb9a62cdf762af7738657ee6 Mon Sep 17 00:00:00 2001 From: "Brian S. O'Neill" Date: Wed, 28 Nov 2012 00:50:54 +0000 Subject: ReplicatedRepository resync no longer creates a for-update transaction on the master. Pass transaction to trigger, allowing it to change modes. --- .../carbonado/repo/replicated/ReplicatedStorage.java | 4 ++-- .../carbonado/repo/replicated/ReplicationTrigger.java | 19 +++++++++++++------ 2 files changed, 15 insertions(+), 8 deletions(-) (limited to 'src/main/java/com/amazon/carbonado/repo/replicated') diff --git a/src/main/java/com/amazon/carbonado/repo/replicated/ReplicatedStorage.java b/src/main/java/com/amazon/carbonado/repo/replicated/ReplicatedStorage.java index cd65f46..f99276d 100644 --- a/src/main/java/com/amazon/carbonado/repo/replicated/ReplicatedStorage.java +++ b/src/main/java/com/amazon/carbonado/repo/replicated/ReplicatedStorage.java @@ -74,9 +74,9 @@ class ReplicatedStorage implements Storage { } /** - * For testing only. + * Exposed for testing only. */ - ReplicatedStorage(Repository aRepository, + ReplicatedStorage(ReplicatedRepository aRepository, Storage replicaStorage, Storage masterStorage) { diff --git a/src/main/java/com/amazon/carbonado/repo/replicated/ReplicationTrigger.java b/src/main/java/com/amazon/carbonado/repo/replicated/ReplicationTrigger.java index c646f8c..ce0ce53 100644 --- a/src/main/java/com/amazon/carbonado/repo/replicated/ReplicationTrigger.java +++ b/src/main/java/com/amazon/carbonado/repo/replicated/ReplicationTrigger.java @@ -49,13 +49,13 @@ import com.amazon.carbonado.spi.TriggerManager; * @author Brian S O'Neill */ class ReplicationTrigger extends Trigger { - private final Repository mRepository; + private final ReplicatedRepository mRepository; private final Storage mReplicaStorage; private final Storage mMasterStorage; private final TriggerManager mTriggerManager; - ReplicationTrigger(Repository repository, + ReplicationTrigger(ReplicatedRepository repository, Storage replicaStorage, Storage masterStorage) { @@ -231,9 +231,11 @@ class ReplicationTrigger extends Trigger { setReplicationDisabled(); try { - Transaction txn = mRepository.enterTransaction(); + Transaction masterTxn = mRepository.getMasterRepository().enterTransaction(); + Transaction replicaTxn = mRepository.getReplicaRepository().enterTransaction(); + try { - txn.setForUpdate(true); + replicaTxn.setForUpdate(true); if (reload) { if (masterEntry == null) { @@ -320,13 +322,18 @@ class ReplicationTrigger extends Trigger { } } - txn.commit(); + replicaTxn.commit(); } catch (Throwable e) { resyncFailed(listener, replicaEntry, masterEntry, newReplicaEntry, state); ThrowUnchecked.fire(e); } } finally { - txn.exit(); + try { + masterTxn.exit(); + } finally { + // Do second, favoring any exception thrown from it. + replicaTxn.exit(); + } } } finally { setReplicationEnabled(); -- cgit v1.2.3