From b04929437cf6cbfd9c2a4a64cb453ce072084a4e Mon Sep 17 00:00:00 2001 From: "Brian S. O'Neill" <bronee@gmail.com> Date: Fri, 27 Mar 2009 00:20:53 +0000 Subject: Make sure FetchException propagates from generated index Storable correctly. --- .../carbonado/repo/indexed/DependentStorableFetcher.java | 2 +- .../com/amazon/carbonado/repo/indexed/IndexEntryAccessor.java | 7 ++++--- .../java/com/amazon/carbonado/repo/indexed/ManagedIndex.java | 10 ++++++---- 3 files changed, 11 insertions(+), 8 deletions(-) (limited to 'src/main/java/com/amazon/carbonado/repo/indexed') diff --git a/src/main/java/com/amazon/carbonado/repo/indexed/DependentStorableFetcher.java b/src/main/java/com/amazon/carbonado/repo/indexed/DependentStorableFetcher.java index d9e9f32..5141788 100644 --- a/src/main/java/com/amazon/carbonado/repo/indexed/DependentStorableFetcher.java +++ b/src/main/java/com/amazon/carbonado/repo/indexed/DependentStorableFetcher.java @@ -132,7 +132,7 @@ class DependentStorableFetcher<S extends Storable, D extends Storable> { /** * @return amount added to list */ - public int createIndexEntries(D master, List<Storable> indexEntries) { + public int createIndexEntries(D master, List<Storable> indexEntries) throws FetchException { IndexEntryAccessor[] accessors = mIndexEntryAccessors; int length = accessors.length; for (int i=0; i<length; i++) { diff --git a/src/main/java/com/amazon/carbonado/repo/indexed/IndexEntryAccessor.java b/src/main/java/com/amazon/carbonado/repo/indexed/IndexEntryAccessor.java index 1b7f910..e3909c8 100644 --- a/src/main/java/com/amazon/carbonado/repo/indexed/IndexEntryAccessor.java +++ b/src/main/java/com/amazon/carbonado/repo/indexed/IndexEntryAccessor.java @@ -20,6 +20,7 @@ package com.amazon.carbonado.repo.indexed; import java.util.Comparator; +import com.amazon.carbonado.FetchException; import com.amazon.carbonado.RepositoryException; import com.amazon.carbonado.Storable; import com.amazon.carbonado.Storage; @@ -46,7 +47,7 @@ public interface IndexEntryAccessor<S extends Storable> extends IndexInfo { * @param indexEntry source of property values * @param master master whose primary key properties will be set */ - void copyToMasterPrimaryKey(Storable indexEntry, S master); + void copyToMasterPrimaryKey(Storable indexEntry, S master) throws FetchException; /** * Sets all the properties of the given index entry, using the applicable @@ -55,7 +56,7 @@ public interface IndexEntryAccessor<S extends Storable> extends IndexInfo { * @param indexEntry index entry whose properties will be set * @param master source of property values */ - void copyFromMaster(Storable indexEntry, S master); + void copyFromMaster(Storable indexEntry, S master) throws FetchException; /** * Returns true if the properties of the given index entry match those @@ -65,7 +66,7 @@ public interface IndexEntryAccessor<S extends Storable> extends IndexInfo { * @param indexEntry index entry whose properties will be tested * @param master source of property values */ - boolean isConsistent(Storable indexEntry, S master); + boolean isConsistent(Storable indexEntry, S master) throws FetchException; /** * Repairs the index by inserting missing entries and fixing diff --git a/src/main/java/com/amazon/carbonado/repo/indexed/ManagedIndex.java b/src/main/java/com/amazon/carbonado/repo/indexed/ManagedIndex.java index 8219ac1..e730c6e 100644 --- a/src/main/java/com/amazon/carbonado/repo/indexed/ManagedIndex.java +++ b/src/main/java/com/amazon/carbonado/repo/indexed/ManagedIndex.java @@ -146,17 +146,17 @@ class ManagedIndex<S extends Storable> implements IndexEntryAccessor<S> { } // Required by IndexEntryAccessor interface. - public void copyToMasterPrimaryKey(Storable indexEntry, S master) { + public void copyToMasterPrimaryKey(Storable indexEntry, S master) throws FetchException { mAccessor.copyToMasterPrimaryKey(indexEntry, master); } // Required by IndexEntryAccessor interface. - public void copyFromMaster(Storable indexEntry, S master) { + public void copyFromMaster(Storable indexEntry, S master) throws FetchException { mAccessor.copyFromMaster(indexEntry, master); } // Required by IndexEntryAccessor interface. - public boolean isConsistent(Storable indexEntry, S master) { + public boolean isConsistent(Storable indexEntry, S master) throws FetchException { return mAccessor.isConsistent(indexEntry, master); } @@ -561,7 +561,7 @@ class ManagedIndex<S extends Storable> implements IndexEntryAccessor<S> { } // If index entry already exists, then index might be corrupt. - { + try { Storable freshEntry = mIndexEntryStorage.prepare(); mAccessor.copyFromMaster(freshEntry, userStorable); indexEntry.copyVersionProperty(freshEntry); @@ -571,6 +571,8 @@ class ManagedIndex<S extends Storable> implements IndexEntryAccessor<S> { // user error. return !isUnique(); } + } catch (FetchException e) { + throw e.toPersistException(); } // Run the repair outside a transaction. -- cgit v1.2.3