This is an automated email from the ASF dual-hosted git repository.
agresch pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/storm.git
The following commit(s) were added to refs/heads/master by this push:
new 8eec7fd STORM-3538 Add Meter for sendSupervisorAssignments exception
new 5786bb0 Merge pull request #3167 from dandsager1/STORM-3538
8eec7fd is described below
commit 8eec7fd3d721b78c1e8a522c78433a8898dfd4c2
Author: david <[email protected]>
AuthorDate: Fri Nov 15 09:00:40 2019 -0600
STORM-3538 Add Meter for sendSupervisorAssignments exception
---
.../src/jvm/org/apache/storm/Constants.java | 2 ++
.../org/apache/storm/daemon/nimbus/Nimbus.java | 19 +++++++++++------
.../apache/storm/metric/StormMetricsRegistry.java | 4 ++++
.../nimbus/AssignmentDistributionService.java | 24 +++++++++++++++-------
4 files changed, 36 insertions(+), 13 deletions(-)
diff --git a/storm-client/src/jvm/org/apache/storm/Constants.java
b/storm-client/src/jvm/org/apache/storm/Constants.java
index 57af8d1..7a1c518 100644
--- a/storm-client/src/jvm/org/apache/storm/Constants.java
+++ b/storm-client/src/jvm/org/apache/storm/Constants.java
@@ -55,5 +55,7 @@ public class Constants {
public static final String COMMON_ONHEAP_MEMORY_RESOURCE_NAME =
"onheap.memory.mb";
public static final String COMMON_OFFHEAP_MEMORY_RESOURCE_NAME =
"offheap.memory.mb";
public static final String COMMON_TOTAL_MEMORY_RESOURCE_NAME = "memory.mb";
+
+ public static final String NIMBUS_SEND_ASSIGNMENT_EXCEPTIONS =
"nimbus:num-send-assignment-exceptions";
}
diff --git
a/storm-server/src/main/java/org/apache/storm/daemon/nimbus/Nimbus.java
b/storm-server/src/main/java/org/apache/storm/daemon/nimbus/Nimbus.java
index a3b7575..b56a623 100644
--- a/storm-server/src/main/java/org/apache/storm/daemon/nimbus/Nimbus.java
+++ b/storm-server/src/main/java/org/apache/storm/daemon/nimbus/Nimbus.java
@@ -268,6 +268,7 @@ public class Nimbus implements Iface, Shutdownable,
DaemonCommon {
private final Meter shutdownCalls;
private final Meter processWorkerMetricsCalls;
private final Meter mkAssignmentsErrors;
+ private final Meter sendAssignmentExceptions; // used in
AssignmentDistributionService.java
//Timer
private final Timer fileUploadDuration;
@@ -305,7 +306,7 @@ public class Nimbus implements Iface, Shutdownable,
DaemonCommon {
IStormClusterState state = nimbus.getStormClusterState();
Assignment oldAssignment = state.assignmentInfo(topoId, null);
state.removeStorm(topoId);
- notifySupervisorsAsKilled(state, oldAssignment,
nimbus.getAssignmentsDistributer());
+ notifySupervisorsAsKilled(state, oldAssignment,
nimbus.getAssignmentsDistributer(), nimbus.getMetricsRegistry());
nimbus.heartbeatsCache.removeTopo(topoId);
nimbus.getIdToExecutors().getAndUpdate(new Dissoc<>(topoId));
return null;
@@ -517,6 +518,7 @@ public class Nimbus implements Iface, Shutdownable,
DaemonCommon {
this.shutdownCalls =
metricsRegistry.registerMeter("nimbus:num-shutdown-calls");
this.processWorkerMetricsCalls =
metricsRegistry.registerMeter("nimbus:process-worker-metric-calls");
this.mkAssignmentsErrors =
metricsRegistry.registerMeter("nimbus:mkAssignments-Errors");
+ this.sendAssignmentExceptions =
metricsRegistry.registerMeter(Constants.NIMBUS_SEND_ASSIGNMENT_EXCEPTIONS);
this.fileUploadDuration =
metricsRegistry.registerTimer("nimbus:files-upload-duration-ms");
this.schedulingDuration =
metricsRegistry.registerTimer("nimbus:topology-scheduling-duration-ms");
this.numAddedExecPerScheduling =
metricsRegistry.registerHistogram("nimbus:num-added-executors-per-scheduling");
@@ -1578,7 +1580,8 @@ public class Nimbus implements Iface, Shutdownable,
DaemonCommon {
*/
private static void notifySupervisorsAssignments(Map<String, Assignment>
assignments,
AssignmentDistributionService service, Map<String, String> nodeHost,
- Map<String,
SupervisorDetails> supervisorDetails) {
+ Map<String,
SupervisorDetails> supervisorDetails,
+ StormMetricsRegistry
metricsRegistry) {
for (Map.Entry<String, String> nodeEntry : nodeHost.entrySet()) {
try {
String nodeId = nodeEntry.getKey();
@@ -1586,7 +1589,7 @@ public class Nimbus implements Iface, Shutdownable,
DaemonCommon {
supervisorAssignments.set_storm_assignment(assignmentsForNode(assignments,
nodeEntry.getKey()));
SupervisorDetails details = supervisorDetails.get(nodeId);
Integer serverPort = details != null ? details.getServerPort()
: null;
- service.addAssignmentsForNode(nodeId, nodeEntry.getValue(),
serverPort, supervisorAssignments);
+ service.addAssignmentsForNode(nodeId, nodeEntry.getValue(),
serverPort, supervisorAssignments, metricsRegistry);
} catch (Throwable tr1) {
//just skip when any error happens wait for next round
assignments reassign
LOG.error("Exception when add assignments distribution task
for node {}", nodeEntry.getKey());
@@ -1595,10 +1598,10 @@ public class Nimbus implements Iface, Shutdownable,
DaemonCommon {
}
private static void notifySupervisorsAsKilled(IStormClusterState
clusterState, Assignment oldAss,
-
AssignmentDistributionService service) {
+
AssignmentDistributionService service, StormMetricsRegistry metricsRegistry) {
Map<String, String> nodeHost = assignmentChangedNodes(oldAss, null);
notifySupervisorsAssignments(clusterState.assignmentsInfo(), service,
nodeHost,
- basicSupervisorDetailsMap(clusterState));
+ basicSupervisorDetailsMap(clusterState),
metricsRegistry);
}
@VisibleForTesting
@@ -1654,6 +1657,10 @@ public class Nimbus implements Iface, Shutdownable,
DaemonCommon {
return assignmentsDistributer;
}
+ private StormMetricsRegistry getMetricsRegistry() {
+ return metricsRegistry;
+ }
+
@VisibleForTesting
public HeartbeatCache getHeartbeatsCache() {
return heartbeatsCache;
@@ -2520,7 +2527,7 @@ public class Nimbus implements Iface, Shutdownable,
DaemonCommon {
totalAssignmentsChangedNodes.putAll(assignmentChangedNodes(existingAssignment,
assignment));
}
notifySupervisorsAssignments(newAssignments,
assignmentsDistributer, totalAssignmentsChangedNodes,
- basicSupervisorDetailsMap);
+ basicSupervisorDetailsMap,
getMetricsRegistry());
Map<String, Collection<WorkerSlot>> addedSlots = new HashMap<>();
for (Entry<String, Assignment> entry : newAssignments.entrySet()) {
diff --git
a/storm-server/src/main/java/org/apache/storm/metric/StormMetricsRegistry.java
b/storm-server/src/main/java/org/apache/storm/metric/StormMetricsRegistry.java
index cc98804..5db347e 100644
---
a/storm-server/src/main/java/org/apache/storm/metric/StormMetricsRegistry.java
+++
b/storm-server/src/main/java/org/apache/storm/metric/StormMetricsRegistry.java
@@ -68,6 +68,10 @@ public class StormMetricsRegistry {
registry.removeMatching((name, metric) ->
nameToMetric.containsKey(name));
}
+ public Meter getMeter(String meterName) {
+ return registry.getMeters().get(meterName);
+ }
+
public void startMetricsReporters(Map<String, Object> daemonConf) {
reporters = MetricsUtils.getPreparableReporters(daemonConf);
for (PreparableReporter reporter : reporters) {
diff --git
a/storm-server/src/main/java/org/apache/storm/nimbus/AssignmentDistributionService.java
b/storm-server/src/main/java/org/apache/storm/nimbus/AssignmentDistributionService.java
index 4f84997..4eb1bb4 100644
---
a/storm-server/src/main/java/org/apache/storm/nimbus/AssignmentDistributionService.java
+++
b/storm-server/src/main/java/org/apache/storm/nimbus/AssignmentDistributionService.java
@@ -21,9 +21,12 @@ import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.TimeUnit;
+
+import org.apache.storm.Constants;
import org.apache.storm.DaemonConfig;
import org.apache.storm.daemon.supervisor.Supervisor;
import org.apache.storm.generated.SupervisorAssignments;
+import org.apache.storm.metric.StormMetricsRegistry;
import org.apache.storm.utils.ConfigUtils;
import org.apache.storm.utils.ObjectReader;
import org.apache.storm.utils.SupervisorClient;
@@ -146,7 +149,8 @@ public class AssignmentDistributionService implements
Closeable {
* @param serverPort node thrift server port.
* @param assignments the {@link
org.apache.storm.generated.SupervisorAssignments}
*/
- public void addAssignmentsForNode(String node, String host, Integer
serverPort, SupervisorAssignments assignments) {
+ public void addAssignmentsForNode(String node, String host, Integer
serverPort, SupervisorAssignments assignments,
+ StormMetricsRegistry metricsRegistry) {
try {
//For some reasons, we can not get supervisor port info, eg:
supervisor shutdown,
//Just skip for this scheduling round.
@@ -155,7 +159,8 @@ public class AssignmentDistributionService implements
Closeable {
return;
}
- boolean success =
nextQueue().offer(NodeAssignments.getInstance(node, host, serverPort,
assignments), 5L, TimeUnit.SECONDS);
+ boolean success =
nextQueue().offer(NodeAssignments.getInstance(node, host, serverPort,
+ assignments, metricsRegistry),
5L, TimeUnit.SECONDS);
if (!success) {
LOG.warn("Discard an assignment distribution for node {}
because the target sub queue is full.", node);
}
@@ -211,17 +216,20 @@ public class AssignmentDistributionService implements
Closeable {
private String host;
private Integer serverPort;
private SupervisorAssignments assignments;
+ private StormMetricsRegistry metricsRegistry;
- private NodeAssignments(String node, String host, Integer serverPort,
SupervisorAssignments assignments) {
+ private NodeAssignments(String node, String host, Integer serverPort,
SupervisorAssignments assignments,
+ StormMetricsRegistry metricsRegistry) {
this.node = node;
this.host = host;
this.serverPort = serverPort;
this.assignments = assignments;
+ this.metricsRegistry = metricsRegistry;
}
public static NodeAssignments getInstance(String node, String host,
Integer serverPort,
- SupervisorAssignments
assignments) {
- return new NodeAssignments(node, host, serverPort, assignments);
+ SupervisorAssignments
assignments, StormMetricsRegistry metricsRegistry) {
+ return new NodeAssignments(node, host, serverPort, assignments,
metricsRegistry);
}
//supervisor assignment id/supervisor id
@@ -241,6 +249,9 @@ public class AssignmentDistributionService implements
Closeable {
return this.assignments;
}
+ public StormMetricsRegistry getMetricsRegistry() {
+ return metricsRegistry;
+ }
}
/**
@@ -289,14 +300,13 @@ public class AssignmentDistributionService implements
Closeable {
try {
client.getIface().sendSupervisorAssignments(assignments.getAssignments());
} catch (Exception e) {
- //just ignore the exception.
+
assignments.getMetricsRegistry().getMeter(Constants.NIMBUS_SEND_ASSIGNMENT_EXCEPTIONS).mark();
LOG.error("Exception when trying to send assignments
to node {}: {}", assignments.getNode(), e.getMessage());
}
} catch (Throwable e) {
//just ignore any error/exception.
LOG.error("Exception to create supervisor client for node
{}: {}", assignments.getNode(), e.getMessage());
}
-
}
}
}