Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tom@curii.com>
stop chan struct{}
stopped chan struct{}
stop chan struct{}
stopped chan struct{}
- sQueueMtx sync.Mutex
- sQueueRefreshed time.Time
- sQueue []scheduler.QueueEnt
- sQueueMap map[string]scheduler.QueueEnt
+ schedQueueMtx sync.Mutex
+ schedQueueRefreshed time.Time
+ schedQueue []scheduler.QueueEnt
+ schedQueueMap map[string]scheduler.QueueEnt
-var sQueueRefresh = time.Second
+var schedQueueRefresh = time.Second
// Start starts the dispatcher. Start can be called multiple times
// with no ill effect.
// Start starts the dispatcher. Start can be called multiple times
// with no ill effect.
}
// Get a snapshot of the scheduler's queue, no older than
}
// Get a snapshot of the scheduler's queue, no older than
//
// First return value is in the sorted order used by the scheduler.
// Second return value is a map of the same entries, for efficiently
// looking up a single container.
//
// First return value is in the sorted order used by the scheduler.
// Second return value is a map of the same entries, for efficiently
// looking up a single container.
-func (disp *dispatcher) sQueueCurrent() ([]scheduler.QueueEnt, map[string]scheduler.QueueEnt) {
- disp.sQueueMtx.Lock()
- defer disp.sQueueMtx.Unlock()
- if time.Since(disp.sQueueRefreshed) > sQueueRefresh {
- disp.sQueue = disp.sched.Queue()
- disp.sQueueMap = make(map[string]scheduler.QueueEnt)
- for _, ent := range disp.sQueue {
- disp.sQueueMap[ent.Container.UUID] = ent
+func (disp *dispatcher) schedQueueCurrent() ([]scheduler.QueueEnt, map[string]scheduler.QueueEnt) {
+ disp.schedQueueMtx.Lock()
+ defer disp.schedQueueMtx.Unlock()
+ if time.Since(disp.schedQueueRefreshed) > schedQueueRefresh {
+ disp.schedQueue = disp.sched.Queue()
+ disp.schedQueueMap = make(map[string]scheduler.QueueEnt)
+ for _, ent := range disp.schedQueue {
+ disp.schedQueueMap[ent.Container.UUID] = ent
- disp.sQueueRefreshed = time.Now()
+ disp.schedQueueRefreshed = time.Now()
- return disp.sQueue, disp.sQueueMap
+ return disp.schedQueue, disp.schedQueueMap
}
// Management API: scheduling queue entries for all active and queued
}
// Management API: scheduling queue entries for all active and queued
var resp struct {
Items []scheduler.QueueEnt `json:"items"`
}
var resp struct {
Items []scheduler.QueueEnt `json:"items"`
}
- resp.Items, _ = disp.sQueueCurrent()
+ resp.Items, _ = disp.schedQueueCurrent()
json.NewEncoder(w).Encode(resp)
}
// Management API: scheduling queue entry for a specified container.
func (disp *dispatcher) apiContainer(w http.ResponseWriter, r *http.Request) {
json.NewEncoder(w).Encode(resp)
}
// Management API: scheduling queue entry for a specified container.
func (disp *dispatcher) apiContainer(w http.ResponseWriter, r *http.Request) {
- _, sq := disp.sQueueCurrent()
+ _, sq := disp.schedQueueCurrent()
ent, ok := sq[r.FormValue("container_uuid")]
if !ok {
httpserver.Error(w, "container not found", http.StatusNotFound)
ent, ok := sq[r.FormValue("container_uuid")]
if !ok {
httpserver.Error(w, "container not found", http.StatusNotFound)
Items []queueEnt
}
getContainers := func() containersResponse {
Items []queueEnt
}
getContainers := func() containersResponse {
- sQueueRefresh = time.Millisecond
+ schedQueueRefresh = time.Millisecond
req := httptest.NewRequest("GET", "/arvados/v1/dispatch/containers", nil)
req.Header.Set("Authorization", "Bearer abcdefgh")
resp := httptest.NewRecorder()
req := httptest.NewRequest("GET", "/arvados/v1/dispatch/containers", nil)
req.Header.Set("Authorization", "Bearer abcdefgh")
resp := httptest.NewRecorder()