Carry previous location information in HostEvent
Change-Id: I06957d368a8a547cc3adb36bce4aaf96c432f4c8
Showing
2 changed files
with
40 additions
and
4 deletions
| ... | @@ -15,8 +15,12 @@ | ... | @@ -15,8 +15,12 @@ |
| 15 | */ | 15 | */ |
| 16 | package org.onosproject.net.host; | 16 | package org.onosproject.net.host; |
| 17 | 17 | ||
| 18 | +import org.joda.time.LocalDateTime; | ||
| 18 | import org.onosproject.event.AbstractEvent; | 19 | import org.onosproject.event.AbstractEvent; |
| 19 | import org.onosproject.net.Host; | 20 | import org.onosproject.net.Host; |
| 21 | +import org.onosproject.net.HostLocation; | ||
| 22 | + | ||
| 23 | +import static com.google.common.base.MoreObjects.toStringHelper; | ||
| 20 | 24 | ||
| 21 | /** | 25 | /** |
| 22 | * Describes end-station host event. | 26 | * Describes end-station host event. |
| ... | @@ -48,6 +52,8 @@ public class HostEvent extends AbstractEvent<HostEvent.Type, Host> { | ... | @@ -48,6 +52,8 @@ public class HostEvent extends AbstractEvent<HostEvent.Type, Host> { |
| 48 | HOST_MOVED | 52 | HOST_MOVED |
| 49 | } | 53 | } |
| 50 | 54 | ||
| 55 | + private HostLocation prevLocation; | ||
| 56 | + | ||
| 51 | /** | 57 | /** |
| 52 | * Creates an event of a given type and for the specified host and the | 58 | * Creates an event of a given type and for the specified host and the |
| 53 | * current time. | 59 | * current time. |
| ... | @@ -70,4 +76,35 @@ public class HostEvent extends AbstractEvent<HostEvent.Type, Host> { | ... | @@ -70,4 +76,35 @@ public class HostEvent extends AbstractEvent<HostEvent.Type, Host> { |
| 70 | super(type, host, time); | 76 | super(type, host, time); |
| 71 | } | 77 | } |
| 72 | 78 | ||
| 79 | + /** | ||
| 80 | + * Creates an event with HOST_MOVED type along with the previous location | ||
| 81 | + * of the host. | ||
| 82 | + * | ||
| 83 | + * @param host event host subject | ||
| 84 | + * @param prevLocation previous location of the host | ||
| 85 | + */ | ||
| 86 | + public HostEvent(Host host, HostLocation prevLocation) { | ||
| 87 | + super(Type.HOST_MOVED, host); | ||
| 88 | + this.prevLocation = prevLocation; | ||
| 89 | + } | ||
| 90 | + | ||
| 91 | + /** | ||
| 92 | + * Gets the previous location information in this host event. | ||
| 93 | + * | ||
| 94 | + * @return the previous location, or null if previous location is not | ||
| 95 | + * specified. | ||
| 96 | + */ | ||
| 97 | + public HostLocation prevLocation() { | ||
| 98 | + return this.prevLocation; | ||
| 99 | + } | ||
| 100 | + | ||
| 101 | + @Override | ||
| 102 | + public String toString() { | ||
| 103 | + return toStringHelper(this) | ||
| 104 | + .add("time", new LocalDateTime(time())) | ||
| 105 | + .add("type", type()) | ||
| 106 | + .add("subject", subject()) | ||
| 107 | + .add("prevLocation", prevLocation()) | ||
| 108 | + .toString(); | ||
| 109 | + } | ||
| 73 | } | 110 | } | ... | ... |
| ... | @@ -20,7 +20,6 @@ import static com.google.common.base.Preconditions.checkState; | ... | @@ -20,7 +20,6 @@ import static com.google.common.base.Preconditions.checkState; |
| 20 | import static org.onosproject.net.DefaultAnnotations.merge; | 20 | import static org.onosproject.net.DefaultAnnotations.merge; |
| 21 | import static org.onosproject.net.host.HostEvent.Type.HOST_ADDED; | 21 | import static org.onosproject.net.host.HostEvent.Type.HOST_ADDED; |
| 22 | import static org.onosproject.net.host.HostEvent.Type.HOST_REMOVED; | 22 | import static org.onosproject.net.host.HostEvent.Type.HOST_REMOVED; |
| 23 | -import static org.onosproject.net.host.HostEvent.Type.HOST_MOVED; | ||
| 24 | import static org.onosproject.net.host.HostEvent.Type.HOST_UPDATED; | 23 | import static org.onosproject.net.host.HostEvent.Type.HOST_UPDATED; |
| 25 | import static org.onosproject.store.service.EventuallyConsistentMapEvent.Type.PUT; | 24 | import static org.onosproject.store.service.EventuallyConsistentMapEvent.Type.PUT; |
| 26 | import static org.onosproject.store.service.EventuallyConsistentMapEvent.Type.REMOVE; | 25 | import static org.onosproject.store.service.EventuallyConsistentMapEvent.Type.REMOVE; |
| ... | @@ -89,7 +88,7 @@ public class ECHostStore | ... | @@ -89,7 +88,7 @@ public class ECHostStore |
| 89 | 88 | ||
| 90 | private EventuallyConsistentMap<HostId, DefaultHost> hosts; | 89 | private EventuallyConsistentMap<HostId, DefaultHost> hosts; |
| 91 | 90 | ||
| 92 | - private final ConcurrentHashMap<HostId, ConnectPoint> locations = | 91 | + private final ConcurrentHashMap<HostId, HostLocation> locations = |
| 93 | new ConcurrentHashMap<>(); | 92 | new ConcurrentHashMap<>(); |
| 94 | 93 | ||
| 95 | private EventuallyConsistentMapListener<HostId, DefaultHost> hostLocationTracker = | 94 | private EventuallyConsistentMapListener<HostId, DefaultHost> hostLocationTracker = |
| ... | @@ -254,11 +253,11 @@ public class ECHostStore | ... | @@ -254,11 +253,11 @@ public class ECHostStore |
| 254 | public void event(EventuallyConsistentMapEvent<HostId, DefaultHost> event) { | 253 | public void event(EventuallyConsistentMapEvent<HostId, DefaultHost> event) { |
| 255 | DefaultHost host = checkNotNull(event.value()); | 254 | DefaultHost host = checkNotNull(event.value()); |
| 256 | if (event.type() == PUT) { | 255 | if (event.type() == PUT) { |
| 257 | - ConnectPoint prevLocation = locations.put(host.id(), host.location()); | 256 | + HostLocation prevLocation = locations.put(host.id(), host.location()); |
| 258 | if (prevLocation == null) { | 257 | if (prevLocation == null) { |
| 259 | notifyDelegate(new HostEvent(HOST_ADDED, host)); | 258 | notifyDelegate(new HostEvent(HOST_ADDED, host)); |
| 260 | } else if (!Objects.equals(prevLocation, host.location())) { | 259 | } else if (!Objects.equals(prevLocation, host.location())) { |
| 261 | - notifyDelegate(new HostEvent(HOST_MOVED, host)); | 260 | + notifyDelegate(new HostEvent(host, prevLocation)); |
| 262 | } else { | 261 | } else { |
| 263 | notifyDelegate(new HostEvent(HOST_UPDATED, host)); | 262 | notifyDelegate(new HostEvent(HOST_UPDATED, host)); |
| 264 | } | 263 | } | ... | ... |
-
Please register or login to post a comment