BUG-7573: add BucketStore source monitoring
[controller.git] / opendaylight / md-sal / sal-remoterpc-connector / src / main / java / org / opendaylight / controller / remote / rpc / registry / RoutingTable.java
index f67657f6927801931fae2fd0434481169f2f3de8..90b069e58785aa95c50b36734aee9d5eaadffab4 100644 (file)
@@ -8,52 +8,58 @@
 package org.opendaylight.controller.remote.rpc.registry;
 
 import akka.actor.ActorRef;
-import akka.japi.Option;
-import akka.japi.Pair;
+import com.google.common.base.Preconditions;
 import java.io.Serializable;
 import java.util.HashMap;
 import java.util.Map;
-import org.opendaylight.controller.remote.rpc.registry.gossip.Copier;
+import java.util.Optional;
+import java.util.Set;
+import org.opendaylight.controller.remote.rpc.registry.gossip.BucketData;
 import org.opendaylight.controller.sal.connector.api.RpcRouter;
+import org.opendaylight.controller.sal.connector.api.RpcRouter.RouteIdentifier;
 
-public class RoutingTable implements Copier<RoutingTable>, Serializable {
+public class RoutingTable implements BucketData<RoutingTable>, Serializable {
     private static final long serialVersionUID = 5592610415175278760L;
 
-    private final Map<RpcRouter.RouteIdentifier<?, ?, ?>, Long> table = new HashMap<>();
-    private ActorRef router;
+    private final Map<RouteIdentifier<?, ?, ?>, Long> table;
+    private final ActorRef router;
+
+    private RoutingTable(final ActorRef router, final Map<RouteIdentifier<?, ?, ?>, Long> table) {
+        this.router = Preconditions.checkNotNull(router);
+        this.table = Preconditions.checkNotNull(table);
+    }
+
+    RoutingTable(final ActorRef router) {
+        this(router, new HashMap<>());
+    }
 
     @Override
     public RoutingTable copy() {
-        RoutingTable copy = new RoutingTable();
-        copy.table.putAll(table);
-        copy.setRouter(this.getRouter());
-
-        return copy;
+        return new RoutingTable(router, new HashMap<>(table));
     }
 
-    public Option<Pair<ActorRef, Long>> getRouterFor(RpcRouter.RouteIdentifier<?, ?, ?> routeId){
-        Long updatedTime = table.get(routeId);
+    @Override
+    public Optional<ActorRef> getWatchActor() {
+        return Optional.of(router);
+    }
 
-        if (updatedTime == null || router == null) {
-            return Option.none();
-        } else {
-            return Option.option(new Pair<>(router, updatedTime));
-        }
+    public Set<RpcRouter.RouteIdentifier<?, ?, ?>> getRoutes() {
+        return table.keySet();
     }
 
-    public void addRoute(RpcRouter.RouteIdentifier<?,?,?> routeId){
+    public void addRoute(final RpcRouter.RouteIdentifier<?, ?, ?> routeId) {
         table.put(routeId, System.currentTimeMillis());
     }
 
-    public void removeRoute(RpcRouter.RouteIdentifier<?, ?, ?> routeId){
+    public void removeRoute(final RpcRouter.RouteIdentifier<?, ?, ?> routeId) {
         table.remove(routeId);
     }
 
-    public boolean contains(RpcRouter.RouteIdentifier<?, ?, ?> routeId){
+    public boolean contains(final RpcRouter.RouteIdentifier<?, ?, ?> routeId) {
         return table.containsKey(routeId);
     }
 
-    public boolean isEmpty(){
+    public boolean isEmpty() {
         return table.isEmpty();
     }
 
@@ -65,15 +71,8 @@ public class RoutingTable implements Copier<RoutingTable>, Serializable {
         return router;
     }
 
-    public void setRouter(ActorRef router) {
-        this.router = router;
-    }
-
     @Override
     public String toString() {
-        return "RoutingTable{" +
-                "table=" + table +
-                ", router=" + router +
-                '}';
+        return "RoutingTable{" + "table=" + table + ", router=" + router + '}';
     }
 }