[
https://issues.apache.org/jira/browse/FLINK-1984?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15426372#comment-15426372
]
ASF GitHub Bot commented on FLINK-1984:
---------------------------------------
Github user mxm commented on a diff in the pull request:
https://github.com/apache/flink/pull/2315#discussion_r75300491
--- Diff:
flink-mesos/src/main/scala/org/apache/flink/mesos/scheduler/TaskMonitor.scala
---
@@ -0,0 +1,258 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.flink.mesos.scheduler
+
+import grizzled.slf4j.Logger
+
+import akka.actor.{Actor, FSM, Props}
+import org.apache.flink.configuration.Configuration
+import org.apache.flink.mesos.scheduler.ReconciliationCoordinator.Reconcile
+import org.apache.flink.mesos.scheduler.TaskMonitor._
+import org.apache.flink.mesos.scheduler.messages.{Connected, Disconnected,
StatusUpdate}
+import org.apache.mesos.Protos.TaskState._
+import org.apache.mesos.{SchedulerDriver, Protos}
+
+import scala.PartialFunction.empty
+import scala.concurrent.duration._
+
+/**
+ * Monitors a Mesos task throughout its lifecycle.
+ *
+ * Models a task with a state machine reflecting the perceived state of
the task in Mesos. The state
+ * is primarily updated when task status information arrives from Mesos.
+ *
+ * The associated state data primarily tracks the task's goal (intended)
state, as persisted by the scheduler.
+ * Keep in mind that goal state is persisted before actions are taken.
The goal state strictly transitions
+ * thru New->Launched->Released.
+ *
+ * Unlike most exchanges with Mesos, task status is delivered
at-least-once, so status handling should be idempotent.
+ */
+class TaskMonitor(
+ flinkConfig: Configuration,
+ schedulerDriver: SchedulerDriver,
+ goalState: TaskGoalState) extends Actor with
FSM[TaskMonitorState,StateData] {
+
+ val LOG = Logger(getClass)
+
+ startWith(Suspended, StateData(goalState))
+
+ //
------------------------------------------------------------------------
+ // Suspended State
+ //
------------------------------------------------------------------------
+
+ when(Suspended) {
+ case Event(update: TaskGoalStateUpdated, _) =>
+ stay() using StateData(update.state)
+ case Event(msg: StatusUpdate, _) =>
+ stay()
+ case Event(msg: Connected, StateData(goal: New)) =>
+ goto(New)
+ case Event(msg: Connected, StateData(goal: Launched)) =>
+ goto(Reconciling)
+ case Event(msg: Connected, StateData(goal: Released)) =>
+ goto(Killing)
+ }
+
+ //
------------------------------------------------------------------------
+ // New State
+ //
------------------------------------------------------------------------
+
+ when(New) {
+ case Event(TaskGoalStateUpdated(goal: Launched), _) =>
+ goto(Staging) using StateData(goal)
+ }
+
+ //
------------------------------------------------------------------------
+ // Reconciliation State
+ //
------------------------------------------------------------------------
+
+ onTransition {
+ case _ -> Reconciling =>
+ nextStateData.goal match {
+ case goal: Launched =>
+ val taskStatus = Protos.TaskStatus.newBuilder()
+
.setTaskId(goal.taskID).setSlaveId(goal.slaveID).setState(TASK_STAGING).build()
+ context.parent ! Reconcile(Seq(taskStatus))
--- End diff --
Would it be cleaner to pass the `ActorRef` directly to the TaskMonitor?
> Integrate Flink with Apache Mesos
> ---------------------------------
>
> Key: FLINK-1984
> URL: https://issues.apache.org/jira/browse/FLINK-1984
> Project: Flink
> Issue Type: New Feature
> Components: Cluster Management
> Reporter: Robert Metzger
> Assignee: Eron Wright
> Priority: Minor
> Attachments: 251.patch
>
>
> There are some users asking for an integration of Flink into Mesos.
> -There also is a pending pull request for adding Mesos support for Flink-:
> https://github.com/apache/flink/pull/251
> Update (May '16): a new effort is now underway, building on the recent
> ResourceManager work.
> Design document: ([google
> doc|https://docs.google.com/document/d/1WItafBmGbjlaBbP8Of5PAFOH9GUJQxf5S4hjEuPchuU/edit?usp=sharing])
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)