This is an automated email from the ASF dual-hosted git repository.

smolnar pushed a commit to branch v1.4.0
in repository https://gitbox.apache.org/repos/asf/knox.git


The following commit(s) were added to refs/heads/v1.4.0 by this push:
     new 48b6e84  KNOX-2350 - Handling event types w/o COMMAND and/or 
COMMAND_STATUS attributes when polling CM events (#318) (#319)
48b6e84 is described below

commit 48b6e84f7edbfdd5838a4e28762bd5f8471534ae
Author: Sandor Molnar <smol...@apache.org>
AuthorDate: Wed Apr 22 13:35:00 2020 +0200

    KNOX-2350 - Handling event types w/o COMMAND and/or COMMAND_STATUS 
attributes when polling CM events (#318) (#319)
---
 .../cm/monitor/PollingConfigurationAnalyzer.java   | 23 +++++++++-------------
 .../monitor/PollingConfigurationAnalyzerTest.java  | 10 ++++++++++
 2 files changed, 19 insertions(+), 14 deletions(-)

diff --git 
a/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/monitor/PollingConfigurationAnalyzer.java
 
b/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/monitor/PollingConfigurationAnalyzer.java
index 380962a..fb8d73c 100644
--- 
a/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/monitor/PollingConfigurationAnalyzer.java
+++ 
b/gateway-discovery-cm/src/main/java/org/apache/knox/gateway/topology/discovery/cm/monitor/PollingConfigurationAnalyzer.java
@@ -48,12 +48,14 @@ import java.io.IOException;
 import java.time.Instant;
 import java.time.temporal.ChronoUnit;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
+import java.util.stream.Collectors;
 
 import static 
org.apache.knox.gateway.topology.discovery.ClusterConfigurationMonitor.ConfigurationChangeListener;
 
@@ -385,24 +387,17 @@ public class PollingConfigurationAnalyzer implements 
Runnable {
 
   @SuppressWarnings("unchecked")
   private boolean isRelevantEvent(ApiEvent event) {
-    boolean rc = false;
-    String command = null;
-    String status = null;
-    List<ApiEventAttribute> attributes = event.getAttributes();
-    Map<String,Object> map = getAttributeMap(attributes);
-    command = (String) ((List<String>) map.get(COMMAND)).get(0);
-    status = (String) ((List<String>) map.get(COMMAND_STATUS)).get(0);
-    if (START_COMMAND.equals(command) || RESTART_COMMAND.equals(command) &&
-        SUCCEEDED_STATUS.equals(status) || STARTED_STATUS.equals(status)) {
-      rc = true;
+    final Map<String, Object> attributeMap = 
getAttributeMap(event.getAttributes());
+    final String command = attributeMap.containsKey(COMMAND) ? (String) 
((List<String>) attributeMap.get(COMMAND)).get(0) : "";
+    final String status = attributeMap.containsKey(COMMAND_STATUS) ? (String) 
((List<String>) attributeMap.get(COMMAND_STATUS)).get(0) : "";
+    if ((START_COMMAND.equals(command) || RESTART_COMMAND.equals(command)) && 
(SUCCEEDED_STATUS.equals(status) || STARTED_STATUS.equals(status))) {
+      return true;
     }
-    return rc;
+    return false;
   }
 
   private Map<String, Object> getAttributeMap(List<ApiEventAttribute> 
attributes) {
-    Map<String,Object> map = new HashMap<>();
-    attributes.forEach(attr -> { map.put(attr.getName(), attr.getValues());});
-    return map;
+    return attributes == null ? Collections.emptyMap() : 
attributes.stream().collect(Collectors.toMap(ApiEventAttribute::getName, 
ApiEventAttribute::getValues));
   }
 
   /**
diff --git 
a/gateway-discovery-cm/src/test/java/org/apache/knox/gateway/topology/discovery/cm/monitor/PollingConfigurationAnalyzerTest.java
 
b/gateway-discovery-cm/src/test/java/org/apache/knox/gateway/topology/discovery/cm/monitor/PollingConfigurationAnalyzerTest.java
index cb2066e..49e339c 100644
--- 
a/gateway-discovery-cm/src/test/java/org/apache/knox/gateway/topology/discovery/cm/monitor/PollingConfigurationAnalyzerTest.java
+++ 
b/gateway-discovery-cm/src/test/java/org/apache/knox/gateway/topology/discovery/cm/monitor/PollingConfigurationAnalyzerTest.java
@@ -172,6 +172,16 @@ public class PollingConfigurationAnalyzerTest {
     ApiEvent failedStartEvent = createApiEvent(ApiEventCategory.AUDIT_EVENT, 
startEventAttrs);
     pca.addRestartEvent(clusterName, failedStartEvent);
 
+    // Simulate an event w/o COMMAND and/or COMMAND_STATUS attributes
+    final List<ApiEventAttribute> revisionEventAttrs = new ArrayList<>();
+    revisionEventAttrs.add(createEventAttribute("CLUSTER", clusterName));
+    revisionEventAttrs.add(createEventAttribute("SERVICE_TYPE", 
HiveOnTezServiceModelGenerator.SERVICE_TYPE));
+    revisionEventAttrs.add(createEventAttribute("SERVICE", 
HiveOnTezServiceModelGenerator.SERVICE));
+    revisionEventAttrs.add(createEventAttribute("REVISION", "215"));
+    revisionEventAttrs.add(createEventAttribute("EVENTCODE", 
"EV_REVISION_CREATED"));
+    final ApiEvent revisionEvent = 
createApiEvent(ApiEventCategory.AUDIT_EVENT, revisionEventAttrs);
+    pca.addRestartEvent(clusterName, revisionEvent);
+
     try {
       pollingThreadExecutor.awaitTermination(10, TimeUnit.SECONDS);
     } catch (InterruptedException e) {

Reply via email to