Showing
6 changed files
with
25 additions
and
17 deletions
... | @@ -8,7 +8,7 @@ import java.util.concurrent.atomic.AtomicInteger; | ... | @@ -8,7 +8,7 @@ import java.util.concurrent.atomic.AtomicInteger; |
8 | */ | 8 | */ |
9 | public final class ApplicationId { | 9 | public final class ApplicationId { |
10 | 10 | ||
11 | - private static AtomicInteger idDispenser; | 11 | + private static final AtomicInteger ID_DISPENCER = new AtomicInteger(1); |
12 | private final Integer id; | 12 | private final Integer id; |
13 | 13 | ||
14 | // Ban public construction | 14 | // Ban public construction |
... | @@ -50,10 +50,7 @@ public final class ApplicationId { | ... | @@ -50,10 +50,7 @@ public final class ApplicationId { |
50 | * @return app id | 50 | * @return app id |
51 | */ | 51 | */ |
52 | public static ApplicationId getAppId() { | 52 | public static ApplicationId getAppId() { |
53 | - if (ApplicationId.idDispenser == null) { | 53 | + return new ApplicationId(ApplicationId.ID_DISPENCER.getAndIncrement()); |
54 | - ApplicationId.idDispenser = new AtomicInteger(1); | ||
55 | - } | ||
56 | - return new ApplicationId(ApplicationId.idDispenser.getAndIncrement()); | ||
57 | } | 54 | } |
58 | 55 | ||
59 | } | 56 | } | ... | ... |
... | @@ -26,6 +26,9 @@ public final class FlowId { | ... | @@ -26,6 +26,9 @@ public final class FlowId { |
26 | if (this == obj) { | 26 | if (this == obj) { |
27 | return true; | 27 | return true; |
28 | } | 28 | } |
29 | + if (obj == null) { | ||
30 | + return false; | ||
31 | + } | ||
29 | if (obj.getClass() == this.getClass()) { | 32 | if (obj.getClass() == this.getClass()) { |
30 | FlowId that = (FlowId) obj; | 33 | FlowId that = (FlowId) obj; |
31 | return Objects.equal(this.flowid, that.flowid); | 34 | return Objects.equal(this.flowid, that.flowid); | ... | ... |
... | @@ -39,7 +39,7 @@ public class DeviceEventTest extends AbstractEventTest { | ... | @@ -39,7 +39,7 @@ public class DeviceEventTest extends AbstractEventTest { |
39 | Device device = createDevice(); | 39 | Device device = createDevice(); |
40 | Port port = new DefaultPort(device, PortNumber.portNumber(123), true); | 40 | Port port = new DefaultPort(device, PortNumber.portNumber(123), true); |
41 | long before = System.currentTimeMillis(); | 41 | long before = System.currentTimeMillis(); |
42 | - DeviceEvent event = new DeviceEvent(DeviceEvent.Type.DEVICE_ADDED, device); | 42 | + DeviceEvent event = new DeviceEvent(DeviceEvent.Type.DEVICE_ADDED, device, port); |
43 | long after = System.currentTimeMillis(); | 43 | long after = System.currentTimeMillis(); |
44 | validateEvent(event, DeviceEvent.Type.DEVICE_ADDED, device, before, after); | 44 | validateEvent(event, DeviceEvent.Type.DEVICE_ADDED, device, before, after); |
45 | } | 45 | } | ... | ... |
... | @@ -94,14 +94,14 @@ public class ProxyArpManager implements ProxyArpService { | ... | @@ -94,14 +94,14 @@ public class ProxyArpManager implements ProxyArpService { |
94 | 94 | ||
95 | @Override | 95 | @Override |
96 | public boolean known(IpPrefix addr) { | 96 | public boolean known(IpPrefix addr) { |
97 | - checkNotNull(MAC_ADDR_NULL, addr); | 97 | + checkNotNull(addr, MAC_ADDR_NULL); |
98 | Set<Host> hosts = hostService.getHostsByIp(addr); | 98 | Set<Host> hosts = hostService.getHostsByIp(addr); |
99 | return !hosts.isEmpty(); | 99 | return !hosts.isEmpty(); |
100 | } | 100 | } |
101 | 101 | ||
102 | @Override | 102 | @Override |
103 | public void reply(Ethernet eth) { | 103 | public void reply(Ethernet eth) { |
104 | - checkNotNull(REQUEST_NULL, eth); | 104 | + checkNotNull(eth, REQUEST_NULL); |
105 | checkArgument(eth.getEtherType() == Ethernet.TYPE_ARP, | 105 | checkArgument(eth.getEtherType() == Ethernet.TYPE_ARP, |
106 | REQUEST_NOT_ARP); | 106 | REQUEST_NOT_ARP); |
107 | ARP arp = (ARP) eth.getPayload(); | 107 | ARP arp = (ARP) eth.getPayload(); |
... | @@ -137,7 +137,7 @@ public class ProxyArpManager implements ProxyArpService { | ... | @@ -137,7 +137,7 @@ public class ProxyArpManager implements ProxyArpService { |
137 | 137 | ||
138 | @Override | 138 | @Override |
139 | public void forward(Ethernet eth) { | 139 | public void forward(Ethernet eth) { |
140 | - checkNotNull(REQUEST_NULL, eth); | 140 | + checkNotNull(eth, REQUEST_NULL); |
141 | checkArgument(eth.getEtherType() == Ethernet.TYPE_ARP, | 141 | checkArgument(eth.getEtherType() == Ethernet.TYPE_ARP, |
142 | REQUEST_NOT_ARP); | 142 | REQUEST_NOT_ARP); |
143 | ARP arp = (ARP) eth.getPayload(); | 143 | ARP arp = (ARP) eth.getPayload(); |
... | @@ -206,12 +206,12 @@ public class ProxyArpManager implements ProxyArpService { | ... | @@ -206,12 +206,12 @@ public class ProxyArpManager implements ProxyArpService { |
206 | for (Link l : links) { | 206 | for (Link l : links) { |
207 | // for each link, mark the concerned ports as internal | 207 | // for each link, mark the concerned ports as internal |
208 | // and the remaining ports are therefore external. | 208 | // and the remaining ports are therefore external. |
209 | - if (l.src().deviceId().equals(d) | 209 | + if (l.src().deviceId().equals(d.id()) |
210 | && ports.contains(l.src().port())) { | 210 | && ports.contains(l.src().port())) { |
211 | ports.remove(l.src().port()); | 211 | ports.remove(l.src().port()); |
212 | internalPorts.put(d, l.src().port()); | 212 | internalPorts.put(d, l.src().port()); |
213 | } | 213 | } |
214 | - if (l.dst().deviceId().equals(d) | 214 | + if (l.dst().deviceId().equals(d.id()) |
215 | && ports.contains(l.dst().port())) { | 215 | && ports.contains(l.dst().port())) { |
216 | ports.remove(l.dst().port()); | 216 | ports.remove(l.dst().port()); |
217 | internalPorts.put(d, l.dst().port()); | 217 | internalPorts.put(d, l.dst().port()); | ... | ... |
... | @@ -34,7 +34,8 @@ import com.google.common.collect.ImmutableMap; | ... | @@ -34,7 +34,8 @@ import com.google.common.collect.ImmutableMap; |
34 | import com.google.common.collect.ImmutableSet; | 34 | import com.google.common.collect.ImmutableSet; |
35 | import com.google.common.testing.EqualsTester; | 35 | import com.google.common.testing.EqualsTester; |
36 | 36 | ||
37 | -public class KryoSerializerTests { | 37 | +public class KryoSerializerTest { |
38 | + | ||
38 | private static final ProviderId PID = new ProviderId("of", "foo"); | 39 | private static final ProviderId PID = new ProviderId("of", "foo"); |
39 | private static final ProviderId PIDA = new ProviderId("of", "foo", true); | 40 | private static final ProviderId PIDA = new ProviderId("of", "foo", true); |
40 | private static final DeviceId DID1 = deviceId("of:foo"); | 41 | private static final DeviceId DID1 = deviceId("of:foo"); |
... | @@ -92,7 +93,7 @@ public class KryoSerializerTests { | ... | @@ -92,7 +93,7 @@ public class KryoSerializerTests { |
92 | 93 | ||
93 | 94 | ||
94 | @Test | 95 | @Test |
95 | - public final void test() { | 96 | + public final void testSerialization() { |
96 | testSerialized(new ConnectPoint(DID1, P1)); | 97 | testSerialized(new ConnectPoint(DID1, P1)); |
97 | testSerialized(new DefaultLink(PID, CP1, CP2, Link.Type.DIRECT)); | 98 | testSerialized(new DefaultLink(PID, CP1, CP2, Link.Type.DIRECT)); |
98 | testSerialized(new DefaultPort(DEV1, P1, true)); | 99 | testSerialized(new DefaultPort(DEV1, P1, true)); |
... | @@ -119,6 +120,7 @@ public class KryoSerializerTests { | ... | @@ -119,6 +120,7 @@ public class KryoSerializerTests { |
119 | } | 120 | } |
120 | } | 121 | } |
121 | 122 | ||
123 | + @Test | ||
122 | public final void testAnnotations() { | 124 | public final void testAnnotations() { |
123 | // Annotations does not have equals defined, manually test equality | 125 | // Annotations does not have equals defined, manually test equality |
124 | final byte[] a1Bytes = kryos.serialize(A1); | 126 | final byte[] a1Bytes = kryos.serialize(A1); |
... | @@ -132,9 +134,9 @@ public class KryoSerializerTests { | ... | @@ -132,9 +134,9 @@ public class KryoSerializerTests { |
132 | 134 | ||
133 | // code clone | 135 | // code clone |
134 | public static void assertAnnotationsEquals(Annotations actual, SparseAnnotations... annotations) { | 136 | public static void assertAnnotationsEquals(Annotations actual, SparseAnnotations... annotations) { |
135 | - DefaultAnnotations expected = DefaultAnnotations.builder().build(); | 137 | + SparseAnnotations expected = DefaultAnnotations.builder().build(); |
136 | for (SparseAnnotations a : annotations) { | 138 | for (SparseAnnotations a : annotations) { |
137 | - expected = DefaultAnnotations.merge(expected, a); | 139 | + expected = DefaultAnnotations.union(expected, a); |
138 | } | 140 | } |
139 | assertEquals(expected.keys(), actual.keys()); | 141 | assertEquals(expected.keys(), actual.keys()); |
140 | for (String key : expected.keys()) { | 142 | for (String key : expected.keys()) { | ... | ... |
... | @@ -8,7 +8,7 @@ import org.jboss.netty.util.HashedWheelTimer; | ... | @@ -8,7 +8,7 @@ import org.jboss.netty.util.HashedWheelTimer; |
8 | */ | 8 | */ |
9 | public final class Timer { | 9 | public final class Timer { |
10 | 10 | ||
11 | - private static HashedWheelTimer timer; | 11 | + private static volatile HashedWheelTimer timer; |
12 | 12 | ||
13 | // Ban public construction | 13 | // Ban public construction |
14 | private Timer() { | 14 | private Timer() { |
... | @@ -21,10 +21,16 @@ public final class Timer { | ... | @@ -21,10 +21,16 @@ public final class Timer { |
21 | */ | 21 | */ |
22 | public static HashedWheelTimer getTimer() { | 22 | public static HashedWheelTimer getTimer() { |
23 | if (Timer.timer == null) { | 23 | if (Timer.timer == null) { |
24 | + initTimer(); | ||
25 | + } | ||
26 | + return Timer.timer; | ||
27 | + } | ||
28 | + | ||
29 | + private static synchronized void initTimer() { | ||
30 | + if (Timer.timer == null) { | ||
24 | Timer.timer = new HashedWheelTimer(); | 31 | Timer.timer = new HashedWheelTimer(); |
25 | Timer.timer.start(); | 32 | Timer.timer.start(); |
26 | } | 33 | } |
27 | - return Timer.timer; | ||
28 | } | 34 | } |
29 | 35 | ||
30 | } | 36 | } | ... | ... |
-
Please register or login to post a comment