@@ -334,7 +334,7 @@ def test_any_replica_node_key
334
334
def test_update_slot
335
335
sample_slot = 0
336
336
base_node_key = @test_node . find_node_key_of_primary ( sample_slot )
337
- another_node_key = @test_node_info_list . find { |info | info . node_key != base_node_key && info . primary? }
337
+ another_node_key = @test_node_info_list . find { |info | info . node_key != base_node_key && info . primary? } &. node_key
338
338
@test_node . update_slot ( sample_slot , another_node_key )
339
339
assert_equal ( another_node_key , @test_node . find_node_key_of_primary ( sample_slot ) )
340
340
end
@@ -353,12 +353,12 @@ def test_make_topology_class
353
353
354
354
def test_build_slot_node_mappings
355
355
node_info_list = [
356
- { node_key : '127.0.0.1:7001' , slots : [ [ 0 , 3000 ] , [ 3002 , 5460 ] , [ 15_001 , 15_001 ] ] } ,
357
- { node_key : '127.0.0.1:7002' , slots : [ [ 3001 , 3001 ] , [ 5461 , 7000 ] , [ 7002 , 10_922 ] ] } ,
358
- { node_key : '127.0.0.1:7003' , slots : [ [ 7001 , 7001 ] , [ 10_923 , 15_000 ] , [ 15_002 , 16_383 ] ] } ,
359
- { node_key : '127.0.0.1:7004' , slots : [ ] } ,
360
- { node_key : '127.0.0.1:7005' , slots : [ ] } ,
361
- { node_key : '127.0.0.1:7006' , slots : [ ] }
356
+ { node_key : '127.0.0.1:7001' , role : 'master' , slots : [ [ 0 , 3000 ] , [ 3002 , 5460 ] , [ 15_001 , 15_001 ] ] } ,
357
+ { node_key : '127.0.0.1:7002' , role : 'master' , slots : [ [ 3001 , 3001 ] , [ 5461 , 7000 ] , [ 7002 , 10_922 ] ] } ,
358
+ { node_key : '127.0.0.1:7003' , role : 'master' , slots : [ [ 7001 , 7001 ] , [ 10_923 , 15_000 ] , [ 15_002 , 16_383 ] ] } ,
359
+ { node_key : '127.0.0.1:7004' , role : 'slave' , slots : [ ] } ,
360
+ { node_key : '127.0.0.1:7005' , role : 'slave' , slots : [ ] } ,
361
+ { node_key : '127.0.0.1:7006' , role : 'slave' , slots : [ ] }
362
362
] . map { |info | ::RedisClient ::Cluster ::Node ::Info . new ( **info ) }
363
363
364
364
got = @test_node . send ( :build_slot_node_mappings , node_info_list )
@@ -372,6 +372,58 @@ def test_build_slot_node_mappings
372
372
end
373
373
end
374
374
375
+ def test_make_array_for_slot_node_mappings_optimized
376
+ node_info_list = Array . new ( 256 ) do |i |
377
+ ::RedisClient ::Cluster ::Node ::Info . new (
378
+ node_key : "127.0.0.1:#{ 1024 + i + 1 } " ,
379
+ role : 'master'
380
+ )
381
+ end
382
+
383
+ want = node_info_list . first . node_key
384
+ got = @test_node . send ( :make_array_for_slot_node_mappings , node_info_list )
385
+ assert_instance_of ( Struct ::RedisSlot , got )
386
+ ::RedisClient ::Cluster ::Node ::SLOT_SIZE . times do |i |
387
+ got [ i ] = want
388
+ assert_equal ( want , got [ i ] , "Case: #{ i } " )
389
+ end
390
+ end
391
+
392
+ def test_make_array_for_slot_node_mappings_unoptimized
393
+ node_info_list = Array . new ( 257 ) do |i |
394
+ ::RedisClient ::Cluster ::Node ::Info . new (
395
+ node_key : "127.0.0.1:#{ 1024 + i + 1 } " ,
396
+ role : 'master'
397
+ )
398
+ end
399
+
400
+ want = node_info_list . first . node_key
401
+ got = @test_node . send ( :make_array_for_slot_node_mappings , node_info_list )
402
+ assert_instance_of ( Array , got )
403
+ ::RedisClient ::Cluster ::Node ::SLOT_SIZE . times do |i |
404
+ got [ i ] = want
405
+ assert_equal ( want , got [ i ] , "Case: #{ i } " )
406
+ end
407
+ end
408
+
409
+ def test_make_array_for_slot_node_mappings_max_shard_size
410
+ node_info_list = Array . new ( 255 ) do |i |
411
+ ::RedisClient ::Cluster ::Node ::Info . new (
412
+ node_key : "127.0.0.1:#{ 1024 + i + 1 } " ,
413
+ role : 'master'
414
+ )
415
+ end
416
+
417
+ got = @test_node . send ( :make_array_for_slot_node_mappings , node_info_list )
418
+ assert_instance_of ( Struct ::RedisSlot , got )
419
+
420
+ ::RedisClient ::Cluster ::Node ::SLOT_SIZE . times { |i | got [ i ] = node_info_list . first . node_key }
421
+
422
+ got [ 0 ] = 'newbie:6379'
423
+ assert_equal ( 'newbie:6379' , got [ 0 ] )
424
+ assert_raises ( ::RedisClient ::Cluster ::Node ::ReloadNeeded ) { got [ 0 ] = 'zombie:6379' }
425
+ end
426
+
375
427
def test_build_replication_mappings_regular
376
428
node_key1 = '127.0.0.1:7001'
377
429
node_key2 = '127.0.0.1:7002'
0 commit comments