@@ -356,7 +356,27 @@ func TestMergeRemoveMissing(t *testing.T) {
356356 Ingesters : map [string ]InstanceDesc {
357357 "Ing 1" : {Addr : "addr1" , Timestamp : now , State : ACTIVE , Tokens : []uint32 {30 , 40 , 50 }},
358358 "Ing 2" : {Addr : "addr2" , Timestamp : now + 5 , State : ACTIVE , Tokens : []uint32 {5 , 10 , 20 , 100 , 200 }},
359- "Ing 3" : {Addr : "addr3" , Timestamp : now + 3 , State : LEFT }, // When deleting, time depends on value passed to merge function.
359+ "Ing 3" : {Addr : "addr3" , Timestamp : now + 3 , State : LEFT },
360+ },
361+ }
362+ }
363+
364+ thirdRing := func () * Desc {
365+ return & Desc {
366+ Ingesters : map [string ]InstanceDesc {
367+ "Ing 1" : {Addr : "addr1" , Timestamp : now , State : ACTIVE , Tokens : []uint32 {30 , 40 , 50 }},
368+ "Ing 2" : {Addr : "addr2" , Timestamp : now , State : JOINING , Tokens : []uint32 {5 , 10 , 20 , 100 , 200 }},
369+ "Ing 3" : {Addr : "addr3" , Timestamp : now + 50 , State : LEAVING , Tokens : []uint32 {5 , 10 , 20 , 100 , 200 }},
370+ },
371+ }
372+ }
373+
374+ expectedThirdSecondMerge := func () * Desc {
375+ return & Desc {
376+ Ingesters : map [string ]InstanceDesc {
377+ "Ing 1" : {Addr : "addr1" , Timestamp : now , State : ACTIVE , Tokens : []uint32 {30 , 40 , 50 }},
378+ "Ing 2" : {Addr : "addr2" , Timestamp : now + 5 , State : ACTIVE , Tokens : []uint32 {5 , 10 , 20 , 100 , 200 }},
379+ "Ing 3" : {Addr : "addr3" , Timestamp : now + 50 , State : LEFT },
360380 },
361381 }
362382 }
@@ -367,7 +387,18 @@ func TestMergeRemoveMissing(t *testing.T) {
367387 assert .Equal (t , & Desc {
368388 Ingesters : map [string ]InstanceDesc {
369389 "Ing 2" : {Addr : "addr2" , Timestamp : now + 5 , State : ACTIVE , Tokens : []uint32 {5 , 10 , 20 , 100 , 200 }},
370- "Ing 3" : {Addr : "addr3" , Timestamp : now + 3 , State : LEFT }, // When deleting, time depends on value passed to merge function.
390+ "Ing 3" : {Addr : "addr3" , Timestamp : now + 3 , State : LEFT }, // When deleting, time is recent between now and current timestamp
391+ },
392+ }, ch ) // entire second ring is new
393+ }
394+
395+ {
396+ our , ch := mergeLocalCAS (thirdRing (), secondRing (), now + 10 )
397+ assert .Equal (t , expectedThirdSecondMerge (), our )
398+ assert .Equal (t , & Desc {
399+ Ingesters : map [string ]InstanceDesc {
400+ "Ing 2" : {Addr : "addr2" , Timestamp : now + 5 , State : ACTIVE , Tokens : []uint32 {5 , 10 , 20 , 100 , 200 }},
401+ "Ing 3" : {Addr : "addr3" , Timestamp : now + 50 , State : LEFT }, // When deleting, time is recent between now and current timestamp
371402 },
372403 }, ch ) // entire second ring is new
373404 }
0 commit comments