samueljcc
Committed by Gerrit Code Review

[ONOS-3228] Change ConcurrentMap to EventuallyConsistentMap in

FlowClassifierManager; It should be a distributed store.

Change-Id: I07ee3a0ebee50a0416e38dc4b62cfe02d5c5c14e
...@@ -15,21 +15,26 @@ ...@@ -15,21 +15,26 @@
15 */ 15 */
16 package org.onosproject.vtnrsc.flowClassifier.impl; 16 package org.onosproject.vtnrsc.flowClassifier.impl;
17 17
18 -import java.util.concurrent.ConcurrentHashMap;
19 -import java.util.concurrent.ConcurrentMap;
20 -
21 import org.apache.felix.scr.annotations.Activate; 18 import org.apache.felix.scr.annotations.Activate;
22 import org.apache.felix.scr.annotations.Component; 19 import org.apache.felix.scr.annotations.Component;
23 import org.apache.felix.scr.annotations.Deactivate; 20 import org.apache.felix.scr.annotations.Deactivate;
21 +import org.apache.felix.scr.annotations.Reference;
22 +import org.apache.felix.scr.annotations.ReferenceCardinality;
24 import org.apache.felix.scr.annotations.Service; 23 import org.apache.felix.scr.annotations.Service;
24 +import org.onlab.util.KryoNamespace;
25 +import org.onosproject.store.serializers.KryoNamespaces;
26 +import org.onosproject.store.service.EventuallyConsistentMap;
27 +import org.onosproject.store.service.MultiValuedTimestamp;
28 +import org.onosproject.store.service.StorageService;
29 +import org.onosproject.store.service.WallClockTimestamp;
25 import org.onosproject.vtnrsc.FlowClassifierId; 30 import org.onosproject.vtnrsc.FlowClassifierId;
26 import org.onosproject.vtnrsc.FlowClassifier; 31 import org.onosproject.vtnrsc.FlowClassifier;
27 import org.onosproject.vtnrsc.flowClassifier.FlowClassifierService; 32 import org.onosproject.vtnrsc.flowClassifier.FlowClassifierService;
28 -
29 import org.slf4j.Logger; 33 import org.slf4j.Logger;
30 -import static org.slf4j.LoggerFactory.getLogger;
31 34
35 +import static org.slf4j.LoggerFactory.getLogger;
32 import static com.google.common.base.Preconditions.checkNotNull; 36 import static com.google.common.base.Preconditions.checkNotNull;
37 +
33 import com.google.common.collect.ImmutableList; 38 import com.google.common.collect.ImmutableList;
34 39
35 /** 40 /**
...@@ -44,16 +49,26 @@ public class FlowClassifierManager implements FlowClassifierService { ...@@ -44,16 +49,26 @@ public class FlowClassifierManager implements FlowClassifierService {
44 private static final String FLOW_CLASSIFIER_NOT_NULL = "Flow Classifier cannot be null"; 49 private static final String FLOW_CLASSIFIER_NOT_NULL = "Flow Classifier cannot be null";
45 private static final String FLOW_CLASSIFIER_ID_NOT_NULL = "Flow Classifier Id cannot be null"; 50 private static final String FLOW_CLASSIFIER_ID_NOT_NULL = "Flow Classifier Id cannot be null";
46 51
47 - private ConcurrentMap<FlowClassifierId, FlowClassifier> flowClassifierStore 52 + private EventuallyConsistentMap<FlowClassifierId, FlowClassifier> flowClassifierStore;
48 - = new ConcurrentHashMap<FlowClassifierId, FlowClassifier>(); 53 + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
54 + protected StorageService storageService;
49 55
50 @Activate 56 @Activate
51 private void activate() { 57 private void activate() {
58 + KryoNamespace.Builder serializer = KryoNamespace.newBuilder()
59 + .register(KryoNamespaces.API)
60 + .register(MultiValuedTimestamp.class)
61 + .register(FlowClassifier.class);
62 + flowClassifierStore = storageService
63 + .<FlowClassifierId, FlowClassifier>eventuallyConsistentMapBuilder()
64 + .withName("flowclassifierstore").withSerializer(serializer)
65 + .withTimestampProvider((k, v) -> new WallClockTimestamp()).build();
52 log.info("Flow Classifier service activated"); 66 log.info("Flow Classifier service activated");
53 } 67 }
54 68
55 @Deactivate 69 @Deactivate
56 private void deactivate() { 70 private void deactivate() {
71 + flowClassifierStore.destroy();
57 log.info("Flow Classifier service deactivated"); 72 log.info("Flow Classifier service deactivated");
58 } 73 }
59 74
...@@ -92,7 +107,8 @@ public class FlowClassifierManager implements FlowClassifierService { ...@@ -92,7 +107,8 @@ public class FlowClassifierManager implements FlowClassifierService {
92 public boolean updateFlowClassifier(FlowClassifier flowClassifier) { 107 public boolean updateFlowClassifier(FlowClassifier flowClassifier) {
93 checkNotNull(flowClassifier, FLOW_CLASSIFIER_NOT_NULL); 108 checkNotNull(flowClassifier, FLOW_CLASSIFIER_NOT_NULL);
94 FlowClassifierId id = flowClassifier.flowClassifierId(); 109 FlowClassifierId id = flowClassifier.flowClassifierId();
95 - return flowClassifierStore.replace(id, flowClassifierStore.get(id), flowClassifier); 110 + flowClassifierStore.put(id, flowClassifier);
111 + return true;
96 } 112 }
97 113
98 @Override 114 @Override
......