diff --git a/hadoop-tools/hadoop-sls/src/main/java/org/apache/hadoop/yarn/sls/appmaster/AMSimulator.java b/hadoop-tools/hadoop-sls/src/main/java/org/apache/hadoop/yarn/sls/appmaster/AMSimulator.java index 1330e4d2f2b..7ced564caf3 100644 --- a/hadoop-tools/hadoop-sls/src/main/java/org/apache/hadoop/yarn/sls/appmaster/AMSimulator.java +++ b/hadoop-tools/hadoop-sls/src/main/java/org/apache/hadoop/yarn/sls/appmaster/AMSimulator.java @@ -99,7 +99,7 @@ protected long traceStartTimeMS; protected long traceFinishTimeMS; protected long simulateStartTimeMS; - protected long simulateFinishTimeMS; + protected long simulateFinishTimeMS = 0; // whether tracked in Metrics protected boolean isTracked; // progress @@ -221,6 +221,16 @@ public void middleStep() throws Exception { @Override public void lastStep() throws Exception { + if (simulateFinishTimeMS != 0) { + // The finish time is already recorded. + // Different value from zero means lastStep was called before. + // We want to prevent lastStep to be called more than once. + // See YARN-10427 for more details. + LOG.warn("Method AMSimulator#lastStep was already called. " + + "Skipping execution of method for application: {}", appId); + return; + } + LOG.info("Application {} is shutting down.", appId); // unregister tracking if (isTracked) {