[EAGLE-876] TopologyBaseAPIEntity comparison should consider rack info

https://issues.apache.org/jira/browse/EAGLE-876

Author: Zhao, Qingwen <qingwzhao@apache.org>

Closes #785 from qingwen220/EAGLE-876.
diff --git a/eagle-topology-check/eagle-topology-app/src/main/java/org/apache/eagle/topology/extractor/mr/MRTopologyEntityParser.java b/eagle-topology-check/eagle-topology-app/src/main/java/org/apache/eagle/topology/extractor/mr/MRTopologyEntityParser.java
index f860f1c..918679b 100644
--- a/eagle-topology-check/eagle-topology-app/src/main/java/org/apache/eagle/topology/extractor/mr/MRTopologyEntityParser.java
+++ b/eagle-topology-check/eagle-topology-app/src/main/java/org/apache/eagle/topology/extractor/mr/MRTopologyEntityParser.java
@@ -41,7 +41,8 @@
 import java.util.regex.Matcher;
 
 import static org.apache.eagle.topology.TopologyConstants.*;
-import static org.apache.eagle.topology.utils.EntityBuilderHelper.generateKey;
+import static org.apache.eagle.topology.utils.EntityBuilderHelper.generateHostKey;
+
 
 public class MRTopologyEntityParser implements TopologyEntityParser {
 
@@ -156,7 +157,7 @@
                     nodeManagerEntity.setStatus(state);
                 }
 
-                nodeKey = generateKey(nodeManagerEntity);
+                nodeKey = generateHostKey(nodeManagerEntity);
                 if (nmMap.containsKey(nodeKey)) {
                     if (nmMap.get(nodeKey).getLastUpdateTime() < nodeManagerEntity.getLastHealthUpdate()) {
                         updateStatusCount(statusCount, nmMap.get(nodeKey).getStatus(), -1);
@@ -219,4 +220,4 @@
         return entity;
     }
 
-}
+}
\ No newline at end of file
diff --git a/eagle-topology-check/eagle-topology-app/src/main/java/org/apache/eagle/topology/storm/TopologyDataPersistBolt.java b/eagle-topology-check/eagle-topology-app/src/main/java/org/apache/eagle/topology/storm/TopologyDataPersistBolt.java
index 9be78e0..4a61c89 100644
--- a/eagle-topology-check/eagle-topology-app/src/main/java/org/apache/eagle/topology/storm/TopologyDataPersistBolt.java
+++ b/eagle-topology-check/eagle-topology-app/src/main/java/org/apache/eagle/topology/storm/TopologyDataPersistBolt.java
@@ -19,7 +19,6 @@
 package org.apache.eagle.topology.storm;

 

 import static org.apache.eagle.topology.TopologyConstants.HOSTNAME_TAG;

-import static org.apache.eagle.topology.TopologyConstants.RACK_TAG;

 import static org.apache.eagle.topology.TopologyConstants.ROLE_TAG;

 import static org.apache.eagle.topology.TopologyConstants.SITE_TAG;

 

@@ -76,18 +75,18 @@
         }

         String serviceName = input.getStringByField(TopologyConstants.SERVICE_NAME_FIELD);

         TopologyEntityParserResult result = (TopologyEntityParserResult) input.getValueByField(TopologyConstants.TOPOLOGY_DATA_FIELD);

-        Set<String> availableHostnames = new HashSet<String>();

+        Set<String> availableHostNames = new HashSet<String>();

         List<TopologyBaseAPIEntity> entitiesForDeletion = new ArrayList<>();

         List<TopologyBaseAPIEntity> entitiesToWrite = new ArrayList<>();

 

-        filterEntitiesToWrite(result, availableHostnames, entitiesToWrite);

+        filterEntitiesToWrite(result, availableHostNames, entitiesToWrite);

 

         String query = String.format("%s[@site=\"%s\"]{*}", serviceName, this.config.dataExtractorConfig.site);

         try {

             GenericServiceAPIResponseEntity<TopologyBaseAPIEntity> response = client.search().query(query).pageSize(Integer.MAX_VALUE).send();

             if (response.isSuccess() && response.getObj() != null) {

                 for (TopologyBaseAPIEntity entity : response.getObj()) {

-                    if (!availableHostnames.isEmpty() && !availableHostnames.contains(generateKey(entity))) {

+                    if (!availableHostNames.isEmpty() && !availableHostNames.contains(generatePersistKey(entity))) {

                         entitiesForDeletion.add(entity);

                     }

                 }

@@ -105,11 +104,11 @@
     private void filterEntitiesToWrite(TopologyEntityParserResult result, Set<String> availableHostnames, List<TopologyBaseAPIEntity> entitiesToWrite) {

         if (!result.getSlaveNodes().isEmpty()) {

             for (TopologyBaseAPIEntity entity : result.getMasterNodes()) {

-                availableHostnames.add(generateKey(entity));

+                availableHostnames.add(generatePersistKey(entity));

                 entitiesToWrite.add(entity);

             }

             for (TopologyBaseAPIEntity entity : result.getSlaveNodes()) {

-                availableHostnames.add(generateKey(entity));

+                availableHostnames.add(generatePersistKey(entity));

                 entitiesToWrite.add(entity);

             }

         } else {

@@ -156,10 +155,11 @@
         entities.clear();

     }

 

-    private String generateKey(TopologyBaseAPIEntity entity) {

+    private String generatePersistKey(TopologyBaseAPIEntity entity) {

         return new HashCodeBuilder().append(entity.getTags().get(TopologyConstants.SITE_TAG))

                 .append(entity.getTags().get(TopologyConstants.HOSTNAME_TAG))

                 .append(entity.getTags().get(TopologyConstants.ROLE_TAG))

+                .append(entity.getTags().get(TopologyConstants.RACK_TAG))

                 .build().toString();

     }

 

diff --git a/eagle-topology-check/eagle-topology-app/src/main/java/org/apache/eagle/topology/utils/EntityBuilderHelper.java b/eagle-topology-check/eagle-topology-app/src/main/java/org/apache/eagle/topology/utils/EntityBuilderHelper.java
index 8aa1d88..5654c6f 100644
--- a/eagle-topology-check/eagle-topology-app/src/main/java/org/apache/eagle/topology/utils/EntityBuilderHelper.java
+++ b/eagle-topology-check/eagle-topology-app/src/main/java/org/apache/eagle/topology/utils/EntityBuilderHelper.java
@@ -65,7 +65,7 @@
         return key.indexOf(TopologyConstants.COLON) > 0 ? key.substring(0, key.indexOf(TopologyConstants.COLON)) : key;
     }
 
-    public static String generateKey(TopologyBaseAPIEntity entity) {
+    public static String generateHostKey(TopologyBaseAPIEntity entity) {
         return new HashCodeBuilder().append(entity.getTags().get(TopologyConstants.SITE_TAG))
                 .append(entity.getTags().get(TopologyConstants.HOSTNAME_TAG))
                 .append(entity.getTags().get(TopologyConstants.ROLE_TAG))