Merge pull request #19 from effy/RAMCloud
batch flow path set properties
diff --git a/src/main/java/net/onrc/onos/graph/DBOperation.java b/src/main/java/net/onrc/onos/graph/DBOperation.java
index ceb99c3..6e278d9 100644
--- a/src/main/java/net/onrc/onos/graph/DBOperation.java
+++ b/src/main/java/net/onrc/onos/graph/DBOperation.java
@@ -430,10 +430,21 @@
}
@Override
- public void setFlowProperties(IFlowEntry flowEntry, Map<String, Object> map) {
+ public void setVertexProperties(Vertex vertex, Map<String, Object> map) {
log.debug("setProperties start: size {}", map.size());
- RamCloudVertex v = (RamCloudVertex) flowEntry.asVertex();
+ RamCloudVertex v = (RamCloudVertex) vertex;
v.setProperties(map);
log.debug("setProperties end: size {}, id {}", map.size(), v.getId());
}
+
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ for(ISwitchObject sw: getAllSwitches()) {
+ sb.append("sw: " + sw.getDPID() + "\n");
+ for(IPortObject port: sw.getPorts()) {
+ sb.append(" port: " + port.getPortId() + "\n");
+ }
+ }
+ return sb.toString();
+ }
}
diff --git a/src/main/java/net/onrc/onos/graph/IDBOperation.java b/src/main/java/net/onrc/onos/graph/IDBOperation.java
index 3ca4284..d2e8109 100644
--- a/src/main/java/net/onrc/onos/graph/IDBOperation.java
+++ b/src/main/java/net/onrc/onos/graph/IDBOperation.java
@@ -2,6 +2,8 @@
import java.util.Map;
+import com.tinkerpop.blueprints.Vertex;
+
import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.IDeviceObject;
import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.IFlowEntry;
import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.IFlowPath;
@@ -44,7 +46,7 @@
public Iterable<IFlowEntry> getAllFlowEntries();
public void removeFlowEntry(IFlowEntry flowEntry);
- public void setFlowProperties(IFlowEntry flowEntry, Map<String, Object> map);
+ public void setVertexProperties(Vertex vertex, Map<String, Object> map);
public IDBConnection getDBConnection();
public void commit();
diff --git a/src/main/java/net/onrc/onos/ofcontroller/flowmanager/FlowDatabaseOperation.java b/src/main/java/net/onrc/onos/ofcontroller/flowmanager/FlowDatabaseOperation.java
index 1fc70ec..27521f9 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/flowmanager/FlowDatabaseOperation.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/flowmanager/FlowDatabaseOperation.java
@@ -128,12 +128,14 @@
if ( measureONOSFlowTimeProp ) {
startSettingFlowPathProps = System.nanoTime();
}
+
+ FlowPathProperty flowProp = new FlowPathProperty(dbHandler, flowObj);
+
//
// Set the Flow key:
// - flowId
//
- flowObj.setFlowId(flowPath.flowId().toString());
- flowObj.setType("flow");
+ flowProp.setFlowId(flowPath.flowId().toString());
if ( measureONOSFlowTimeProp ) {
numPropsSet += 2;
}
@@ -161,101 +163,103 @@
// - flowPath.matchDstTcpUdpPort()
// - flowPath.flowEntryActions()
//
- flowObj.setInstallerId(flowPath.installerId().toString());
- flowObj.setFlowPathType(flowPath.flowPathType().toString());
- flowObj.setFlowPathUserState(flowPath.flowPathUserState().toString());
- flowObj.setFlowPathFlags(flowPath.flowPathFlags().flags());
- flowObj.setIdleTimeout(flowPath.idleTimeout());
- flowObj.setHardTimeout(flowPath.hardTimeout());
- flowObj.setSrcSwitch(flowPath.dataPath().srcPort().dpid().toString());
- flowObj.setSrcPort(flowPath.dataPath().srcPort().port().value());
- flowObj.setDstSwitch(flowPath.dataPath().dstPort().dpid().toString());
- flowObj.setDstPort(flowPath.dataPath().dstPort().port().value());
+ flowProp.setInstallerId(flowPath.installerId().toString());
+ flowProp.setFlowPathType(flowPath.flowPathType().toString());
+ flowProp.setFlowPathUserState(flowPath.flowPathUserState().toString());
+ flowProp.setFlowPathFlags(flowPath.flowPathFlags().flags());
+ flowProp.setIdleTimeout(flowPath.idleTimeout());
+ flowProp.setHardTimeout(flowPath.hardTimeout());
+ flowProp.setSrcSwitch(flowPath.dataPath().srcPort().dpid().toString());
+ flowProp.setSrcPort(flowPath.dataPath().srcPort().port().value());
+ flowProp.setDstSwitch(flowPath.dataPath().dstPort().dpid().toString());
+ flowProp.setDstPort(flowPath.dataPath().dstPort().port().value());
if ( measureONOSFlowTimeProp ) {
numPropsSet += 10;
}
if (flowPath.flowEntryMatch().matchSrcMac()) {
- flowObj.setMatchSrcMac(flowPath.flowEntryMatch().srcMac().toString());
+ flowProp.setMatchSrcMac(flowPath.flowEntryMatch().srcMac().toString());
if ( measureONOSFlowTimeProp ) {
++numPropsSet;
}
}
if (flowPath.flowEntryMatch().matchDstMac()) {
- flowObj.setMatchDstMac(flowPath.flowEntryMatch().dstMac().toString());
+ flowProp.setMatchDstMac(flowPath.flowEntryMatch().dstMac().toString());
if ( measureONOSFlowTimeProp ) {
++numPropsSet;
}
}
if (flowPath.flowEntryMatch().matchEthernetFrameType()) {
- flowObj.setMatchEthernetFrameType(flowPath.flowEntryMatch().ethernetFrameType());
+ flowProp.setMatchEthernetFrameType(flowPath.flowEntryMatch().ethernetFrameType());
if ( measureONOSFlowTimeProp ) {
++numPropsSet;
}
}
if (flowPath.flowEntryMatch().matchVlanId()) {
- flowObj.setMatchVlanId(flowPath.flowEntryMatch().vlanId());
+ flowProp.setMatchVlanId(flowPath.flowEntryMatch().vlanId());
if ( measureONOSFlowTimeProp ) {
++numPropsSet;
}
}
if (flowPath.flowEntryMatch().matchVlanPriority()) {
- flowObj.setMatchVlanPriority(flowPath.flowEntryMatch().vlanPriority());
+ flowProp.setMatchVlanPriority(flowPath.flowEntryMatch().vlanPriority());
if ( measureONOSFlowTimeProp ) {
++numPropsSet;
}
}
if (flowPath.flowEntryMatch().matchSrcIPv4Net()) {
- flowObj.setMatchSrcIPv4Net(flowPath.flowEntryMatch().srcIPv4Net().toString());
+ flowProp.setMatchSrcIPv4Net(flowPath.flowEntryMatch().srcIPv4Net().toString());
if ( measureONOSFlowTimeProp ) {
++numPropsSet;
}
}
if (flowPath.flowEntryMatch().matchDstIPv4Net()) {
- flowObj.setMatchDstIPv4Net(flowPath.flowEntryMatch().dstIPv4Net().toString());
+ flowProp.setMatchDstIPv4Net(flowPath.flowEntryMatch().dstIPv4Net().toString());
if ( measureONOSFlowTimeProp ) {
++numPropsSet;
}
}
if (flowPath.flowEntryMatch().matchIpProto()) {
- flowObj.setMatchIpProto(flowPath.flowEntryMatch().ipProto());
+ flowProp.setMatchIpProto(flowPath.flowEntryMatch().ipProto());
if ( measureONOSFlowTimeProp ) {
++numPropsSet;
}
}
if (flowPath.flowEntryMatch().matchIpToS()) {
- flowObj.setMatchIpToS(flowPath.flowEntryMatch().ipToS());
+ flowProp.setMatchIpToS(flowPath.flowEntryMatch().ipToS());
if ( measureONOSFlowTimeProp ) {
++numPropsSet;
}
}
if (flowPath.flowEntryMatch().matchSrcTcpUdpPort()) {
- flowObj.setMatchSrcTcpUdpPort(flowPath.flowEntryMatch().srcTcpUdpPort());
+ flowProp.setMatchSrcTcpUdpPort(flowPath.flowEntryMatch().srcTcpUdpPort());
if ( measureONOSFlowTimeProp ) {
++numPropsSet;
}
}
if (flowPath.flowEntryMatch().matchDstTcpUdpPort()) {
- flowObj.setMatchDstTcpUdpPort(flowPath.flowEntryMatch().dstTcpUdpPort());
+ flowProp.setMatchDstTcpUdpPort(flowPath.flowEntryMatch().dstTcpUdpPort());
if ( measureONOSFlowTimeProp ) {
++numPropsSet;
}
}
if (! flowPath.flowEntryActions().actions().isEmpty()) {
- flowObj.setActions(flowPath.flowEntryActions().toString());
+ flowProp.setActions(flowPath.flowEntryActions().toString());
if ( measureONOSFlowTimeProp ) {
++numPropsSet;
}
}
- flowObj.setDataPathSummary(flowPath.dataPath().dataPathSummary());
+ flowProp.setDataPathSummary(flowPath.dataPath().dataPathSummary());
if ( measureONOSFlowTimeProp ) {
++numPropsSet;
}
if (found)
- flowObj.setFlowPathUserState("FP_USER_MODIFY");
+ flowProp.setFlowPathUserState("FP_USER_MODIFY");
else
- flowObj.setFlowPathUserState("FP_USER_ADD");
+ flowProp.setFlowPathUserState("FP_USER_ADD");
+
+ flowProp.commitProperties();
if ( measureONOSFlowTimeProp ) {
++numPropsSet;
@@ -421,7 +425,7 @@
startSetProperties = System.nanoTime();
}
- FlowProperty flowProp = new FlowProperty(dbHandler, flowEntryObj);
+ FlowEntryProperty flowProp = new FlowEntryProperty(dbHandler, flowEntryObj);
//
// Set the Flow Entry key:
@@ -852,6 +856,7 @@
//
// Extract the Flow state
//
+ log.info("extractFlowPath: start");
String flowIdStr = flowObj.getFlowId();
String installerIdStr = flowObj.getInstallerId();
String flowPathType = flowObj.getFlowPathType();
@@ -875,7 +880,8 @@
(srcPortShort == null) ||
(dstSwitchStr == null) ||
(dstPortShort == null)) {
- // TODO: A work-around, becauuse of some bogus database objects
+ // TODO: A work-around, because of some bogus database objects
+ log.error("extractFlowPath: wrong properties");
return null;
}
@@ -954,6 +960,7 @@
flowPath.dataPath().flowEntries().add(flowEntry);
}
+ log.info("extractFlowPath: end");
return flowPath;
}
@@ -964,9 +971,12 @@
* @return the extracted Flow Entry State.
*/
public static FlowEntry extractFlowEntry(IFlowEntry flowEntryObj) {
+ log.info("extractFlowEntry: start");
IFlowPath flowObj = flowEntryObj.getFlow();
- if (flowObj == null)
+ if (flowObj == null) {
+ log.error("extractFlowEntry: no flowPath exists");
return null;
+ }
String flowIdStr = flowObj.getFlowId();
//
@@ -985,6 +995,7 @@
(userState == null) ||
(switchState == null)) {
// TODO: A work-around, because of some bogus database objects
+ log.error("extractFlowEntry: wrong properties");
return null;
}
@@ -1050,6 +1061,7 @@
//
// TODO: Take care of FlowEntryErrorState.
//
+ log.info("extractFlowEntry: end");
return flowEntry;
}
}
diff --git a/src/main/java/net/onrc/onos/ofcontroller/flowmanager/FlowProperty.java b/src/main/java/net/onrc/onos/ofcontroller/flowmanager/FlowEntryProperty.java
similarity index 95%
rename from src/main/java/net/onrc/onos/ofcontroller/flowmanager/FlowProperty.java
rename to src/main/java/net/onrc/onos/ofcontroller/flowmanager/FlowEntryProperty.java
index ccc1124..7b17aaa 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/flowmanager/FlowProperty.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/flowmanager/FlowEntryProperty.java
@@ -6,12 +6,12 @@
import net.onrc.onos.graph.DBOperation;
import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.IFlowEntry;
-public class FlowProperty {
+public class FlowEntryProperty {
private Map<String, Object> map = new HashMap<>();
private DBOperation dbhandler;
private IFlowEntry flowEntry;
- public FlowProperty(DBOperation dbHandler, IFlowEntry flowEntry) {
+ public FlowEntryProperty(DBOperation dbHandler, IFlowEntry flowEntry) {
this.dbhandler = dbHandler;
this.flowEntry = flowEntry;
}
@@ -145,6 +145,6 @@
* @param dbhandler
*/
public void commitProperties() {
- dbhandler.setFlowProperties(flowEntry ,map);
+ dbhandler.setVertexProperties(flowEntry.asVertex() ,map);
}
}
diff --git a/src/main/java/net/onrc/onos/ofcontroller/flowmanager/FlowPathProperty.java b/src/main/java/net/onrc/onos/ofcontroller/flowmanager/FlowPathProperty.java
new file mode 100644
index 0000000..c6a2b98
--- /dev/null
+++ b/src/main/java/net/onrc/onos/ofcontroller/flowmanager/FlowPathProperty.java
@@ -0,0 +1,126 @@
+package net.onrc.onos.ofcontroller.flowmanager;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import net.onrc.onos.graph.DBOperation;
+import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.IFlowPath;
+
+public class FlowPathProperty {
+ private Map<String, Object> map = new HashMap<>();
+ private DBOperation dbhandler;
+ private IFlowPath flowPath;
+
+ public FlowPathProperty(DBOperation dbHandler, IFlowPath flowPath) {
+ this.dbhandler = dbHandler;
+ this.flowPath = flowPath;
+ }
+
+ public void setType(String typeStr) {
+ map.put("type", typeStr);
+ }
+
+ public void setFlowId(String flowId) {
+ map.put("flow_id", flowId);
+ }
+
+ public void setInstallerId(String installerId) {
+ map.put("installer_id", installerId);
+ }
+
+ public void setFlowPathType(String flowPathType) {
+ map.put("flow_path_type", flowPathType);
+ }
+
+ public void setFlowPathUserState(String userState) {
+ map.put("user_state", userState);
+ }
+
+ public void setFlowPathFlags(Long flowPathFlags) {
+ map.put("flow_path_flags", flowPathFlags);
+ }
+
+ public void setIdleTimeout(Integer idleTimeout) {
+ map.put("idle_timeout", idleTimeout);
+ }
+
+ public void setHardTimeout(Integer hardTimeout) {
+ map.put("hard_timeout", hardTimeout);
+ }
+
+ public void setSrcSwitch(String srcSwitch) {
+ map.put("src_switch", srcSwitch);
+ }
+
+ public void setSrcPort(Short srcPort) {
+ map.put("src_port", srcPort);
+ }
+
+ public void setDstSwitch(String dstSwitch) {
+ map.put("dst_switch", dstSwitch);
+ }
+
+ public void setDstPort(Short dstPort) {
+ map.put("dst_port", dstPort);
+ }
+
+ public void setDataPathSummary(String dataPathSummary) {
+ map.put("data_path_summary", dataPathSummary);
+ }
+
+ public void setMatchSrcMac(String matchSrcMac) {
+ map.put("matchSrcMac", matchSrcMac);
+ }
+
+ public void setMatchDstMac(String matchDstMac) {
+ map.put("matchDstMac", matchDstMac);
+ }
+
+ public void setMatchEthernetFrameType(Short matchEthernetFrameType) {
+ map.put("matchEthernetFrameType", matchEthernetFrameType);
+ }
+
+ public void setMatchVlanId(Short matchVlanId) {
+ map.put("matchVlanId", matchVlanId);
+ }
+
+ public void setMatchVlanPriority(Byte matchVlanPriority) {
+ map.put("matchVlanPriority", matchVlanPriority);
+ }
+
+ public void setMatchSrcIPv4Net(String matchSrcIPv4Net) {
+ map.put("matchSrcIPv4Net", matchSrcIPv4Net);
+ }
+
+ public void setMatchDstIPv4Net(String matchDstIPv4Net) {
+ map.put("matchDstIPv4Net", matchDstIPv4Net);
+ }
+
+ public void setMatchIpProto(Byte matchIpProto) {
+ map.put("matchIpProto", matchIpProto);
+ }
+
+ public void setMatchIpToS(Byte matchIpToS) {
+ map.put("matchIpToS", matchIpToS);
+ }
+
+ public void setMatchSrcTcpUdpPort(Short matchSrcTcpUdpPort) {
+ map.put("matchSrcTcpUdpPort", matchSrcTcpUdpPort);
+ }
+
+ public void setMatchDstTcpUdpPort(Short matchDstTcpUdpPort) {
+ map.put("matchDstTcpUdpPort", matchDstTcpUdpPort);
+ }
+
+ public void setActions(String actionsStr) {
+ map.put("actions", actionsStr);
+ }
+
+ /**
+ *
+ * @param dbhandler
+ */
+ public void commitProperties() {
+ dbhandler.setVertexProperties(flowPath.asVertex() ,map);
+ }
+}