Fixed consistent map event listener remove
Change-Id: I8e73faa31353929fe2a7b4c85923f64abaf5e497
Showing
2 changed files
with
5 additions
and
4 deletions
... | @@ -185,7 +185,7 @@ public class DefaultConsistentMap<K, V> extends Synchronous<AsyncConsistentMap<K | ... | @@ -185,7 +185,7 @@ public class DefaultConsistentMap<K, V> extends Synchronous<AsyncConsistentMap<K |
185 | 185 | ||
186 | @Override | 186 | @Override |
187 | public void removeListener(MapEventListener<K, V> listener) { | 187 | public void removeListener(MapEventListener<K, V> listener) { |
188 | - complete(asyncMap.addListener(listener)); | 188 | + complete(asyncMap.removeListener(listener)); |
189 | } | 189 | } |
190 | 190 | ||
191 | @Override | 191 | @Override | ... | ... |
... | @@ -21,6 +21,7 @@ import java.util.Map; | ... | @@ -21,6 +21,7 @@ import java.util.Map; |
21 | import java.util.Map.Entry; | 21 | import java.util.Map.Entry; |
22 | import java.util.Set; | 22 | import java.util.Set; |
23 | import java.util.concurrent.CompletableFuture; | 23 | import java.util.concurrent.CompletableFuture; |
24 | +import java.util.concurrent.Executor; | ||
24 | import java.util.function.BiFunction; | 25 | import java.util.function.BiFunction; |
25 | import java.util.function.Function; | 26 | import java.util.function.Function; |
26 | import java.util.function.Predicate; | 27 | import java.util.function.Predicate; |
... | @@ -224,12 +225,12 @@ public class MeteredAsyncConsistentMap<K, V> extends DelegatingAsyncConsistentM | ... | @@ -224,12 +225,12 @@ public class MeteredAsyncConsistentMap<K, V> extends DelegatingAsyncConsistentM |
224 | } | 225 | } |
225 | 226 | ||
226 | @Override | 227 | @Override |
227 | - public CompletableFuture<Void> addListener(MapEventListener<K, V> listener) { | 228 | + public CompletableFuture<Void> addListener(MapEventListener<K, V> listener, Executor executor) { |
228 | final MeteringAgent.Context timer = monitor.startTimer(ADD_LISTENER); | 229 | final MeteringAgent.Context timer = monitor.startTimer(ADD_LISTENER); |
229 | synchronized (listeners) { | 230 | synchronized (listeners) { |
230 | InternalMeteredMapEventListener meteredListener = | 231 | InternalMeteredMapEventListener meteredListener = |
231 | listeners.computeIfAbsent(listener, k -> new InternalMeteredMapEventListener(listener)); | 232 | listeners.computeIfAbsent(listener, k -> new InternalMeteredMapEventListener(listener)); |
232 | - return super.addListener(meteredListener) | 233 | + return super.addListener(meteredListener, executor) |
233 | .whenComplete((r, e) -> timer.stop(e)); | 234 | .whenComplete((r, e) -> timer.stop(e)); |
234 | } | 235 | } |
235 | } | 236 | } |
... | @@ -239,7 +240,7 @@ public class MeteredAsyncConsistentMap<K, V> extends DelegatingAsyncConsistentM | ... | @@ -239,7 +240,7 @@ public class MeteredAsyncConsistentMap<K, V> extends DelegatingAsyncConsistentM |
239 | final MeteringAgent.Context timer = monitor.startTimer(REMOVE_LISTENER); | 240 | final MeteringAgent.Context timer = monitor.startTimer(REMOVE_LISTENER); |
240 | InternalMeteredMapEventListener meteredListener = listeners.remove(listener); | 241 | InternalMeteredMapEventListener meteredListener = listeners.remove(listener); |
241 | if (meteredListener != null) { | 242 | if (meteredListener != null) { |
242 | - return super.removeListener(listener) | 243 | + return super.removeListener(meteredListener) |
243 | .whenComplete((r, e) -> timer.stop(e)); | 244 | .whenComplete((r, e) -> timer.stop(e)); |
244 | } else { | 245 | } else { |
245 | timer.stop(null); | 246 | timer.stop(null); | ... | ... |
-
Please register or login to post a comment