From 5d20b445200ab23283dd9456f7bd3c765dd11d2a Mon Sep 17 00:00:00 2001 From: Josh Rosen Date: Mon, 29 Aug 2016 17:02:04 -0700 Subject: [PATCH] Move abort logic out of inner loop. --- .../spark/scheduler/TaskSchedulerImpl.scala | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/core/src/main/scala/org/apache/spark/scheduler/TaskSchedulerImpl.scala b/core/src/main/scala/org/apache/spark/scheduler/TaskSchedulerImpl.scala index 2ea45cab9e329..c305c10e4a70b 100644 --- a/core/src/main/scala/org/apache/spark/scheduler/TaskSchedulerImpl.scala +++ b/core/src/main/scala/org/apache/spark/scheduler/TaskSchedulerImpl.scala @@ -253,9 +253,6 @@ private[spark] class TaskSchedulerImpl( shuffledOffers: Seq[WorkerOffer], availableCpus: Array[Int], tasks: Seq[ArrayBuffer[TaskDescription]]) : Boolean = { - if (availableCpus.sum == 0) { - return false - } var launchedTask = false for (i <- 0 until shuffledOffers.size) { val execId = shuffledOffers(i).executorId @@ -281,9 +278,6 @@ private[spark] class TaskSchedulerImpl( } } } - if (!launchedTask) { - taskSet.abortIfCompletelyBlacklisted(executorIdToHost.keys) - } return launchedTask } @@ -329,12 +323,19 @@ private[spark] class TaskSchedulerImpl( // Take each TaskSet in our scheduling order, and then offer it each node in increasing order // of locality levels so that it gets a chance to launch local tasks on all of them. // NOTE: the preferredLocality order: PROCESS_LOCAL, NODE_LOCAL, NO_PREF, RACK_LOCAL, ANY - var launchedTask = false - for (taskSet <- sortedTaskSets; maxLocality <- taskSet.myLocalityLevels) { - do { - launchedTask = resourceOfferSingleTaskSet( + for (taskSet <- sortedTaskSets) { + var launchedAnyTask = false + var launchedTaskAtMaxLocality = false + for (maxLocality <- taskSet.myLocalityLevels) { + do { + launchedTaskAtMaxLocality = resourceOfferSingleTaskSet( taskSet, maxLocality, shuffledOffers, availableCpus, tasks) - } while (launchedTask) + launchedAnyTask |= launchedTaskAtMaxLocality + } while (launchedTaskAtMaxLocality) + } + if (!launchedAnyTask) { + taskSet.abortIfCompletelyBlacklisted(executorIdToHost.keys) + } } if (tasks.size > 0) {