From 3f4ae1359344619b546a6440c477d961cb6bca12 Mon Sep 17 00:00:00 2001 From: Ashutosh Singhal Date: Tue, 17 Dec 2013 00:50:21 -0800 Subject: [PATCH 1/3] add onFailure to EnrichedMergeableStore --- .../storehaus/algebra/EnrichedMergeableStore.scala | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/storehaus-algebra/src/main/scala/com/twitter/storehaus/algebra/EnrichedMergeableStore.scala b/storehaus-algebra/src/main/scala/com/twitter/storehaus/algebra/EnrichedMergeableStore.scala index 3eb6a33c..19ad5fa9 100644 --- a/storehaus-algebra/src/main/scala/com/twitter/storehaus/algebra/EnrichedMergeableStore.scala +++ b/storehaus-algebra/src/main/scala/com/twitter/storehaus/algebra/EnrichedMergeableStore.scala @@ -49,4 +49,17 @@ class EnrichedMergeableStore[K, V](store: MergeableStore[K, V]) { def convert[K1, V1](fn: K1 => K)(implicit bij: ImplicitBijection[V1, V]): MergeableStore[K1, V1] = MergeableStore.convert(store)(fn) + + def onFailure(rescueException: Throwable => Unit): MergeableStore[K, V] = new MergeableStore[K, V] { + override def semigroup = store.semigroup + override def get(k: K) = store.get(k) + override def multiGet[K1 <: K](ks: Set[K1]) = store.multiGet(ks) + override def put(kv: (K, Option[V])) = store.put(kv) + override def multiPut[K1 <: K](kvs: Map[K1, Option[V]]) = store.multiPut(kvs) + + override def merge(kv: (K, V)) = store.merge(kv).onFailure(rescueException) + + override def multiMerge[K1 <: K](kvs: Map[K1, V]) = + store.multiMerge(kvs).mapValues { _.onFailure(rescueException) } + } } From 657c1b2a32487cc6ad8b44698315ae73cc205e09 Mon Sep 17 00:00:00 2001 From: Ashutosh Singhal Date: Tue, 17 Dec 2013 10:10:28 -0800 Subject: [PATCH 2/3] onFailure -> onMergeFailure --- .../com/twitter/storehaus/algebra/EnrichedMergeableStore.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/storehaus-algebra/src/main/scala/com/twitter/storehaus/algebra/EnrichedMergeableStore.scala b/storehaus-algebra/src/main/scala/com/twitter/storehaus/algebra/EnrichedMergeableStore.scala index 19ad5fa9..6cbc8eb2 100644 --- a/storehaus-algebra/src/main/scala/com/twitter/storehaus/algebra/EnrichedMergeableStore.scala +++ b/storehaus-algebra/src/main/scala/com/twitter/storehaus/algebra/EnrichedMergeableStore.scala @@ -50,7 +50,7 @@ class EnrichedMergeableStore[K, V](store: MergeableStore[K, V]) { def convert[K1, V1](fn: K1 => K)(implicit bij: ImplicitBijection[V1, V]): MergeableStore[K1, V1] = MergeableStore.convert(store)(fn) - def onFailure(rescueException: Throwable => Unit): MergeableStore[K, V] = new MergeableStore[K, V] { + def onMergeFailure(rescueException: Throwable => Unit): MergeableStore[K, V] = new MergeableStore[K, V] { override def semigroup = store.semigroup override def get(k: K) = store.get(k) override def multiGet[K1 <: K](ks: Set[K1]) = store.multiGet(ks) From 949a6d8aedaf7d4b937e6251845c3f85f2f74116 Mon Sep 17 00:00:00 2001 From: Ashutosh Singhal Date: Mon, 13 Jan 2014 14:25:47 -0800 Subject: [PATCH 3/3] switch to using MergeableStoreProxy --- .../algebra/EnrichedMergeableStore.scala | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/storehaus-algebra/src/main/scala/com/twitter/storehaus/algebra/EnrichedMergeableStore.scala b/storehaus-algebra/src/main/scala/com/twitter/storehaus/algebra/EnrichedMergeableStore.scala index 6cbc8eb2..5a86dab4 100644 --- a/storehaus-algebra/src/main/scala/com/twitter/storehaus/algebra/EnrichedMergeableStore.scala +++ b/storehaus-algebra/src/main/scala/com/twitter/storehaus/algebra/EnrichedMergeableStore.scala @@ -50,16 +50,11 @@ class EnrichedMergeableStore[K, V](store: MergeableStore[K, V]) { def convert[K1, V1](fn: K1 => K)(implicit bij: ImplicitBijection[V1, V]): MergeableStore[K1, V1] = MergeableStore.convert(store)(fn) - def onMergeFailure(rescueException: Throwable => Unit): MergeableStore[K, V] = new MergeableStore[K, V] { - override def semigroup = store.semigroup - override def get(k: K) = store.get(k) - override def multiGet[K1 <: K](ks: Set[K1]) = store.multiGet(ks) - override def put(kv: (K, Option[V])) = store.put(kv) - override def multiPut[K1 <: K](kvs: Map[K1, Option[V]]) = store.multiPut(kvs) - - override def merge(kv: (K, V)) = store.merge(kv).onFailure(rescueException) - - override def multiMerge[K1 <: K](kvs: Map[K1, V]) = - store.multiMerge(kvs).mapValues { _.onFailure(rescueException) } - } + def onMergeFailure(rescueException: Throwable => Unit): MergeableStore[K, V] = + new MergeableStoreProxy[K, V] { + override def self = store + override def merge(kv: (K, V)) = store.merge(kv).onFailure(rescueException) + override def multiMerge[K1 <: K](kvs: Map[K1, V]) = + store.multiMerge(kvs).mapValues { _.onFailure(rescueException) } + } }