diff --git a/plugin/pkg/scheduler/scheduler.go b/plugin/pkg/scheduler/scheduler.go index cbfcbc8fd62..16f5afc103d 100644 --- a/plugin/pkg/scheduler/scheduler.go +++ b/plugin/pkg/scheduler/scheduler.go @@ -125,17 +125,15 @@ func (s *Scheduler) scheduleOne() { glog.V(3).Infof("Attempting to schedule: %+v", pod) start := time.Now() - defer func() { - metrics.E2eSchedulingLatency.Observe(metrics.SinceInMicroseconds(start)) - }() dest, err := s.config.Algorithm.Schedule(pod, s.config.NodeLister) - metrics.SchedulingAlgorithmLatency.Observe(metrics.SinceInMicroseconds(start)) if err != nil { glog.V(1).Infof("Failed to schedule: %+v", pod) s.config.Recorder.Eventf(pod, api.EventTypeWarning, "FailedScheduling", "%v", err) s.config.Error(pod, err) return } + metrics.SchedulingAlgorithmLatency.Observe(metrics.SinceInMicroseconds(start)) + b := &api.Binding{ ObjectMeta: api.ObjectMeta{Namespace: pod.Namespace, Name: pod.Name}, Target: api.ObjectReference{ @@ -149,17 +147,19 @@ func (s *Scheduler) scheduleOne() { s.config.Modeler.LockedAction(func() { bindingStart := time.Now() err := s.config.Binder.Bind(b) - metrics.BindingLatency.Observe(metrics.SinceInMicroseconds(bindingStart)) if err != nil { glog.V(1).Infof("Failed to bind pod: %+v", err) s.config.Recorder.Eventf(pod, api.EventTypeNormal, "FailedScheduling", "Binding rejected: %v", err) s.config.Error(pod, err) return } + metrics.BindingLatency.Observe(metrics.SinceInMicroseconds(bindingStart)) s.config.Recorder.Eventf(pod, api.EventTypeNormal, "Scheduled", "Successfully assigned %v to %v", pod.Name, dest) // tell the model to assume that this binding took effect. assumed := *pod assumed.Spec.NodeName = dest s.config.Modeler.AssumePod(&assumed) }) + + metrics.E2eSchedulingLatency.Observe(metrics.SinceInMicroseconds(start)) }