From c24a6e4d85355378045b13ffc00b596e0d9cbaed Mon Sep 17 00:00:00 2001 From: Anil Vishnoi Date: Wed, 6 May 2015 23:58:42 +0530 Subject: [PATCH] OvsdbDataChangeListner : Implemented processing of port/interface update Change-Id: Ic61f5f2c0b426b988882f9bef7553143e9c537e7 Signed-off-by: Anil Vishnoi --- .../netvirt/impl/OvsdbDataChangeListener.java | 41 ++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/impl/OvsdbDataChangeListener.java b/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/impl/OvsdbDataChangeListener.java index b5f600411..1b284dd94 100644 --- a/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/impl/OvsdbDataChangeListener.java +++ b/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/impl/OvsdbDataChangeListener.java @@ -69,15 +69,19 @@ public class OvsdbDataChangeListener implements DataChangeListener, AutoCloseabl @Override public void onDataChanged(AsyncDataChangeEvent, DataObject> changes) { LOG.info(">>>>> onDataChanged: {}", changes); - + //TODO: off load this process to execution service, blocking md-sal notification thread + // has performance impact on overall controller performance. With new notification broker + //it might create weird issues. processOvsdbConnections(changes); processOvsdbDisconnect(changes); + processOvsdbConnectionAttributeUpdates(changes); processOpenflowConnections(changes); processBridgeCreation(changes); processBridgeDeletion(changes); processBridgeUpdate(changes); processPortCreation(changes); processPortDeletion(changes); + processPortUpdate(changes); } @@ -123,6 +127,12 @@ public class OvsdbDataChangeListener implements DataChangeListener, AutoCloseabl } } + private void processOvsdbConnectionAttributeUpdates( + AsyncDataChangeEvent, DataObject> changes) { + // TODO Auto-generated method stub + + } + private void processOpenflowConnections(AsyncDataChangeEvent, DataObject> changes) { LOG.trace("processOpenflowConnections - processOpenflowConnections created: {}", changes); for (Map.Entry, DataObject> change : changes.getCreatedData().entrySet()) { @@ -225,6 +235,35 @@ public class OvsdbDataChangeListener implements DataChangeListener, AutoCloseabl } } + private void processPortUpdate( + AsyncDataChangeEvent, DataObject> changes) { + LOG.info("processPortUpdate - Received changes : {}", changes); + + for(Map.Entry, DataObject> updatedPort : changes.getUpdatedData().entrySet()){ + if(updatedPort.getKey() instanceof OvsdbTerminationPointAugmentation){ + LOG.info("Processing port updates : {}",updatedPort); + // XXX (NOTE): Extract parent node data from originalData(), rather then extracting it from updatedData() + // because, extracting it from originalData() will give all the + // (existing data of parent node + old data of the OvsdbTerminationPointAugmentation). + // If we extract parent node data from updatedData, it will give us + // ( Node data + new OvsdbTermiantionPointAugmentation data). To determine the update in + // OvsdbTerminationPointAugmentation, we need to pass it's old and new values to ovsdbUpdate. + // We anyways pass new data of OvsdbTerminationPointAugmentation to ovsdbUpdate. + Node tpParentNode = getNode(changes.getOriginalData(),updatedPort); + if(tpParentNode == null){ + // Logging this warning, to catch any change in southbound plugin's behavior. + LOG.warn("Parent Node for port is not found. On Port/Interface update data store" + + " must provide the parent node update. This condition should not occure " + + "with the existing models define in southbound plugin." ); + continue; + } + + LOG.debug("Process port's {} update on Node : {}", updatedPort.getValue(),tpParentNode); + ovsdbUpdate(tpParentNode, updatedPort.getValue(),OvsdbInventoryListener.OvsdbType.PORT, Action.UPDATE); + } + } + } + private void processBridgeCreation( AsyncDataChangeEvent, DataObject> changes) { LOG.info("processBridgeCreation - Received changes : {}", changes); -- 2.36.6