@@ -4,15 +4,36 @@ pub(crate) use crate::scheduler::main::_acquire_lease::acquire_lease;
44pub ( crate ) use crate :: scheduler:: main:: _evaluate_trigger:: evaluate_trigger;
55pub ( crate ) use crate :: scheduler:: main:: _scheduler_cycle:: scheduler_cycle;
66use crate :: scheduler:: main:: renew_lease:: renew_lease;
7+ use crate :: scheduler:: models:: SchedulerLease ;
78use crate :: store:: errors:: ControlError ;
89use crate :: store:: main:: migrate_store:: migrate_store;
10+ use crate :: store:: models:: ControlStore ;
11+ use futures_util:: { StreamExt , stream} ;
912use uuid:: Uuid ;
1013
1114use crate :: store:: tests:: lease_helpers:: expire_lease;
1215use crate :: store:: tests:: replica_helpers:: second_store;
1316use crate :: store:: tests:: store_helpers:: { close_store, close_test_store, open_test_store} ;
1417use crate :: store:: tests:: store_test_types:: Backend ;
1518
19+ /// Renew `lease` every five seconds, as a running scheduler does, until a renewal fails.
20+ pub ( crate ) fn hold_lease (
21+ store : & ControlStore ,
22+ lease : & SchedulerLease ,
23+ ) -> tokio:: task:: JoinHandle < ( ) > {
24+ let store = store. clone ( ) ;
25+ let renewals = stream:: try_unfold ( lease. clone ( ) , move |lease| {
26+ let store = store. clone ( ) ;
27+ async move {
28+ tokio:: time:: sleep ( std:: time:: Duration :: from_secs ( 5 ) ) . await ;
29+ renew_lease ( & store, & lease)
30+ . await
31+ . map ( |renewed| Some ( ( ( ) , renewed) ) )
32+ }
33+ } ) ;
34+ tokio:: spawn ( renewals. for_each ( |_| async { } ) )
35+ }
36+
1637pub ( crate ) async fn leadership_contract ( backend : Backend ) -> Option < i64 > {
1738 let test_store = open_test_store ( backend) . await ?;
1839 let store = & test_store. store ;
0 commit comments