fixes for RoleValue serialization
Change-Id: Ie51d0e16a0623061790523920f6a22aa18e74517
Showing
10 changed files
with
159 additions
and
93 deletions
| 1 | +package org.onlab.onos.cli; | ||
| 2 | + | ||
| 3 | +import static com.google.common.collect.Lists.newArrayList; | ||
| 4 | + | ||
| 5 | +import java.util.Collections; | ||
| 6 | +import java.util.List; | ||
| 7 | + | ||
| 8 | +import org.apache.karaf.shell.commands.Command; | ||
| 9 | +import org.onlab.onos.cluster.NodeId; | ||
| 10 | +import org.onlab.onos.mastership.MastershipService; | ||
| 11 | +import org.onlab.onos.net.Device; | ||
| 12 | +import org.onlab.onos.net.DeviceId; | ||
| 13 | +import org.onlab.onos.net.device.DeviceService; | ||
| 14 | + | ||
| 15 | + | ||
| 16 | +/** | ||
| 17 | + * Lists mastership roles of nodes for each device. | ||
| 18 | + */ | ||
| 19 | +@Command(scope = "onos", name = "roles", | ||
| 20 | + description = "Lists mastership roles of nodes for each device.") | ||
| 21 | +public class RolesCommand extends AbstractShellCommand { | ||
| 22 | + | ||
| 23 | + private static final String FMT_HDR = "%s: master=%s\nstandbys: %s nodes"; | ||
| 24 | + private static final String FMT_SB = "\t%s"; | ||
| 25 | + | ||
| 26 | + @Override | ||
| 27 | + protected void execute() { | ||
| 28 | + DeviceService deviceService = get(DeviceService.class); | ||
| 29 | + MastershipService roleService = get(MastershipService.class); | ||
| 30 | + | ||
| 31 | + for (Device d : getSortedDevices(deviceService)) { | ||
| 32 | + DeviceId did = d.id(); | ||
| 33 | + printRoles(roleService, did); | ||
| 34 | + } | ||
| 35 | + } | ||
| 36 | + | ||
| 37 | + /** | ||
| 38 | + * Returns the list of devices sorted using the device ID URIs. | ||
| 39 | + * | ||
| 40 | + * @param service device service | ||
| 41 | + * @return sorted device list | ||
| 42 | + */ | ||
| 43 | + protected static List<Device> getSortedDevices(DeviceService service) { | ||
| 44 | + List<Device> devices = newArrayList(service.getDevices()); | ||
| 45 | + Collections.sort(devices, Comparators.ELEMENT_COMPARATOR); | ||
| 46 | + return devices; | ||
| 47 | + } | ||
| 48 | + | ||
| 49 | + /** | ||
| 50 | + * Prints the role information for a device. | ||
| 51 | + * | ||
| 52 | + * @param deviceId the ID of the device | ||
| 53 | + * @param master the current master | ||
| 54 | + */ | ||
| 55 | + protected void printRoles(MastershipService service, DeviceId deviceId) { | ||
| 56 | + List<NodeId> nodes = service.getNodesFor(deviceId); | ||
| 57 | + NodeId first = null; | ||
| 58 | + NodeId master = null; | ||
| 59 | + | ||
| 60 | + if (!nodes.isEmpty()) { | ||
| 61 | + first = nodes.get(0); | ||
| 62 | + } | ||
| 63 | + if (first != null && | ||
| 64 | + first.equals(service.getMasterFor(deviceId))) { | ||
| 65 | + master = nodes.get(0); | ||
| 66 | + nodes.remove(master); | ||
| 67 | + } | ||
| 68 | + print(FMT_HDR, deviceId, master == null ? "NONE" : master, nodes.size()); | ||
| 69 | + | ||
| 70 | + for (NodeId nid : nodes) { | ||
| 71 | + print(FMT_SB, nid); | ||
| 72 | + } | ||
| 73 | + } | ||
| 74 | +} |
| ... | @@ -24,11 +24,12 @@ import org.onlab.onos.net.DeviceId; | ... | @@ -24,11 +24,12 @@ import org.onlab.onos.net.DeviceId; |
| 24 | import org.onlab.onos.net.MastershipRole; | 24 | import org.onlab.onos.net.MastershipRole; |
| 25 | import org.onlab.onos.store.common.AbstractHazelcastStore; | 25 | import org.onlab.onos.store.common.AbstractHazelcastStore; |
| 26 | import org.onlab.onos.store.common.SMap; | 26 | import org.onlab.onos.store.common.SMap; |
| 27 | +import org.onlab.onos.store.serializers.KryoPoolUtil; | ||
| 27 | import org.onlab.onos.store.serializers.KryoSerializer; | 28 | import org.onlab.onos.store.serializers.KryoSerializer; |
| 29 | +import org.onlab.util.KryoPool; | ||
| 28 | 30 | ||
| 29 | import com.google.common.collect.ImmutableSet; | 31 | import com.google.common.collect.ImmutableSet; |
| 30 | -import com.hazelcast.core.IMap; | 32 | +import com.hazelcast.core.IAtomicLong; |
| 31 | -import com.hazelcast.core.MultiMap; | ||
| 32 | 33 | ||
| 33 | import static org.onlab.onos.net.MastershipRole.*; | 34 | import static org.onlab.onos.net.MastershipRole.*; |
| 34 | 35 | ||
| ... | @@ -49,6 +50,9 @@ implements MastershipStore { | ... | @@ -49,6 +50,9 @@ implements MastershipStore { |
| 49 | protected SMap<DeviceId, RoleValue> roleMap; | 50 | protected SMap<DeviceId, RoleValue> roleMap; |
| 50 | //devices to terms | 51 | //devices to terms |
| 51 | protected SMap<DeviceId, Integer> terms; | 52 | protected SMap<DeviceId, Integer> terms; |
| 53 | + //last-known cluster size, used for tie-breaking when partitioning occurs | ||
| 54 | + protected IAtomicLong clusterSize; | ||
| 55 | + | ||
| 52 | 56 | ||
| 53 | @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) | 57 | @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) |
| 54 | protected ClusterService clusterService; | 58 | protected ClusterService clusterService; |
| ... | @@ -59,8 +63,21 @@ implements MastershipStore { | ... | @@ -59,8 +63,21 @@ implements MastershipStore { |
| 59 | public void activate() { | 63 | public void activate() { |
| 60 | super.activate(); | 64 | super.activate(); |
| 61 | 65 | ||
| 62 | - roleMap = new SMap(theInstance.getMap("nodeRoles"), new KryoSerializer()); | 66 | + this.serializer = new KryoSerializer() { |
| 63 | - terms = new SMap(theInstance.getMap("terms"), new KryoSerializer()); | 67 | + @Override |
| 68 | + protected void setupKryoPool() { | ||
| 69 | + serializerPool = KryoPool.newBuilder() | ||
| 70 | + .register(KryoPoolUtil.API) | ||
| 71 | + | ||
| 72 | + .register(RoleValue.class, new RoleValueSerializer()) | ||
| 73 | + .build() | ||
| 74 | + .populate(1); | ||
| 75 | + } | ||
| 76 | + }; | ||
| 77 | + | ||
| 78 | + roleMap = new SMap(theInstance.getMap("nodeRoles"), this.serializer); | ||
| 79 | + terms = new SMap(theInstance.getMap("terms"), this.serializer); | ||
| 80 | + clusterSize = theInstance.getAtomicLong("clustersize"); | ||
| 64 | // roleMap.addEntryListener(new RemoteMasterShipEventHandler(), true); | 81 | // roleMap.addEntryListener(new RemoteMasterShipEventHandler(), true); |
| 65 | 82 | ||
| 66 | log.info("Started"); | 83 | log.info("Started"); |
| ... | @@ -103,6 +120,7 @@ implements MastershipStore { | ... | @@ -103,6 +120,7 @@ implements MastershipStore { |
| 103 | case MASTER: | 120 | case MASTER: |
| 104 | //reinforce mastership | 121 | //reinforce mastership |
| 105 | rv.reassign(nodeId, STANDBY, NONE); | 122 | rv.reassign(nodeId, STANDBY, NONE); |
| 123 | + roleMap.put(deviceId, rv); | ||
| 106 | return null; | 124 | return null; |
| 107 | case STANDBY: | 125 | case STANDBY: |
| 108 | NodeId current = rv.get(MASTER); | 126 | NodeId current = rv.get(MASTER); |
| ... | @@ -115,11 +133,13 @@ implements MastershipStore { | ... | @@ -115,11 +133,13 @@ implements MastershipStore { |
| 115 | rv.add(MASTER, nodeId); | 133 | rv.add(MASTER, nodeId); |
| 116 | } | 134 | } |
| 117 | rv.reassign(nodeId, STANDBY, NONE); | 135 | rv.reassign(nodeId, STANDBY, NONE); |
| 136 | + roleMap.put(deviceId, rv); | ||
| 118 | updateTerm(deviceId); | 137 | updateTerm(deviceId); |
| 119 | return new MastershipEvent(MASTER_CHANGED, deviceId, nodeId); | 138 | return new MastershipEvent(MASTER_CHANGED, deviceId, nodeId); |
| 120 | case NONE: | 139 | case NONE: |
| 121 | rv.add(MASTER, nodeId); | 140 | rv.add(MASTER, nodeId); |
| 122 | rv.reassign(nodeId, STANDBY, NONE); | 141 | rv.reassign(nodeId, STANDBY, NONE); |
| 142 | + roleMap.put(deviceId, rv); | ||
| 123 | updateTerm(deviceId); | 143 | updateTerm(deviceId); |
| 124 | return new MastershipEvent(MASTER_CHANGED, deviceId, nodeId); | 144 | return new MastershipEvent(MASTER_CHANGED, deviceId, nodeId); |
| 125 | default: | 145 | default: |
| ... | @@ -133,7 +153,7 @@ implements MastershipStore { | ... | @@ -133,7 +153,7 @@ implements MastershipStore { |
| 133 | 153 | ||
| 134 | @Override | 154 | @Override |
| 135 | public NodeId getMaster(DeviceId deviceId) { | 155 | public NodeId getMaster(DeviceId deviceId) { |
| 136 | - return getMaster(deviceId); | 156 | + return getNode(MASTER, deviceId); |
| 137 | } | 157 | } |
| 138 | 158 | ||
| 139 | 159 | ||
| ... | @@ -181,15 +201,18 @@ implements MastershipStore { | ... | @@ -181,15 +201,18 @@ implements MastershipStore { |
| 181 | switch (role) { | 201 | switch (role) { |
| 182 | case MASTER: | 202 | case MASTER: |
| 183 | rv.reassign(local, STANDBY, NONE); | 203 | rv.reassign(local, STANDBY, NONE); |
| 204 | + roleMap.put(deviceId, rv); | ||
| 184 | break; | 205 | break; |
| 185 | case STANDBY: | 206 | case STANDBY: |
| 186 | rv.reassign(local, NONE, STANDBY); | 207 | rv.reassign(local, NONE, STANDBY); |
| 208 | + roleMap.put(deviceId, rv); | ||
| 187 | terms.putIfAbsent(deviceId, INIT); | 209 | terms.putIfAbsent(deviceId, INIT); |
| 188 | break; | 210 | break; |
| 189 | case NONE: | 211 | case NONE: |
| 190 | //claim mastership | 212 | //claim mastership |
| 191 | rv.add(MASTER, local); | 213 | rv.add(MASTER, local); |
| 192 | rv.reassign(local, STANDBY, NONE); | 214 | rv.reassign(local, STANDBY, NONE); |
| 215 | + roleMap.put(deviceId, rv); | ||
| 193 | updateTerm(deviceId); | 216 | updateTerm(deviceId); |
| 194 | role = MastershipRole.MASTER; | 217 | role = MastershipRole.MASTER; |
| 195 | break; | 218 | break; |
| ... | @@ -221,12 +244,13 @@ implements MastershipStore { | ... | @@ -221,12 +244,13 @@ implements MastershipStore { |
| 221 | MastershipRole role = getRole(nodeId, deviceId); | 244 | MastershipRole role = getRole(nodeId, deviceId); |
| 222 | switch (role) { | 245 | switch (role) { |
| 223 | case MASTER: | 246 | case MASTER: |
| 224 | - event = reelect(nodeId, deviceId); | 247 | + event = reelect(nodeId, deviceId, rv); |
| 225 | //fall through to reinforce role | 248 | //fall through to reinforce role |
| 226 | case STANDBY: | 249 | case STANDBY: |
| 227 | //fall through to reinforce role | 250 | //fall through to reinforce role |
| 228 | case NONE: | 251 | case NONE: |
| 229 | rv.reassign(nodeId, NONE, STANDBY); | 252 | rv.reassign(nodeId, NONE, STANDBY); |
| 253 | + roleMap.put(deviceId, rv); | ||
| 230 | break; | 254 | break; |
| 231 | default: | 255 | default: |
| 232 | log.warn("unknown Mastership Role {}", role); | 256 | log.warn("unknown Mastership Role {}", role); |
| ... | @@ -247,12 +271,13 @@ implements MastershipStore { | ... | @@ -247,12 +271,13 @@ implements MastershipStore { |
| 247 | MastershipRole role = getRole(nodeId, deviceId); | 271 | MastershipRole role = getRole(nodeId, deviceId); |
| 248 | switch (role) { | 272 | switch (role) { |
| 249 | case MASTER: | 273 | case MASTER: |
| 250 | - event = reelect(nodeId, deviceId); | 274 | + event = reelect(nodeId, deviceId, rv); |
| 251 | //fall through to reinforce relinquishment | 275 | //fall through to reinforce relinquishment |
| 252 | case STANDBY: | 276 | case STANDBY: |
| 253 | //fall through to reinforce relinquishment | 277 | //fall through to reinforce relinquishment |
| 254 | case NONE: | 278 | case NONE: |
| 255 | rv.reassign(nodeId, STANDBY, NONE); | 279 | rv.reassign(nodeId, STANDBY, NONE); |
| 280 | + roleMap.put(deviceId, rv); | ||
| 256 | break; | 281 | break; |
| 257 | default: | 282 | default: |
| 258 | log.warn("unknown Mastership Role {}", role); | 283 | log.warn("unknown Mastership Role {}", role); |
| ... | @@ -264,8 +289,7 @@ implements MastershipStore { | ... | @@ -264,8 +289,7 @@ implements MastershipStore { |
| 264 | } | 289 | } |
| 265 | 290 | ||
| 266 | //helper to fetch a new master candidate for a given device. | 291 | //helper to fetch a new master candidate for a given device. |
| 267 | - private MastershipEvent reelect(NodeId current, DeviceId deviceId) { | 292 | + private MastershipEvent reelect(NodeId current, DeviceId deviceId, RoleValue rv) { |
| 268 | - RoleValue rv = roleMap.get(deviceId); | ||
| 269 | 293 | ||
| 270 | //if this is an queue it'd be neater. | 294 | //if this is an queue it'd be neater. |
| 271 | NodeId backup = null; | 295 | NodeId backup = null; |
| ... | @@ -278,10 +302,12 @@ implements MastershipStore { | ... | @@ -278,10 +302,12 @@ implements MastershipStore { |
| 278 | 302 | ||
| 279 | if (backup == null) { | 303 | if (backup == null) { |
| 280 | rv.remove(MASTER, current); | 304 | rv.remove(MASTER, current); |
| 305 | + roleMap.put(deviceId, rv); | ||
| 281 | return null; | 306 | return null; |
| 282 | } else { | 307 | } else { |
| 283 | rv.replace(current, backup, MASTER); | 308 | rv.replace(current, backup, MASTER); |
| 284 | rv.reassign(backup, STANDBY, NONE); | 309 | rv.reassign(backup, STANDBY, NONE); |
| 310 | + roleMap.put(deviceId, rv); | ||
| 285 | Integer term = terms.get(deviceId); | 311 | Integer term = terms.get(deviceId); |
| 286 | terms.put(deviceId, ++term); | 312 | terms.put(deviceId, ++term); |
| 287 | return new MastershipEvent( | 313 | return new MastershipEvent( | ... | ... |
| 1 | package org.onlab.onos.store.mastership.impl; | 1 | package org.onlab.onos.store.mastership.impl; |
| 2 | 2 | ||
| 3 | import java.util.Collections; | 3 | import java.util.Collections; |
| 4 | +import java.util.HashMap; | ||
| 4 | import java.util.LinkedList; | 5 | import java.util.LinkedList; |
| 5 | import java.util.List; | 6 | import java.util.List; |
| 6 | import java.util.Map; | 7 | import java.util.Map; |
| ... | @@ -14,7 +15,7 @@ import org.onlab.onos.net.MastershipRole; | ... | @@ -14,7 +15,7 @@ import org.onlab.onos.net.MastershipRole; |
| 14 | */ | 15 | */ |
| 15 | public class RoleValue { | 16 | public class RoleValue { |
| 16 | 17 | ||
| 17 | - Map<MastershipRole, List<NodeId>> value; | 18 | + protected Map<MastershipRole, List<NodeId>> value = new HashMap<>(); |
| 18 | 19 | ||
| 19 | public RoleValue() { | 20 | public RoleValue() { |
| 20 | value.put(MastershipRole.MASTER, new LinkedList<NodeId>()); | 21 | value.put(MastershipRole.MASTER, new LinkedList<NodeId>()); |
| ... | @@ -96,4 +97,16 @@ public class RoleValue { | ... | @@ -96,4 +97,16 @@ public class RoleValue { |
| 96 | add(type, to); | 97 | add(type, to); |
| 97 | } | 98 | } |
| 98 | 99 | ||
| 100 | + @Override | ||
| 101 | + public String toString() { | ||
| 102 | + final StringBuilder builder = new StringBuilder(); | ||
| 103 | + for (Map.Entry<MastershipRole, List<NodeId>> el : value.entrySet()) { | ||
| 104 | + builder.append(el.getKey().toString()).append(": ["); | ||
| 105 | + for (NodeId n : el.getValue()) { | ||
| 106 | + builder.append(n); | ||
| 107 | + } | ||
| 108 | + builder.append("]\n"); | ||
| 109 | + } | ||
| 110 | + return builder.toString(); | ||
| 111 | + } | ||
| 99 | } | 112 | } | ... | ... |
| 1 | -package org.onlab.onos.store.serializers; | 1 | +package org.onlab.onos.store.mastership.impl; |
| 2 | 2 | ||
| 3 | import java.util.List; | 3 | import java.util.List; |
| 4 | import java.util.Map; | 4 | import java.util.Map; |
| 5 | 5 | ||
| 6 | import org.onlab.onos.cluster.NodeId; | 6 | import org.onlab.onos.cluster.NodeId; |
| 7 | import org.onlab.onos.net.MastershipRole; | 7 | import org.onlab.onos.net.MastershipRole; |
| 8 | -import org.onlab.onos.store.mastership.impl.RoleValue; | ||
| 9 | 8 | ||
| 10 | import com.esotericsoftware.kryo.Kryo; | 9 | import com.esotericsoftware.kryo.Kryo; |
| 11 | import com.esotericsoftware.kryo.Serializer; | 10 | import com.esotericsoftware.kryo.Serializer; |
| ... | @@ -13,7 +12,7 @@ import com.esotericsoftware.kryo.io.Input; | ... | @@ -13,7 +12,7 @@ import com.esotericsoftware.kryo.io.Input; |
| 13 | import com.esotericsoftware.kryo.io.Output; | 12 | import com.esotericsoftware.kryo.io.Output; |
| 14 | 13 | ||
| 15 | /** | 14 | /** |
| 16 | - * Serializer for RoleValues used by {@link DistributedMastershipStore} | 15 | + * Serializer for RoleValues used by {@link DistributedMastershipStore}. |
| 17 | */ | 16 | */ |
| 18 | public class RoleValueSerializer extends Serializer<RoleValue> { | 17 | public class RoleValueSerializer extends Serializer<RoleValue> { |
| 19 | 18 | ... | ... |
| ... | @@ -116,7 +116,6 @@ public class DistributedMastershipStoreTest { | ... | @@ -116,7 +116,6 @@ public class DistributedMastershipStoreTest { |
| 116 | testStore.put(DID1, N1, true, false, false); | 116 | testStore.put(DID1, N1, true, false, false); |
| 117 | testStore.put(DID2, N1, true, false, false); | 117 | testStore.put(DID2, N1, true, false, false); |
| 118 | testStore.put(DID3, N2, true, false, false); | 118 | testStore.put(DID3, N2, true, false, false); |
| 119 | - | ||
| 120 | assertEquals("wrong devices", | 119 | assertEquals("wrong devices", |
| 121 | Sets.newHashSet(DID1, DID2), dms.getDevices(N1)); | 120 | Sets.newHashSet(DID1, DID2), dms.getDevices(N1)); |
| 122 | } | 121 | } |
| ... | @@ -244,7 +243,6 @@ public class DistributedMastershipStoreTest { | ... | @@ -244,7 +243,6 @@ public class DistributedMastershipStoreTest { |
| 244 | RoleValue rv = dms.roleMap.get(dev); | 243 | RoleValue rv = dms.roleMap.get(dev); |
| 245 | if (rv == null) { | 244 | if (rv == null) { |
| 246 | rv = new RoleValue(); | 245 | rv = new RoleValue(); |
| 247 | - dms.roleMap.put(dev, rv); | ||
| 248 | } | 246 | } |
| 249 | 247 | ||
| 250 | if (master) { | 248 | if (master) { |
| ... | @@ -259,6 +257,7 @@ public class DistributedMastershipStoreTest { | ... | @@ -259,6 +257,7 @@ public class DistributedMastershipStoreTest { |
| 259 | if (term) { | 257 | if (term) { |
| 260 | dms.terms.put(dev, 0); | 258 | dms.terms.put(dev, 0); |
| 261 | } | 259 | } |
| 260 | + dms.roleMap.put(dev, rv); | ||
| 262 | } | 261 | } |
| 263 | 262 | ||
| 264 | //a dumb utility function. | 263 | //a dumb utility function. |
| ... | @@ -266,9 +265,9 @@ public class DistributedMastershipStoreTest { | ... | @@ -266,9 +265,9 @@ public class DistributedMastershipStoreTest { |
| 266 | for (Map.Entry<DeviceId, RoleValue> el : dms.roleMap.entrySet()) { | 265 | for (Map.Entry<DeviceId, RoleValue> el : dms.roleMap.entrySet()) { |
| 267 | System.out.println("DID: " + el.getKey()); | 266 | System.out.println("DID: " + el.getKey()); |
| 268 | for (MastershipRole role : MastershipRole.values()) { | 267 | for (MastershipRole role : MastershipRole.values()) { |
| 269 | - System.out.println(role.toString() + ":"); | 268 | + System.out.println("\t" + role.toString() + ":"); |
| 270 | for (NodeId n : el.getValue().nodesOfRole(role)) { | 269 | for (NodeId n : el.getValue().nodesOfRole(role)) { |
| 271 | - System.out.println("\t" + n); | 270 | + System.out.println("\t\t" + n); |
| 272 | } | 271 | } |
| 273 | } | 272 | } |
| 274 | } | 273 | } | ... | ... |
core/store/hz/cluster/src/test/java/org/onlab/onos/store/mastership/impl/RoleValueTest.java
0 → 100644
| 1 | +package org.onlab.onos.store.mastership.impl; | ||
| 2 | + | ||
| 3 | +import static org.junit.Assert.assertEquals; | ||
| 4 | +import static org.junit.Assert.assertTrue; | ||
| 5 | +import static org.onlab.onos.net.MastershipRole.*; | ||
| 6 | + | ||
| 7 | +import org.junit.Test; | ||
| 8 | +import org.onlab.onos.cluster.NodeId; | ||
| 9 | + | ||
| 10 | +import com.google.common.collect.Sets; | ||
| 11 | + | ||
| 12 | +public class RoleValueTest { | ||
| 13 | + | ||
| 14 | + private static final RoleValue RV = new RoleValue(); | ||
| 15 | + | ||
| 16 | + private static final NodeId NID1 = new NodeId("node1"); | ||
| 17 | + private static final NodeId NID2 = new NodeId("node2"); | ||
| 18 | + private static final NodeId NID3 = new NodeId("node3"); | ||
| 19 | + | ||
| 20 | + @Test | ||
| 21 | + public void add() { | ||
| 22 | + assertEquals("faulty initialization: ", 3, RV.value.size()); | ||
| 23 | + RV.add(MASTER, NID1); | ||
| 24 | + RV.add(STANDBY, NID2); | ||
| 25 | + RV.add(STANDBY, NID3); | ||
| 26 | + | ||
| 27 | + assertEquals("wrong nodeID: ", NID1, RV.get(MASTER)); | ||
| 28 | + assertTrue("wrong nodeIDs: ", | ||
| 29 | + Sets.newHashSet(NID3, NID2).containsAll(RV.nodesOfRole(STANDBY))); | ||
| 30 | + } | ||
| 31 | +} |
| ... | @@ -26,7 +26,6 @@ import org.onlab.onos.net.device.DefaultPortDescription; | ... | @@ -26,7 +26,6 @@ import org.onlab.onos.net.device.DefaultPortDescription; |
| 26 | import org.onlab.onos.net.link.DefaultLinkDescription; | 26 | import org.onlab.onos.net.link.DefaultLinkDescription; |
| 27 | import org.onlab.onos.net.provider.ProviderId; | 27 | import org.onlab.onos.net.provider.ProviderId; |
| 28 | import org.onlab.onos.store.Timestamp; | 28 | import org.onlab.onos.store.Timestamp; |
| 29 | -import org.onlab.onos.store.mastership.impl.RoleValue; | ||
| 30 | import org.onlab.packet.IpAddress; | 29 | import org.onlab.packet.IpAddress; |
| 31 | import org.onlab.packet.IpPrefix; | 30 | import org.onlab.packet.IpPrefix; |
| 32 | import org.onlab.util.KryoPool; | 31 | import org.onlab.util.KryoPool; |
| ... | @@ -66,7 +65,6 @@ public final class KryoPoolUtil { | ... | @@ -66,7 +65,6 @@ public final class KryoPoolUtil { |
| 66 | DefaultDevice.class, | 65 | DefaultDevice.class, |
| 67 | DefaultDeviceDescription.class, | 66 | DefaultDeviceDescription.class, |
| 68 | DefaultLinkDescription.class, | 67 | DefaultLinkDescription.class, |
| 69 | - RoleValue.class, | ||
| 70 | Port.class, | 68 | Port.class, |
| 71 | DefaultPortDescription.class, | 69 | DefaultPortDescription.class, |
| 72 | Element.class, | 70 | Element.class, |
| ... | @@ -84,7 +82,6 @@ public final class KryoPoolUtil { | ... | @@ -84,7 +82,6 @@ public final class KryoPoolUtil { |
| 84 | .register(ConnectPoint.class, new ConnectPointSerializer()) | 82 | .register(ConnectPoint.class, new ConnectPointSerializer()) |
| 85 | .register(DefaultLink.class, new DefaultLinkSerializer()) | 83 | .register(DefaultLink.class, new DefaultLinkSerializer()) |
| 86 | .register(MastershipTerm.class, new MastershipTermSerializer()) | 84 | .register(MastershipTerm.class, new MastershipTermSerializer()) |
| 87 | - .register(RoleValue.class, new RoleValueSerializer()) | ||
| 88 | 85 | ||
| 89 | .build(); | 86 | .build(); |
| 90 | 87 | ... | ... |
| 1 | -package org.onlab.onos.store.serializers; | ||
| 2 | - | ||
| 3 | -import org.onlab.onos.net.MastershipRole; | ||
| 4 | - | ||
| 5 | -import com.esotericsoftware.kryo.Kryo; | ||
| 6 | -import com.esotericsoftware.kryo.Serializer; | ||
| 7 | -import com.esotericsoftware.kryo.io.Input; | ||
| 8 | -import com.esotericsoftware.kryo.io.Output; | ||
| 9 | - | ||
| 10 | -/** | ||
| 11 | - * Kryo Serializer for {@link org.onlab.onos.net.MastershipRole}. | ||
| 12 | - */ | ||
| 13 | -public class MastershipRoleSerializer extends Serializer<MastershipRole> { | ||
| 14 | - | ||
| 15 | - /** | ||
| 16 | - * Creates {@link MastershipRole} serializer instance. | ||
| 17 | - */ | ||
| 18 | - public MastershipRoleSerializer() { | ||
| 19 | - // non-null, immutable | ||
| 20 | - super(false, true); | ||
| 21 | - } | ||
| 22 | - | ||
| 23 | - @Override | ||
| 24 | - public MastershipRole read(Kryo kryo, Input input, Class<MastershipRole> type) { | ||
| 25 | - final String role = kryo.readObject(input, String.class); | ||
| 26 | - return MastershipRole.valueOf(role); | ||
| 27 | - } | ||
| 28 | - | ||
| 29 | - @Override | ||
| 30 | - public void write(Kryo kryo, Output output, MastershipRole object) { | ||
| 31 | - kryo.writeObject(output, object.toString()); | ||
| 32 | - } | ||
| 33 | - | ||
| 34 | -} |
| ... | @@ -22,11 +22,9 @@ import org.onlab.onos.net.Device; | ... | @@ -22,11 +22,9 @@ import org.onlab.onos.net.Device; |
| 22 | import org.onlab.onos.net.DeviceId; | 22 | import org.onlab.onos.net.DeviceId; |
| 23 | import org.onlab.onos.net.Link; | 23 | import org.onlab.onos.net.Link; |
| 24 | import org.onlab.onos.net.LinkKey; | 24 | import org.onlab.onos.net.LinkKey; |
| 25 | -import org.onlab.onos.net.MastershipRole; | ||
| 26 | import org.onlab.onos.net.PortNumber; | 25 | import org.onlab.onos.net.PortNumber; |
| 27 | import org.onlab.onos.net.SparseAnnotations; | 26 | import org.onlab.onos.net.SparseAnnotations; |
| 28 | import org.onlab.onos.net.provider.ProviderId; | 27 | import org.onlab.onos.net.provider.ProviderId; |
| 29 | -import org.onlab.onos.store.mastership.impl.RoleValue; | ||
| 30 | import org.onlab.packet.IpAddress; | 28 | import org.onlab.packet.IpAddress; |
| 31 | import org.onlab.packet.IpPrefix; | 29 | import org.onlab.packet.IpPrefix; |
| 32 | import org.onlab.util.KryoPool; | 30 | import org.onlab.util.KryoPool; |
| ... | @@ -59,13 +57,6 @@ public class KryoSerializerTest { | ... | @@ -59,13 +57,6 @@ public class KryoSerializerTest { |
| 59 | .remove("A1") | 57 | .remove("A1") |
| 60 | .set("B3", "b3") | 58 | .set("B3", "b3") |
| 61 | .build(); | 59 | .build(); |
| 62 | - private static final RoleValue RV = new RoleValue(); | ||
| 63 | - static { | ||
| 64 | - RV.add(MastershipRole.MASTER, new NodeId("node1")); | ||
| 65 | - RV.add(MastershipRole.STANDBY, new NodeId("node2")); | ||
| 66 | - RV.add(MastershipRole.STANDBY, new NodeId("node3")); | ||
| 67 | - RV.add(MastershipRole.NONE, new NodeId("node4")); | ||
| 68 | - }; | ||
| 69 | 60 | ||
| 70 | private static KryoPool kryos; | 61 | private static KryoPool kryos; |
| 71 | 62 | ||
| ... | @@ -123,9 +114,6 @@ public class KryoSerializerTest { | ... | @@ -123,9 +114,6 @@ public class KryoSerializerTest { |
| 123 | testSerialized(PIDA); | 114 | testSerialized(PIDA); |
| 124 | testSerialized(new NodeId("bar")); | 115 | testSerialized(new NodeId("bar")); |
| 125 | testSerialized(MastershipTerm.of(new NodeId("foo"), 2)); | 116 | testSerialized(MastershipTerm.of(new NodeId("foo"), 2)); |
| 126 | - for (MastershipRole role : MastershipRole.values()) { | ||
| 127 | - testSerialized(role); | ||
| 128 | - } | ||
| 129 | } | 117 | } |
| 130 | 118 | ||
| 131 | @Test | 119 | @Test | ... | ... |
tools/test/bin/onos-config
deleted
100755 → 0
| 1 | -#!/bin/bash | ||
| 2 | -# ----------------------------------------------------------------------------- | ||
| 3 | -# Remotely configures & starts ONOS for the first time. | ||
| 4 | -# ----------------------------------------------------------------------------- | ||
| 5 | - | ||
| 6 | -[ ! -d "$ONOS_ROOT" ] && echo "ONOS_ROOT is not defined" >&2 && exit 1 | ||
| 7 | -. $ONOS_ROOT/tools/build/envDefaults | ||
| 8 | - | ||
| 9 | -remote=$ONOS_USER@${1:-$OCI} | ||
| 10 | - | ||
| 11 | -# Generate a cluster.json from the ON* environment variables | ||
| 12 | -CDEF_FILE=/tmp/cluster.json | ||
| 13 | -echo "{ \"nodes\":[" > $CDEF_FILE | ||
| 14 | -for node in $(env | sort | egrep "OC[2-9]+" | cut -d= -f2); do | ||
| 15 | - echo " { \"id\": \"$node\", \"ip\": \"$node\", \"tcpPort\": 9876 }," >> $CDEF_FILE | ||
| 16 | -done | ||
| 17 | -echo " { \"id\": \"$OC1\", \"ip\": \"$OC1\", \"tcpPort\": 9876 }" >> $CDEF_FILE | ||
| 18 | -echo "]}" >> $CDEF_FILE | ||
| 19 | - | ||
| 20 | -ssh $remote " | ||
| 21 | - sudo perl -pi.bak -e \"s/ <interface>.*</ <interface>${ONOS_NIC:-192.168.56.*}</g\" \ | ||
| 22 | - $ONOS_INSTALL_DIR/$KARAF_DIST/etc/hazelcast.xml | ||
| 23 | - | ||
| 24 | - echo \"onos.ip = \$(ifconfig | grep $ONOS_NIC | cut -d: -f2 | cut -d\\ -f1)\" \ | ||
| 25 | - >> $ONOS_INSTALL_DIR/$KARAF_DIST/etc/system.properties | ||
| 26 | -" | ||
| 27 | -scp -q $CDEF_FILE $remote:$ONOS_INSTALL_DIR/config/ |
-
Please register or login to post a comment