import org.opendaylight.controller.md.sal.binding.api.BindingTransactionChain;\r
import org.opendaylight.controller.md.sal.binding.api.DataBroker;\r
import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;\r
-import org.opendaylight.controller.md.sal.binding.api.ReadTransaction;\r
import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;\r
import org.opendaylight.controller.md.sal.common.api.data.AsyncTransaction;\r
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;\r
import org.opendaylight.controller.md.sal.common.api.data.TransactionChain;\r
import org.opendaylight.controller.md.sal.common.api.data.TransactionChainListener;\r
-import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;\r
import org.opendaylight.groupbasedpolicy.neutron.vpp.mapper.SocketInfo;\r
import org.opendaylight.groupbasedpolicy.util.DataStoreHelper;\r
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.ports.attributes.ports.Port;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.ports.attributes.ports.PortKey;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.rev150712.Neutron;\r
-import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;\r
-import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;\r
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;\r
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;\r
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;\r
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;\r
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;\r
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;\r
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey;\r
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;\r
}\r
\r
void processCreated(Port port) {\r
- ReadTransaction rTx = dataBroker.newReadOnlyTransaction();\r
+ ReadOnlyTransaction rTx = transactionChain.newReadOnlyTransaction();\r
Optional<BaseEndpointByPort> optBaseEpByPort = DataStoreHelper.readFromDs(LogicalDatastoreType.OPERATIONAL,\r
createBaseEpByPortIid(port.getUuid()), rTx);\r
+ rTx.close();\r
if (!optBaseEpByPort.isPresent()) {\r
return;\r
}\r
}\r
\r
void processCreated(BaseEndpointByPort bebp) {\r
- ReadTransaction rTx = dataBroker.newReadOnlyTransaction();\r
+ ReadOnlyTransaction rTx = transactionChain.newReadOnlyTransaction();\r
Optional<Port> optPort = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION,\r
createPortIid(bebp.getPortId()), rTx);\r
+ rTx.close();\r
if (!optPort.isPresent()) {\r
return;\r
}\r
\r
void processUpdated(Port original, Port delta) {\r
if (isValidVhostUser(original)) {\r
- ReadOnlyTransaction rTx = dataBroker.newReadOnlyTransaction();\r
+ ReadOnlyTransaction rTx = transactionChain.newReadOnlyTransaction();\r
Optional<BaseEndpointByPort> optBebp = DataStoreHelper.readFromDs(LogicalDatastoreType.OPERATIONAL,\r
createBaseEpByPortIid(original.getUuid()), rTx);\r
rTx.close();\r
}\r
}\r
\r
- private void writeVppEndpoint(InstanceIdentifier<VppEndpoint> vppEpIid, VppEndpoint vppEp) {\r
+ private synchronized void writeVppEndpoint(InstanceIdentifier<VppEndpoint> vppEpIid, VppEndpoint vppEp) {\r
WriteTransaction wTx = transactionChain.newWriteOnlyTransaction();\r
if (vppEp != null) {\r
wTx.put(LogicalDatastoreType.CONFIGURATION, vppEpIid, vppEp, true);\r
} else {\r
wTx.delete(LogicalDatastoreType.CONFIGURATION, vppEpIid);\r
}\r
- try {\r
- wTx.submit().checkedGet();\r
- } catch (TransactionCommitFailedException e) {\r
- LOG.error("Transaction chain commit failed. {}", e);\r
- transactionChain.close();\r
- transactionChain = dataBroker.createTransactionChain(this);\r
- }\r
+ wTx.submit();\r
}\r
\r
@VisibleForTesting\r
@Override\r
public void onTransactionChainFailed(TransactionChain<?, ?> chain, AsyncTransaction<?, ?> transaction,\r
Throwable cause) {\r
- LOG.error("Transaction chain failed. {}", cause.getMessage());\r
+ LOG.error("Transaction chain failed. {} \nTransaction which caused the chain to fail {}", cause.getMessage(),\r
+ transaction, cause);\r
transactionChain.close();\r
transactionChain = dataBroker.createTransactionChain(this);\r
}\r
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
import static org.junit.Assert.assertNotNull;
-import static org.mockito.Mockito.any;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Matchers.any;
import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import org.junit.Before;
ReadOnlyTransaction rTx = dataBroker.newReadOnlyTransaction();
Optional<VppEndpoint> optVppEp = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION,
TestUtils.createVppEpIid(TestUtils.createVppEndpointKey(bebp)), rTx);
- verify(transactionChain).newReadOnlyTransaction();
- verify(transactionChain, times(2)).newWriteOnlyTransaction();
assertTrue(optVppEp.isPresent());
}
ReadOnlyTransaction rTx = dataBroker.newReadOnlyTransaction();
Optional<VppEndpoint> optVppEp = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION,
TestUtils.createVppEpIid(TestUtils.createVppEndpointKey(bebp)), rTx);
- // looks for existing Vpp endpoint
- verify(transactionChain).newReadOnlyTransaction();
- // only removes former valid vpp endpoint
- verify(transactionChain).newWriteOnlyTransaction();
assertFalse(optVppEp.isPresent());
}
Optional<VppEndpoint> optVppEp = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION,
TestUtils.createVppEpIid(TestUtils.createVppEndpointKey(bebp)), rTx);
assertFalse(optVppEp.isPresent());
- verify(transactionChain).newReadOnlyTransaction();
- verify(transactionChain).newWriteOnlyTransaction();
}
private void putVppEp(Port port, BaseEndpointByPort bebp, WriteTransaction rwTx) {