@@ -1019,6 +1019,23 @@ mod tests {
1019
1019
#[ tokio:: test]
1020
1020
1021
1021
async fn test_lighthouse_join_during_shrink ( ) -> Result < ( ) > {
1022
+ fn create_member ( id : & str , addr_num : & str , step : i64 , shrink_only : bool ) -> QuorumMember {
1023
+ QuorumMember {
1024
+ replica_id : id. to_string ( ) ,
1025
+ address : format ! ( "addr{}" , addr_num) ,
1026
+ store_address : format ! ( "store{}" , addr_num) ,
1027
+ step,
1028
+ world_size : 1 ,
1029
+ shrink_only,
1030
+ }
1031
+ }
1032
+
1033
+ fn create_request ( member : & QuorumMember ) -> tonic:: Request < LighthouseQuorumRequest > {
1034
+ tonic:: Request :: new ( LighthouseQuorumRequest {
1035
+ requester : Some ( member. clone ( ) ) ,
1036
+ } )
1037
+ }
1038
+
1022
1039
let opt = LighthouseOpt {
1023
1040
min_replicas : 2 ,
1024
1041
bind : "[::]:0" . to_string ( ) ,
@@ -1034,29 +1051,9 @@ mod tests {
1034
1051
// Create client to interact with lighthouse
1035
1052
let mut client = lighthouse_client_new ( lighthouse. address ( ) ) . await ?;
1036
1053
1037
- // First quorum
1038
- let mut member0 = QuorumMember {
1039
- replica_id : "replica0" . to_string ( ) ,
1040
- address : "addr1" . to_string ( ) ,
1041
- store_address : "store1" . to_string ( ) ,
1042
- step : 1 ,
1043
- world_size : 1 ,
1044
- shrink_only : false ,
1045
- } ;
1046
- let mut member1 = QuorumMember {
1047
- replica_id : "replica1" . to_string ( ) ,
1048
- address : "addr2" . to_string ( ) ,
1049
- store_address : "store2" . to_string ( ) ,
1050
- step : 1 ,
1051
- world_size : 1 ,
1052
- shrink_only : false ,
1053
- } ;
1054
- let mut first_request = tonic:: Request :: new ( LighthouseQuorumRequest {
1055
- requester : Some ( member0. clone ( ) ) ,
1056
- } ) ;
1057
- let mut second_request = tonic:: Request :: new ( LighthouseQuorumRequest {
1058
- requester : Some ( member1. clone ( ) ) ,
1059
- } ) ;
1054
+ // 1. First quorum
1055
+ let mut first_request = create_request ( & create_member ( "replica0" , "1" , 1 , false ) ) ;
1056
+ let mut second_request = create_request ( & create_member ( "replica1" , "2" , 1 , false ) ) ;
1060
1057
1061
1058
tokio:: spawn ( {
1062
1059
let mut client = client. clone ( ) ;
@@ -1069,33 +1066,16 @@ mod tests {
1069
1066
assert_eq ! ( first_quorum. participants[ 1 ] . replica_id, "replica1" ) ;
1070
1067
assert_eq ! ( first_quorum. participants[ 1 ] . step, 1 ) ;
1071
1068
1072
- // 2nd Quorum without joiner
1073
- let member2 = QuorumMember {
1074
- replica_id : "joiner" . to_string ( ) ,
1075
- address : "addr3" . to_string ( ) ,
1076
- store_address : "store3" . to_string ( ) ,
1077
- step : 1 ,
1078
- world_size : 1 ,
1079
- shrink_only : false ,
1080
- } ;
1081
- let joining_request = tonic:: Request :: new ( LighthouseQuorumRequest {
1082
- requester : Some ( member2. clone ( ) ) ,
1083
- } ) ;
1069
+ // 2. Quorum without joiner
1070
+ let joining_request = create_request ( & create_member ( "joiner" , "3" , 1 , false ) ) ;
1084
1071
let joining_task = tokio:: spawn ( {
1085
1072
let mut client = client. clone ( ) ;
1086
1073
async move { client. quorum ( joining_request) . await }
1087
1074
} ) ;
1088
1075
1089
1076
// Try to shrink only
1090
- member0. step = 2 ;
1091
- member1. step = 2 ;
1092
- member0. shrink_only = true ;
1093
- first_request = tonic:: Request :: new ( LighthouseQuorumRequest {
1094
- requester : Some ( member0. clone ( ) ) ,
1095
- } ) ;
1096
- second_request = tonic:: Request :: new ( LighthouseQuorumRequest {
1097
- requester : Some ( member1. clone ( ) ) ,
1098
- } ) ;
1077
+ first_request = create_request ( & create_member ( "replica0" , "1" , 2 , true ) ) ;
1078
+ second_request = create_request ( & create_member ( "replica1" , "2" , 2 , false ) ) ;
1099
1079
1100
1080
tokio:: spawn ( {
1101
1081
let mut client = client. clone ( ) ;
@@ -1112,17 +1092,9 @@ mod tests {
1112
1092
assert_eq ! ( second_quorum. participants[ 1 ] . replica_id, "replica1" ) ;
1113
1093
assert_eq ! ( second_quorum. participants[ 1 ] . step, 2 ) ;
1114
1094
1115
- // Quorum 3 with joiner
1116
- member0. step = 3 ;
1117
- member1. step = 3 ;
1118
- member0. shrink_only = false ;
1119
-
1120
- first_request = tonic:: Request :: new ( LighthouseQuorumRequest {
1121
- requester : Some ( member0. clone ( ) ) ,
1122
- } ) ;
1123
- second_request = tonic:: Request :: new ( LighthouseQuorumRequest {
1124
- requester : Some ( member1. clone ( ) ) ,
1125
- } ) ;
1095
+ // 3. Quorum with joiner
1096
+ first_request = create_request ( & create_member ( "replica0" , "1" , 3 , false ) ) ;
1097
+ second_request = create_request ( & create_member ( "replica1" , "2" , 3 , false ) ) ;
1126
1098
1127
1099
tokio:: spawn ( {
1128
1100
let mut client = client. clone ( ) ;
0 commit comments