@@ -263,48 +263,62 @@ type SectorStates struct {
263
263
264
264
// LoadSectorState loads all sectors from a miners partitions and returns a SectorStates structure containing individual
265
265
// bitfields for all active, live, faulty and recovering sector.
266
- func LoadSectorState (state miner.State ) (* SectorStates , error ) {
266
+ func LoadSectorState (ctx context.Context , state miner.State ) (* SectorStates , error ) {
267
+ ctx , span := otel .Tracer ("" ).Start (ctx , "LoadSectorState" )
268
+ defer span .End ()
269
+
267
270
sectorStates := & SectorStates {}
271
+ activeSectors := []bitfield.BitField {}
272
+ liveSectors := []bitfield.BitField {}
273
+ faultySectors := []bitfield.BitField {}
274
+ recoveringSectors := []bitfield.BitField {}
275
+
268
276
// iterate the sector states
269
277
if err := state .ForEachDeadline (func (_ uint64 , dl miner.Deadline ) error {
270
278
return dl .ForEachPartition (func (_ uint64 , part miner.Partition ) error {
271
279
active , err := part .ActiveSectors ()
272
280
if err != nil {
273
281
return err
274
282
}
275
- if sectorStates .Active , err = bitfield .MergeBitFields (sectorStates .Active , active ); err != nil {
276
- return err
277
- }
283
+ activeSectors = append (activeSectors , active )
278
284
279
285
live , err := part .LiveSectors ()
280
286
if err != nil {
281
287
return err
282
288
}
283
- if sectorStates .Live , err = bitfield .MergeBitFields (sectorStates .Live , live ); err != nil {
284
- return err
285
- }
289
+ liveSectors = append (liveSectors , live )
286
290
287
291
faulty , err := part .FaultySectors ()
288
292
if err != nil {
289
293
return err
290
294
}
291
- if sectorStates .Faulty , err = bitfield .MergeBitFields (sectorStates .Faulty , faulty ); err != nil {
292
- return err
293
- }
295
+ faultySectors = append (faultySectors , faulty )
294
296
295
297
recovering , err := part .RecoveringSectors ()
296
298
if err != nil {
297
299
return err
298
300
}
299
- if sectorStates .Recovering , err = bitfield .MergeBitFields (sectorStates .Recovering , recovering ); err != nil {
300
- return err
301
- }
301
+ recoveringSectors = append (recoveringSectors , recovering )
302
302
303
303
return nil
304
304
})
305
305
}); err != nil {
306
306
return nil , err
307
307
}
308
+ var err error
309
+ if sectorStates .Active , err = bitfield .MultiMerge (activeSectors ... ); err != nil {
310
+ return nil , err
311
+ }
312
+ if sectorStates .Live , err = bitfield .MultiMerge (liveSectors ... ); err != nil {
313
+ return nil , err
314
+ }
315
+ if sectorStates .Faulty , err = bitfield .MultiMerge (faultySectors ... ); err != nil {
316
+ return nil , err
317
+ }
318
+ if sectorStates .Recovering , err = bitfield .MultiMerge (recoveringSectors ... ); err != nil {
319
+ return nil , err
320
+ }
321
+
308
322
return sectorStates , nil
309
323
}
310
324
@@ -324,22 +338,24 @@ type SectorStateEvents struct {
324
338
// Then compares current and parent SectorStates to produce a SectorStateEvents structure containing all sectors that are
325
339
// removed, recovering, faulted, and recovered for the state transition from parent miner state to current miner state.
326
340
func DiffMinerSectorStates (ctx context.Context , extState extraction.State ) (* SectorStateEvents , error ) {
341
+ ctx , span := otel .Tracer ("" ).Start (ctx , "DiffMinerSectorStates" )
342
+ defer span .End ()
327
343
var (
328
344
previous , current * SectorStates
329
345
err error
330
346
)
331
347
332
348
// load previous and current miner sector states in parallel
333
- grp , _ := errgroup .WithContext (ctx )
349
+ grp , grpCtx := errgroup .WithContext (ctx )
334
350
grp .Go (func () error {
335
- previous , err = LoadSectorState (extState .ParentState ())
351
+ previous , err = LoadSectorState (grpCtx , extState .ParentState ())
336
352
if err != nil {
337
353
return fmt .Errorf ("loading previous sector states %w" , err )
338
354
}
339
355
return nil
340
356
})
341
357
grp .Go (func () error {
342
- current , err = LoadSectorState (extState .CurrentState ())
358
+ current , err = LoadSectorState (grpCtx , extState .CurrentState ())
343
359
if err != nil {
344
360
return fmt .Errorf ("loading current sector states %w" , err )
345
361
}
0 commit comments