Improve gbp-sxp logging 89/48789/3
authorMichal Rehak <mirehak@cisco.com>
Tue, 29 Nov 2016 14:43:26 +0000 (15:43 +0100)
committerMichal Rehak <mirehak@cisco.com>
Wed, 30 Nov 2016 10:42:38 +0000 (11:42 +0100)
    - prevent unneccessary NPE from dumping to log
    - provide more useful logging for operation results
    - bit of code formatting

Change-Id: I564f1b9cd9135bc4767c22b2e3028f65c5301eef
Signed-off-by: Michal Rehak <mirehak@cisco.com>
sxp-integration/sxp-ep-provider/src/main/java/org/opendaylight/groupbasedpolicy/sxp/ep/provider/impl/listen/EPForwardingTemplateListenerImpl.java
sxp-integration/sxp-ep-provider/src/main/java/org/opendaylight/groupbasedpolicy/sxp/ep/provider/impl/listen/EPPolicyTemplateListenerImpl.java
sxp-integration/sxp-ise-adapter/src/main/java/org/opendaylight/groupbasedpolicy/sxp_ise_adapter/impl/EPPolicyTemplateProviderIseImpl.java
sxp-integration/sxp-ise-adapter/src/main/java/org/opendaylight/groupbasedpolicy/sxp_ise_adapter/impl/GbpIseConfigListenerImpl.java
sxp-integration/sxp-ise-adapter/src/main/java/org/opendaylight/groupbasedpolicy/sxp_ise_adapter/impl/GbpIseSgtHarvesterImpl.java
sxp-integration/sxp-ise-adapter/src/main/java/org/opendaylight/groupbasedpolicy/sxp_ise_adapter/impl/SgtToEPTemplateGeneratorImpl.java

index 1483c3d6746d4fa72c75fc331f8ae511d29e30a2..fe4566bd42bd8a5a2b450eda47d1264331c6c19a 100644 (file)
@@ -83,9 +83,13 @@ public class EPForwardingTemplateListenerImpl implements EPTemplateListener<Endp
             final IpPrefix changeKey = changePath.firstKeyOf(EndpointForwardingTemplateBySubnet.class).getIpPrefix();
             SxpListenerUtil.updateCachedDao(templateCachedDao, changeKey, change);
 
-            //TODO: handle removal (now causes NPE)
             final EndpointForwardingTemplateBySubnet epForwardingTemplate = change.getRootNode().getDataAfter();
-            processWithEPTemplates(epForwardingTemplate);
+            if (epForwardingTemplate == null) {
+                LOG.debug("EPForwarding template removed - NOOP {}", change.getRootNode().getDataBefore());
+                //TODO: handle removal (update cache)
+            } else {
+                processWithEPTemplates(epForwardingTemplate);
+            }
         }
     }
 
@@ -111,22 +115,27 @@ public class EPForwardingTemplateListenerImpl implements EPTemplateListener<Endp
             public ListenableFuture<RpcResult<Void>>
             apply(final Optional<Pair<MasterDatabaseBinding, EndpointPolicyTemplateBySgt>> input) throws Exception {
                 final ListenableFuture<RpcResult<Void>> result;
-                if (input == null || !input.isPresent()) {
-                    LOG.debug("no epPolicyTemplate available for ip-prefix: {}", epForwardingTemplate.getIpPrefix());
+                if (input.isPresent()) {
+                    LOG.debug("no pair [epPolicyTemplate, ip-sgt-binding] available for ip-prefix: {}", epForwardingTemplate.getIpPrefix());
                     result = Futures.immediateFuture(
                             RpcResultBuilder.<Void>failed()
                                     .withError(RpcError.ErrorType.APPLICATION,
-                                            "no epForwardingTemplate available for ip-prefix " + epForwardingTemplate.getIpPrefix())
+                                            "no pair [epPolicyTemplate, ip-sgt-binding] available for ip-prefix " + epForwardingTemplate.getIpPrefix())
                                     .build());
                 } else {
                     LOG.trace("processing epForwardingTemplate event for ip-prefix: {}", epForwardingTemplate.getIpPrefix());
                     final Pair<MasterDatabaseBinding, EndpointPolicyTemplateBySgt> pair = input.get();
                     final MasterDatabaseBinding sxpMasterDBBinding = pair.getLeft();
                     final EndpointPolicyTemplateBySgt epPolicyTemplate = pair.getRight();
-                    LOG.trace("processing epForwardingTemplate event with resolved sxpMasterDb entry and " +
-                                    "epPolicyTemplate for sgt/ip-prefix: {}/{}",
-                            sxpMasterDBBinding.getSecurityGroupTag(), sxpMasterDBBinding.getImplementedInterface());
-                    result = sxpMapperReactor.processTemplatesAndSxpMasterDB(epPolicyTemplate, epForwardingTemplate, sxpMasterDBBinding);
+                    if (epPolicyTemplate != null && sxpMasterDBBinding != null) {
+                        LOG.trace("processing epForwardingTemplate event with resolved sxpMasterDb entry and " +
+                                        "epPolicyTemplate for sgt/ip-prefix: {}/{}",
+                                sxpMasterDBBinding.getSecurityGroupTag(), sxpMasterDBBinding.getImplementedInterface());
+                        result = sxpMapperReactor.processTemplatesAndSxpMasterDB(epPolicyTemplate, epForwardingTemplate, sxpMasterDBBinding);
+                    } else {
+                        LOG.debug("Skipped ep-forwarding-template processing");
+                        result = Futures.immediateFuture(RpcResultBuilder.<Void>success().build());
+                    }
                 }
 
                 return result;
@@ -141,7 +150,7 @@ public class EPForwardingTemplateListenerImpl implements EPTemplateListener<Endp
             public ListenableFuture<Optional<Pair<MasterDatabaseBinding, EndpointPolicyTemplateBySgt>>>
             apply(final Optional<MasterDatabaseBinding> input) throws Exception {
                 final ListenableFuture<Pair<MasterDatabaseBinding, EndpointPolicyTemplateBySgt>> result;
-                if (input == null || !input.isPresent()) {
+                if (input.isPresent()) {
                     LOG.debug("no sxpMasterDB entry available for ip-prefix: {}", epFowardingTemplate.getIpPrefix());
                     result = Futures.immediateFuture(null);
                 } else {
index 4b70c55b68e96b94aa3af0551a74caf800d1d210..9b6ea2c47f65ef793425779b621cbb26545d5724 100644 (file)
@@ -92,7 +92,7 @@ public class EPPolicyTemplateListenerImpl implements EPTemplateListener<Endpoint
             final EndpointPolicyTemplateBySgt epPolicyTemplate = change.getRootNode().getDataAfter();
 
             // skip generated template
-            if (epPolicyTemplate != null && !TemplateGenerated.class.equals(epPolicyTemplate.getOrigin())) {
+            if (epPolicyTemplate != null && ! TemplateGenerated.class.equals(epPolicyTemplate.getOrigin())) {
                 processWithEPTemplates(epPolicyTemplate);
             } else {
                 LOG.trace("skipping ep-policy-template processing: {}", epPolicyTemplate);
@@ -123,11 +123,11 @@ public class EPPolicyTemplateListenerImpl implements EPTemplateListener<Endpoint
             apply(final List<Pair<MasterDatabaseBinding, EndpointForwardingTemplateBySubnet>> input) throws Exception {
                 final ListenableFuture<List<RpcResult<Void>>> result;
                 if (input == null || input.isEmpty()) {
-                    LOG.debug("no epForwardingTemplate available for sgt: {}", epPolicyTemplate.getSgt());
+                    LOG.debug("no pair [epForwardingTemplate, ip-sgt-binding] available for sgt: {}", epPolicyTemplate.getSgt());
                     result = Futures.immediateFuture(Collections.singletonList(
                             RpcResultBuilder.<Void>failed()
                                     .withError(RpcError.ErrorType.APPLICATION,
-                                            "no epForwardingTemplate available for sgt " + epPolicyTemplate.getSgt())
+                                            "no pair [epForwardingTemplate, ip-sgt-binding] available for sgt " + epPolicyTemplate.getSgt())
                                     .build()));
                 } else {
                     LOG.trace("processing epPolicyTemplate event for sgt: {}", epPolicyTemplate.getSgt());
index 7497bc000e84d353dd0dce43596781dec38521d2..1e5c7fa7b9b7f13bf97a23ad6865b463794b08fd 100644 (file)
@@ -10,6 +10,7 @@ package org.opendaylight.groupbasedpolicy.sxp_ise_adapter.impl;
 
 import com.google.common.base.Function;
 import com.google.common.collect.Range;
+import com.google.common.util.concurrent.FutureCallback;
 import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
 import java.util.Collection;
@@ -68,6 +69,20 @@ public class EPPolicyTemplateProviderIseImpl implements EPPolicyTemplateProvider
 
     private ListenableFuture<Optional<String>> queryIseOnSgt(final IseContext iseContext, @Nonnull final Sgt sgt) {
         final ListenableFuture<Collection<SgtInfo>> sgtUpdateFu = iseSgtHarvester.harvestAll(iseContext);
+
+        Futures.addCallback(sgtUpdateFu, new FutureCallback<Collection<SgtInfo>>() {
+            @Override
+            public void onSuccess(@Nullable final Collection<SgtInfo> result) {
+                final Integer amount = Optional.ofNullable(result).map(Collection::size).orElse(0);
+                LOG.debug("[epPolicyTemplateProvider] harvestAll succeeded: {}", amount);
+            }
+
+            @Override
+            public void onFailure(final Throwable t) {
+                LOG.debug("[epPolicyTemplateProvider] harvestAll FAILED: {}", t.getMessage());
+            }
+        });
+
         return Futures.transform(sgtUpdateFu, new Function<Collection<SgtInfo>, Optional<String>>() {
             @Nullable
             @Override
@@ -85,9 +100,10 @@ public class EPPolicyTemplateProviderIseImpl implements EPPolicyTemplateProvider
         // expected relation (ise : tenant) == (1:1)
         return iseContext
                 .filter(context ->
-                        Range.closed(context.getIseSourceConfig().getSgtRangeMin().getValue(),
-                                context.getIseSourceConfig().getSgtRangeMax().getValue())
-                                .contains(sgt.getValue())
+                        context.getIseSourceConfig() != null && Range.closed(
+                                context.getIseSourceConfig().getSgtRangeMin().getValue(),
+                                context.getIseSourceConfig().getSgtRangeMax().getValue()
+                        ).contains(sgt.getValue())
                 );
     }
 
index 92e84100b9e9086f1c97c0348cd3e9d8ed2959c0..0c18a4ef92bf5586cd7a3581f3dbfee557c3b936 100644 (file)
@@ -29,11 +29,13 @@ import org.opendaylight.controller.md.sal.binding.api.DataTreeModification;
 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Uri;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.groupbasedpolicy.sxp.integration.sxp.ise.adapter.model.rev160630.GbpSxpIseAdapter;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.groupbasedpolicy.sxp.integration.sxp.ise.adapter.model.rev160630.gbp.sxp.ise.adapter.IseHarvestStatus;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.groupbasedpolicy.sxp.integration.sxp.ise.adapter.model.rev160630.gbp.sxp.ise.adapter.IseHarvestStatusBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.groupbasedpolicy.sxp.integration.sxp.ise.adapter.model.rev160630.gbp.sxp.ise.adapter.IseSourceConfig;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.groupbasedpolicy.sxp.integration.sxp.ise.adapter.model.rev160630.gbp.sxp.ise.adapter.ise.source.config.ConnectionConfig;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -76,13 +78,17 @@ public class GbpIseConfigListenerImpl implements GbpIseConfigListener {
             final IseContext iseContext = new IseContext(iseSourceConfig);
             templateProviderFacade.assignIseContext(iseContext);
             if (iseSourceConfig != null) {
+                final Optional<ConnectionConfig> connectionConfig = Optional.ofNullable(iseSourceConfig.getConnectionConfig());
+                LOG.debug("Ise-source config assigned: {} -> {}", iseSourceConfig.getTenant(),
+                        connectionConfig.map(ConnectionConfig::getIseRestUrl).orElse(new Uri("n/a")));
                 pool.submit(() -> {
                     final ListenableFuture<Collection<SgtInfo>> harvestResult = gbpIseSgtHarvester.harvestAll(iseContext);
                     Futures.addCallback(harvestResult, new FutureCallback<Collection<SgtInfo>>() {
                         @Override
                         public void onSuccess(@Nullable final Collection<SgtInfo> result) {
-                            LOG.debug("ise harvest finished, outcome: {}", result);
-                            storeOutcome(true, Optional.ofNullable(result).map(Collection::size).orElse(0), null);
+                            final Integer counter = Optional.ofNullable(result).map(Collection::size).orElse(0);
+                            LOG.debug("ise harvest finished, outcome: {}", counter);
+                            storeOutcome(true, counter, null);
                         }
 
                         @Override
@@ -98,6 +104,8 @@ public class GbpIseConfigListenerImpl implements GbpIseConfigListener {
                         LOG.debug("failed to finish ise-sgt-harvest task properly on time", e);
                     }
                 });
+            } else {
+                LOG.debug("Ise-source config removed");
             }
         }
     }
@@ -123,7 +131,7 @@ public class GbpIseConfigListenerImpl implements GbpIseConfigListener {
 
     @Override
     public void close() throws Exception {
-        if (!pool.isTerminated()) {
+        if (! pool.isTerminated()) {
             pool.shutdown();
             final boolean terminated = pool.awaitTermination(10, TimeUnit.SECONDS);
             if (! terminated) {
index ef93ebab92a8c8144f247f29aa20381de50cd40c..e4a5148f394c0d6f31ca1706000388e133e3b8c1 100644 (file)
@@ -62,6 +62,8 @@ public class GbpIseSgtHarvesterImpl implements GbpIseSgtHarvester {
 
     @Override
     public ListenableFuture<Collection<SgtInfo>> harvestAll(@Nonnull final IseContext iseContext) {
+        LOG.debug("ise-source: harvestAll {} -> {}", iseContext.getIseSourceConfig().getTenant(),
+                iseContext.getIseSourceConfig().getConnectionConfig().getIseRestUrl());
         ListenableFuture<Collection<SgtInfo>> result;
         try {
             final IseSourceConfig iseSourceConfig = iseContext.getIseSourceConfig();
index 9abae3eeb9e928908cded636144afe2ea78dfd1c..42cc112af222b836a868079edc3a0ee171fe535a 100644 (file)
@@ -64,6 +64,7 @@ public class SgtToEPTemplateGeneratorImpl implements SgtInfoProcessor {
             wTx.put(LogicalDatastoreType.CONFIGURATION, epPolicyTemplatePath, epPolicyTemplate, createParent);
             createParent = false;
         }
+        LOG.trace("harvested ep-policy-templates submitted: {} -> {}", tenantId, sgtInfos.size());
         return wTx.submit();
     }
 }