本文整理匯總了Golang中github.com/mesos/mesos-go/mesosproto.TaskInfo.GetData方法的典型用法代碼示例。如果您正苦於以下問題:Golang TaskInfo.GetData方法的具體用法?Golang TaskInfo.GetData怎麽用?Golang TaskInfo.GetData使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類github.com/mesos/mesos-go/mesosproto.TaskInfo
的用法示例。
在下文中一共展示了TaskInfo.GetData方法的6個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Golang代碼示例。
示例1: Read
func (c *config) Read(task *mesos.TaskInfo) {
config := new(config)
Logger.Debugf("Task data: %s", string(task.GetData()))
err := json.Unmarshal(task.GetData(), config)
if err != nil {
Logger.Critical(err)
os.Exit(1)
}
*c = *config
}
示例2: LaunchTask
// LaunchTask is called when the executor receives a request to launch a task.
// The happens when the k8sm scheduler has decided to schedule the pod
// (which corresponds to a Mesos Task) onto the node where this executor
// is running, but the binding is not recorded in the Kubernetes store yet.
// This function is invoked to tell the executor to record the binding in the
// Kubernetes store and start the pod via the Kubelet.
func (k *Executor) LaunchTask(driver bindings.ExecutorDriver, taskInfo *mesos.TaskInfo) {
if k.isDone() {
return
}
log.Infof("Launch task %v\n", taskInfo)
if !k.isConnected() {
log.Errorf("Ignore launch task because the executor is disconnected\n")
k.sendStatus(driver, newStatus(taskInfo.GetTaskId(), mesos.TaskState_TASK_FAILED,
messages.ExecutorUnregistered))
return
}
obj, err := api.Codec.Decode(taskInfo.GetData())
if err != nil {
log.Errorf("failed to extract yaml data from the taskInfo.data %v", err)
k.sendStatus(driver, newStatus(taskInfo.GetTaskId(), mesos.TaskState_TASK_FAILED,
messages.UnmarshalTaskDataFailure))
return
}
pod, ok := obj.(*api.Pod)
if !ok {
log.Errorf("expected *api.Pod instead of %T: %+v", pod, pod)
k.sendStatus(driver, newStatus(taskInfo.GetTaskId(), mesos.TaskState_TASK_FAILED,
messages.UnmarshalTaskDataFailure))
return
}
taskId := taskInfo.GetTaskId().GetValue()
k.lock.Lock()
defer k.lock.Unlock()
if _, found := k.tasks[taskId]; found {
log.Errorf("task already launched\n")
// Not to send back TASK_RUNNING here, because
// may be duplicated messages or duplicated task id.
return
}
// remember this task so that:
// (a) we ignore future launches for it
// (b) we have a record of it so that we can kill it if needed
// (c) we're leaving podName == "" for now, indicates we don't need to delete containers
k.tasks[taskId] = &kuberTask{
mesosTaskInfo: taskInfo,
launchTimer: time.NewTimer(k.launchGracePeriod),
}
k.resetSuicideWatch(driver)
go k.launchTask(driver, taskId, pod)
}
示例3: LaunchTask
// LaunchTask is called when the executor receives a request to launch a task.
// The happens when the k8sm scheduler has decided to schedule the pod
// (which corresponds to a Mesos Task) onto the node where this executor
// is running, but the binding is not recorded in the Kubernetes store yet.
// This function is invoked to tell the executor to record the binding in the
// Kubernetes store and start the pod via the Kubelet.
func (k *Executor) LaunchTask(driver bindings.ExecutorDriver, taskInfo *mesos.TaskInfo) {
if k.isDone() {
return
}
log.Infof("Launch task %v\n", taskInfo)
taskID := taskInfo.GetTaskId().GetValue()
if p := k.registry.pod(taskID); p != nil {
log.Warningf("task %v already launched", taskID)
// Not to send back TASK_RUNNING or TASK_FAILED here, because
// may be duplicated messages
return
}
if !k.isConnected() {
log.Errorf("Ignore launch task because the executor is disconnected\n")
k.sendStatus(driver, newStatus(taskInfo.GetTaskId(), mesos.TaskState_TASK_FAILED,
messages.ExecutorUnregistered))
return
}
obj, err := kruntime.Decode(api.Codecs.UniversalDecoder(), taskInfo.GetData())
if err != nil {
log.Errorf("failed to extract yaml data from the taskInfo.data %v", err)
k.sendStatus(driver, newStatus(taskInfo.GetTaskId(), mesos.TaskState_TASK_FAILED,
messages.UnmarshalTaskDataFailure))
return
}
pod, ok := obj.(*api.Pod)
if !ok {
log.Errorf("expected *api.Pod instead of %T: %+v", pod, pod)
k.sendStatus(driver, newStatus(taskInfo.GetTaskId(), mesos.TaskState_TASK_FAILED,
messages.UnmarshalTaskDataFailure))
return
}
k.resetSuicideWatch(driver)
// run the next step aync because it calls out to apiserver and we don't want to block here
go k.bindAndWatchTask(driver, taskInfo, time.NewTimer(k.launchGracePeriod), pod)
}
示例4: LaunchTask
// LaunchTask called when executor launch tasks
func (runner *TaskRunner) LaunchTask(driver executor.ExecutorDriver, taskInfo *mesosproto.TaskInfo) {
fmt.Printf("Launching task %v with ID %v\n", taskInfo.GetName(), taskInfo.GetTaskId().GetValue())
status := &mesosproto.TaskStatus{
TaskId: taskInfo.GetTaskId(),
State: mesosproto.TaskState_TASK_RUNNING.Enum(),
}
_, err := driver.SendStatusUpdate(status)
if err != nil {
fmt.Println("Send task running status error: ", err)
}
// TODO run job
fmt.Println(taskInfo.GetData())
fmt.Println("Task finished", taskInfo.GetName())
status.State = mesosproto.TaskState_TASK_FINISHED.Enum()
_, err = driver.SendStatusUpdate(status)
if err != nil {
fmt.Println("Send task finished status error: ", err)
}
}
示例5: LaunchTask
func (e *MirrorMakerExecutor) LaunchTask(driver executor.ExecutorDriver, task *mesos.TaskInfo) {
Logger.Infof("[LaunchTask] %s", task)
err := json.Unmarshal(task.GetData(), &e.config)
if err != nil {
Logger.Errorf("Could not unmarshal json data: %s", err)
panic(err)
}
Logger.Info(e.config)
runStatus := &mesos.TaskStatus{
TaskId: task.GetTaskId(),
State: mesos.TaskState_TASK_RUNNING.Enum(),
}
if _, err := driver.SendStatusUpdate(runStatus); err != nil {
Logger.Errorf("Failed to send status update: %s", runStatus)
os.Exit(1) //TODO not sure if we should exit in this case, but probably yes
}
go func() {
e.startMirrorMaker()
// finish task
Logger.Infof("Finishing task %s", task.GetName())
finStatus := &mesos.TaskStatus{
TaskId: task.GetTaskId(),
State: mesos.TaskState_TASK_FINISHED.Enum(),
}
if _, err := driver.SendStatusUpdate(finStatus); err != nil {
Logger.Errorf("Failed to send status update: %s", finStatus)
os.Exit(1)
}
Logger.Infof("Task %s has finished", task.GetName())
}()
}
示例6: LaunchTask
func (exec *exampleExecutor) LaunchTask(driver exec.ExecutorDriver, taskInfo *mesos.TaskInfo) {
// *
// Describes a task. Passed from the scheduler all the way to an
// executor (see SchedulerDriver::launchTasks and
// Executor::launchTask). Either ExecutorInfo or CommandInfo should be set.
// A different executor can be used to launch this task, and subsequent tasks
// meant for the same executor can reuse the same ExecutorInfo struct.
// type TaskInfo struct {
//
// TaskInfoではExecutor か Commandを設定しないといけない。
// example実裝だとExecutorが設定されているがValueがうまく渡っていないように見える
// Executorの中のCommandInfoに入っていた
//
fmt.Println("<------------------ Executor start ------------------>")
// https://github.com/mesos/mesos-go/blob/master/mesosproto/mesos.pb.go
// type CommandInfoあたり
// fmt.Println("Launching task", taskInfo.GetName(), "with command", taskInfo.Command.GetUris())
// fmt.Println("Launching task", taskInfo.GetName(), "with command", taskInfo.Command.GetValue())
// fmt.Println("Launching task", taskInfo.GetName(), "with command", taskInfo.Command.GetShell())
// ExecutorInfo
cmd := taskInfo.Executor.GetCommand()
fmt.Println("Launching task", taskInfo.GetName(), "with command[GetUris]", cmd.GetUris())
fmt.Println("Launching task", taskInfo.GetName(), "with command[GetValue]", cmd.GetValue())
fmt.Println("Launching task", taskInfo.GetName(), "with command[GetShell]", cmd.GetShell())
fmt.Println("Launching task", taskInfo.GetName(), "with command[GetArguments]", cmd.GetArguments())
fmt.Println("Launching task", taskInfo.GetName(), "with taskInfo.GetData()", string(taskInfo.GetData()))
execcmd := string(taskInfo.GetData())
fmt.Printf("execcmd = %s\n", execcmd)
runStatus := &mesos.TaskStatus{
TaskId: taskInfo.GetTaskId(),
State: mesos.TaskState_TASK_RUNNING.Enum(),
}
_, err := driver.SendStatusUpdate(runStatus)
if err != nil {
fmt.Println("Got error", err)
}
exec.tasksLaunched++
fmt.Println("Total tasks launched ", exec.tasksLaunched)
//
// this is where one would perform the requested task
//
output, err := osexec.Command("sh", "-c", execcmd).Output()
if err != nil {
fmt.Println("Command exec error", err)
}
fmt.Println("Exec output>")
fmt.Println(string(output))
//
// this is where one would perform the requested task
//
// finish task
fmt.Println("Finishing task", taskInfo.GetName())
finStatus := &mesos.TaskStatus{
TaskId: taskInfo.GetTaskId(),
State: mesos.TaskState_TASK_FINISHED.Enum(),
}
_, err = driver.SendStatusUpdate(finStatus)
if err != nil {
fmt.Println("Got error", err)
}
fmt.Println("Task finished", taskInfo.GetName())
fmt.Println("<------------------ Executor finish ------------------>\n")
}