Configuration options for disabling tombstones in ECMap + disabling backups in Dist flow rule store

Change-Id: I28b17f3d0bb7f5ba87a541b7f6337c3c1b587d36
diff --git a/core/store/dist/src/main/java/org/onosproject/store/ecmap/EventuallyConsistentMapImpl.java b/core/store/dist/src/main/java/org/onosproject/store/ecmap/EventuallyConsistentMapImpl.java
index 8111db8..2987529 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/ecmap/EventuallyConsistentMapImpl.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/ecmap/EventuallyConsistentMapImpl.java
@@ -107,6 +107,7 @@
     private long initialDelaySec = 5;
     private long periodSec = 5;
     private boolean lightweightAntiEntropy = true;
+    private boolean tombstonesDisabled = false;
 
     private static final int WINDOW_SIZE = 5;
     private static final int HIGH_LOAD_THRESHOLD = 0;
@@ -223,6 +224,11 @@
                      .collect(Collectors.toList()));
     }
 
+    public EventuallyConsistentMapImpl<K, V> withTombstonesDisabled(boolean status) {
+        tombstonesDisabled = status;
+        return this;
+    }
+
     private KryoSerializer createSerializer(KryoNamespace.Builder builder) {
         return new KryoSerializer() {
             @Override
@@ -379,14 +385,18 @@
             return false;
         }
 
-        Timestamp removedTimestamp = removedItems.get(key);
-        if (removedTimestamp == null) {
-            return removedItems.putIfAbsent(key, timestamp) == null;
-        } else if (timestamp.isNewerThan(removedTimestamp)) {
-            return removedItems.replace(key, removedTimestamp, timestamp);
-        } else {
-            return false;
+        if (!tombstonesDisabled) {
+            Timestamp removedTimestamp = removedItems.get(key);
+            if (removedTimestamp == null) {
+                return removedItems.putIfAbsent(key, timestamp) == null;
+            } else if (timestamp.isNewerThan(removedTimestamp)) {
+                return removedItems.replace(key, removedTimestamp, timestamp);
+            } else {
+                return false;
+            }
         }
+
+        return updated.booleanValue();
     }
 
     @Override