bobzhou
Committed by Gerrit Code Review

[ONOS-5185] fix bug for VTN data synchronized failed in cluster mode

Change-Id: I828cd738efb63e23f519bdd6a5d8b2bb58240df2
...@@ -22,6 +22,7 @@ import java.util.Collection; ...@@ -22,6 +22,7 @@ import java.util.Collection;
22 import java.util.Collections; 22 import java.util.Collections;
23 import java.util.Iterator; 23 import java.util.Iterator;
24 import java.util.List; 24 import java.util.List;
25 +import java.util.UUID;
25 import java.util.stream.Collectors; 26 import java.util.stream.Collectors;
26 27
27 import org.apache.felix.scr.annotations.Activate; 28 import org.apache.felix.scr.annotations.Activate;
...@@ -36,21 +37,29 @@ import org.onosproject.core.ApplicationId; ...@@ -36,21 +37,29 @@ import org.onosproject.core.ApplicationId;
36 import org.onosproject.core.CoreService; 37 import org.onosproject.core.CoreService;
37 import org.onosproject.event.AbstractListenerManager; 38 import org.onosproject.event.AbstractListenerManager;
38 import org.onosproject.net.DeviceId; 39 import org.onosproject.net.DeviceId;
40 +import org.onosproject.net.Host;
39 import org.onosproject.store.serializers.KryoNamespaces; 41 import org.onosproject.store.serializers.KryoNamespaces;
40 import org.onosproject.store.service.EventuallyConsistentMap; 42 import org.onosproject.store.service.EventuallyConsistentMap;
41 import org.onosproject.store.service.EventuallyConsistentMapEvent; 43 import org.onosproject.store.service.EventuallyConsistentMapEvent;
42 import org.onosproject.store.service.EventuallyConsistentMapListener; 44 import org.onosproject.store.service.EventuallyConsistentMapListener;
45 +import org.onosproject.store.service.LogicalClockService;
43 import org.onosproject.store.service.MultiValuedTimestamp; 46 import org.onosproject.store.service.MultiValuedTimestamp;
44 import org.onosproject.store.service.StorageService; 47 import org.onosproject.store.service.StorageService;
45 import org.onosproject.store.service.WallClockTimestamp; 48 import org.onosproject.store.service.WallClockTimestamp;
46 import org.onosproject.vtnrsc.AllowedAddressPair; 49 import org.onosproject.vtnrsc.AllowedAddressPair;
47 import org.onosproject.vtnrsc.BindingHostId; 50 import org.onosproject.vtnrsc.BindingHostId;
51 +import org.onosproject.vtnrsc.DefaultFloatingIp;
48 import org.onosproject.vtnrsc.DefaultVirtualPort; 52 import org.onosproject.vtnrsc.DefaultVirtualPort;
49 import org.onosproject.vtnrsc.FixedIp; 53 import org.onosproject.vtnrsc.FixedIp;
54 +import org.onosproject.vtnrsc.FloatingIp;
55 +import org.onosproject.vtnrsc.FloatingIpId;
56 +import org.onosproject.vtnrsc.RouterId;
50 import org.onosproject.vtnrsc.SecurityGroup; 57 import org.onosproject.vtnrsc.SecurityGroup;
51 import org.onosproject.vtnrsc.SubnetId; 58 import org.onosproject.vtnrsc.SubnetId;
52 import org.onosproject.vtnrsc.TenantId; 59 import org.onosproject.vtnrsc.TenantId;
60 +import org.onosproject.vtnrsc.TenantNetwork;
53 import org.onosproject.vtnrsc.TenantNetworkId; 61 import org.onosproject.vtnrsc.TenantNetworkId;
62 +import org.onosproject.vtnrsc.TenantRouter;
54 import org.onosproject.vtnrsc.VirtualPort; 63 import org.onosproject.vtnrsc.VirtualPort;
55 import org.onosproject.vtnrsc.VirtualPortId; 64 import org.onosproject.vtnrsc.VirtualPortId;
56 import org.onosproject.vtnrsc.tenantnetwork.TenantNetworkService; 65 import org.onosproject.vtnrsc.tenantnetwork.TenantNetworkService;
...@@ -70,7 +79,7 @@ implements VirtualPortService { ...@@ -70,7 +79,7 @@ implements VirtualPortService {
70 79
71 private final Logger log = LoggerFactory.getLogger(getClass()); 80 private final Logger log = LoggerFactory.getLogger(getClass());
72 81
73 - private static final String VIRTUALPORT = "vtn-virtual-port"; 82 + private static final String VIRTUALPORT = "vtn-virtual-port-store";
74 private static final String VTNRSC_APP = "org.onosproject.vtnrsc"; 83 private static final String VTNRSC_APP = "org.onosproject.vtnrsc";
75 84
76 private static final String VIRTUALPORT_ID_NULL = "VirtualPort ID cannot be null"; 85 private static final String VIRTUALPORT_ID_NULL = "VirtualPort ID cannot be null";
...@@ -94,6 +103,9 @@ implements VirtualPortService { ...@@ -94,6 +103,9 @@ implements VirtualPortService {
94 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) 103 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
95 protected CoreService coreService; 104 protected CoreService coreService;
96 105
106 + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
107 + protected LogicalClockService clockService;
108 +
97 private EventuallyConsistentMapListener<VirtualPortId, VirtualPort> virtualPortListener = 109 private EventuallyConsistentMapListener<VirtualPortId, VirtualPort> virtualPortListener =
98 new InnerVirtualPortStoreListener(); 110 new InnerVirtualPortStoreListener();
99 111
...@@ -101,34 +113,46 @@ implements VirtualPortService { ...@@ -101,34 +113,46 @@ implements VirtualPortService {
101 public void activate() { 113 public void activate() {
102 114
103 appId = coreService.registerApplication(VTNRSC_APP); 115 appId = coreService.registerApplication(VTNRSC_APP);
104 -
105 eventDispatcher.addSink(VirtualPortEvent.class, listenerRegistry); 116 eventDispatcher.addSink(VirtualPortEvent.class, listenerRegistry);
106 117
107 - vPortStore = storageService.<VirtualPortId, VirtualPort>eventuallyConsistentMapBuilder() 118 + KryoNamespace.Builder serializer = KryoNamespace.newBuilder()
108 - .withName(VIRTUALPORT) 119 + .register(KryoNamespaces.API)
109 - .withSerializer(KryoNamespace.newBuilder().register(KryoNamespaces.API) 120 + .register(MultiValuedTimestamp.class)
110 - .register(MultiValuedTimestamp.class) 121 + .register(TenantNetworkId.class)
111 - .register(VirtualPortId.class, 122 + .register(Host.class)
112 - TenantNetworkId.class, 123 + .register(TenantNetwork.class)
113 - VirtualPort.State.class, 124 + .register(TenantNetworkId.class)
114 - TenantId.class, 125 + .register(TenantId.class)
115 - AllowedAddressPair.class, 126 + .register(SubnetId.class)
116 - FixedIp.class, 127 + .register(VirtualPortId.class)
117 - BindingHostId.class, 128 + .register(VirtualPort.State.class)
118 - SecurityGroup.class, 129 + .register(AllowedAddressPair.class)
119 - SubnetId.class, 130 + .register(FixedIp.class)
120 - IpAddress.class, 131 + .register(FloatingIp.class)
121 - DefaultVirtualPort.class)) 132 + .register(FloatingIpId.class)
122 - .withTimestampProvider((k, v) ->new WallClockTimestamp()) 133 + .register(FloatingIp.Status.class)
123 - .build(); 134 + .register(UUID.class)
124 - 135 + .register(DefaultFloatingIp.class)
136 + .register(BindingHostId.class)
137 + .register(SecurityGroup.class)
138 + .register(IpAddress.class)
139 + .register(DefaultVirtualPort.class)
140 + .register(RouterId.class)
141 + .register(TenantRouter.class)
142 + .register(VirtualPort.class);
143 + vPortStore = storageService
144 + .<VirtualPortId, VirtualPort>eventuallyConsistentMapBuilder()
145 + .withName(VIRTUALPORT).withSerializer(serializer)
146 + .withTimestampProvider((k, v) -> new WallClockTimestamp())
147 + .build();
125 vPortStore.addListener(virtualPortListener); 148 vPortStore.addListener(virtualPortListener);
126 log.info("Started"); 149 log.info("Started");
127 } 150 }
128 151
129 @Deactivate 152 @Deactivate
130 public void deactivate() { 153 public void deactivate() {
131 - vPortStore.clear(); 154 + vPortStore.removeListener(virtualPortListener);
155 + vPortStore.destroy();
132 log.info("Stoppped"); 156 log.info("Stoppped");
133 } 157 }
134 158
......