propagate datastore exceptions all the way to northbound
[neutron.git] / transcriber / src / main / java / org / opendaylight / neutron / transcriber / NeutronLoadBalancerPoolInterface.java
index 64d26bb9a315f12422c00702c850dcf98942c939..1f1ee0608ab0d42a15b29158742cd30337096ac5 100644 (file)
@@ -5,7 +5,6 @@
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
-
 package org.opendaylight.neutron.transcriber;
 
 import com.google.common.base.Optional;
@@ -15,7 +14,8 @@ import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
-import java.util.concurrent.ExecutionException;
+import javax.inject.Inject;
+import javax.inject.Singleton;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
@@ -43,13 +43,19 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev150712.l
 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev150712.lbaas.attributes.pools.pool.members.MemberBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev150712.pool.attributes.SessionPersistenceBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.rev150712.Neutron;
+import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.common.OperationFailedException;
+import org.ops4j.pax.cdi.api.OsgiServiceProvider;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+@Singleton
+@OsgiServiceProvider(classes = INeutronLoadBalancerPoolCRUD.class)
 public final class NeutronLoadBalancerPoolInterface
         extends AbstractNeutronInterface<Pool, Pools, PoolKey, NeutronLoadBalancerPool>
         implements INeutronLoadBalancerPoolCRUD {
+
     private static final Logger LOG = LoggerFactory.getLogger(NeutronLoadBalancerPoolInterface.class);
 
     private static final ImmutableBiMap<Class<? extends ProtocolBase>,
@@ -57,7 +63,8 @@ public final class NeutronLoadBalancerPoolInterface
                     .put(ProtocolHttp.class, "HTTP").put(ProtocolHttps.class, "HTTPS").put(ProtocolTcp.class, "TCP")
                     .put(ProtocolTerminatedHttps.class, "TERMINATED_HTTPS").build();
 
-    NeutronLoadBalancerPoolInterface(DataBroker db) {
+    @Inject
+    public NeutronLoadBalancerPoolInterface(DataBroker db) {
         super(PoolBuilder.class, db);
     }
 
@@ -132,8 +139,7 @@ public final class NeutronLoadBalancerPoolInterface
             answer.setLoadBalancerPoolProtocol(PROTOCOL_MAP.get(pool.getProtocol()));
         }
         if (pool.getSessionPersistence() != null) {
-            final NeutronLoadBalancerSessionPersistence sessionPersistence =
-                    new NeutronLoadBalancerSessionPersistence();
+            NeutronLoadBalancerSessionPersistence sessionPersistence = new NeutronLoadBalancerSessionPersistence();
             sessionPersistence.setCookieName(pool.getSessionPersistence().getCookieName());
             sessionPersistence.setType(pool.getSessionPersistence().getType());
 
@@ -143,7 +149,7 @@ public final class NeutronLoadBalancerPoolInterface
     }
 
     @Override
-    public boolean neutronLoadBalancerPoolMemberExists(String poolUuid, String uuid) {
+    public boolean neutronLoadBalancerPoolMemberExists(String poolUuid, String uuid) throws ReadFailedException {
         final Member member = readMemberMd(createMemberInstanceIdentifier(toMd(poolUuid), toMemberMd(uuid)));
         if (member == null) {
             return false;
@@ -152,7 +158,8 @@ public final class NeutronLoadBalancerPoolInterface
     }
 
     @Override
-    public NeutronLoadBalancerPoolMember getNeutronLoadBalancerPoolMember(String poolUuid, String uuid) {
+    public NeutronLoadBalancerPoolMember getNeutronLoadBalancerPoolMember(String poolUuid, String uuid)
+            throws ReadFailedException {
         final Member member = readMemberMd(createMemberInstanceIdentifier(toMd(poolUuid), toMemberMd(uuid)));
         if (member == null) {
             return null;
@@ -161,7 +168,8 @@ public final class NeutronLoadBalancerPoolInterface
     }
 
     @Override
-    public List<NeutronLoadBalancerPoolMember> getAllNeutronLoadBalancerPoolMembers(String poolUuid) {
+    public List<NeutronLoadBalancerPoolMember> getAllNeutronLoadBalancerPoolMembers(String poolUuid)
+            throws ReadFailedException {
         final Set<NeutronLoadBalancerPoolMember> allLoadBalancerPoolMembers = new HashSet<>();
         final Members members = readMd(createMembersInstanceIdentifier(toMd(poolUuid)));
         if (members != null) {
@@ -177,7 +185,8 @@ public final class NeutronLoadBalancerPoolInterface
     }
 
     @Override
-    public boolean addNeutronLoadBalancerPoolMember(String poolUuid, NeutronLoadBalancerPoolMember input) {
+    public boolean addNeutronLoadBalancerPoolMember(String poolUuid, NeutronLoadBalancerPoolMember input)
+            throws OperationFailedException {
         if (neutronLoadBalancerPoolMemberExists(poolUuid, input.getID())) {
             return false;
         }
@@ -186,16 +195,17 @@ public final class NeutronLoadBalancerPoolInterface
     }
 
     @Override
-    public boolean removeNeutronLoadBalancerPoolMember(String poolUuid, String uuid) {
+    public boolean removeNeutronLoadBalancerPoolMember(String poolUuid, String uuid) throws OperationFailedException {
         if (!neutronLoadBalancerPoolMemberExists(poolUuid, uuid)) {
             return false;
         }
-        return removeMemberMd(toMd(poolUuid), toMemberMd(uuid));
+        removeMemberMd(toMd(poolUuid), toMemberMd(uuid));
+        return true;
     }
 
     @Override
     public boolean updateNeutronLoadBalancerPoolMember(String poolUuid, String uuid,
-            NeutronLoadBalancerPoolMember delta) {
+            NeutronLoadBalancerPoolMember delta) throws OperationFailedException {
         if (!neutronLoadBalancerPoolMemberExists(poolUuid, uuid)) {
             return false;
         }
@@ -204,17 +214,18 @@ public final class NeutronLoadBalancerPoolInterface
     }
 
     @Override
-    public boolean neutronLoadBalancerPoolMemberInUse(String poolUuid, String loadBalancerPoolMemberID) {
+    public boolean neutronLoadBalancerPoolMemberInUse(String poolUuid, String loadBalancerPoolMemberID)
+            throws ReadFailedException {
         return !neutronLoadBalancerPoolMemberExists(poolUuid, loadBalancerPoolMemberID);
     }
 
     protected InstanceIdentifier<Member> createMemberInstanceIdentifier(Pool pool, Member item) {
-        return InstanceIdentifier.create(Neutron.class).child(Pools.class).child(Pool.class, pool.getKey())
-                .child(Members.class).child(Member.class, item.getKey());
+        return InstanceIdentifier.create(Neutron.class).child(Pools.class).child(Pool.class, pool.key())
+                .child(Members.class).child(Member.class, item.key());
     }
 
     protected InstanceIdentifier<Members> createMembersInstanceIdentifier(Pool pool) {
-        return InstanceIdentifier.create(Neutron.class).child(Pools.class).child(Pool.class, pool.getKey())
+        return InstanceIdentifier.create(Neutron.class).child(Pools.class).child(Pool.class, pool.key())
                 .child(Members.class);
     }
 
@@ -258,64 +269,47 @@ public final class NeutronLoadBalancerPoolInterface
         return memberBuilder.build();
     }
 
-    protected Member toMemberMd(String uuid) {
+    private Member toMemberMd(String uuid) {
         final MemberBuilder memberBuilder = new MemberBuilder();
         memberBuilder.setUuid(toUuid(uuid));
         return memberBuilder.build();
     }
 
-    protected <
-            T extends org.opendaylight.yangtools.yang.binding.DataObject> T readMemberMd(InstanceIdentifier<T> path) {
+    private <T extends DataObject> T readMemberMd(InstanceIdentifier<T> path) throws ReadFailedException {
         T result = null;
-        final ReadOnlyTransaction transaction = getDataBroker().newReadOnlyTransaction();
-        final CheckedFuture<Optional<T>,
-                ReadFailedException> future = transaction.read(LogicalDatastoreType.CONFIGURATION, path);
-        if (future != null) {
-            Optional<T> optional;
-            try {
+        try (ReadOnlyTransaction transaction = getDataBroker().newReadOnlyTransaction()) {
+            final CheckedFuture<Optional<T>, ReadFailedException> future = transaction
+                    .read(LogicalDatastoreType.CONFIGURATION, path);
+            if (future != null) {
+                Optional<T> optional;
                 optional = future.checkedGet();
                 if (optional.isPresent()) {
                     result = optional.get();
                 }
-            } catch (final ReadFailedException e) {
-                LOG.warn("Failed to read {}", path, e);
             }
         }
-        transaction.close();
         return result;
     }
 
-    protected boolean addMemberMd(Pool pool, NeutronLoadBalancerPoolMember neutronObject) {
+    private void addMemberMd(Pool pool, NeutronLoadBalancerPoolMember neutronObject)
+            throws TransactionCommitFailedException {
         // TODO think about adding existence logic
-        return updateMemberMd(pool, neutronObject);
+        updateMemberMd(pool, neutronObject);
     }
 
-    protected boolean updateMemberMd(Pool pool, NeutronLoadBalancerPoolMember neutronObject) {
+    private void updateMemberMd(Pool pool, NeutronLoadBalancerPoolMember neutronObject)
+            throws TransactionCommitFailedException {
         final WriteTransaction transaction = getDataBroker().newWriteOnlyTransaction();
         final Member item = toMemberMd(neutronObject);
         final InstanceIdentifier<Member> iid = createMemberInstanceIdentifier(pool, item);
         transaction.put(LogicalDatastoreType.CONFIGURATION, iid, item, true);
-        final CheckedFuture<Void, TransactionCommitFailedException> future = transaction.submit();
-        try {
-            future.get();
-        } catch (InterruptedException | ExecutionException e) {
-            LOG.warn("Transation failed ", e);
-            return false;
-        }
-        return true;
+        transaction.submit().checkedGet();
     }
 
-    protected boolean removeMemberMd(Pool pool, Member item) {
+    private void removeMemberMd(Pool pool, Member item) throws TransactionCommitFailedException {
         final WriteTransaction transaction = getDataBroker().newWriteOnlyTransaction();
         final InstanceIdentifier<Member> iid = createMemberInstanceIdentifier(pool, item);
         transaction.delete(LogicalDatastoreType.CONFIGURATION, iid);
-        final CheckedFuture<Void, TransactionCommitFailedException> future = transaction.submit();
-        try {
-            future.get();
-        } catch (InterruptedException | ExecutionException e) {
-            LOG.warn("Transation failed ", e);
-            return false;
-        }
-        return true;
+        transaction.submit().checkedGet();
     }
 }