@@ -159,10 +159,10 @@ func Test_EnqueueFrontByPath(t *testing.T) {
159
159
require .NoError (t , err )
160
160
161
161
for _ , expectedVal := range tt .expected {
162
- _ , v := tree .Dequeue ()
162
+ _ , v := tree .Dequeue (& DequeueArgs { querierID : someQuerier } )
163
163
require .Equal (t , expectedVal , v )
164
164
}
165
- _ , v := tree .Dequeue ()
165
+ _ , v := tree .Dequeue (& DequeueArgs { querierID : someQuerier } )
166
166
require .Nil (t , v )
167
167
})
168
168
}
@@ -173,31 +173,39 @@ func Test_Dequeue_RootNode(t *testing.T) {
173
173
name string
174
174
rootAlgo QueuingAlgorithm
175
175
enqueueToRoot []any
176
+ dequeueArgs * DequeueArgs
177
+ expected []any
176
178
}{
177
179
{
178
180
name : "dequeue from empty round-robin root node" ,
179
181
rootAlgo : & roundRobinState {},
180
182
},
181
183
{
182
- name : "dequeue from empty tenant-querier root node" ,
183
- rootAlgo : newTenantQuerierAssignments (0 ),
184
+ name : "dequeue from empty tenant-querier root node" ,
185
+ rootAlgo : newTenantQuerierAssignments (0 ),
186
+ dequeueArgs : & DequeueArgs {querierID : "placeholder" , lastTenantIndex : localQueueIndex },
184
187
},
185
188
{
186
189
name : "dequeue from non-empty round-robin root node" ,
187
190
rootAlgo : & roundRobinState {},
188
191
enqueueToRoot : []any {"something-in-root" },
192
+ expected : []any {"something-in-root" },
189
193
},
190
194
{
191
195
name : "dequeue from non-empty tenant-querier root node" ,
192
196
rootAlgo : newTenantQuerierAssignments (0 ),
193
197
enqueueToRoot : []any {"something-else-in-root" },
198
+ expected : []any {"something-else-in-root" },
199
+ dequeueArgs : & DequeueArgs {querierID : "placeholder" , lastTenantIndex : localQueueIndex },
200
+ },
201
+ {
202
+ name : "dequeue from non-empty tenant-querier root node with no current querier" ,
203
+ rootAlgo : newTenantQuerierAssignments (0 ),
204
+ enqueueToRoot : []any {"something-in-root" },
194
205
},
195
206
}
196
207
for _ , tt := range tests {
197
208
t .Run (tt .name , func (t * testing.T ) {
198
- if tqa , ok := tt .rootAlgo .(* tenantQuerierAssignments ); ok {
199
- tqa .updateQueuingAlgorithmState ("placeholder" , localQueueIndex )
200
- }
201
209
tree , err := NewTree (tt .rootAlgo )
202
210
require .NoError (t , err )
203
211
@@ -208,13 +216,18 @@ func Test_Dequeue_RootNode(t *testing.T) {
208
216
}
209
217
210
218
for _ , elt := range tt .enqueueToRoot {
211
- dequeuePath , v := tree .Dequeue ()
212
- require .Equal (t , path , dequeuePath )
213
- require .Equal (t , elt , v )
219
+ dequeuePath , v := tree .Dequeue (tt .dequeueArgs )
220
+ if tt .expected != nil {
221
+ require .Equal (t , path , dequeuePath )
222
+ require .Equal (t , elt , v )
223
+ } else {
224
+ require .Equal (t , path , dequeuePath )
225
+ require .Nil (t , v )
226
+ }
214
227
215
228
}
216
229
217
- dequeuePath , v := tree .Dequeue ()
230
+ dequeuePath , v := tree .Dequeue (tt . dequeueArgs )
218
231
require .Equal (t , path , dequeuePath )
219
232
require .Nil (t , v )
220
233
@@ -276,7 +289,7 @@ func Test_RoundRobinDequeue(t *testing.T) {
276
289
}
277
290
278
291
for _ , expected := range tt .expected {
279
- _ , val := tree .Dequeue ()
292
+ _ , val := tree .Dequeue (nil )
280
293
v , ok := val .(string )
281
294
require .True (t , ok )
282
295
require .Equal (t , expected , v )
@@ -352,7 +365,7 @@ func Test_DequeueOrderAfterEnqueue(t *testing.T) {
352
365
require .NoError (t , err )
353
366
}
354
367
if operation .kind == dequeue {
355
- path , obj := tree .Dequeue ()
368
+ path , obj := tree .Dequeue (& DequeueArgs { querierID : placeholderQuerier } )
356
369
require .Equal (t , operation .path , path )
357
370
require .Equal (t , operation .obj , obj )
358
371
}
@@ -533,13 +546,6 @@ func Test_TenantQuerierAssignmentsDequeue(t *testing.T) {
533
546
534
547
for _ , tt := range tests {
535
548
t .Run (tt .name , func (t * testing.T ) {
536
- tqas := make ([]* tenantQuerierAssignments , 0 )
537
- for _ , da := range tt .treeAlgosByDepth {
538
- if tqa , ok := da .(* tenantQuerierAssignments ); ok {
539
- tqas = append (tqas , tqa )
540
- }
541
- }
542
-
543
549
tree , err := NewTree (tt .treeAlgosByDepth ... )
544
550
require .NoError (t , err )
545
551
@@ -550,10 +556,7 @@ func Test_TenantQuerierAssignmentsDequeue(t *testing.T) {
550
556
// currQuerier at position i is used to dequeue the expected result at position i
551
557
require .Equal (t , len (tt .currQuerier ), len (tt .expected ))
552
558
for i := 0 ; i < len (tt .expected ); i ++ {
553
- for _ , tqa := range tqas {
554
- tqa .updateQueuingAlgorithmState (tt .currQuerier [i ], i - 1 )
555
- }
556
- _ , v := tree .Dequeue ()
559
+ _ , v := tree .Dequeue (& DequeueArgs {querierID : tt .currQuerier [i ], lastTenantIndex : i - 1 })
557
560
require .Equal (t , tt .expected [i ], v )
558
561
}
559
562
})
@@ -593,32 +596,29 @@ func Test_ChangeTenantQuerierAssignments(t *testing.T) {
593
596
querier2 := QuerierID ("querier-2" )
594
597
querier3 := QuerierID ("querier-3" )
595
598
596
- // set state to querier-2 should dequeue query-2
597
- tqa .updateQueuingAlgorithmState (querier2 , - 1 )
598
- _ , v := tree .Dequeue ()
599
+ // dequeue for querier-2 should dequeue query-2
600
+ _ , v := tree .Dequeue (& DequeueArgs {querierID : querier2 , lastTenantIndex : - 1 })
599
601
require .Equal (t , "query-2" , v )
600
602
601
- // update tqa to querier-1 should dequeue query-1
602
- tqa .updateQueuingAlgorithmState (querier1 , - 1 )
603
- _ , v = tree .Dequeue ()
603
+ // dequeue for querier-1 should dequeue query-1
604
+ _ , v = tree .Dequeue (& DequeueArgs {querierID : querier1 , lastTenantIndex : - 1 })
604
605
require .Equal (t , "query-1" , v )
605
606
606
- // update tqa map to add querier-3 as assigned to tenant-2, then set tqa to querier-3 should dequeue query-3
607
+ // update tqa map to add querier-3 as assigned to tenant-2, then dequeue for querier-3 should dequeue query-3
607
608
tqa .tenantQuerierIDs ["tenant-2" ]["querier-3" ] = struct {}{}
608
- tqa .updateQueuingAlgorithmState (querier3 , - 1 )
609
- _ , v = tree .Dequeue ()
609
+ _ , v = tree .Dequeue (& DequeueArgs {querierID : querier3 , lastTenantIndex : - 1 })
610
610
require .Equal (t , "query-3" , v )
611
611
612
612
// during reshuffle, we only ever reassign tenant values, we don't assign an entirely new map value
613
613
// to tenantQuerierIDs. Reassign tenant-2 to an empty map value, and query-5 (tenant-3), which can be handled
614
614
// by any querier, should be dequeued,
615
615
tqa .tenantQuerierIDs ["tenant-2" ] = map [QuerierID ]struct {}{}
616
- _ , v = tree .Dequeue ()
616
+ _ , v = tree .Dequeue (& DequeueArgs { querierID : querier3 } )
617
617
require .Equal (t , "query-5" , v )
618
618
619
619
// then we should not be able to dequeue query-4
620
620
tqa .tenantQuerierIDs ["tenant-2" ] = map [QuerierID ]struct {}{}
621
- _ , v = tree .Dequeue ()
621
+ _ , v = tree .Dequeue (& DequeueArgs { querierID : querier3 } )
622
622
require .Nil (t , v )
623
623
624
624
}
@@ -680,7 +680,7 @@ func Test_DequeueBalancedRoundRobinTree(t *testing.T) {
680
680
dequeuedPathCache := make ([]QueuePath , rotationsBeforeRepeat )
681
681
682
682
for ! tree .IsEmpty () {
683
- dequeuedPath , _ := tree .Dequeue ()
683
+ dequeuedPath , _ := tree .Dequeue (nil )
684
684
685
685
// require dequeued path has not repeated before the expected number of rotations
686
686
require .NotContains (t , dequeuedPathCache , dequeuedPath )
@@ -716,7 +716,7 @@ func Test_DequeueUnbalancedRoundRobinTree(t *testing.T) {
716
716
}
717
717
718
718
for _ , expected := range expectedVals {
719
- _ , v := tree .Dequeue ()
719
+ _ , v := tree .Dequeue (nil )
720
720
require .Equal (t , expected , v )
721
721
}
722
722
@@ -759,17 +759,17 @@ func Test_EnqueueDuringDequeueRespectsRoundRobin(t *testing.T) {
759
759
require .Equal (t , []string {"0" , "1" , "2" }, root .queueOrder )
760
760
761
761
// dequeue first item
762
- dequeuedPath , _ := tree .Dequeue ()
762
+ dequeuedPath , _ := tree .Dequeue (nil )
763
763
require .Equal (t , QueuePath {"0" }, dequeuedPath )
764
764
765
765
// dequeue second item; root:1 is now exhausted and deleted
766
- dequeuedPath , _ = tree .Dequeue ()
766
+ dequeuedPath , _ = tree .Dequeue (nil )
767
767
require .Equal (t , QueuePath {"1" }, dequeuedPath )
768
768
require .Nil (t , root .getNode (QueuePath {"1" }))
769
769
require .Equal (t , []string {"0" , "2" }, root .queueOrder )
770
770
771
771
// dequeue third item
772
- dequeuedPath , _ = tree .Dequeue ()
772
+ dequeuedPath , _ = tree .Dequeue (nil )
773
773
require .Equal (t , QueuePath {"2" }, dequeuedPath )
774
774
775
775
// root:1 was previously exhausted; root:0, then root:2 will be next in the rotation
@@ -782,16 +782,16 @@ func Test_EnqueueDuringDequeueRespectsRoundRobin(t *testing.T) {
782
782
783
783
// dequeue fourth item; the newly-enqueued root:1 item
784
784
// has not jumped the line in front of root:0
785
- dequeuedPath , _ = tree .Dequeue ()
785
+ dequeuedPath , _ = tree .Dequeue (nil )
786
786
require .Equal (t , QueuePath {"0" }, dequeuedPath )
787
787
788
788
// dequeue fifth item; the newly-enqueued root:1 item
789
789
// has not jumped the line in front of root:2
790
- dequeuedPath , _ = tree .Dequeue ()
790
+ dequeuedPath , _ = tree .Dequeue (nil )
791
791
require .Equal (t , QueuePath {"2" }, dequeuedPath )
792
792
793
793
// dequeue sixth item; verifying the order 0->2->1 is being followed
794
- dequeuedPath , _ = tree .Dequeue ()
794
+ dequeuedPath , _ = tree .Dequeue (nil )
795
795
require .Equal (t , QueuePath {"1" }, dequeuedPath )
796
796
797
797
// all items have been dequeued
@@ -818,7 +818,7 @@ func Test_NodeCannotDeleteItself(t *testing.T) {
818
818
require .NoError (t , err )
819
819
require .NotNil (t , tree )
820
820
821
- _ , _ = tree .Dequeue ()
821
+ _ , _ = tree .Dequeue (nil )
822
822
823
823
require .NotNil (t , tree .rootNode )
824
824
require .Zero (t , tree .rootNode .getLocalQueue ().Len ())
@@ -885,18 +885,6 @@ func makeUnbalancedRoundRobinTree(t *testing.T) *MultiQueuingAlgorithmTreeQueue
885
885
require .Equal (t , 3 , tree .rootNode .nodeCount ())
886
886
require .Equal (t , 1 , tree .rootNode .ItemCount ())
887
887
888
- //// enqueue two items to root:1
889
- //childPath = QueuePath{"1"}
890
- //item = makeItemForChildQueue(tree.rootNode, childPath, cache)
891
- //require.NoError(t, tree.EnqueueBackByPath(childPath, item))
892
- //require.Equal(t, 3, tree.rootNode.nodeCount())
893
- //require.Equal(t, 2, tree.rootNode.ItemCount())
894
- //
895
- //item = makeItemForChildQueue(tree.rootNode, childPath, cache)
896
- //require.NoError(t, tree.EnqueueBackByPath(childPath, item))
897
- //require.Equal(t, 3, tree.rootNode.nodeCount())
898
- //require.Equal(t, 3, tree.rootNode.ItemCount())
899
-
900
888
// enqueue two items to root:1:a
901
889
childPath = QueuePath {"1" , "a" }
902
890
item = makeItemForChildQueue (tree .rootNode , childPath , cache )
0 commit comments