Ensure multimap events are published on replaceValues

Change-Id: Ie4fb007ae70e618f0adfd16fd506e326b24580bc
diff --git a/core/store/primitives/src/main/java/org/onosproject/store/primitives/resources/impl/AtomixConsistentSetMultimapService.java b/core/store/primitives/src/main/java/org/onosproject/store/primitives/resources/impl/AtomixConsistentSetMultimapService.java
index 6c864b0..fd2e676 100644
--- a/core/store/primitives/src/main/java/org/onosproject/store/primitives/resources/impl/AtomixConsistentSetMultimapService.java
+++ b/core/store/primitives/src/main/java/org/onosproject/store/primitives/resources/impl/AtomixConsistentSetMultimapService.java
@@ -486,11 +486,28 @@
 
     protected Versioned<Collection<? extends byte[]>> replace(
             Commit<? extends Replace> commit) {
-        if (!backingMap.containsKey(commit.value().key())) {
-            backingMap.put(commit.value().key(),
-                    new NonTransactionalCommit());
+        String key = commit.value().key();
+        if (!backingMap.containsKey(key)) {
+            backingMap.put(key, new NonTransactionalCommit());
         }
-        return backingMap.get(commit.value().key()).addCommit(commit);
+
+        Versioned<Collection<? extends byte[]>> values = backingMap.get(commit.value().key()).addCommit(commit);
+        if (values != null) {
+            Set<byte[]> addedValues = Sets.newTreeSet(new ByteArrayComparator());
+            addedValues.addAll(commit.value().values());
+
+            Set<byte[]> removedValues = Sets.newTreeSet(new ByteArrayComparator());
+            removedValues.addAll(values.value());
+
+            List<MultimapEvent<String, byte[]>> events = Lists.newArrayList();
+            Sets.difference(removedValues, addedValues)
+                .forEach(value -> events.add(new MultimapEvent<>("", key, null, value)));
+            Sets.difference(addedValues, removedValues)
+                .forEach(value -> events.add(new MultimapEvent<>("", key, value, null)));
+
+            publish(events);
+        }
+        return values;
     }
 
     /**