Removed deprecated map change notification support
Change-Id: Ibff2e403129ee026092a24fc15b82e80ffb8dc48
Showing
3 changed files
with
20 additions
and
61 deletions
| ... | @@ -20,9 +20,9 @@ import com.google.common.base.Charsets; | ... | @@ -20,9 +20,9 @@ import com.google.common.base.Charsets; |
| 20 | import com.google.common.collect.ArrayListMultimap; | 20 | import com.google.common.collect.ArrayListMultimap; |
| 21 | import com.google.common.collect.ImmutableList; | 21 | import com.google.common.collect.ImmutableList; |
| 22 | import com.google.common.collect.ImmutableSet; | 22 | import com.google.common.collect.ImmutableSet; |
| 23 | -import com.google.common.collect.ListMultimap; | ||
| 24 | import com.google.common.collect.Lists; | 23 | import com.google.common.collect.Lists; |
| 25 | import com.google.common.collect.Maps; | 24 | import com.google.common.collect.Maps; |
| 25 | +import com.google.common.collect.Multimap; | ||
| 26 | import com.google.common.collect.Sets; | 26 | import com.google.common.collect.Sets; |
| 27 | import com.google.common.util.concurrent.Futures; | 27 | import com.google.common.util.concurrent.Futures; |
| 28 | 28 | ||
| ... | @@ -68,7 +68,6 @@ import org.onosproject.store.service.ConsistentMapBuilder; | ... | @@ -68,7 +68,6 @@ import org.onosproject.store.service.ConsistentMapBuilder; |
| 68 | import org.onosproject.store.service.ConsistentMapException; | 68 | import org.onosproject.store.service.ConsistentMapException; |
| 69 | import org.onosproject.store.service.DistributedQueueBuilder; | 69 | import org.onosproject.store.service.DistributedQueueBuilder; |
| 70 | import org.onosproject.store.service.EventuallyConsistentMapBuilder; | 70 | import org.onosproject.store.service.EventuallyConsistentMapBuilder; |
| 71 | -import org.onosproject.store.service.MapEvent; | ||
| 72 | import org.onosproject.store.service.MapInfo; | 71 | import org.onosproject.store.service.MapInfo; |
| 73 | import org.onosproject.store.service.PartitionInfo; | 72 | import org.onosproject.store.service.PartitionInfo; |
| 74 | import org.onosproject.store.service.DistributedSetBuilder; | 73 | import org.onosproject.store.service.DistributedSetBuilder; |
| ... | @@ -126,8 +125,8 @@ public class DatabaseManager implements StorageService, StorageAdminService { | ... | @@ -126,8 +125,8 @@ public class DatabaseManager implements StorageService, StorageAdminService { |
| 126 | private ExecutorService queuePollExecutor; | 125 | private ExecutorService queuePollExecutor; |
| 127 | private ApplicationListener appListener = new InternalApplicationListener(); | 126 | private ApplicationListener appListener = new InternalApplicationListener(); |
| 128 | 127 | ||
| 129 | - private final Map<String, DefaultAsyncConsistentMap> maps = Maps.newConcurrentMap(); | 128 | + private final Multimap<String, DefaultAsyncConsistentMap> maps = ArrayListMultimap.create(); |
| 130 | - private final ListMultimap<ApplicationId, DefaultAsyncConsistentMap> mapsByApplication = ArrayListMultimap.create(); | 129 | + private final Multimap<ApplicationId, DefaultAsyncConsistentMap> mapsByApplication = ArrayListMultimap.create(); |
| 131 | private final Map<String, DefaultDistributedQueue> queues = Maps.newConcurrentMap(); | 130 | private final Map<String, DefaultDistributedQueue> queues = Maps.newConcurrentMap(); |
| 132 | 131 | ||
| 133 | @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) | 132 | @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) |
| ... | @@ -451,28 +450,15 @@ public class DatabaseManager implements StorageService, StorageAdminService { | ... | @@ -451,28 +450,15 @@ public class DatabaseManager implements StorageService, StorageAdminService { |
| 451 | } | 450 | } |
| 452 | 451 | ||
| 453 | protected <K, V> DefaultAsyncConsistentMap<K, V> registerMap(DefaultAsyncConsistentMap<K, V> map) { | 452 | protected <K, V> DefaultAsyncConsistentMap<K, V> registerMap(DefaultAsyncConsistentMap<K, V> map) { |
| 454 | - DefaultAsyncConsistentMap<K, V> existing = maps.putIfAbsent(map.name(), map); | 453 | + maps.put(map.name(), map); |
| 455 | - if (existing != null) { | 454 | + if (map.applicationId() != null) { |
| 456 | - // FIXME: We need to cleanly support different map instances with same name. | 455 | + mapsByApplication.put(map.applicationId(), map); |
| 457 | - log.info("Map by name {} already exists", map.name()); | ||
| 458 | - return existing; | ||
| 459 | - } else { | ||
| 460 | - if (map.applicationId() != null) { | ||
| 461 | - mapsByApplication.put(map.applicationId(), map); | ||
| 462 | - } | ||
| 463 | } | 456 | } |
| 464 | - | ||
| 465 | - clusterCommunicator.<MapEvent<K, V>>addSubscriber(mapUpdatesSubject(map.name()), | ||
| 466 | - map.serializer()::decode, | ||
| 467 | - map::notifyLocalListeners, | ||
| 468 | - eventDispatcher); | ||
| 469 | return map; | 457 | return map; |
| 470 | } | 458 | } |
| 471 | 459 | ||
| 472 | protected <K, V> void unregisterMap(DefaultAsyncConsistentMap<K, V> map) { | 460 | protected <K, V> void unregisterMap(DefaultAsyncConsistentMap<K, V> map) { |
| 473 | - if (maps.remove(map.name()) != null) { | 461 | + maps.remove(map.name(), map); |
| 474 | - clusterCommunicator.removeSubscriber(mapUpdatesSubject(map.name())); | ||
| 475 | - } | ||
| 476 | if (map.applicationId() != null) { | 462 | if (map.applicationId() != null) { |
| 477 | mapsByApplication.remove(map.applicationId(), map); | 463 | mapsByApplication.remove(map.applicationId(), map); |
| 478 | } | 464 | } |
| ... | @@ -485,10 +471,6 @@ public class DatabaseManager implements StorageService, StorageAdminService { | ... | @@ -485,10 +471,6 @@ public class DatabaseManager implements StorageService, StorageAdminService { |
| 485 | } | 471 | } |
| 486 | } | 472 | } |
| 487 | 473 | ||
| 488 | - protected static MessageSubject mapUpdatesSubject(String mapName) { | ||
| 489 | - return new MessageSubject(mapName + "-map-updates"); | ||
| 490 | - } | ||
| 491 | - | ||
| 492 | private class InternalApplicationListener implements ApplicationListener { | 474 | private class InternalApplicationListener implements ApplicationListener { |
| 493 | @Override | 475 | @Override |
| 494 | public void event(ApplicationEvent event) { | 476 | public void event(ApplicationEvent event) { | ... | ... |
| ... | @@ -28,7 +28,6 @@ import java.util.concurrent.CopyOnWriteArraySet; | ... | @@ -28,7 +28,6 @@ import java.util.concurrent.CopyOnWriteArraySet; |
| 28 | import java.util.concurrent.TimeUnit; | 28 | import java.util.concurrent.TimeUnit; |
| 29 | import java.util.concurrent.atomic.AtomicReference; | 29 | import java.util.concurrent.atomic.AtomicReference; |
| 30 | import java.util.function.BiFunction; | 30 | import java.util.function.BiFunction; |
| 31 | -import java.util.function.Consumer; | ||
| 32 | import java.util.function.Function; | 31 | import java.util.function.Function; |
| 33 | import java.util.function.Predicate; | 32 | import java.util.function.Predicate; |
| 34 | import java.util.stream.Collectors; | 33 | import java.util.stream.Collectors; |
| ... | @@ -74,7 +73,6 @@ public class DefaultAsyncConsistentMap<K, V> implements AsyncConsistentMap<K, V> | ... | @@ -74,7 +73,6 @@ public class DefaultAsyncConsistentMap<K, V> implements AsyncConsistentMap<K, V> |
| 74 | private final Serializer serializer; | 73 | private final Serializer serializer; |
| 75 | private final boolean readOnly; | 74 | private final boolean readOnly; |
| 76 | private final boolean purgeOnUninstall; | 75 | private final boolean purgeOnUninstall; |
| 77 | - private final Consumer<MapEvent<K, V>> eventPublisher; | ||
| 78 | 76 | ||
| 79 | private final MetricsService metricsService; | 77 | private final MetricsService metricsService; |
| 80 | private final MetricsComponent metricsComponent; | 78 | private final MetricsComponent metricsComponent; |
| ... | @@ -130,22 +128,20 @@ public class DefaultAsyncConsistentMap<K, V> implements AsyncConsistentMap<K, V> | ... | @@ -130,22 +128,20 @@ public class DefaultAsyncConsistentMap<K, V> implements AsyncConsistentMap<K, V> |
| 130 | Database database, | 128 | Database database, |
| 131 | Serializer serializer, | 129 | Serializer serializer, |
| 132 | boolean readOnly, | 130 | boolean readOnly, |
| 133 | - boolean purgeOnUninstall, | 131 | + boolean purgeOnUninstall) { |
| 134 | - Consumer<MapEvent<K, V>> eventPublisher) { | ||
| 135 | this.name = checkNotNull(name, "map name cannot be null"); | 132 | this.name = checkNotNull(name, "map name cannot be null"); |
| 136 | this.applicationId = applicationId; | 133 | this.applicationId = applicationId; |
| 137 | this.database = checkNotNull(database, "database cannot be null"); | 134 | this.database = checkNotNull(database, "database cannot be null"); |
| 138 | this.serializer = checkNotNull(serializer, "serializer cannot be null"); | 135 | this.serializer = checkNotNull(serializer, "serializer cannot be null"); |
| 139 | this.readOnly = readOnly; | 136 | this.readOnly = readOnly; |
| 140 | this.purgeOnUninstall = purgeOnUninstall; | 137 | this.purgeOnUninstall = purgeOnUninstall; |
| 141 | - this.eventPublisher = eventPublisher; | ||
| 142 | this.database.registerConsumer(update -> { | 138 | this.database.registerConsumer(update -> { |
| 143 | SharedExecutors.getSingleThreadExecutor().execute(() -> { | 139 | SharedExecutors.getSingleThreadExecutor().execute(() -> { |
| 144 | if (update.target() == MAP) { | 140 | if (update.target() == MAP) { |
| 145 | Result<UpdateResult<String, byte[]>> result = update.output(); | 141 | Result<UpdateResult<String, byte[]>> result = update.output(); |
| 146 | if (result.success() && result.value().mapName().equals(name)) { | 142 | if (result.success() && result.value().mapName().equals(name)) { |
| 147 | MapEvent<K, V> mapEvent = result.value().<K, V>map(this::dK, serializer::decode).toMapEvent(); | 143 | MapEvent<K, V> mapEvent = result.value().<K, V>map(this::dK, serializer::decode).toMapEvent(); |
| 148 | - notifyLocalListeners(mapEvent); | 144 | + notifyListeners(mapEvent); |
| 149 | } | 145 | } |
| 150 | } | 146 | } |
| 151 | }); | 147 | }); |
| ... | @@ -423,12 +419,7 @@ public class DefaultAsyncConsistentMap<K, V> implements AsyncConsistentMap<K, V> | ... | @@ -423,12 +419,7 @@ public class DefaultAsyncConsistentMap<K, V> implements AsyncConsistentMap<K, V> |
| 423 | oldVersionMatch, | 419 | oldVersionMatch, |
| 424 | value == null ? null : serializer.encode(value)) | 420 | value == null ? null : serializer.encode(value)) |
| 425 | .thenApply(this::unwrapResult) | 421 | .thenApply(this::unwrapResult) |
| 426 | - .thenApply(r -> r.<K, V>map(this::dK, serializer::decode)) | 422 | + .thenApply(r -> r.<K, V>map(this::dK, serializer::decode)); |
| 427 | - .whenComplete((r, e) -> { | ||
| 428 | - if (r != null && e == null && !database.hasChangeNotificationSupport()) { | ||
| 429 | - notifyListeners(r.toMapEvent()); | ||
| 430 | - } | ||
| 431 | - }); | ||
| 432 | } | 423 | } |
| 433 | 424 | ||
| 434 | private <T> T unwrapResult(Result<T> result) { | 425 | private <T> T unwrapResult(Result<T> result) { |
| ... | @@ -458,26 +449,16 @@ public class DefaultAsyncConsistentMap<K, V> implements AsyncConsistentMap<K, V> | ... | @@ -458,26 +449,16 @@ public class DefaultAsyncConsistentMap<K, V> implements AsyncConsistentMap<K, V> |
| 458 | } | 449 | } |
| 459 | 450 | ||
| 460 | protected void notifyListeners(MapEvent<K, V> event) { | 451 | protected void notifyListeners(MapEvent<K, V> event) { |
| 461 | - try { | 452 | + if (event == null) { |
| 462 | - if (event != null) { | 453 | + return; |
| 463 | - notifyLocalListeners(event); | ||
| 464 | - notifyRemoteListeners(event); | ||
| 465 | - } | ||
| 466 | - } catch (Exception e) { | ||
| 467 | - log.warn("Failure notifying listeners about {}", event, e); | ||
| 468 | - } | ||
| 469 | - } | ||
| 470 | - | ||
| 471 | - protected void notifyLocalListeners(MapEvent<K, V> event) { | ||
| 472 | - if (event != null) { | ||
| 473 | - listeners.forEach(listener -> listener.event(event)); | ||
| 474 | - } | ||
| 475 | - } | ||
| 476 | - | ||
| 477 | - protected void notifyRemoteListeners(MapEvent<K, V> event) { | ||
| 478 | - if (eventPublisher != null) { | ||
| 479 | - eventPublisher.accept(event); | ||
| 480 | } | 454 | } |
| 455 | + listeners.forEach(listener -> { | ||
| 456 | + try { | ||
| 457 | + listener.event(event); | ||
| 458 | + } catch (Exception e) { | ||
| 459 | + log.warn("Failure notifying listener about {}", event, e); | ||
| 460 | + } | ||
| 461 | + }); | ||
| 481 | } | 462 | } |
| 482 | 463 | ||
| 483 | private OperationTimer startTimer(String op) { | 464 | private OperationTimer startTimer(String op) { | ... | ... |
core/store/dist/src/main/java/org/onosproject/store/consistent/impl/DefaultConsistentMapBuilder.java
| ... | @@ -22,7 +22,6 @@ import org.onosproject.core.ApplicationId; | ... | @@ -22,7 +22,6 @@ import org.onosproject.core.ApplicationId; |
| 22 | import org.onosproject.store.service.AsyncConsistentMap; | 22 | import org.onosproject.store.service.AsyncConsistentMap; |
| 23 | import org.onosproject.store.service.ConsistentMap; | 23 | import org.onosproject.store.service.ConsistentMap; |
| 24 | import org.onosproject.store.service.ConsistentMapBuilder; | 24 | import org.onosproject.store.service.ConsistentMapBuilder; |
| 25 | -import org.onosproject.store.service.MapEvent; | ||
| 26 | import org.onosproject.store.service.Serializer; | 25 | import org.onosproject.store.service.Serializer; |
| 27 | 26 | ||
| 28 | /** | 27 | /** |
| ... | @@ -110,10 +109,7 @@ public class DefaultConsistentMapBuilder<K, V> implements ConsistentMapBuilder<K | ... | @@ -110,10 +109,7 @@ public class DefaultConsistentMapBuilder<K, V> implements ConsistentMapBuilder<K |
| 110 | partitionsEnabled ? manager.partitionedDatabase : manager.inMemoryDatabase, | 109 | partitionsEnabled ? manager.partitionedDatabase : manager.inMemoryDatabase, |
| 111 | serializer, | 110 | serializer, |
| 112 | readOnly, | 111 | readOnly, |
| 113 | - purgeOnUninstall, | 112 | + purgeOnUninstall); |
| 114 | - event -> manager.clusterCommunicator.<MapEvent<K, V>>broadcast(event, | ||
| 115 | - DatabaseManager.mapUpdatesSubject(name), | ||
| 116 | - serializer::encode)); | ||
| 117 | return manager.registerMap(asyncMap); | 113 | return manager.registerMap(asyncMap); |
| 118 | } | 114 | } |
| 119 | } | 115 | } |
| ... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
-
Please register or login to post a comment