aboutsummaryrefslogtreecommitdiff
path: root/core/src/main/scala/org/apache/spark/deploy/master/Master.scala
diff options
context:
space:
mode:
Diffstat (limited to 'core/src/main/scala/org/apache/spark/deploy/master/Master.scala')
-rw-r--r--core/src/main/scala/org/apache/spark/deploy/master/Master.scala11
1 files changed, 9 insertions, 2 deletions
diff --git a/core/src/main/scala/org/apache/spark/deploy/master/Master.scala b/core/src/main/scala/org/apache/spark/deploy/master/Master.scala
index 2d6d0c33fa..b8dfa44102 100644
--- a/core/src/main/scala/org/apache/spark/deploy/master/Master.scala
+++ b/core/src/main/scala/org/apache/spark/deploy/master/Master.scala
@@ -531,8 +531,15 @@ private[spark] class Master(host: String, port: Int, webUiPort: Int,
val workerAddress = worker.actor.path.address
if (addressToWorker.contains(workerAddress)) {
- logInfo("Attempted to re-register worker at same address: " + workerAddress)
- return false
+ val oldWorker = addressToWorker(workerAddress)
+ if (oldWorker.state == WorkerState.UNKNOWN) {
+ // A worker registering from UNKNOWN implies that the worker was restarted during recovery.
+ // The old worker must thus be dead, so we will remove it and accept the new worker.
+ removeWorker(oldWorker)
+ } else {
+ logInfo("Attempted to re-register worker at same address: " + workerAddress)
+ return false
+ }
}
workers += worker