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 <[email protected]>
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) {