@@ -164,18 +164,33 @@ func (m *F3) Start(startCtx context.Context) (_err error) {
164
164
}
165
165
166
166
log .Infow ("F3 is scheduled to start with initial delay" , "initialDelay" , initialDelay ,
167
- "NetworkName" , m .mfst .NetworkName , "BootstrapEpoch" , m .mfst .BootstrapEpoch , "Finality" , m .mfst .EC .Finality ,
167
+ "NetworkName" , m .mfst .NetworkName , "BootstrapEpoch" , m .mfst .BootstrapEpoch , "ECPeriod" , m . mfst . EC . Period , " Finality" , m .mfst .EC .Finality ,
168
168
"InitialPowerTable" , m .mfst .InitialPowerTable , "CommitteeLookback" , m .mfst .CommitteeLookback )
169
169
170
170
go func () {
171
171
startTimer := m .clock .Timer (initialDelay )
172
172
defer startTimer .Stop ()
173
- select {
174
- case <- m .runningCtx .Done ():
175
- log .Debugw ("F3 start disrupted" , "cause" , m .runningCtx .Err ())
176
- case startTime := <- startTimer .C :
177
- if err := m .startInternal (m .runningCtx ); err != nil {
178
- log .Errorw ("Failed to start F3 after initial delay" , "scheduledStartTime" , startTime , "err" , err )
173
+ for m .runningCtx .Err () == nil {
174
+ select {
175
+ case <- m .runningCtx .Done ():
176
+ log .Debugw ("F3 start disrupted" , "cause" , m .runningCtx .Err ())
177
+ return
178
+ case startTime := <- startTimer .C :
179
+ delay , err := m .computeBootstrapDelay ()
180
+ if err != nil {
181
+ log .Errorw ("failed to compute bootstrap delay" , "err" , err )
182
+ return
183
+ }
184
+ if delay > 0 {
185
+ log .Infow ("waiting for bootstrap epoch" , "duration" , delay .String ())
186
+ startTimer .Reset (delay )
187
+ } else {
188
+ err = m .startInternal (m .runningCtx )
189
+ if err != nil {
190
+ log .Errorw ("failed to start F3 after initial delay" , "scheduledStartTime" , startTime , "err" , err )
191
+ }
192
+ return
193
+ }
179
194
}
180
195
}
181
196
}()
0 commit comments