@@ -143,33 +143,42 @@ impl RunLoop {
143143 } else {
144144 None
145145 } ;
146- let mut was_leader = false ;
146+ let mut was_leader: Option < bool > = leader . as_ref ( ) . map ( |_| false ) ;
147147
148148 while !control. should_shutdown ( ) {
149- let is_leader = if let Some ( ref mut leader ) = leader {
150- leader. try_acquire ( ) . await . unwrap_or_else ( |err| {
149+ let is_leader = match leader {
150+ Some ( ref mut leader ) => Some ( leader. try_acquire ( ) . await . unwrap_or_else ( |err| {
151151 tracing:: error!( ?err, "failed to become leader" ) ;
152152 Metrics :: leader_lock_error ( ) ;
153153 false
154- } )
155- } else {
156- true
154+ } ) ) ,
155+ None => None ,
157156 } ;
157+ let stepped_up = is_leader
158+ . zip ( was_leader)
159+ . is_some_and ( |( is_leader, was_leader) | is_leader && !was_leader) ;
158160
159- if leader . is_some ( ) && is_leader && !was_leader {
161+ if stepped_up {
160162 tracing:: info!( "Stepped up as a leader" ) ;
161163 Metrics :: leader_step_up ( ) ;
162- }
163- was_leader = is_leader;
164+ } ;
164165
165- let start_block = self_arc. update_caches ( & mut last_block, is_leader) . await ;
166+ let start_block = self_arc
167+ . update_caches ( & mut last_block, is_leader. unwrap_or ( true ) )
168+ . await ;
166169
167170 // caches are warmed up, we're ready to do leader work
168171 if let Some ( startup) = self_arc. probes . startup . as_ref ( ) {
169172 startup. store ( true , Ordering :: Release ) ;
170173 }
171174
172- if !is_leader {
175+ if stepped_up {
176+ tracing:: info!( "Caches warmed up, stepped up as a leader and ready" ) ;
177+ }
178+
179+ was_leader = is_leader;
180+
181+ if !is_leader. unwrap_or ( true ) {
173182 // only the leader is supposed to run the auctions
174183 tokio:: time:: sleep ( Duration :: from_millis ( 200 ) ) . await ;
175184 continue ;
0 commit comments