scalaloci scalaloci

ScalaLoci ScalaLoci Pascal Weisenburger, Mirko Khler, Guido - PowerPoint PPT Presentation

Distributed System Development with Distributed System Development with ScalaLoci ScalaLoci Pascal Weisenburger, Mirko Khler, Guido Salvaneschi TU Darmstadt, Germany 1 class TaskManagerGateway { class TaskManager extends Actor { def


  1. Distributed System Development with Distributed System Development with ScalaLoci ScalaLoci Pascal Weisenburger, Mirko Köhler, Guido Salvaneschi TU Darmstadt, Germany 1

  2. class TaskManagerGateway { class TaskManager extends Actor { def disconnectFromJobManager(instanceId: InstanceID, cause: Exception, def receive = { mgr: ActorRef) = { case SendStackTrace => sendStackTrace() foreach { message => mgr ! Disconnect(instanceId, cause) sender ! decorateMessage(message) } } def stopCluster(applicationStatus: ApplicationStatus, message: String, case Disconnect(instanceIdToDisconnect, cause) => mgr: ActorRef) = { if (instanceIdToDisconnect.equals(instanceID)) { mgr ! StopCluster(applicationStatus, message) handleJobManagerDisconnect("JobManager requested disconnect: " + } cause.getMessage()) triggerTaskManagerRegistration() def requestStackTrace(mgr: ActorRef) = { } else { (mgr ? SendStackTrace).mapTo[StackTrace] log.debug("Received disconnect message for wrong instance id " + } instanceIdToDisconnect) } def submitTask(tdd: TaskDeploymentDescriptor, mgr: ActorRef) = { (mgr ? SubmitTask(tdd)).mapTo[Acknowledge] case StopCluster(applicationStatus, message) => } log.info(s"Stopping TaskManager with final application status " + s"$applicationStatus and diagnostics: $message") def stopTask(executionAttemptID: ExecutionAttemptID, mgr: ActorRef) = { shutdown() (mgr ? StopTask(executionAttemptID)).mapTo[Acknowledge] } case RequestTaskManagerLog(requestType) => blobService match { def cancelTask(executionAttemptID: ExecutionAttemptID, mgr: ActorRef) = { case Some(_) => (mgr ? CancelTask(executionAttemptID).mapTo[Acknowledge] handleRequestTaskManagerLog(requestType, currentJobManager.get) match { } case Left(message) => sender() ! message case Right(message) => sender() ! message def updatePartitions(executionAttemptID: ExecutionAttemptID, } partitionInfos: Iterable[PartitionInfo], mgr: ActorRef) = { case None => (mgr ? UpdateTaskMultiplePartitionInfos(executionAttemptID, partitionInfos)) sender() ! akka.actor.Status.Failure(new IOException( .mapTo[Acknowledge] "BlobService not available. Cannot upload TaskManager logs.")) } } def failPartition(executionAttemptID: ExecutionAttemptID, mgr: ActorRef) = { case UpdateTaskMultiplePartitionInfos(executionID, partitionInfos) => mgr ! FailIntermediateResultPartitions(executionAttemptID) sender ! decorateMessage(updateTaskInputPartitions(executionID, partitionInfos)) } case FailIntermediateResultPartitions(executionID) => def notifyCheckpointComplete(executionAttemptID: ExecutionAttemptID, log.info(s"Discarding the results produced by task execution $executionID") jobId: JobID, checkpointId: long, timestamp: long, mgr: ActorRef) = { try { mgr ! NotifyCheckpointComplete(jobId, executionAttemptID, checkpointId, network.getResultPartitionManager.releasePartitionsProducedBy(executionID) timestamp) } catch { } case t: Throwable => killTaskManagerFatal( "Fatal leak: Unable to release intermediate result partition data", t) def triggerCheckpoint(executionAttemptID: ExecutionAttemptID, jobId: JobID, } checkpointId: long, timestamp: long, checkpointOptions: CheckpointOptions, mgr: ActorRef) = { case SubmitTask(tdd) => mgr ! TriggerCheckpoint(jobId, executionAttemptID, checkpointId, timestamp, sender ! decorateMessage(submitTask(tdd)) checkpointOptions) } case StopTask(executionID) => val task = runningTasks.get(executionID) def requestTaskManagerLog(logTypeRequest: LogTypeRequest, mgr: ActorRef) = { if (task != null) { (mgr ? RequestTaskManagerLog(logTypeRequest)).mapTo[BlobKey] try { } task.stopExecution() } sender ! decorateMessage(Acknowledge.get()) } catch { case t: Throwable => sender ! decorateMessage(Status.Failure(t)) } } else { log.debug(s"Cannot find task to stop for execution $executionID)") sender ! decorateMessage(Acknowledge.get()) } case CancelTask(executionID) => val task = runningTasks.get(executionID) if (task != null) { task.cancelExecution() sender ! decorateMessage(Acknowledge.get()) } else { log.debug(s"Cannot find task to cancel for execution $executionID)") sender ! decorateMessage(Acknowledge.get()) } case TriggerCheckpoint(jobId, taskExecutionId, checkpointId, timestamp, checkpointOptions) => log.debug(s"Receiver TriggerCheckpoint $checkpointId@$timestamp " + s"for $taskExecutionId.") val task = runningTasks.get(taskExecutionId) if (task != null) { task.triggerCheckpointBarrier(checkpointId, timestamp, checkpointOptions) } else { log.debug(s"TaskManager received a checkpoint request " + s"for unknown task $taskExecutionId.") } case NotifyCheckpointComplete(jobId, taskExecutionId, checkpointId, timestamp) => log.debug(s"Receiver ConfirmCheckpoint $checkpointId@$timestamp " + s"for $taskExecutionId.") val task = runningTasks.get(taskExecutionId) if (task != null) { task.notifyCheckpointComplete(checkpointId) } else { log.debug(s"TaskManager received a checkpoint confirmation " + s"for unknown task $taskExecutionId.") } } } 2

Recommend


More recommend