Fix possible transaction leak in BridgeOperationalState 71/65571/1
authorMichael Vorburger <vorburger@redhat.com>
Wed, 15 Nov 2017 18:19:16 +0000 (19:19 +0100)
committerMichael Vorburger <vorburger@redhat.com>
Wed, 15 Nov 2017 18:22:33 +0000 (18:22 +0000)
see https://jira.opendaylight.org/browse/NETVIRT-985

Change-Id: Ie8bd1d81cb4df55d9c75ca275756013262c12a00
Signed-off-by: Michael Vorburger <vorburger@redhat.com>
southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/ovsdb/transact/BridgeOperationalState.java

index 1bd0cd02df89e182ca976a75353b4a9abc37e5b2..001c951d450e9a62f7ecb210f4f647ffe234b89c 100644 (file)
@@ -41,24 +41,24 @@ public class BridgeOperationalState {
 
     public BridgeOperationalState(DataBroker db, AsyncDataChangeEvent<InstanceIdentifier<?>,
             DataObject> changes) {
-        ReadOnlyTransaction transaction = db.newReadOnlyTransaction();
-        Map<InstanceIdentifier<Node>, Node> nodeCreateOrUpdate =
-                TransactUtils.extractCreatedOrUpdatedOrRemoved(changes, Node.class);
-        if (nodeCreateOrUpdate != null) {
-            for (Entry<InstanceIdentifier<Node>, Node> entry: nodeCreateOrUpdate.entrySet()) {
-                CheckedFuture<Optional<Node>, ReadFailedException> nodeFuture =
-                        transaction.read(LogicalDatastoreType.OPERATIONAL, entry.getKey());
-                try {
-                    Optional<Node> nodeOptional = nodeFuture.get();
-                    if (nodeOptional.isPresent()) {
-                        operationalNodes.put(entry.getKey(), nodeOptional.get());
+        try (ReadOnlyTransaction transaction = db.newReadOnlyTransaction()) {
+            Map<InstanceIdentifier<Node>, Node> nodeCreateOrUpdate =
+                    TransactUtils.extractCreatedOrUpdatedOrRemoved(changes, Node.class);
+            if (nodeCreateOrUpdate != null) {
+                for (Entry<InstanceIdentifier<Node>, Node> entry: nodeCreateOrUpdate.entrySet()) {
+                    CheckedFuture<Optional<Node>, ReadFailedException> nodeFuture =
+                            transaction.read(LogicalDatastoreType.OPERATIONAL, entry.getKey());
+                    try {
+                        Optional<Node> nodeOptional = nodeFuture.get();
+                        if (nodeOptional.isPresent()) {
+                            operationalNodes.put(entry.getKey(), nodeOptional.get());
+                        }
+                    } catch (InterruptedException | ExecutionException e) {
+                        LOG.warn("Error reading from datastore",e);
                     }
-                } catch (InterruptedException | ExecutionException e) {
-                    LOG.warn("Error reading from datastore",e);
                 }
             }
         }
-        transaction.close();
     }
 
     public BridgeOperationalState(DataBroker db, Collection<DataTreeModification<Node>> changes) {