@@ -92,18 +92,20 @@ pub async fn register_node(
9292 let existing_node_by_ip = data
9393 . node_store
9494 . get_active_node_by_ip ( update_node. ip_address . clone ( ) ) ;
95- if let Ok ( Some ( existing_node) ) = existing_node_by_ip {
96- if existing_node. id != update_node. id {
97- warn ! (
95+ if data. only_one_node_per_ip {
96+ if let Ok ( Some ( existing_node) ) = existing_node_by_ip {
97+ if existing_node. id != update_node. id {
98+ warn ! (
9899 "Node {} tried to change discovery but another active node is already registered to this IP address" ,
99100 update_node. id
100101 ) ;
101- debug ! ( "Existing node: {:?}" , existing_node) ;
102- debug ! ( "Update node: {:?}" , update_node) ;
103- return HttpResponse :: BadRequest ( ) . json ( ApiResponse :: new (
104- false ,
105- "Another active Node is already registered to this IP address" ,
106- ) ) ;
102+ debug ! ( "Existing node: {:?}" , existing_node) ;
103+ debug ! ( "Update node: {:?}" , update_node) ;
104+ return HttpResponse :: BadRequest ( ) . json ( ApiResponse :: new (
105+ false ,
106+ "Another active Node is already registered to this IP address" ,
107+ ) ) ;
108+ }
107109 }
108110 }
109111
@@ -215,6 +217,7 @@ mod tests {
215217 node_store : Arc :: new ( NodeStore :: new ( RedisStore :: new_test ( ) ) ) ,
216218 contracts : None ,
217219 last_chain_sync : Arc :: new ( Mutex :: new ( None :: < SystemTime > ) ) ,
220+ only_one_node_per_ip : true ,
218221 } ;
219222
220223 let app = test:: init_service (
@@ -270,6 +273,7 @@ mod tests {
270273 node_store : Arc :: new ( NodeStore :: new ( RedisStore :: new_test ( ) ) ) ,
271274 contracts : None ,
272275 last_chain_sync : Arc :: new ( Mutex :: new ( None :: < SystemTime > ) ) ,
276+ only_one_node_per_ip : true ,
273277 } ;
274278
275279 let validate_signatures =
@@ -394,6 +398,7 @@ mod tests {
394398 node_store : Arc :: new ( NodeStore :: new ( RedisStore :: new_test ( ) ) ) ,
395399 contracts : None ,
396400 last_chain_sync : Arc :: new ( Mutex :: new ( None :: < SystemTime > ) ) ,
401+ only_one_node_per_ip : true ,
397402 } ;
398403
399404 let validate_signatures =
@@ -458,6 +463,7 @@ mod tests {
458463 node_store : Arc :: new ( NodeStore :: new ( RedisStore :: new_test ( ) ) ) ,
459464 contracts : None ,
460465 last_chain_sync : Arc :: new ( Mutex :: new ( None :: < SystemTime > ) ) ,
466+ only_one_node_per_ip : true ,
461467 } ;
462468
463469 let validate_signatures =
@@ -520,6 +526,7 @@ mod tests {
520526 node_store : Arc :: new ( NodeStore :: new ( RedisStore :: new_test ( ) ) ) ,
521527 contracts : None ,
522528 last_chain_sync : Arc :: new ( Mutex :: new ( None :: < SystemTime > ) ) ,
529+ only_one_node_per_ip : true ,
523530 } ;
524531
525532 app_state. node_store . register_node ( node. clone ( ) ) . unwrap ( ) ;
0 commit comments