@@ -59,13 +59,12 @@ type queues struct {
59
59
}
60
60
61
61
type userQueue struct {
62
- queue requestQueue
62
+ queue userRequestQueue
63
63
64
64
// If not nil, only these queriers can handle user requests. If nil, all queriers can.
65
65
// We set this to nil if number of available queriers <= maxQueriers.
66
- queriers map [string ]struct {}
67
- reservedQueriers map [string ]int64
68
- maxQueriers int
66
+ queriers map [string ]struct {}
67
+ maxQueriers int
69
68
70
69
// Seed for shuffle sharding of queriers. This seed is based on userID only and is therefore consistent
71
70
// between different frontends.
@@ -111,7 +110,7 @@ func (q *queues) deleteQueue(userID string) {
111
110
// MaxQueriers is used to compute which queriers should handle requests for this user.
112
111
// If maxQueriers is <= 0, all queriers can handle this user's requests.
113
112
// If maxQueriers has changed since the last call, queriers for this are recomputed.
114
- func (q * queues ) getOrAddQueue (userID string , maxQueriers int ) requestQueue {
113
+ func (q * queues ) getOrAddQueue (userID string , maxQueriers int ) userRequestQueue {
115
114
// Empty user is not allowed, as that would break our users list ("" is used for free spot).
116
115
if userID == "" {
117
116
return nil
@@ -139,7 +138,7 @@ func (q *queues) getOrAddQueue(userID string, maxQueriers int) requestQueue {
139
138
if queryPriority .Enabled {
140
139
uq .queue = NewPriorityRequestQueue (util .NewPriorityQueue (nil ))
141
140
} else {
142
- uq .queue = NewFIFOQueue (make (chan Request , queueSize ))
141
+ uq .queue = NewFIFORequestQueue (make (chan Request , queueSize ))
143
142
}
144
143
145
144
q .userQueues [userID ] = uq
@@ -163,7 +162,6 @@ func (q *queues) getOrAddQueue(userID string, maxQueriers int) requestQueue {
163
162
if uq .maxQueriers != maxQueriers {
164
163
uq .maxQueriers = maxQueriers
165
164
uq .queriers = shuffleQueriersForUser (uq .seed , maxQueriers , q .sortedQueriers , nil )
166
- uq .reservedQueriers = getReservedQueriers (uq .queriers , q .limits .QueryPriority (userID ).Priorities )
167
165
}
168
166
169
167
return uq .queue
@@ -172,7 +170,7 @@ func (q *queues) getOrAddQueue(userID string, maxQueriers int) requestQueue {
172
170
// Finds next queue for the querier. To support fair scheduling between users, client is expected
173
171
// to pass last user index returned by this function as argument. Is there was no previous
174
172
// last user index, use -1.
175
- func (q * queues ) getNextQueueForQuerier (lastUserIndex int , querierID string ) (requestQueue , string , int ) {
173
+ func (q * queues ) getNextQueueForQuerier (lastUserIndex int , querierID string ) (userRequestQueue , string , int ) {
176
174
uid := lastUserIndex
177
175
178
176
for iters := 0 ; iters < len (q .users ); iters ++ {
@@ -198,7 +196,7 @@ func (q *queues) getNextQueueForQuerier(lastUserIndex int, querierID string) (re
198
196
}
199
197
}
200
198
201
- //TODO: justinjung04, reserved queriers
199
+ // TODO: justinjung04, reserved queriers
202
200
//if priority, isReserved := uq.reservedQueriers[querierID]; isReserved {
203
201
// return uq.queues[priority], u, uid
204
202
//}
@@ -208,6 +206,13 @@ func (q *queues) getNextQueueForQuerier(lastUserIndex int, querierID string) (re
208
206
return nil , "" , uid
209
207
}
210
208
209
+ func (q * queues ) getMinPriority (userID string , querierID string ) int64 {
210
+ // TODO: justinjung04 reserved querier
211
+ // check list of queriers and QueryPriority config
212
+ // from QueryPriority config, establish map of
213
+ return 0
214
+ }
215
+
211
216
func (q * queues ) addQuerierConnection (querierID string ) {
212
217
info := q .queriers [querierID ]
213
218
if info != nil {
@@ -320,16 +325,6 @@ func (q *queues) recomputeUserQueriers() {
320
325
// In that case *all* queriers should be used.
321
326
// Scratchpad is used for shuffling, to avoid new allocations. If nil, new slice is allocated.
322
327
func shuffleQueriersForUser (userSeed int64 , queriersToSelect int , allSortedQueriers []string , scratchpad []string ) map [string ]struct {} {
323
- //numOfReservedQueriers := getNumOfReservedQueriers(queriersToSelect, len(allSortedQueriers), numOfReservedQueriersFloat)
324
- //reservedQueriers := make(map[string]struct{}, numOfReservedQueriers)
325
-
326
- //if queriersToSelect == 0 || len(allSortedQueriers) <= queriersToSelect {
327
- // for i := 0; i < numOfReservedQueriers; i++ {
328
- // reservedQueriers[allSortedQueriers[i]] = struct{}{}
329
- // }
330
- // return nil, reservedQueriers
331
- //}
332
-
333
328
queriers := make (map [string ]struct {}, queriersToSelect )
334
329
rnd := rand .New (rand .NewSource (userSeed ))
335
330
@@ -340,41 +335,13 @@ func shuffleQueriersForUser(userSeed int64, queriersToSelect int, allSortedQueri
340
335
for i := 0 ; i < queriersToSelect ; i ++ {
341
336
r := rnd .Intn (last + 1 )
342
337
queriers [scratchpad [r ]] = struct {}{}
343
- //if i < numOfReservedQueriers {
344
- // reservedQueriers[scratchpad[r]] = struct{}{}
345
- //}
346
- // move selected item to the end, it won't be selected anymore.
347
338
scratchpad [r ], scratchpad [last ] = scratchpad [last ], scratchpad [r ]
348
339
last --
349
340
}
350
341
351
342
return queriers
352
343
}
353
344
354
- func getReservedQueriers (queriers map [string ]struct {}, priorities []validation.PriorityDef ) map [string ]int64 {
355
- // TODO: justinjung04
356
- return map [string ]int64 {}
357
- }
358
-
359
- // TODO: justinjung04
360
- //func getNumOfReservedQueriers(queriersToSelect int, totalNumOfQueriers int, reservedQueriers float64) int {
361
- // numOfReservedQueriers := int(reservedQueriers)
362
- //
363
- // if reservedQueriers < 1 && reservedQueriers > 0 {
364
- // if queriersToSelect == 0 || queriersToSelect > totalNumOfQueriers {
365
- // queriersToSelect = totalNumOfQueriers
366
- // }
367
- //
368
- // numOfReservedQueriers = int(math.Ceil(float64(queriersToSelect) * reservedQueriers))
369
- // }
370
- //
371
- // if numOfReservedQueriers > totalNumOfQueriers {
372
- // return totalNumOfQueriers
373
- // }
374
- //
375
- // return numOfReservedQueriers
376
- //}
377
-
378
345
// MockLimits implements the Limits interface. Used in tests only.
379
346
type MockLimits struct {
380
347
MaxOutstanding int
0 commit comments