diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-sharedcachemanager/src/main/java/org/apache/hadoop/yarn/server/sharedcachemanager/CleanerService.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-sharedcachemanager/src/main/java/org/apache/hadoop/yarn/server/sharedcachemanager/CleanerService.java index 13cf8f8..f59a8b5 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-sharedcachemanager/src/main/java/org/apache/hadoop/yarn/server/sharedcachemanager/CleanerService.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-sharedcachemanager/src/main/java/org/apache/hadoop/yarn/server/sharedcachemanager/CleanerService.java @@ -99,7 +99,7 @@ protected void serviceStart() throws Exception { super.serviceStart(); Runnable task = - CleanerTask.create(conf, store, metrics, cleanerTaskRunning, true); + CleanerTask.create(conf, store, metrics, cleanerTaskRunning); long periodInMinutes = getPeriod(conf); scheduledExecutor.scheduleAtFixedRate(task, getInitialDelay(conf), periodInMinutes, TimeUnit.MINUTES); @@ -134,34 +134,13 @@ AppChecker createAppCheckerService(Configuration conf) { /** * If no other cleaner task is running, execute an on-demand cleaner task. - * - * @return true if the cleaner task was started, false if there was already a - * cleaner task running. */ - protected boolean runCleanerTask() { - - if (!this.cleanerTaskRunning.compareAndSet(false, true)) { - LOG.warn("A cleaner task is already running. " - + "A new on-demand cleaner task will not be submitted."); - return false; - } - + protected void runCleanerTask() { Runnable task = - CleanerTask.create(conf, store, metrics, cleanerTaskRunning, false); + CleanerTask.create(conf, store, metrics, cleanerTaskRunning); // this is a non-blocking call (it simply submits the task to the executor // queue and returns) this.scheduledExecutor.execute(task); - /* - * We return true if the task is accepted for execution by the executor. Two - * notes: 1. There is a small race here between a scheduled task and an - * on-demand task. If the scheduled task happens to start after we check/set - * cleanerTaskRunning, but before we call execute, we will get two tasks - * that run back to back. Luckily, since we have already set - * cleanerTaskRunning, the scheduled task will do nothing and the on-demand - * task will clean. 2. We do not need to set the cleanerTaskRunning boolean - * back to false because this will be done in the task itself. - */ - return true; } /** diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-sharedcachemanager/src/main/java/org/apache/hadoop/yarn/server/sharedcachemanager/CleanerTask.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-sharedcachemanager/src/main/java/org/apache/hadoop/yarn/server/sharedcachemanager/CleanerTask.java index 9cee90a..fdef846 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-sharedcachemanager/src/main/java/org/apache/hadoop/yarn/server/sharedcachemanager/CleanerTask.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-sharedcachemanager/src/main/java/org/apache/hadoop/yarn/server/sharedcachemanager/CleanerTask.java @@ -54,7 +54,6 @@ private final SCMStore store; private final CleanerMetrics metrics; private final AtomicBoolean cleanerTaskIsRunning; - private final boolean isScheduledTask; /** * Creates a cleaner task based on the configuration. This is provided for @@ -65,12 +64,10 @@ * @param metrics * @param cleanerTaskRunning true if there is another cleaner task currently * running - * @param isScheduledTask true if the task is a scheduled task * @return an instance of a CleanerTask */ public static CleanerTask create(Configuration conf, SCMStore store, - CleanerMetrics metrics, AtomicBoolean cleanerTaskRunning, - boolean isScheduledTask) { + CleanerMetrics metrics, AtomicBoolean cleanerTaskRunning) { try { // get the root directory for the shared cache String location = @@ -84,7 +81,7 @@ public static CleanerTask create(Configuration conf, SCMStore store, FileSystem fs = FileSystem.get(conf); return new CleanerTask(location, sleepTime, nestedLevel, fs, store, - metrics, cleanerTaskRunning, isScheduledTask); + metrics, cleanerTaskRunning); } catch (IOException e) { LOG.error("Unable to obtain the filesystem for the cleaner service", e); throw new ExceptionInInitializerError(e); @@ -97,7 +94,7 @@ public static CleanerTask create(Configuration conf, SCMStore store, */ CleanerTask(String location, long sleepTime, int nestedLevel, FileSystem fs, SCMStore store, CleanerMetrics metrics, - AtomicBoolean cleanerTaskIsRunning, boolean isScheduledTask) { + AtomicBoolean cleanerTaskIsRunning) { this.location = location; this.sleepTime = sleepTime; this.nestedLevel = nestedLevel; @@ -106,14 +103,11 @@ public static CleanerTask create(Configuration conf, SCMStore store, this.store = store; this.metrics = metrics; this.cleanerTaskIsRunning = cleanerTaskIsRunning; - this.isScheduledTask = isScheduledTask; } @Override public void run() { - // check if it is a scheduled task - if (isScheduledTask - && !this.cleanerTaskIsRunning.compareAndSet(false, true)) { + if (!this.cleanerTaskIsRunning.compareAndSet(false, true)) { // this is a scheduled task and there is already another task running LOG.warn("A cleaner task is already running. " + "This scheduled cleaner task will do nothing.");