private void startManager(TaskAssignResponse taskAssign)
        {
            RunningTask++;
            logger.Info("Starting task manager for task " + taskAssign.Task.guid + "...");
            TaskRunnerManager manager = new TaskRunnerManager(taskAssign);

            manager.TaskStateChangedHandler += new TaskStateChanged(delegate(TaskRunnerManager sender, TaskState state)
            {
                string guid = sender.TaskAssign.Task.guid;
                logger.Info("State of task " + guid + " changed to " + state);
                taskService.UpdateState(guid, state);
            });
            manager.TaskStoppedHandler += new TaskStopped(delegate(TaskRunnerManager sender)
            {
                RunningTask--;
            });
            manager.TaskProgressChangedHandler += new TaskProgressChanged(delegate(TaskRunnerManager sender, Dictionary <string, string> modelProgress)
            {
                taskService.UpdateModelProgress(taskAssign.Task.guid, new ModelProgress()
                {
                    Kvs = modelProgress
                });
            });
            manager.Run();
        }
 public void Run()
 {
     IsRunning = true;
     logger.Info("InstanceKeeper [" + InstanceName + "] is running.");
     using (InstanceServiceClient instanceService = new InstanceServiceClient())
     {
         while (IsRunning)
         {
             try
             {
                 logger.Info("Invoking heartbeat...");
                 instanceService.Heartbeat(new InstanceHeartbeatStatus()
                 {
                     InstanceName       = InstanceName,
                     CurrentRunningTask = RunningTask,
                     MaxRunningTask     = MaxRunningTask,
                     SystemStatus       = new NodeSystemStatus()
                     {
                         TotalRamSize     = SysUtil.getTotalRamSize(),
                         AvailableRamSize = SysUtil.getAvailableRamSize(),
                         ProcessCount     = SysUtil.getProcessCount(),
                         LoadAverage      = SysUtil.getLoadAverage()
                     }
                 });
                 logger.Info("Heartbeat sent.");
             }
             catch (FaultException ex)
             {
                 logger.Error("Exception occured during heartbeat: " + ex.Reason);
             }
             try
             {
                 if (RunningTask < MaxRunningTask)
                 {
                     TaskAssignResponse taskAssign = taskService.AssignPendingTask(InstanceName);
                     new Thread(new ThreadStart(delegate()
                     {
                         try
                         {
                             startManager(taskAssign);
                         }
                         catch (Exception e)
                         {
                             logger.Crit("Failed to start task manager: " + e.ToString());
                         }
                     })).Start();
                 }
             }
             catch
             {
                 logger.Debug("No task available. ");
             }
             Thread.Sleep(HeartbeatInterval);
         }
     }
 }
示例#3
0
 public TaskRunnerManager(TaskAssignResponse taskAssign)
 {
     TaskAssign = taskAssign;
 }
示例#4
0
 private void startManager(TaskAssignResponse taskAssign)
 {
     RunningTask++;
     logger.Info("Starting task manager for task " + taskAssign.Task.guid + "...");
     TaskRunnerManager manager = new TaskRunnerManager(taskAssign);
     manager.TaskStateChangedHandler += new TaskStateChanged(delegate(TaskRunnerManager sender, TaskState state)
     {
         string guid = sender.TaskAssign.Task.guid;
         logger.Info("State of task " + guid + " changed to " + state);
         taskService.UpdateState(guid, state);
     });
     manager.TaskStoppedHandler += new TaskStopped(delegate(TaskRunnerManager sender)
     {
         RunningTask--;
     });
     manager.TaskProgressChangedHandler += new TaskProgressChanged(delegate(TaskRunnerManager sender, Dictionary<string, string> modelProgress)
     {
         taskService.UpdateModelProgress(taskAssign.Task.guid, new ModelProgress()
         {
             Kvs = modelProgress
         });
     });
     manager.Run();
 }