From 9ae771ef09960c1336c1ad716149c7cd21b75a04 Mon Sep 17 00:00:00 2001 From: Madhu Venugopal Date: Thu, 31 Oct 2013 03:28:00 -0700 Subject: [PATCH] Parsed & cached the Database Schema along with the initial monitor response. This is a start to make use of Schema based Table management instead of static class as defined today. Signed-off-by: Madhu Venugopal --- .../ovsdb/lib/database/ColumnSchema.java | 21 +++- .../ovsdb/lib/database/DatabaseSchema.java | 25 ++++- .../ovsdb/lib/database/OvsdbType.java | 17 +++- .../ovsdb/lib/database/TableSchema.java | 26 ++++- .../message/operations/OperationResult.java | 2 +- .../message/operations/SelectOperation.java | 37 +++++++ .../opendaylight/ovsdb/lib/table/Bridge.java | 2 +- .../ovsdb/lib/table/internal/Table.java | 3 + .../ovsdb/plugin/ConnectionService.java | 10 +- .../ovsdb/plugin/InventoryService.java | 39 +++++--- .../plugin/InventoryServiceInternal.java | 3 + .../opendaylight/ovsdb/plugin/JSONMsg.java | 11 --- .../ovsdb/plugin/MessageHandler.java | 58 ----------- .../ovsdb/plugin/MessageHandlerFuture.java | 97 ------------------- .../ovsdb/plugin/MessageMapper.java | 40 -------- .../org/opendaylight/ovsdb/plugin/NodeDB.java | 31 ++++-- .../lib/message/OVSDBNettyFactoryTest.java | 7 +- 17 files changed, 184 insertions(+), 245 deletions(-) delete mode 100755 ovsdb/src/main/java/org/opendaylight/ovsdb/plugin/JSONMsg.java delete mode 100644 ovsdb/src/main/java/org/opendaylight/ovsdb/plugin/MessageHandler.java delete mode 100644 ovsdb/src/main/java/org/opendaylight/ovsdb/plugin/MessageHandlerFuture.java delete mode 100644 ovsdb/src/main/java/org/opendaylight/ovsdb/plugin/MessageMapper.java diff --git a/ovsdb/src/main/java/org/opendaylight/ovsdb/lib/database/ColumnSchema.java b/ovsdb/src/main/java/org/opendaylight/ovsdb/lib/database/ColumnSchema.java index 55cdf43a38..6291b7a3fc 100755 --- a/ovsdb/src/main/java/org/opendaylight/ovsdb/lib/database/ColumnSchema.java +++ b/ovsdb/src/main/java/org/opendaylight/ovsdb/lib/database/ColumnSchema.java @@ -4,10 +4,23 @@ import com.fasterxml.jackson.annotation.JsonProperty; public class ColumnSchema { @JsonProperty("type") - public OvsdbType type; + private OvsdbType type; @JsonProperty("ephemeral") - public Boolean ephemeral; + private Boolean ephemeral; @JsonProperty("mutable") - public Boolean mutable; - + private Boolean mutable; + public OvsdbType getType() { + return type; + } + public Boolean getEphemeral() { + return ephemeral; + } + public Boolean getMutable() { + return mutable; + } + @Override + public String toString() { + return "ColumnSchema [type=" + type + ", ephemeral=" + ephemeral + + ", mutable=" + mutable + "]"; + } } diff --git a/ovsdb/src/main/java/org/opendaylight/ovsdb/lib/database/DatabaseSchema.java b/ovsdb/src/main/java/org/opendaylight/ovsdb/lib/database/DatabaseSchema.java index 8d7daa6cf8..e7ee92a005 100755 --- a/ovsdb/src/main/java/org/opendaylight/ovsdb/lib/database/DatabaseSchema.java +++ b/ovsdb/src/main/java/org/opendaylight/ovsdb/lib/database/DatabaseSchema.java @@ -6,11 +6,28 @@ import com.fasterxml.jackson.annotation.JsonProperty; public class DatabaseSchema { @JsonProperty("name") - public String name; + private String name; @JsonProperty("version") - public String version; + private String version; @JsonProperty("cksum") - public String cksum; + private String cksum; @JsonProperty("tables") - public Map tables; + private Map tables; + public String getName() { + return name; + } + public String getVersion() { + return version; + } + public String getCksum() { + return cksum; + } + public Map getTables() { + return tables; + } + @Override + public String toString() { + return "DatabaseSchema [name=" + name + ", version=" + version + + ", cksum=" + cksum + ", tables=" + tables + "]"; + } } diff --git a/ovsdb/src/main/java/org/opendaylight/ovsdb/lib/database/OvsdbType.java b/ovsdb/src/main/java/org/opendaylight/ovsdb/lib/database/OvsdbType.java index 94b920077b..560788d274 100755 --- a/ovsdb/src/main/java/org/opendaylight/ovsdb/lib/database/OvsdbType.java +++ b/ovsdb/src/main/java/org/opendaylight/ovsdb/lib/database/OvsdbType.java @@ -1,5 +1,7 @@ package org.opendaylight.ovsdb.lib.database; +import java.util.Arrays; + import com.fasterxml.jackson.annotation.JsonProperty; @@ -69,7 +71,20 @@ public class OvsdbType { public Integer maxLength; public String refTable; public String refType; + @Override + public String toString() { + return "BaseType [type=" + type + ", ovsdbEnum=" + + Arrays.toString(ovsdbEnum) + ", minInteger=" + minInteger + + ", maxInteger=" + maxInteger + ", minReal=" + minReal + + ", maxReal=" + maxReal + ", minLength=" + minLength + + ", maxLength=" + maxLength + ", refTable=" + refTable + + ", refType=" + refType + "]"; + } } - + @Override + public String toString() { + return "OvsdbType [key=" + key + ", value=" + value + ", min=" + min + + ", max=" + max + "]"; + } } diff --git a/ovsdb/src/main/java/org/opendaylight/ovsdb/lib/database/TableSchema.java b/ovsdb/src/main/java/org/opendaylight/ovsdb/lib/database/TableSchema.java index 98c9326b3d..fed3bab06f 100755 --- a/ovsdb/src/main/java/org/opendaylight/ovsdb/lib/database/TableSchema.java +++ b/ovsdb/src/main/java/org/opendaylight/ovsdb/lib/database/TableSchema.java @@ -6,15 +6,33 @@ import com.fasterxml.jackson.annotation.JsonProperty; public class TableSchema { @JsonProperty("columns") - public Map columns; + private Map columns; @JsonProperty("maxRows") - public Integer maxRows; + private Integer maxRows; @JsonProperty("isRoot") - public Boolean isRoot; + private Boolean isRoot; @JsonProperty("indexes") - public Object indexes; + private Object indexes; public Map getColumns(){ return this.columns; } + + public Integer getMaxRows() { + return maxRows; + } + + public Boolean getIsRoot() { + return isRoot; + } + + public Object getIndexes() { + return indexes; + } + + @Override + public String toString() { + return "TableSchema [columns=" + columns + ", maxRows=" + maxRows + + ", isRoot=" + isRoot + ", indexes=" + indexes + "]"; + } } diff --git a/ovsdb/src/main/java/org/opendaylight/ovsdb/lib/message/operations/OperationResult.java b/ovsdb/src/main/java/org/opendaylight/ovsdb/lib/message/operations/OperationResult.java index 0200c98d76..eb39c1bb00 100644 --- a/ovsdb/src/main/java/org/opendaylight/ovsdb/lib/message/operations/OperationResult.java +++ b/ovsdb/src/main/java/org/opendaylight/ovsdb/lib/message/operations/OperationResult.java @@ -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. diff --git a/ovsdb/src/main/java/org/opendaylight/ovsdb/lib/message/operations/SelectOperation.java b/ovsdb/src/main/java/org/opendaylight/ovsdb/lib/message/operations/SelectOperation.java index 0a95c5103a..cc0947ee0e 100644 --- a/ovsdb/src/main/java/org/opendaylight/ovsdb/lib/message/operations/SelectOperation.java +++ b/ovsdb/src/main/java/org/opendaylight/ovsdb/lib/message/operations/SelectOperation.java @@ -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 where; + List columns; + public SelectOperation(String table, List where, List 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 getWhere() { + return where; + } + public void setWhere(List where) { + this.where = where; + } + public List getColumns() { + return columns; + } + public void setColumns(List columns) { + this.columns = columns; + } + @Override + public String toString() { + return "SelectOperation [table=" + table + ", where=" + where + + ", columns=" + columns + "]"; + } } diff --git a/ovsdb/src/main/java/org/opendaylight/ovsdb/lib/table/Bridge.java b/ovsdb/src/main/java/org/opendaylight/ovsdb/lib/table/Bridge.java index 92d8797db6..09916de19a 100644 --- a/ovsdb/src/main/java/org/opendaylight/ovsdb/lib/table/Bridge.java +++ b/ovsdb/src/main/java/org/opendaylight/ovsdb/lib/table/Bridge.java @@ -7,7 +7,7 @@ import org.opendaylight.ovsdb.lib.table.internal.Table; public class Bridge extends Table { public static final Name NAME = new Name("Bridge"){}; - public enum Column implements org.opendaylight.ovsdb.lib.table.internal.Column{ controller, fail_mode, name, ports} + public enum Column implements org.opendaylight.ovsdb.lib.table.internal.Column{controller, fail_mode, name, ports} private String name; private OvsDBSet ports; diff --git a/ovsdb/src/main/java/org/opendaylight/ovsdb/lib/table/internal/Table.java b/ovsdb/src/main/java/org/opendaylight/ovsdb/lib/table/internal/Table.java index 456aa24fe9..a3b885bf62 100644 --- a/ovsdb/src/main/java/org/opendaylight/ovsdb/lib/table/internal/Table.java +++ b/ovsdb/src/main/java/org/opendaylight/ovsdb/lib/table/internal/Table.java @@ -4,6 +4,9 @@ public abstract class Table { public abstract Name getTableName(); public abstract String toString(); + public Column getColumns() { + return null; + } public static abstract class Name { String name; diff --git a/ovsdb/src/main/java/org/opendaylight/ovsdb/plugin/ConnectionService.java b/ovsdb/src/main/java/org/opendaylight/ovsdb/plugin/ConnectionService.java index 5237e993be..f7753fe0c7 100755 --- a/ovsdb/src/main/java/org/opendaylight/ovsdb/plugin/ConnectionService.java +++ b/ovsdb/src/main/java/org/opendaylight/ovsdb/plugin/ConnectionService.java @@ -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 dbNames = Arrays.asList(Open_vSwitch.NAME.getName()); + ListenableFuture 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); diff --git a/ovsdb/src/main/java/org/opendaylight/ovsdb/plugin/InventoryService.java b/ovsdb/src/main/java/org/opendaylight/ovsdb/plugin/InventoryService.java index 9c88bb1770..5c90aab5a2 100755 --- a/ovsdb/src/main/java/org/opendaylight/ovsdb/plugin/InventoryService.java +++ b/ovsdb/src/main/java/org/opendaylight/ovsdb/plugin/InventoryService.java @@ -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> nodeProps; private ConcurrentMap> nodeConnectorProps; - private Map>> dbCache = Maps.newHashMap(); + private Map 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>> getCache(Node n) { - NodeDB> 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> getTableCache(Node n, String tableName) { - NodeDB> 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> 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> db = dbCache.get(n); + NodeDB db = dbCache.get(n); if (db == null) { - db = new NodeDB>(); + 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> 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> db = dbCache.get(n); + NodeDB db = dbCache.get(n); if (db == null) { - db = new NodeDB>(); + db = new NodeDB(); dbCache.put(n, db); } @@ -156,7 +156,7 @@ public class InventoryService implements IPluginInInventoryService, InventorySer @Override public void printCache(Node n) { - NodeDB> 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); + } } diff --git a/ovsdb/src/main/java/org/opendaylight/ovsdb/plugin/InventoryServiceInternal.java b/ovsdb/src/main/java/org/opendaylight/ovsdb/plugin/InventoryServiceInternal.java index 7fd089562b..17b0d6b9b2 100644 --- a/ovsdb/src/main/java/org/opendaylight/ovsdb/plugin/InventoryServiceInternal.java +++ b/ovsdb/src/main/java/org/opendaylight/ovsdb/plugin/InventoryServiceInternal.java @@ -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 index d641726cea..0000000000 --- a/ovsdb/src/main/java/org/opendaylight/ovsdb/plugin/JSONMsg.java +++ /dev/null @@ -1,11 +0,0 @@ -package org.opendaylight.ovsdb.plugin; - -import java.lang.String; - -public class JSONMsg{ - public String jsonStr; - - public JSONMsg(String jsonStr){ - this.jsonStr = jsonStr; - } -} \ 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 index a17b7b9b3e..0000000000 --- a/ovsdb/src/main/java/org/opendaylight/ovsdb/plugin/MessageHandler.java +++ /dev/null @@ -1,58 +0,0 @@ -package org.opendaylight.ovsdb.plugin; - -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; - -import io.netty.channel.ChannelHandlerContext; -import io.netty.channel.ChannelInboundHandlerAdapter; - -import org.opendaylight.ovsdb.lib.message.EchoResponse; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.IOException; -import java.util.HashMap; -import java.util.Map; -import java.util.concurrent.Future; - -public class MessageHandler extends ChannelInboundHandlerAdapter { - protected static final Logger logger = LoggerFactory.getLogger(MessageHandler.class); - - private Map responseFutures = new HashMap(); - - public Future getResponse(long id) { - MessageHandlerFuture responseFuture = new MessageHandlerFuture(Long.valueOf(id)); - responseFutures.put(Long.valueOf(id), responseFuture); - return responseFuture; - } - - @Override - public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { - // logger.debug(ctx.channel().alloc().buffer().alloc().directBuffer().toString()); - - logger.info("ChannRead ==> " + msg.toString()); - JsonNode jsonNode; - ObjectMapper mapper = new ObjectMapper(); - String strmsg = msg.toString(); - try { - jsonNode = mapper.readTree(strmsg); - } catch (IOException e) { - e.printStackTrace(); - return; - } - - if (jsonNode.has("method")) { - String method = jsonNode.get("method").toString(); - // if (method.contains("echo")) { - EchoResponse echoreply = new EchoResponse(); - JsonNode echoReplyJnode = mapper.valueToTree(echoreply); - logger.debug("Echo Reply DP ==>" + msg); - ctx.writeAndFlush(echoReplyJnode.toString()); - } - } - - @Override - public void channelReadComplete(ChannelHandlerContext ctx) throws Exception { - ctx.flush(); - } -} \ 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 index 2e5c6c7545..0000000000 --- a/ovsdb/src/main/java/org/opendaylight/ovsdb/plugin/MessageHandlerFuture.java +++ /dev/null @@ -1,97 +0,0 @@ -package org.opendaylight.ovsdb.plugin; - -import org.opendaylight.controller.sal.utils.Status; -import org.opendaylight.controller.sal.utils.StatusCode; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.concurrent.*; - -/** - * Class which will monitor the completion of a FlowEntryDistributionOrder it - * implements a Future interface so it can be inspected by who is waiting for - * it. - */ -final class MessageHandlerFuture implements Future { - private final Long id; - private Object response; - private boolean amICancelled; - private CountDownLatch waitingLatch; - private Status retStatus; - private static final Logger logger = LoggerFactory.getLogger(MessageHandlerFuture.class); - - - /** - * @param order for which we are monitoring the execution - */ - public MessageHandlerFuture(Long id) { - // Order being monitored - this.id = id; - this.response = null; - this.amICancelled = false; - // We need to wait for one completion to happen - this.waitingLatch = new CountDownLatch(1); - // No return status yet! - this.retStatus = new Status(StatusCode.UNDEFINED); - } - - @Override - public boolean cancel(boolean mayInterruptIfRunning) { - return false; - } - - @Override - public Object get() throws InterruptedException, ExecutionException { - // If i'm done lets return the status as many times as caller wants - if (this.waitingLatch.getCount() == 0L) { - return response; - } - - // Wait till someone signal that we are done - this.waitingLatch.await(); - - // Return the known status - return response; - } - - @Override - public Object get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException { - // If i'm done lets return the status as many times as caller wants - if (this.waitingLatch.getCount() == 0L) { - return response; - } - - // Wait till someone signal that we are done - this.waitingLatch.await(timeout, unit); - - // Return the known status, could also be null if didn't return - return response; - } - - @Override - public boolean isCancelled() { - return this.amICancelled; - } - - @Override - public boolean isDone() { - return (this.waitingLatch.getCount() == 0L); - } - - /** - * Used by the thread that gets back the status for the order so can unblock - * an eventual caller waiting on the result to comes back - * - * @param order - * @param retStatus - */ - void gotResponse(Long id, Object response) { - if (id != this.id) { - // Weird we got a call for an order we didn't make - return; - } - this.response = response; - // Now we are not waiting any longer - this.waitingLatch.countDown(); - } -} 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 index 0f4d5a8de8..0000000000 --- a/ovsdb/src/main/java/org/opendaylight/ovsdb/plugin/MessageMapper.java +++ /dev/null @@ -1,40 +0,0 @@ -package org.opendaylight.ovsdb.plugin; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.HashMap; -import java.util.Map; - -public class MessageMapper { - - private static final Logger logger = LoggerFactory.getLogger(MessageMapper.class); - - private static MessageMapper mapper = null; - Map> responseMapper = new HashMap>(); - Map> requestMapper = new HashMap>(); - - private MessageMapper() { - } - - public static MessageMapper getMapper() { - if (mapper == null) mapper = new MessageMapper(); - return mapper; - } - - public void map(long id, Class rClass) { - responseMapper.put(Long.valueOf(id), rClass); - } - - public Class pop(long id) { - return responseMapper.remove(id); - } - - public void map(String type, Class rClass) { - requestMapper.put(type, rClass); - } - - public Class get(String type) { - return requestMapper.get(type); - } -} diff --git a/ovsdb/src/main/java/org/opendaylight/ovsdb/plugin/NodeDB.java b/ovsdb/src/main/java/org/opendaylight/ovsdb/plugin/NodeDB.java index e141e25197..3191e78951 100644 --- a/ovsdb/src/main/java/org/opendaylight/ovsdb/plugin/NodeDB.java +++ b/ovsdb/src/main/java/org/opendaylight/ovsdb/plugin/NodeDB.java @@ -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 >{ - Map> cache = Maps.newHashMap(); +public class NodeDB { + private DatabaseSchema schema; + Map>> cache = Maps.newHashMap(); - public Map> getTableCache() { + public DatabaseSchema getSchema() { + return schema; + } + + public void setSchema(DatabaseSchema schema) { + this.schema = schema; + } + + public Map>> getTableCache() { return cache; } - public Map getTableCache(String tableName) { + public Map> getTableCache(String tableName) { return cache.get(tableName); } - private void setTableCache(String tableName, Map tableCache) { + private void setTableCache(String tableName, Map> tableCache) { cache.put(tableName, tableCache); } - public T getRow (String tableName, String uuid) { - Map tableCache = getTableCache(tableName); + public Table getRow (String tableName, String uuid) { + Map> tableCache = getTableCache(tableName); if (tableCache != null) { return tableCache.get(uuid); } return null; } - public void updateRow(String tableName, String uuid, T row) { - Map tableCache = getTableCache(tableName); + public void updateRow(String tableName, String uuid, Table row) { + Map> tableCache = getTableCache(tableName); if (tableCache == null) { tableCache = Maps.newHashMap(); setTableCache(tableName, tableCache); @@ -40,13 +50,14 @@ public class NodeDB >{ } public void removeRow(String tableName, String uuid) { - Map tableCache = getTableCache(tableName); + Map> 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); } } diff --git a/ovsdb/src/test/java/org/opendaylight/ovsdb/lib/message/OVSDBNettyFactoryTest.java b/ovsdb/src/test/java/org/opendaylight/ovsdb/lib/message/OVSDBNettyFactoryTest.java index 8fdbe6ccfe..f5ff58e92f 100644 --- a/ovsdb/src/test/java/org/opendaylight/ovsdb/lib/message/OVSDBNettyFactoryTest.java +++ b/ovsdb/src/test/java/org/opendaylight/ovsdb/lib/message/OVSDBNettyFactoryTest.java @@ -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 dbNames = Arrays.asList(Open_vSwitch.NAME.getName()); ListenableFuture 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); -- 2.36.6