X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/f3e3a6cc4b72120f856e14f3039b1c0c1f0326bd..f3ba65ddf8642b941cb04ddbb69fdb1e8515a6d2:/lib/dispatchcloud/test/queue.go diff --git a/lib/dispatchcloud/test/queue.go b/lib/dispatchcloud/test/queue.go index 8a8f686e16..fcb2cfb33b 100644 --- a/lib/dispatchcloud/test/queue.go +++ b/lib/dispatchcloud/test/queue.go @@ -26,13 +26,27 @@ type Queue struct { Logger logrus.FieldLogger - entries map[string]container.QueueEnt - updTime time.Time - subscribers map[<-chan struct{}]chan struct{} + entries map[string]container.QueueEnt + updTime time.Time + subscribers map[<-chan struct{}]chan struct{} + stateChanges []QueueStateChange mtx sync.Mutex } +type QueueStateChange struct { + UUID string + From arvados.ContainerState + To arvados.ContainerState +} + +// All calls to Lock/Unlock/Cancel to date. +func (q *Queue) StateChanges() []QueueStateChange { + q.mtx.Lock() + defer q.mtx.Unlock() + return q.stateChanges +} + // Entries returns the containers that were queued when Update was // last called. func (q *Queue) Entries() (map[string]container.QueueEnt, time.Time) { @@ -111,6 +125,7 @@ func (q *Queue) notify() { // caller must have lock. func (q *Queue) changeState(uuid string, from, to arvados.ContainerState) error { ent := q.entries[uuid] + q.stateChanges = append(q.stateChanges, QueueStateChange{uuid, from, to}) if ent.Container.State != from { return fmt.Errorf("changeState failed: state=%q", ent.Container.State) } @@ -145,6 +160,7 @@ func (q *Queue) Update() error { upd[ctr.UUID] = container.QueueEnt{ Container: ctr, InstanceType: it, + FirstSeenAt: time.Now(), } } } @@ -172,12 +188,11 @@ func (q *Queue) Notify(upd arvados.Container) bool { if allowContainerUpdate[ctr.State][upd.State] { q.Containers[i] = upd return true - } else { - if q.Logger != nil { - q.Logger.WithField("ContainerUUID", ctr.UUID).Infof("test.Queue rejected update from %s to %s", ctr.State, upd.State) - } - return false } + if q.Logger != nil { + q.Logger.WithField("ContainerUUID", ctr.UUID).Infof("test.Queue rejected update from %s to %s", ctr.State, upd.State) + } + return false } } q.Containers = append(q.Containers, upd)