// HandleGomitEvent handles events emitted from control func (t *tribe) HandleGomitEvent(e gomit.Event) { logger := t.logger.WithFields(log.Fields{ "_block": "handle-gomit-event", }) switch v := e.Body.(type) { case *control_event.LoadPluginEvent: logger.WithFields(log.Fields{ "event": e.Namespace(), "plugin-name": v.Name, "plugin-version": v.Version, "plugin-type": core.PluginType(v.Type).String(), }).Debugf("handling load plugin event") plugin := agreement.Plugin{ Name_: v.Name, Version_: v.Version, Type_: core.PluginType(v.Type), } if m, ok := t.members[t.memberlist.LocalNode().Name]; ok { if m.PluginAgreement != nil { if ok, _ := m.PluginAgreement.Plugins.Contains(plugin); !ok { t.AddPlugin(m.PluginAgreement.Name, plugin) } } } case *control_event.UnloadPluginEvent: logger.WithFields(log.Fields{ "event": e.Namespace(), "plugin-name": v.Name, "plugin-version": v.Version, "plugin-type": core.PluginType(v.Type).String(), }).Debugf("handling unload plugin event") plugin := agreement.Plugin{ Name_: v.Name, Version_: v.Version, Type_: core.PluginType(v.Type), } if m, ok := t.members[t.memberlist.LocalNode().Name]; ok { if m.PluginAgreement != nil { if ok, _ := m.PluginAgreement.Plugins.Contains(plugin); ok { t.RemovePlugin(m.PluginAgreement.Name, plugin) } } } case *scheduler_event.TaskCreatedEvent: if v.Source != "tribe" { logger.WithFields(log.Fields{ "event": e.Namespace(), "task-id": v.TaskID, "task-start-on-create": v.StartOnCreate, }).Debugf("handling task create event") task := agreement.Task{ ID: v.TaskID, StartOnCreate: v.StartOnCreate, } if m, ok := t.members[t.memberlist.LocalNode().Name]; ok { if m.TaskAgreements != nil { for n, a := range m.TaskAgreements { if ok, _ := a.Tasks.Contains(task); !ok { t.AddTask(n, task) } } } } } case *scheduler_event.TaskStoppedEvent: if v.Source != "tribe" { logger.WithFields(log.Fields{ "event": e.Namespace(), "task-id": v.TaskID, }).Debugf("handling task stop event") task := agreement.Task{ ID: v.TaskID, } if m, ok := t.members[t.memberlist.LocalNode().Name]; ok { if m.TaskAgreements != nil { for n, a := range m.TaskAgreements { if ok, _ := a.Tasks.Contains(task); ok { t.StopTask(n, task) } } } } } case *scheduler_event.TaskStartedEvent: if v.Source != "tribe" { logger.WithFields(log.Fields{ "event": e.Namespace(), "task-id": v.TaskID, }).Debugf("handling task start event") task := agreement.Task{ ID: v.TaskID, } if m, ok := t.members[t.memberlist.LocalNode().Name]; ok { if m.TaskAgreements != nil { for n, a := range m.TaskAgreements { if ok, _ := a.Tasks.Contains(task); ok { t.StartTask(n, task) } } } } } case *scheduler_event.TaskDeletedEvent: if v.Source != "tribe" { logger.WithFields(log.Fields{ "event": e.Namespace(), "task-id": v.TaskID, }).Debugf("handling task start event") task := agreement.Task{ ID: v.TaskID, } if m, ok := t.members[t.memberlist.LocalNode().Name]; ok { if m.TaskAgreements != nil { for n, a := range m.TaskAgreements { if ok, _ := a.Tasks.Contains(task); ok { t.RemoveTask(n, task) } } } } } } }
// Central handling for all async events in scheduler func (s *scheduler) HandleGomitEvent(e gomit.Event) { switch v := e.Body.(type) { case *scheduler_event.MetricCollectedEvent: log.WithFields(log.Fields{ "_module": "scheduler-events", "_block": "handle-events", "event-namespace": e.Namespace(), "task-id": v.TaskID, "metric-count": len(v.Metrics), }).Debug("event received") s.taskWatcherColl.handleMetricCollected(v.TaskID, v.Metrics) case *scheduler_event.MetricCollectionFailedEvent: log.WithFields(log.Fields{ "_module": "scheduler-events", "_block": "handle-events", "event-namespace": e.Namespace(), "task-id": v.TaskID, "errors-count": v.Errors, }).Debug("event received") case *scheduler_event.TaskStartedEvent: log.WithFields(log.Fields{ "_module": "scheduler-events", "_block": "handle-events", "event-namespace": e.Namespace(), "task-id": v.TaskID, }).Debug("event received") s.taskWatcherColl.handleTaskStarted(v.TaskID) case *scheduler_event.TaskStoppedEvent: log.WithFields(log.Fields{ "_module": "scheduler-events", "_block": "handle-events", "event-namespace": e.Namespace(), "task-id": v.TaskID, }).Debug("event received") s.taskWatcherColl.handleTaskStopped(v.TaskID) case *scheduler_event.TaskDisabledEvent: log.WithFields(log.Fields{ "_module": "scheduler-events", "_block": "handle-events", "event-namespace": e.Namespace(), "task-id": v.TaskID, "disabled-reason": v.Why, }).Debug("event received") // We need to unsubscribe from deps when a task goes disabled task, _ := s.getTask(v.TaskID) depGroups := getWorkflowPlugins(task.workflow.processNodes, task.workflow.publishNodes, task.workflow.metrics) for k := range depGroups { mgr, err := task.RemoteManagers.Get(k) if err == nil { mgr.UnsubscribeDeps(task.ID()) } } s.taskWatcherColl.handleTaskDisabled(v.TaskID, v.Why) default: log.WithFields(log.Fields{ "_module": "scheduler-events", "_block": "handle-events", "event-namespace": e.Namespace(), }).Debug("event received") } }
// Central handling for all async events in scheduler func (s *scheduler) HandleGomitEvent(e gomit.Event) { switch v := e.Body.(type) { case *scheduler_event.MetricCollectedEvent: log.WithFields(log.Fields{ "_module": "scheduler-events", "_block": "handle-events", "event-namespace": e.Namespace(), "task-id": v.TaskID, "metric-count": len(v.Metrics), }).Debug("event received") s.taskWatcherColl.handleMetricCollected(v.TaskID, v.Metrics) case *scheduler_event.MetricCollectionFailedEvent: log.WithFields(log.Fields{ "_module": "scheduler-events", "_block": "handle-events", "event-namespace": e.Namespace(), "task-id": v.TaskID, "errors-count": v.Errors, }).Debug("event received") case *scheduler_event.TaskStartedEvent: log.WithFields(log.Fields{ "_module": "scheduler-events", "_block": "handle-events", "event-namespace": e.Namespace(), "task-id": v.TaskID, }).Debug("event received") s.taskWatcherColl.handleTaskStarted(v.TaskID) case *scheduler_event.TaskStoppedEvent: log.WithFields(log.Fields{ "_module": "scheduler-events", "_block": "handle-events", "event-namespace": e.Namespace(), "task-id": v.TaskID, }).Debug("event received") s.taskWatcherColl.handleTaskStopped(v.TaskID) case *scheduler_event.TaskDisabledEvent: log.WithFields(log.Fields{ "_module": "scheduler-events", "_block": "handle-events", "event-namespace": e.Namespace(), "task-id": v.TaskID, "disabled-reason": v.Why, }).Debug("event received") // We need to unsubscribe from deps when a task goes disabled task, _ := s.getTask(v.TaskID) mts, plugins := s.gatherMetricsAndPlugins(task.workflow) cps := returnCorePlugin(plugins) s.metricManager.UnsubscribeDeps(task.ID(), mts, cps) s.taskWatcherColl.handleTaskDisabled(v.TaskID, v.Why) default: log.WithFields(log.Fields{ "_module": "scheduler-events", "_block": "handle-events", "event-namespace": e.Namespace(), }).Debug("event received") } }