Fixing the sync issues with AAI 25/6225/1
authorARUL NAMBI <arul.nambi@amdocs.com>
Tue, 25 Jul 2017 18:46:08 +0000 (14:46 -0400)
committerARUL NAMBI <arul.nambi@amdocs.com>
Tue, 25 Jul 2017 18:46:59 +0000 (14:46 -0400)
Issue-ID: AAI-73
Change-Id: I5c7df7c24c59c347b112cdb003eea726e239a1ca
Signed-off-by: ARUL NAMBI <arul.nambi@amdocs.com>
17 files changed:
pom.xml
src/main/java/org/openecomp/sparky/dal/aai/config/ActiveInventoryConfig.java
src/main/java/org/openecomp/sparky/logging/AaiUiMsgs.java
src/main/java/org/openecomp/sparky/synchronizer/AbstractEntitySynchronizer.java
src/main/java/org/openecomp/sparky/synchronizer/AggregationSuggestionSynchronizer.java
src/main/java/org/openecomp/sparky/synchronizer/AggregationSynchronizer.java
src/main/java/org/openecomp/sparky/synchronizer/AutosuggestionSynchronizer.java
src/main/java/org/openecomp/sparky/synchronizer/CrossEntityReferenceSynchronizer.java
src/main/java/org/openecomp/sparky/synchronizer/GeoSynchronizer.java
src/main/java/org/openecomp/sparky/synchronizer/HistoricalEntitySummarizer.java
src/main/java/org/openecomp/sparky/synchronizer/SearchableEntitySynchronizer.java
src/main/java/org/openecomp/sparky/synchronizer/SyncController.java
src/main/java/org/openecomp/sparky/synchronizer/SyncHelper.java
src/main/java/org/openecomp/sparky/viewandinspect/entity/NodeProcessingTransaction.java
src/main/java/org/openecomp/sparky/viewandinspect/services/VisualizationContext.java
src/main/java/org/openecomp/sparky/viewandinspect/task/PerformNodeSelfLinkProcessingTask.java
src/main/resources/logging/AAIUIMsgs.properties

diff --git a/pom.xml b/pom.xml
index 44a4c5f..6e37aaa 100644 (file)
--- a/pom.xml
+++ b/pom.xml
                <dependency>
                        <groupId>org.openecomp.ecompsdkos</groupId>
                        <artifactId>epsdk-fw</artifactId>
-                       <version>1.1.0-SNAPSHOT</version>
+                       <version>1.1.0</version>
                        <exclusions>
                                <exclusion>
                                        <groupId>commons-logging</groupId>
index c0f5db8..1a2e59e 100644 (file)
 package org.openecomp.sparky.dal.aai.config;
 
 import java.net.URI;
+import java.net.URISyntaxException;
 import java.util.Properties;
 
 import javax.ws.rs.core.UriBuilder;
 
+import org.openecomp.cl.api.Logger;
+import org.openecomp.cl.eelf.LoggerFactory;
+import org.openecomp.sparky.logging.AaiUiMsgs;
 import org.openecomp.sparky.synchronizer.config.TaskProcessorConfig;
 import org.openecomp.sparky.util.ConfigHelper;
 import org.openecomp.sparky.util.Encryptor;
 import org.openecomp.sparky.viewandinspect.config.TierSupportUiConstants;
-
 /**
  * The Class ActiveInventoryConfig.
  */
@@ -45,7 +48,8 @@ public class ActiveInventoryConfig {
   public static final String CONFIG_FILE =
       TierSupportUiConstants.DYNAMIC_CONFIG_APP_LOCATION + "aai.properties";
   private static ActiveInventoryConfig instance;
-  
+  private static final Logger LOG = LoggerFactory.getInstance().getLogger(
+             ActiveInventoryConfig.class);
   private static final String HTTP_SCHEME = "http";
   private static final String HTTPS_SCHEME = "https";
 
@@ -141,7 +145,16 @@ public class ActiveInventoryConfig {
     return builder.build().toString();
 
   }
-
+  
+  public static String extractResourcePath(String selflink) {
+           try {
+             return new URI(selflink).getPath();
+           } catch (URISyntaxException uriSyntaxException) {
+             LOG.error(AaiUiMsgs.ERROR_EXTRACTING_RESOURCE_PATH_FROM_LINK, uriSyntaxException.getMessage());
+             return selflink;
+           }
+         }
+  
   /* (non-Javadoc)
    * @see java.lang.Object#toString()
    */
index a06559c..cdd2a77 100644 (file)
@@ -411,8 +411,9 @@ public enum AaiUiMsgs implements LogMessageEnum {
   /** Arguments: {0} = Exception */
   ERROR_D3_GRAPH_VISUALIZATION,
   /** Arguments: {0} = Exception */
-  ERROR_AAI_QUERY_WITH_RETRY;
-
+  ERROR_AAI_QUERY_WITH_RETRY,
+  /** Arguments: Error extracting resource path from self-link.  Error = {0} */
+  ERROR_EXTRACTING_RESOURCE_PATH_FROM_LINK;
   /**
    * Static initializer to ensure the resource bundles for this class are loaded...
    */
index 14ea149..024e8f7 100644 (file)
@@ -63,7 +63,7 @@ public abstract class AbstractEntitySynchronizer {
   protected final Logger logger;
   protected ObjectMapper mapper;
   protected OxmModelLoader oxmModelLoader;
-
+  protected long syncDurationInMs;
   /**
    * The Enum StatFlag.
    */
@@ -99,7 +99,8 @@ public abstract class AbstractEntitySynchronizer {
   protected String synchronizerName;
 
   protected abstract boolean isSyncDone();
-
+  protected boolean shouldSkipSync;
+  
   public String getActiveInventoryStatisticsReport() {
 
     StringBuilder sb = new StringBuilder(128);
@@ -293,7 +294,18 @@ public abstract class AbstractEntitySynchronizer {
     
     String txnID = NodeUtils.getRandomTxnId();
        MdcContext.initialize(txnID, "AbstractEntitySynchronizer", "", "Sync", "");
+       
+       this.shouldSkipSync = false;
+    this.syncStartedTimeStampInMs = System.currentTimeMillis();
+    this.syncDurationInMs = -1;
+  }
+
+  public boolean shouldSkipSync() {
+    return shouldSkipSync;
+  }
 
+  public void setShouldSkipSync(boolean shouldSkipSync) {
+    this.shouldSkipSync = shouldSkipSync;
   }
 
   /**
index 0337f6a..75200be 100644 (file)
@@ -27,15 +27,12 @@ package org.openecomp.sparky.synchronizer;
 
 import static java.util.concurrent.CompletableFuture.supplyAsync;
 
-import org.openecomp.cl.mdc.MdcContext;
-
-import java.net.InetAddress;
-import java.net.UnknownHostException;
 import java.util.Map;
 import java.util.concurrent.ExecutorService;
 
 import org.openecomp.cl.api.Logger;
 import org.openecomp.cl.eelf.LoggerFactory;
+import org.openecomp.cl.mdc.MdcContext;
 import org.openecomp.sparky.dal.NetworkTransaction;
 import org.openecomp.sparky.dal.rest.HttpMethod;
 import org.openecomp.sparky.dal.rest.OperationResult;
@@ -87,7 +84,8 @@ public class AggregationSuggestionSynchronizer extends AbstractEntitySynchronize
   @Override
   public OperationState doSync() {
     isSyncInProgress = true;
-
+    this.syncDurationInMs = -1;
+    syncStartedTimeStampInMs = System.currentTimeMillis();
     syncEntity();
 
     while (!isSyncDone()) {
@@ -176,8 +174,8 @@ public class AggregationSuggestionSynchronizer extends AbstractEntitySynchronize
 
   @Override
   public String getStatReport(boolean shouldDisplayFinalReport) {
-    return getStatReport(System.currentTimeMillis() - this.syncStartedTimeStampInMs,
-        shouldDisplayFinalReport);
+       syncDurationInMs = System.currentTimeMillis() - syncStartedTimeStampInMs;
+       return getStatReport(syncDurationInMs, shouldDisplayFinalReport);
   }
 
   @Override
index ba1fb24..1f8be1d 100644 (file)
@@ -54,6 +54,7 @@ import org.openecomp.cl.api.Logger;
 import org.openecomp.cl.eelf.LoggerFactory;
 import org.openecomp.sparky.config.oxm.OxmEntityDescriptor;
 import org.openecomp.sparky.dal.NetworkTransaction;
+import org.openecomp.sparky.dal.aai.config.ActiveInventoryConfig;
 import org.openecomp.sparky.dal.elasticsearch.config.ElasticSearchConfig;
 import org.openecomp.sparky.dal.rest.HttpMethod;
 import org.openecomp.sparky.dal.rest.OperationResult;
@@ -554,7 +555,7 @@ public class AggregationSynchronizer extends AbstractEntitySynchronizer
         if (jsonResult != null && jsonResult.length() > 0) {
 
           AggregationEntity ae = new AggregationEntity(oxmModelLoader);
-          ae.setLink( txn.getLink() );
+          ae.setLink(ActiveInventoryConfig.extractResourcePath(txn.getLink()));
           populateAggregationEntityDocument(ae, jsonResult, txn.getDescriptor());
           ae.deriveFields();
 
@@ -680,6 +681,8 @@ public class AggregationSynchronizer extends AbstractEntitySynchronizer
    */
   @Override
   public OperationState doSync() {
+       this.syncDurationInMs = -1;
+       syncStartedTimeStampInMs = System.currentTimeMillis();
     String txnID = NodeUtils.getRandomTxnId();
     MdcContext.initialize(txnID, "AggregationSynchronizer", "", "Sync", "");
     
@@ -704,8 +707,8 @@ public class AggregationSynchronizer extends AbstractEntitySynchronizer
    */
   @Override
   public String getStatReport(boolean showFinalReport) {
-    return getStatReport(System.currentTimeMillis() - this.syncStartedTimeStampInMs,
-        showFinalReport);
+       syncDurationInMs = System.currentTimeMillis() - syncStartedTimeStampInMs;
+       return getStatReport(syncDurationInMs, showFinalReport);
   }
 
   public String getEntityType() {
index 05a9698..2966c1f 100644 (file)
@@ -28,8 +28,6 @@ package org.openecomp.sparky.synchronizer;
 import static java.util.concurrent.CompletableFuture.supplyAsync;
 
 import java.io.IOException;
-import java.net.InetAddress;
-import java.net.UnknownHostException;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -47,8 +45,10 @@ import java.util.function.Supplier;
 
 import org.openecomp.cl.api.Logger;
 import org.openecomp.cl.eelf.LoggerFactory;
+import org.openecomp.cl.mdc.MdcContext;
 import org.openecomp.sparky.config.oxm.OxmEntityDescriptor;
 import org.openecomp.sparky.dal.NetworkTransaction;
+import org.openecomp.sparky.dal.aai.config.ActiveInventoryConfig;
 import org.openecomp.sparky.dal.rest.HttpMethod;
 import org.openecomp.sparky.dal.rest.OperationResult;
 import org.openecomp.sparky.logging.AaiUiMsgs;
@@ -64,11 +64,6 @@ import org.openecomp.sparky.util.NodeUtils;
 import org.openecomp.sparky.util.SuggestionsPermutation;
 import org.slf4j.MDC;
 
-import org.openecomp.cl.mdc.MdcContext;
-
-import org.openecomp.cl.mdc.MdcContext;
-
-import org.openecomp.cl.mdc.MdcContext;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.node.ArrayNode;
@@ -135,6 +130,7 @@ public class AutosuggestionSynchronizer extends AbstractEntitySynchronizer
     this.syncInProgress = false;
     this.contextMap = MDC.getCopyOfContextMap();
     this.esPutExecutor = NodeUtils.createNamedExecutor("SUES-ES-PUT", 5, LOG);
+    this.syncDurationInMs = -1;
   }
 
   /**
@@ -232,6 +228,8 @@ public class AutosuggestionSynchronizer extends AbstractEntitySynchronizer
    */
   @Override
   public OperationState doSync() {
+       this.syncDurationInMs = -1;
+       syncStartedTimeStampInMs = System.currentTimeMillis();
     String txnID = NodeUtils.getRandomTxnId();
     MdcContext.initialize(txnID, "AutosuggestionSynchronizer", "", "Sync", "");
     
@@ -400,6 +398,7 @@ public class AutosuggestionSynchronizer extends AbstractEntitySynchronizer
           sse.setSuggestableAttr(uniqueList);
           sse.setPayloadFromResponse(entityNode);
           sse.setLink(txn.getLink());
+          sse.setLink(ActiveInventoryConfig.extractResourcePath(txn.getLink()));
           populateSuggestionSearchEntityDocument(sse, jsonResult, txn);
           // The unique id for the document will be created at derive fields
           sse.deriveFields();
@@ -676,8 +675,8 @@ public class AutosuggestionSynchronizer extends AbstractEntitySynchronizer
    */
   @Override
   public String getStatReport(boolean showFinalReport) {
-    return getStatReport(System.currentTimeMillis() - this.syncStartedTimeStampInMs,
-        showFinalReport);
+         syncDurationInMs = System.currentTimeMillis() - syncStartedTimeStampInMs;
+         return getStatReport(syncDurationInMs, showFinalReport);
   }
 
   /*
index 2ba2500..c1da401 100644 (file)
@@ -106,7 +106,8 @@ public class CrossEntityReferenceSynchronizer extends AbstractEntitySynchronizer
 
   private static final Logger LOG =
       LoggerFactory.getInstance().getLogger(CrossEntityReferenceSynchronizer.class);
-
+  
+  private static final String SERVICE_INSTANCE = "service-instance";
   private Deque<SelfLinkDescriptor> selflinks;
   private Deque<RetryCrossEntitySyncContainer> retryQueue;
   private Map<String, Integer> retryLimitTracker;
@@ -133,6 +134,7 @@ public class CrossEntityReferenceSynchronizer extends AbstractEntitySynchronizer
     this.esEntityStats.initializeCountersFromOxmEntityDescriptors(
         oxmModelLoader.getCrossReferenceEntityDescriptors());
     this.aaiConfig = aaiConfig;
+    this.syncDurationInMs = -1;
   }
 
   /* (non-Javadoc)
@@ -140,6 +142,7 @@ public class CrossEntityReferenceSynchronizer extends AbstractEntitySynchronizer
    */
   @Override
   public OperationState doSync() {
+       this.syncDurationInMs = -1;
        String txnID = NodeUtils.getRandomTxnId();
     MdcContext.initialize(txnID, "CrossEntitySynchronizer", "", "Sync", "");
        
@@ -163,8 +166,8 @@ public class CrossEntityReferenceSynchronizer extends AbstractEntitySynchronizer
    */
   @Override
   public String getStatReport(boolean showFinalReport) {
-    return this.getStatReport(System.currentTimeMillis() - syncStartedTimeStampInMs,
-        showFinalReport);
+         syncDurationInMs = System.currentTimeMillis() - syncStartedTimeStampInMs;
+         return getStatReport(syncDurationInMs, showFinalReport);
   }
 
   /* (non-Javadoc)
@@ -483,18 +486,23 @@ public class CrossEntityReferenceSynchronizer extends AbstractEntitySynchronizer
                    * Build generic-query to query child instance self-link from AAI
                    */
                   List<String> orderedQueryKeyParams = new ArrayList<String>();
-                  orderedQueryKeyParams.add(parentEntityQueryString);
-                  orderedQueryKeyParams.add(childEntityQueryKeyString);
+                  if (SERVICE_INSTANCE.equals(childEntityType)) {
+                      orderedQueryKeyParams.clear();
+                      orderedQueryKeyParams.add(childEntityQueryKeyString);
+                    } else {
+                      orderedQueryKeyParams.add(parentEntityQueryString);
+                      orderedQueryKeyParams.add(childEntityQueryKeyString);
+                    }
                   String genericQueryStr = null;
                   try {
                     genericQueryStr = aaiDataProvider.getGenericQueryForSelfLink(childEntityType, orderedQueryKeyParams);
                     
                     if (genericQueryStr != null) {
-
+                      aaiWorkOnHand.incrementAndGet();
                       OperationResult aaiQueryResult = aaiDataProvider.queryActiveInventoryWithRetries(
                           genericQueryStr, "application/json",
                           aaiConfig.getAaiRestConfig().getNumRequestRetries());
-                      
+                      aaiWorkOnHand.decrementAndGet();
                       if (aaiQueryResult!= null && aaiQueryResult.wasSuccessful()) {
                         
                         Collection<JsonNode> entityLinks = new ArrayList<JsonNode>();
@@ -527,7 +535,7 @@ public class CrossEntityReferenceSynchronizer extends AbstractEntitySynchronizer
                                       parentCrossEntityReferenceAttributeValue);
                                 }
                                 
-                                icer.setLink(selfLink);
+                                icer.setLink(ActiveInventoryConfig.extractResourcePath(selfLink));
 
                                 icer.deriveFields();
 
index e53c5a7..2715b61 100644 (file)
@@ -28,8 +28,6 @@ package org.openecomp.sparky.synchronizer;
 import static java.util.concurrent.CompletableFuture.supplyAsync;
 
 import java.io.IOException;
-import java.net.InetAddress;
-import java.net.UnknownHostException;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Deque;
@@ -41,6 +39,7 @@ import java.util.function.Supplier;
 
 import org.openecomp.cl.api.Logger;
 import org.openecomp.cl.eelf.LoggerFactory;
+import org.openecomp.cl.mdc.MdcContext;
 import org.openecomp.sparky.config.oxm.OxmEntityDescriptor;
 import org.openecomp.sparky.dal.NetworkTransaction;
 import org.openecomp.sparky.dal.elasticsearch.config.ElasticSearchConfig;
@@ -56,7 +55,6 @@ import org.openecomp.sparky.synchronizer.task.StoreDocumentTask;
 import org.openecomp.sparky.util.NodeUtils;
 import org.slf4j.MDC;
 
-import org.openecomp.cl.mdc.MdcContext;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.node.ArrayNode;
@@ -90,7 +88,7 @@ public class GeoSynchronizer extends AbstractEntitySynchronizer implements Index
     this.geoDescriptorMap = oxmModelLoader.getGeoEntityDescriptors();
     this.aaiEntityStats.initializeCountersFromOxmEntityDescriptors(geoDescriptorMap);
     this.esEntityStats.initializeCountersFromOxmEntityDescriptors(geoDescriptorMap);
-
+    this.syncDurationInMs = -1;
   }
 
 
@@ -126,6 +124,7 @@ public class GeoSynchronizer extends AbstractEntitySynchronizer implements Index
     }
 
     if (geoDescriptorMap.isEmpty()) {
+      setShouldSkipSync(true);
       LOG.error(AaiUiMsgs.OXM_FAILED_RETRIEVAL, "geo entities");
       return OperationState.ERROR;
     }
@@ -401,8 +400,8 @@ public class GeoSynchronizer extends AbstractEntitySynchronizer implements Index
    */
   @Override
   public String getStatReport(boolean showFinalReport) {
-    return this.getStatReport(System.currentTimeMillis() - syncStartedTimeStampInMs,
-        showFinalReport);
+         syncDurationInMs = System.currentTimeMillis() - syncStartedTimeStampInMs;
+         return this.getStatReport(syncDurationInMs, showFinalReport);
   }
 
   /* (non-Javadoc)
index 81201d2..0fc79c6 100644 (file)
@@ -28,8 +28,6 @@ package org.openecomp.sparky.synchronizer;
 import static java.util.concurrent.CompletableFuture.supplyAsync;
 
 import java.io.IOException;
-import java.net.InetAddress;
-import java.net.UnknownHostException;
 import java.sql.Timestamp;
 import java.text.SimpleDateFormat;
 import java.util.Collection;
@@ -45,6 +43,7 @@ import javax.json.Json;
 
 import org.openecomp.cl.api.Logger;
 import org.openecomp.cl.eelf.LoggerFactory;
+import org.openecomp.cl.mdc.MdcContext;
 import org.openecomp.sparky.config.oxm.OxmEntityDescriptor;
 import org.openecomp.sparky.dal.rest.HttpMethod;
 import org.openecomp.sparky.dal.rest.OperationResult;
@@ -54,9 +53,6 @@ import org.openecomp.sparky.synchronizer.enumeration.SynchronizerState;
 import org.openecomp.sparky.util.NodeUtils;
 import org.slf4j.MDC;
 
-import org.openecomp.cl.mdc.MdcContext;
-
-import org.openecomp.cl.mdc.MdcContext;
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.node.ArrayNode;
 
@@ -89,6 +85,7 @@ public class HistoricalEntitySummarizer extends AbstractEntitySynchronizer
     this.enabledStatFlags = EnumSet.of(StatFlag.AAI_REST_STATS, StatFlag.ES_REST_STATS);
     this.syncInProgress = false;
     this.contextMap = MDC.getCopyOfContextMap(); 
+    this.syncDurationInMs = -1;
   }
 
   /**
@@ -319,8 +316,8 @@ public class HistoricalEntitySummarizer extends AbstractEntitySynchronizer
    */
   @Override
   public String getStatReport(boolean showFinalReport) {
-    return getStatReport(System.currentTimeMillis() - this.syncStartedTimeStampInMs,
-        showFinalReport);
+         syncDurationInMs = System.currentTimeMillis() - syncStartedTimeStampInMs;
+         return this.getStatReport(syncDurationInMs, showFinalReport);
   }
 
   /* (non-Javadoc)
index 3ebf203..76b625c 100644 (file)
@@ -54,6 +54,7 @@ import org.openecomp.cl.api.Logger;
 import org.openecomp.cl.eelf.LoggerFactory;
 import org.openecomp.sparky.config.oxm.OxmEntityDescriptor;
 import org.openecomp.sparky.dal.NetworkTransaction;
+import org.openecomp.sparky.dal.aai.config.ActiveInventoryConfig;
 import org.openecomp.sparky.dal.elasticsearch.config.ElasticSearchConfig;
 import org.openecomp.sparky.dal.rest.HttpMethod;
 import org.openecomp.sparky.dal.rest.OperationResult;
@@ -131,6 +132,7 @@ public class SearchableEntitySynchronizer extends AbstractEntitySynchronizer
         oxmModelLoader.getSearchableEntityDescriptors());
     this.esEntityStats.initializeCountersFromOxmEntityDescriptors(
         oxmModelLoader.getSearchableEntityDescriptors());
+    this.syncDurationInMs = -1;
   }
 
   /**
@@ -228,6 +230,7 @@ public class SearchableEntitySynchronizer extends AbstractEntitySynchronizer
    */
   @Override
   public OperationState doSync() {
+       this.syncDurationInMs = -1;
     String txnID = NodeUtils.getRandomTxnId();
     MdcContext.initialize(txnID, "SearchableEntitySynchronizer", "", "Sync", "");
     
@@ -562,7 +565,7 @@ public class SearchableEntitySynchronizer extends AbstractEntitySynchronizer
         if (jsonResult != null && jsonResult.length() > 0) {
 
           SearchableEntity se = new SearchableEntity(oxmModelLoader);
-          se.setLink( txn.getLink() );
+          se.setLink(ActiveInventoryConfig.extractResourcePath(txn.getLink()));
           populateSearchableEntityDocument(se, jsonResult, txn.getDescriptor());
           se.deriveFields();
 
@@ -734,8 +737,8 @@ public class SearchableEntitySynchronizer extends AbstractEntitySynchronizer
    */
   @Override
   public String getStatReport(boolean showFinalReport) {
-    return this.getStatReport(System.currentTimeMillis() - syncStartedTimeStampInMs,
-        showFinalReport);
+         syncDurationInMs = System.currentTimeMillis() - syncStartedTimeStampInMs;
+         return this.getStatReport(syncDurationInMs, showFinalReport);
   }
 
   /* (non-Javadoc)
index 85cbeb5..5d5ef61 100644 (file)
@@ -422,30 +422,31 @@ public class SyncController {
 
     boolean allDone = false;
     long nextReportTimeStampInMs = System.currentTimeMillis() + 30000L;
+    boolean dumpPeriodicStatReport = false;
 
     while (!allDone) {
 
-      // allDone = false;
-
       int totalFinished = 0;
 
       for (IndexSynchronizer synchronizer : registeredSynchronizers) {
-        if (System.currentTimeMillis() > nextReportTimeStampInMs) {
-
-          nextReportTimeStampInMs = System.currentTimeMillis() + 30000L;
-
-          String statReport = synchronizer.getStatReport(false);
-
-          if (statReport != null) {
-            LOG.info(AaiUiMsgs.INFO_GENERIC, statReport);
-          }
-        }
-
-        if (synchronizer.getState() == SynchronizerState.IDLE) {
-          totalFinished++;
-        }
+         if (dumpPeriodicStatReport) {
+              if (synchronizer.getState() != SynchronizerState.IDLE) {
+                String statReport = synchronizer.getStatReport(false);
+                 if (statReport != null) {
+                           LOG.info(AaiUiMsgs.INFO_GENERIC, statReport);
+                         }
+              }
+               if (synchronizer.getState() == SynchronizerState.IDLE) {
+                 totalFinished++;
+               }
+         }
       }
-
+      if ( System.currentTimeMillis() > nextReportTimeStampInMs) {
+          dumpPeriodicStatReport = true;
+          nextReportTimeStampInMs = System.currentTimeMillis() + 30000L; 
+        } else {
+          dumpPeriodicStatReport = false;
+        }
       allDone = (totalFinished == registeredSynchronizers.size());
 
       try {
index 7c37859..2c1188b 100644 (file)
@@ -438,7 +438,7 @@ public class SyncHelper {
           new HistoricalEntitySummarizer(esConfig.getEntityCountHistoryIndex());
       historicalSummarizer.setAaiDataProvider(aaiAdapter);
       historicalSummarizer.setEsDataProvider(esAdapter);
-      //entityCounterHistorySummarizer.registerEntitySynchronizer(historicalSummarizer);
+      entityCounterHistorySummarizer.registerEntitySynchronizer(historicalSummarizer);
 
     } catch (Exception exc) {
       String message = "Error: failed to sync with message = " + exc.getMessage();
index f881f06..178dc46 100644 (file)
@@ -49,9 +49,16 @@ public class NodeProcessingTransaction {
   public void setRequestParameters(String requestParameters) {
     this.requestParameters = requestParameters;
   }
-
+  
+  public String getSelfLink() {
+           if (processingNode == null) {
+             return null;
+           }
+
+           return processingNode.getSelfLink(); 
+         }
+  
   public String getSelfLinkWithModifiers() {
-
     if (processingNode == null) {
       return null;
     }
index c5adfd4..7c8714f 100644 (file)
@@ -405,6 +405,7 @@ public class VisualizationContext {
                           
                       } else {
                         selfLink = ((JsonNode) entityLinks.toArray()[0]).asText();
+                        selfLink = ActiveInventoryConfig.extractResourcePath(selfLink);
 
                         newChildNode.setSelfLink(selfLink);
                         newChildNode.setNodeId(NodeUtils.generateUniqueShaDigest(selfLink));
@@ -677,7 +678,7 @@ public class VisualizationContext {
       txn.setRequestParameters(depthModifier);
       aaiWorkOnHand.incrementAndGet();
       supplyAsync(
-          new PerformNodeSelfLinkProcessingTask(txn, depthModifier, aaiProvider),
+          new PerformNodeSelfLinkProcessingTask(txn, depthModifier, aaiProvider, aaiConfig),
           aaiExecutorService).whenComplete((nodeTxn, error) -> {
             aaiWorkOnHand.decrementAndGet();
             if (error != null) {
@@ -1184,17 +1185,17 @@ public class VisualizationContext {
 
     Relationship[] relationshipArray = relationshipList.getRelationshipList();
     OxmEntityDescriptor descriptor = null;
-    String repairedSelfLink = null;
 
     if (relationshipArray != null) {
 
       ActiveInventoryNode newNode = null;
+      String resourcePath = null;
 
       for (Relationship r : relationshipArray) {
 
-        repairedSelfLink = aaiConfig.repairSelfLink(r.getRelatedLink());
+        resourcePath = ActiveInventoryConfig.extractResourcePath(r.getRelatedLink());
         
-        String nodeId = NodeUtils.generateUniqueShaDigest(repairedSelfLink);
+        String nodeId = NodeUtils.generateUniqueShaDigest(resourcePath);
 
         if (nodeId == null) {
 
@@ -1218,7 +1219,7 @@ public class VisualizationContext {
 
         newNode.setNodeId(nodeId);
         newNode.setEntityType(entityType);
-        newNode.setSelfLink(repairedSelfLink);
+        newNode.setSelfLink(resourcePath);
 
         processingNode.addOutboundNeighbor(nodeId);
 
index b7fe3a5..1918e60 100644 (file)
@@ -48,6 +48,7 @@ public class PerformNodeSelfLinkProcessingTask implements Supplier<NodeProcessin
   private NodeProcessingTransaction txn;
   private ActiveInventoryDataProvider aaiProvider;
   private Map<String, String> contextMap;
+  private ActiveInventoryConfig aaiConfig;
 
   /**
    * Instantiates a new perform node self link processing task.
@@ -57,10 +58,11 @@ public class PerformNodeSelfLinkProcessingTask implements Supplier<NodeProcessin
    * @param aaiProvider the aai provider
    */
   public PerformNodeSelfLinkProcessingTask(NodeProcessingTransaction txn, String requestParameters,
-      ActiveInventoryDataProvider aaiProvider) {
+      ActiveInventoryDataProvider aaiProvider, ActiveInventoryConfig aaiConfig) {
     this.aaiProvider = aaiProvider;
     this.txn = txn;
     this.contextMap = MDC.getCopyOfContextMap();
+    this.aaiConfig = aaiConfig;
   }
 
   /* (non-Javadoc)
@@ -69,10 +71,9 @@ public class PerformNodeSelfLinkProcessingTask implements Supplier<NodeProcessin
   @Override
   public NodeProcessingTransaction get() {
     MDC.setContextMap(contextMap);
-    String link = txn.getSelfLinkWithModifiers();
-
+    OperationResult opResult = new OperationResult();
+    String link = txn.getSelfLink();
     if (link == null) {
-      OperationResult opResult = new OperationResult();
       opResult.setResult(500, "Aborting self-link processing because self link is null");
       txn.setOpResult(opResult);
       return txn;
@@ -82,7 +83,6 @@ public class PerformNodeSelfLinkProcessingTask implements Supplier<NodeProcessin
       logger.debug(AaiUiMsgs.DEBUG_GENERIC, "Collecting " + link);
     }
 
-    OperationResult opResult = null;
     try {
       opResult = aaiProvider.queryActiveInventoryWithRetries(link, "application/json",
           ActiveInventoryConfig.getConfig().getAaiRestConfig().getNumRequestRetries());
index 99e40c8..a70d9df 100644 (file)
@@ -794,4 +794,7 @@ SEARCH_ADAPTER_ERROR=\
 QUERY_PARAM_EXTRACTION_ERROR=\
             AAIUI9003E|\
             Query Parameter Self-Link Extraction Error: {0}            
-            
\ No newline at end of file
+            
+ERROR_EXTRACTING_RESOURCE_PATH_FROM_LINK=\
+            AAIUI9004E|\
+            Error extracting resource path from self-link. Error: {0}
\ No newline at end of file