Parsed & cached the Database Schema along with the initial monitor response. 11/2311/1
authorMadhu Venugopal <mavenugo@gmail.com>
Thu, 31 Oct 2013 10:28:00 +0000 (03:28 -0700)
committerMadhu Venugopal <mavenugo@gmail.com>
Thu, 31 Oct 2013 10:28:00 +0000 (03:28 -0700)
This is a start to make use of Schema based Table management instead of static class as defined today.

Signed-off-by: Madhu Venugopal <mavenugo@gmail.com>
17 files changed:
ovsdb/src/main/java/org/opendaylight/ovsdb/lib/database/ColumnSchema.java
ovsdb/src/main/java/org/opendaylight/ovsdb/lib/database/DatabaseSchema.java
ovsdb/src/main/java/org/opendaylight/ovsdb/lib/database/OvsdbType.java
ovsdb/src/main/java/org/opendaylight/ovsdb/lib/database/TableSchema.java
ovsdb/src/main/java/org/opendaylight/ovsdb/lib/message/operations/OperationResult.java
ovsdb/src/main/java/org/opendaylight/ovsdb/lib/message/operations/SelectOperation.java
ovsdb/src/main/java/org/opendaylight/ovsdb/lib/table/Bridge.java
ovsdb/src/main/java/org/opendaylight/ovsdb/lib/table/internal/Table.java
ovsdb/src/main/java/org/opendaylight/ovsdb/plugin/ConnectionService.java
ovsdb/src/main/java/org/opendaylight/ovsdb/plugin/InventoryService.java
ovsdb/src/main/java/org/opendaylight/ovsdb/plugin/InventoryServiceInternal.java
ovsdb/src/main/java/org/opendaylight/ovsdb/plugin/JSONMsg.java [deleted file]
ovsdb/src/main/java/org/opendaylight/ovsdb/plugin/MessageHandler.java [deleted file]
ovsdb/src/main/java/org/opendaylight/ovsdb/plugin/MessageHandlerFuture.java [deleted file]
ovsdb/src/main/java/org/opendaylight/ovsdb/plugin/MessageMapper.java [deleted file]
ovsdb/src/main/java/org/opendaylight/ovsdb/plugin/NodeDB.java
ovsdb/src/test/java/org/opendaylight/ovsdb/lib/message/OVSDBNettyFactoryTest.java

index 55cdf43a383a453f8ea89bd841de90fe3b5569d2..6291b7a3fc4e29d88c24113271cfc75e3b628c85 100755 (executable)
@@ -4,10 +4,23 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 \r
 public class ColumnSchema {\r
     @JsonProperty("type")\r
-    public OvsdbType type;\r
+    private OvsdbType type;\r
     @JsonProperty("ephemeral")\r
-    public Boolean ephemeral;\r
+    private Boolean ephemeral;\r
     @JsonProperty("mutable")\r
-    public Boolean mutable;\r
-\r
+    private Boolean mutable;\r
+    public OvsdbType getType() {\r
+        return type;\r
+    }\r
+    public Boolean getEphemeral() {\r
+        return ephemeral;\r
+    }\r
+    public Boolean getMutable() {\r
+        return mutable;\r
+    }\r
+    @Override\r
+    public String toString() {\r
+        return "ColumnSchema [type=" + type + ", ephemeral=" + ephemeral\r
+                + ", mutable=" + mutable + "]";\r
+    }\r
 }\r
index 8d7daa6cf82b8cf5aaadb9067ddd36559f93e18c..e7ee92a005e8f333d8cd8b0bf2e536cf67608398 100755 (executable)
@@ -6,11 +6,28 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 \r
 public class DatabaseSchema {\r
     @JsonProperty("name")\r
-    public String name;\r
+    private String name;\r
     @JsonProperty("version")\r
-    public String version;\r
+    private String version;\r
     @JsonProperty("cksum")\r
-    public String cksum;\r
+    private String cksum;\r
     @JsonProperty("tables")\r
-    public Map<String, TableSchema> tables;\r
+    private Map<String, TableSchema> tables;\r
+    public String getName() {\r
+        return name;\r
+    }\r
+    public String getVersion() {\r
+        return version;\r
+    }\r
+    public String getCksum() {\r
+        return cksum;\r
+    }\r
+    public Map<String, TableSchema> getTables() {\r
+        return tables;\r
+    }\r
+    @Override\r
+    public String toString() {\r
+        return "DatabaseSchema [name=" + name + ", version=" + version\r
+                + ", cksum=" + cksum + ", tables=" + tables + "]";\r
+    }\r
 }\r
index 94b920077ba8cf430323ab47a6e087fbf9ffecc0..560788d2747243787e7b3c5a9876770098bb2278 100755 (executable)
@@ -1,5 +1,7 @@
 package org.opendaylight.ovsdb.lib.database;\r
 \r
+import java.util.Arrays;\r
+\r
 import com.fasterxml.jackson.annotation.JsonProperty;\r
 \r
 \r
@@ -69,7 +71,20 @@ public class OvsdbType {
         public Integer maxLength;\r
         public String refTable;\r
         public String refType;\r
+        @Override\r
+        public String toString() {\r
+            return "BaseType [type=" + type + ", ovsdbEnum="\r
+                    + Arrays.toString(ovsdbEnum) + ", minInteger=" + minInteger\r
+                    + ", maxInteger=" + maxInteger + ", minReal=" + minReal\r
+                    + ", maxReal=" + maxReal + ", minLength=" + minLength\r
+                    + ", maxLength=" + maxLength + ", refTable=" + refTable\r
+                    + ", refType=" + refType + "]";\r
+        }\r
     }\r
 \r
-\r
+    @Override\r
+    public String toString() {\r
+        return "OvsdbType [key=" + key + ", value=" + value + ", min=" + min\r
+                + ", max=" + max + "]";\r
+    }\r
 }\r
index 98c9326b3d53df2fe419ec5cfbd24ec489416260..fed3bab06f000b1884800e1fb3097232a648e9df 100755 (executable)
@@ -6,15 +6,33 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 \r
 public class TableSchema {\r
     @JsonProperty("columns")\r
-    public Map<String, ColumnSchema> columns;\r
+    private Map<String, ColumnSchema> columns;\r
     @JsonProperty("maxRows")\r
-    public Integer maxRows;\r
+    private Integer maxRows;\r
     @JsonProperty("isRoot")\r
-    public Boolean isRoot;\r
+    private Boolean isRoot;\r
     @JsonProperty("indexes")\r
-    public Object indexes;\r
+    private Object indexes;\r
 \r
     public Map<String, ColumnSchema> getColumns(){\r
         return this.columns;\r
     }\r
+\r
+    public Integer getMaxRows() {\r
+        return maxRows;\r
+    }\r
+\r
+    public Boolean getIsRoot() {\r
+        return isRoot;\r
+    }\r
+\r
+    public Object getIndexes() {\r
+        return indexes;\r
+    }\r
+\r
+    @Override\r
+    public String toString() {\r
+        return "TableSchema [columns=" + columns + ", maxRows=" + maxRows\r
+                + ", isRoot=" + isRoot + ", indexes=" + indexes + "]";\r
+    }\r
 }\r
index 0200c98d769aeca8a066bc591f62adff163f4669..eb39c1bb007e7fb1c2a1bca4610fdb7dc0142406 100644 (file)
@@ -12,7 +12,7 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 // each of the Operations covered by Transaction (Insert, Update, Delete, Mutate, etc...)
 // It is better to have the OperationResult as an abstract parent class with individual
 // concrete child classes for each of the operation response.
-// But this needs proper response handling
+// TODO : But this needs proper response handling
 // https://trello.com/c/mfTTS86k/28-generic-response-error-handling-especially-for-transact
 // As a temporary measure, adding all the expected responses under the same response.
 
index 0a95c5103ad1f3e414cae632d11624a66afd0b70..cc0947ee0e0f854b365dcb5595a4dcb85a5362d0 100644 (file)
@@ -1,5 +1,42 @@
 package org.opendaylight.ovsdb.lib.message.operations;
 
+import java.util.List;
+
+import org.opendaylight.ovsdb.lib.notation.Condition;
+
 public class SelectOperation extends Operation {
+    String table;
+    List<Condition> where;
+    List<String> columns;
 
+    public SelectOperation(String table, List<Condition> where, List<String> columns) {
+        super();
+        super.setOp("select");
+        this.table = table;
+        this.where = where;
+        this.columns = columns;
+    }
+    public String getTable() {
+        return table;
+    }
+    public void setTable(String table) {
+        this.table = table;
+    }
+    public List<Condition> getWhere() {
+        return where;
+    }
+    public void setWhere(List<Condition> where) {
+        this.where = where;
+    }
+    public List<String> getColumns() {
+        return columns;
+    }
+    public void setColumns(List<String> columns) {
+        this.columns = columns;
+    }
+    @Override
+    public String toString() {
+        return "SelectOperation [table=" + table + ", where=" + where
+                + ", columns=" + columns + "]";
+    }
 }
index 92d8797db6c32401c675b6eecb908bbf00e36102..09916de19a625613bd834047858f4d8aed598e48 100644 (file)
@@ -7,7 +7,7 @@ import org.opendaylight.ovsdb.lib.table.internal.Table;
 
 public class Bridge extends Table<Bridge> {
     public static final Name<Bridge> NAME = new Name<Bridge>("Bridge"){};
-    public enum Column implements org.opendaylight.ovsdb.lib.table.internal.Column<Bridge>{ controller, fail_mode, name, ports}
+    public enum Column implements org.opendaylight.ovsdb.lib.table.internal.Column<Bridge>{controller, fail_mode, name, ports}
 
     private String name;
     private OvsDBSet<UUID> ports;
index 456aa24fe9acea6899fdf34454fbe9e3d7d2e7ac..a3b885bf624b183e8be1ba52daf8c0872e5afe73 100644 (file)
@@ -4,6 +4,9 @@ public abstract class Table<E extends Table> {
 
     public abstract Name<E> getTableName();
     public abstract String toString();
+    public Column<E> getColumns() {
+        return null;
+    }
 
     public static abstract class Name<E extends Table> {
         String name;
index 5237e993be581d694136fe56c3956eb131ed4249..f7753fe0c7ed30a8579d791b193bec45b2a3ed6d 100755 (executable)
@@ -15,6 +15,7 @@ import org.opendaylight.controller.sal.connection.IPluginInConnectionService;
 import org.opendaylight.controller.sal.core.Node;
 import org.opendaylight.controller.sal.utils.Status;
 import org.opendaylight.controller.sal.utils.StatusCode;
+import org.opendaylight.ovsdb.lib.database.DatabaseSchema;
 import org.opendaylight.ovsdb.lib.jsonrpc.JsonRpcDecoder;
 import org.opendaylight.ovsdb.lib.jsonrpc.JsonRpcEndpoint;
 import org.opendaylight.ovsdb.lib.jsonrpc.JsonRpcServiceBinderHandler;
@@ -22,6 +23,7 @@ import org.opendaylight.ovsdb.lib.message.MonitorRequestBuilder;
 import org.opendaylight.ovsdb.lib.message.OvsdbRPC;
 import org.opendaylight.ovsdb.lib.message.TableUpdates;
 import org.opendaylight.ovsdb.lib.message.UpdateNotification;
+import org.opendaylight.ovsdb.lib.table.Open_vSwitch;
 import org.opendaylight.ovsdb.lib.table.internal.Table;
 import org.opendaylight.ovsdb.lib.table.internal.Tables;
 import org.slf4j.Logger;
@@ -32,6 +34,7 @@ import com.fasterxml.jackson.databind.ObjectMapper;
 import com.google.common.util.concurrent.ListenableFuture;
 
 import java.net.InetAddress;
+import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
@@ -138,7 +141,7 @@ public class ConnectionService implements IPluginInConnectionService, IConnectio
                 public void initChannel(SocketChannel channel) throws Exception {
                     if (handlers == null) {
                         channel.pipeline().addLast(
-                                new LoggingHandler(LogLevel.INFO),
+                                //new LoggingHandler(LogLevel.INFO),
                                 new JsonRpcDecoder(100000),
                                 new StringEncoder(CharsetUtil.UTF_8));
                     } else {
@@ -205,6 +208,11 @@ public class ConnectionService implements IPluginInConnectionService, IConnectio
         inventoryServiceInternal.addNodeProperty(connection.getNode(), addressProp);
         inventoryServiceInternal.addNodeProperty(connection.getNode(), l4Port);
 
+        List<String> dbNames = Arrays.asList(Open_vSwitch.NAME.getName());
+        ListenableFuture<DatabaseSchema> dbSchemaF = connection.getRpc().get_schema(dbNames);
+        DatabaseSchema databaseSchema = dbSchemaF.get();
+        inventoryServiceInternal.updateDatabaseSchema(connection.getNode(), databaseSchema);
+
         MonitorRequestBuilder monitorReq = new MonitorRequestBuilder();
         for (Table<?> table : Tables.getTables()) {
             monitorReq.monitor(table);
index 9c88bb1770d6da7664bb7120fca4d24a9c95cbd6..5c90aab5a2a7a7b2e6631951cc5648caf15f8856 100755 (executable)
@@ -13,6 +13,7 @@ import org.opendaylight.controller.sal.core.Node;
 import org.opendaylight.controller.sal.core.NodeConnector;
 import org.opendaylight.controller.sal.core.Property;
 import org.opendaylight.controller.sal.inventory.IPluginInInventoryService;
+import org.opendaylight.ovsdb.lib.database.DatabaseSchema;
 import org.opendaylight.ovsdb.lib.message.TableUpdate;
 import org.opendaylight.ovsdb.lib.message.TableUpdate.Row;
 import org.opendaylight.ovsdb.lib.message.TableUpdates;
@@ -31,7 +32,7 @@ public class InventoryService implements IPluginInInventoryService, InventorySer
 
     private ConcurrentMap<Node, Map<String, Property>> nodeProps;
     private ConcurrentMap<NodeConnector, Map<String, Property>> nodeConnectorProps;
-    private Map<Node, NodeDB<Table<?>>> dbCache = Maps.newHashMap();
+    private Map<Node, NodeDB> dbCache = Maps.newHashMap();
 
     /**
      * Function called by the dependency manager when all the required
@@ -91,7 +92,7 @@ public class InventoryService implements IPluginInInventoryService, InventorySer
 
     @Override
     public Map<String, Map<String, Table<?>>> getCache(Node n) {
-        NodeDB<Table<?>> db = dbCache.get(n);
+        NodeDB db = dbCache.get(n);
         if (db == null) return null;
         return db.getTableCache();
     }
@@ -99,7 +100,7 @@ public class InventoryService implements IPluginInInventoryService, InventorySer
 
     @Override
     public Map<String, Table<?>> getTableCache(Node n, String tableName) {
-        NodeDB<Table<?>> db = dbCache.get(n);
+        NodeDB db = dbCache.get(n);
         if (db == null) return null;
         return db.getTableCache(tableName);
     }
@@ -107,17 +108,16 @@ public class InventoryService implements IPluginInInventoryService, InventorySer
 
     @Override
     public Table<?> getRow(Node n, String tableName, String uuid) {
-        NodeDB<Table<?>> db = dbCache.get(n);
+        NodeDB db = dbCache.get(n);
         if (db == null) return null;
         return db.getRow(tableName, uuid);
     }
 
-
     @Override
     public void updateRow(Node n, String tableName, String uuid, Table<?> row) {
-        NodeDB<Table<?>> db = dbCache.get(n);
+        NodeDB db = dbCache.get(n);
         if (db == null) {
-            db = new NodeDB<Table<?>>();
+            db = new NodeDB();
             dbCache.put(n, db);
         }
         db.updateRow(tableName, uuid, row);
@@ -125,15 +125,15 @@ public class InventoryService implements IPluginInInventoryService, InventorySer
 
     @Override
     public void removeRow(Node n, String tableName, String uuid) {
-        NodeDB<Table<?>> db = dbCache.get(n);
+        NodeDB db = dbCache.get(n);
         if (db != null) db.removeRow(tableName, uuid);
     }
 
     @Override
     public void processTableUpdates(Node n, TableUpdates tableUpdates) {
-        NodeDB<Table<?>> db = dbCache.get(n);
+        NodeDB db = dbCache.get(n);
         if (db == null) {
-            db = new NodeDB<Table<?>>();
+            db = new NodeDB();
             dbCache.put(n, db);
         }
 
@@ -156,7 +156,7 @@ public class InventoryService implements IPluginInInventoryService, InventorySer
 
     @Override
     public void printCache(Node n) {
-        NodeDB<Table<?>> db = dbCache.get(n);
+        NodeDB db = dbCache.get(n);
         if (db != null) db.printTableCache();
     }
 
@@ -167,4 +167,21 @@ public class InventoryService implements IPluginInInventoryService, InventorySer
         nProp.put(prop.getName(), prop);
         nodeProps.put(n, nProp);
     }
+
+    @Override
+    public DatabaseSchema getDatabaseSchema(Node n) {
+        NodeDB db = dbCache.get(n);
+        if (db != null) return db.getSchema();
+        return null;
+    }
+
+    @Override
+    public void updateDatabaseSchema(Node n, DatabaseSchema schema) {
+        NodeDB db = dbCache.get(n);
+        if (db == null) {
+            db = new NodeDB();
+            dbCache.put(n, db);
+        }
+        db.setSchema(schema);
+    }
 }
index 7fd089562b4160fe07eb07b434d8a8b5152c7d3f..17b0d6b9b207c95883122c35e90ebdd07e77d511 100644 (file)
@@ -4,6 +4,7 @@ import java.util.Map;
 
 import org.opendaylight.controller.sal.core.Node;
 import org.opendaylight.controller.sal.core.Property;
+import org.opendaylight.ovsdb.lib.database.DatabaseSchema;
 import org.opendaylight.ovsdb.lib.message.TableUpdates;
 import org.opendaylight.ovsdb.lib.table.internal.Table;
 
@@ -14,6 +15,8 @@ public interface InventoryServiceInternal {
     public void updateRow(Node n, String tableName, String uuid, Table<?> row);
     public void removeRow(Node n, String tableName, String uuid);
     public void processTableUpdates(Node n, TableUpdates tableUpdates);
+    public void updateDatabaseSchema(Node n, DatabaseSchema schema);
+    public     DatabaseSchema getDatabaseSchema(Node n);
     public void printCache(Node n);
 
     public void addNodeProperty(Node n, Property prop);
diff --git a/ovsdb/src/main/java/org/opendaylight/ovsdb/plugin/JSONMsg.java b/ovsdb/src/main/java/org/opendaylight/ovsdb/plugin/JSONMsg.java
deleted file mode 100755 (executable)
index d641726..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-package org.opendaylight.ovsdb.plugin;\r
-\r
-import java.lang.String;\r
-\r
-public class JSONMsg{\r
-    public String jsonStr;\r
-\r
-    public JSONMsg(String jsonStr){\r
-        this.jsonStr = jsonStr;\r
-    }\r
-}
\ No newline at end of file
diff --git a/ovsdb/src/main/java/org/opendaylight/ovsdb/plugin/MessageHandler.java b/ovsdb/src/main/java/org/opendaylight/ovsdb/plugin/MessageHandler.java
deleted file mode 100644 (file)
index a17b7b9..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-package org.opendaylight.ovsdb.plugin;\r
-\r
-import com.fasterxml.jackson.databind.JsonNode;\r
-import com.fasterxml.jackson.databind.ObjectMapper;\r
-\r
-import io.netty.channel.ChannelHandlerContext;\r
-import io.netty.channel.ChannelInboundHandlerAdapter;\r
-\r
-import org.opendaylight.ovsdb.lib.message.EchoResponse;\r
-import org.slf4j.Logger;\r
-import org.slf4j.LoggerFactory;\r
-\r
-import java.io.IOException;\r
-import java.util.HashMap;\r
-import java.util.Map;\r
-import java.util.concurrent.Future;\r
-\r
-public class MessageHandler extends ChannelInboundHandlerAdapter {\r
-    protected static final Logger logger = LoggerFactory.getLogger(MessageHandler.class);\r
-\r
-    private Map<Long, MessageHandlerFuture> responseFutures = new HashMap<Long, MessageHandlerFuture>();\r
-\r
-    public Future<Object> getResponse(long id) {\r
-        MessageHandlerFuture responseFuture = new MessageHandlerFuture(Long.valueOf(id));\r
-        responseFutures.put(Long.valueOf(id), responseFuture);\r
-        return responseFuture;\r
-    }\r
-\r
-    @Override\r
-    public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {\r
-     //   logger.debug(ctx.channel().alloc().buffer().alloc().directBuffer().toString());\r
-\r
-        logger.info("ChannRead ==> " + msg.toString());\r
-        JsonNode jsonNode;\r
-        ObjectMapper mapper = new ObjectMapper();\r
-        String strmsg = msg.toString();\r
-        try {\r
-            jsonNode = mapper.readTree(strmsg);\r
-        } catch (IOException e) {\r
-            e.printStackTrace();\r
-            return;\r
-        }\r
-\r
-        if (jsonNode.has("method")) {\r
-            String method = jsonNode.get("method").toString();\r
-        //    if (method.contains("echo")) {\r
-                EchoResponse echoreply = new EchoResponse();\r
-                JsonNode echoReplyJnode = mapper.valueToTree(echoreply);\r
-                logger.debug("Echo Reply DP ==>" + msg);\r
-                ctx.writeAndFlush(echoReplyJnode.toString());\r
-            }\r
-        }\r
-\r
-    @Override\r
-    public void channelReadComplete(ChannelHandlerContext ctx) throws Exception {\r
-        ctx.flush();\r
-    }\r
-}
\ No newline at end of file
diff --git a/ovsdb/src/main/java/org/opendaylight/ovsdb/plugin/MessageHandlerFuture.java b/ovsdb/src/main/java/org/opendaylight/ovsdb/plugin/MessageHandlerFuture.java
deleted file mode 100644 (file)
index 2e5c6c7..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-package org.opendaylight.ovsdb.plugin;\r
-\r
-import org.opendaylight.controller.sal.utils.Status;\r
-import org.opendaylight.controller.sal.utils.StatusCode;\r
-import org.slf4j.Logger;\r
-import org.slf4j.LoggerFactory;\r
-\r
-import java.util.concurrent.*;\r
-\r
-/**\r
- * Class which will monitor the completion of a FlowEntryDistributionOrder it\r
- * implements a Future interface so it can be inspected by who is waiting for\r
- * it.\r
- */\r
-final class MessageHandlerFuture implements Future<Object> {\r
-    private final Long id;\r
-    private Object response;\r
-    private boolean amICancelled;\r
-    private CountDownLatch waitingLatch;\r
-    private Status retStatus;\r
-    private static final Logger logger = LoggerFactory.getLogger(MessageHandlerFuture.class);\r
-\r
-\r
-    /**\r
-     * @param order for which we are monitoring the execution\r
-     */\r
-    public MessageHandlerFuture(Long id) {\r
-        // Order being monitored\r
-        this.id = id;\r
-        this.response = null;\r
-        this.amICancelled = false;\r
-        // We need to wait for one completion to happen\r
-        this.waitingLatch = new CountDownLatch(1);\r
-        // No return status yet!\r
-        this.retStatus = new Status(StatusCode.UNDEFINED);\r
-    }\r
-\r
-    @Override\r
-    public boolean cancel(boolean mayInterruptIfRunning) {\r
-        return false;\r
-    }\r
-\r
-    @Override\r
-    public Object get() throws InterruptedException, ExecutionException {\r
-        // If i'm done lets return the status as many times as caller wants\r
-        if (this.waitingLatch.getCount() == 0L) {\r
-            return response;\r
-        }\r
-\r
-        // Wait till someone signal that we are done\r
-        this.waitingLatch.await();\r
-\r
-        // Return the known status\r
-        return response;\r
-    }\r
-\r
-    @Override\r
-    public Object get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException {\r
-        // If i'm done lets return the status as many times as caller wants\r
-        if (this.waitingLatch.getCount() == 0L) {\r
-            return response;\r
-        }\r
-\r
-        // Wait till someone signal that we are done\r
-        this.waitingLatch.await(timeout, unit);\r
-\r
-        // Return the known status, could also be null if didn't return\r
-        return response;\r
-    }\r
-\r
-    @Override\r
-    public boolean isCancelled() {\r
-        return this.amICancelled;\r
-    }\r
-\r
-    @Override\r
-    public boolean isDone() {\r
-        return (this.waitingLatch.getCount() == 0L);\r
-    }\r
-\r
-    /**\r
-     * Used by the thread that gets back the status for the order so can unblock\r
-     * an eventual caller waiting on the result to comes back\r
-     *\r
-     * @param order\r
-     * @param retStatus\r
-     */\r
-    void gotResponse(Long id, Object response) {\r
-        if (id != this.id) {\r
-            // Weird we got a call for an order we didn't make\r
-            return;\r
-        }\r
-        this.response = response;\r
-        // Now we are not waiting any longer\r
-        this.waitingLatch.countDown();\r
-    }\r
-}\r
diff --git a/ovsdb/src/main/java/org/opendaylight/ovsdb/plugin/MessageMapper.java b/ovsdb/src/main/java/org/opendaylight/ovsdb/plugin/MessageMapper.java
deleted file mode 100644 (file)
index 0f4d5a8..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-package org.opendaylight.ovsdb.plugin;\r
-\r
-import org.slf4j.Logger;\r
-import org.slf4j.LoggerFactory;\r
-\r
-import java.util.HashMap;\r
-import java.util.Map;\r
-\r
-public class MessageMapper {\r
-\r
-    private static final Logger logger = LoggerFactory.getLogger(MessageMapper.class);\r
-\r
-    private static MessageMapper mapper = null;\r
-    Map<Long, Class<?>> responseMapper = new HashMap<Long, Class<?>>();\r
-    Map<String, Class<?>> requestMapper = new HashMap<String, Class<?>>();\r
-\r
-    private MessageMapper() {\r
-    }\r
-\r
-    public static MessageMapper getMapper() {\r
-        if (mapper == null) mapper = new MessageMapper();\r
-        return mapper;\r
-    }\r
-\r
-    public void map(long id, Class<?> rClass) {\r
-        responseMapper.put(Long.valueOf(id), rClass);\r
-    }\r
-\r
-    public Class<?> pop(long id) {\r
-        return responseMapper.remove(id);\r
-    }\r
-\r
-    public void map(String type, Class<?> rClass) {\r
-        requestMapper.put(type, rClass);\r
-    }\r
-\r
-    public Class<?> get(String type) {\r
-        return requestMapper.get(type);\r
-    }\r
-}\r
index e141e2519728e35489e895096820f2f05e3de52e..3191e78951f91a4c3f511c712bd62345167bc79e 100644 (file)
@@ -5,33 +5,43 @@ import java.util.Map;
 import com.google.common.collect.Maps;
 
 import org.apache.commons.collections.MapUtils;
+import org.opendaylight.ovsdb.lib.database.DatabaseSchema;
 import org.opendaylight.ovsdb.lib.table.internal.Table;
 
-public class NodeDB <T extends Table<?>>{
-    Map<String, Map<String, T>> cache = Maps.newHashMap();
+public class NodeDB {
+    private DatabaseSchema schema;
+    Map<String, Map<String, Table<?>>> cache = Maps.newHashMap();
 
-    public Map<String, Map<String, T>> getTableCache() {
+    public DatabaseSchema getSchema() {
+        return schema;
+    }
+
+    public void setSchema(DatabaseSchema schema) {
+        this.schema = schema;
+    }
+
+    public Map<String, Map<String, Table<?>>> getTableCache() {
         return cache;
     }
 
-    public Map<String, T> getTableCache(String tableName) {
+    public Map<String, Table<?>> getTableCache(String tableName) {
         return cache.get(tableName);
     }
 
-    private void setTableCache(String tableName,  Map<String, T> tableCache) {
+    private void setTableCache(String tableName,  Map<String, Table<?>> tableCache) {
         cache.put(tableName, tableCache);
     }
 
-    public T getRow (String tableName, String uuid) {
-        Map<String, T> tableCache = getTableCache(tableName);
+    public Table<?> getRow (String tableName, String uuid) {
+        Map<String, Table<?>> tableCache = getTableCache(tableName);
         if (tableCache != null) {
             return tableCache.get(uuid);
         }
         return null;
     }
 
-    public void updateRow(String tableName, String uuid, T row) {
-        Map<String, T> tableCache = getTableCache(tableName);
+    public void updateRow(String tableName, String uuid, Table<?> row) {
+        Map<String, Table<?>> tableCache = getTableCache(tableName);
         if (tableCache == null) {
             tableCache = Maps.newHashMap();
             setTableCache(tableName, tableCache);
@@ -40,13 +50,14 @@ public class NodeDB <T extends Table<?>>{
     }
 
     public void removeRow(String tableName, String uuid) {
-        Map<String, T> tableCache = getTableCache(tableName);
+        Map<String, Table<?>> tableCache = getTableCache(tableName);
         if (tableCache != null) {
             tableCache.remove(uuid);
         }
     }
 
     public void printTableCache() {
+        MapUtils.debugPrint(System.out, null, schema.getTables());
         MapUtils.debugPrint(System.out, null, cache);
     }
 }
index 8fdbe6ccfe92008d6f6dfee7549cfe26510c196e..f5ff58e92f4b6454053abc2a5071c236eea9dd36 100644 (file)
@@ -1,6 +1,8 @@
 package org.opendaylight.ovsdb.lib.message;
 
 import com.google.common.util.concurrent.ListenableFuture;
+
+import org.apache.commons.collections.MapUtils;
 import org.junit.Test;
 import org.opendaylight.controller.sal.connection.ConnectionConstants;
 import org.opendaylight.controller.sal.core.Node;
@@ -71,9 +73,10 @@ public class OVSDBNettyFactoryTest {
         List<String> dbNames = Arrays.asList(Open_vSwitch.NAME.getName());
         ListenableFuture<DatabaseSchema> dbSchemaF = ovsdb.get_schema(dbNames);
         DatabaseSchema databaseSchema = dbSchemaF.get();
-        System.out.println(databaseSchema);
+        MapUtils.debugPrint(System.out, null, databaseSchema.getTables());
 
-        //TEST MONITOR
+        // TEST MONITOR
+        // YES it is expected to fail with "duplicate monitor ID" as we have a perpetual monitor in Inventory Service
         MonitorRequestBuilder monitorReq = new MonitorRequestBuilder();
         for (Table<?> table : Tables.getTables()) {
             monitorReq.monitor(table);