Skip to content

Commit 2dfd160

Browse files
committed
Improve LoadSectorState performance.
1 parent 85faa23 commit 2dfd160

File tree

1 file changed

+32
-16
lines changed

1 file changed

+32
-16
lines changed

tasks/actorstate/miner/sector_events.go

Lines changed: 32 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -263,48 +263,62 @@ type SectorStates struct {
263263

264264
// LoadSectorState loads all sectors from a miners partitions and returns a SectorStates structure containing individual
265265
// 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+
267270
sectorStates := &SectorStates{}
271+
activeSectors := []bitfield.BitField{}
272+
liveSectors := []bitfield.BitField{}
273+
faultySectors := []bitfield.BitField{}
274+
recoveringSectors := []bitfield.BitField{}
275+
268276
// iterate the sector states
269277
if err := state.ForEachDeadline(func(_ uint64, dl miner.Deadline) error {
270278
return dl.ForEachPartition(func(_ uint64, part miner.Partition) error {
271279
active, err := part.ActiveSectors()
272280
if err != nil {
273281
return err
274282
}
275-
if sectorStates.Active, err = bitfield.MergeBitFields(sectorStates.Active, active); err != nil {
276-
return err
277-
}
283+
activeSectors = append(activeSectors, active)
278284

279285
live, err := part.LiveSectors()
280286
if err != nil {
281287
return err
282288
}
283-
if sectorStates.Live, err = bitfield.MergeBitFields(sectorStates.Live, live); err != nil {
284-
return err
285-
}
289+
liveSectors = append(liveSectors, live)
286290

287291
faulty, err := part.FaultySectors()
288292
if err != nil {
289293
return err
290294
}
291-
if sectorStates.Faulty, err = bitfield.MergeBitFields(sectorStates.Faulty, faulty); err != nil {
292-
return err
293-
}
295+
faultySectors = append(faultySectors, faulty)
294296

295297
recovering, err := part.RecoveringSectors()
296298
if err != nil {
297299
return err
298300
}
299-
if sectorStates.Recovering, err = bitfield.MergeBitFields(sectorStates.Recovering, recovering); err != nil {
300-
return err
301-
}
301+
recoveringSectors = append(recoveringSectors, recovering)
302302

303303
return nil
304304
})
305305
}); err != nil {
306306
return nil, err
307307
}
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+
308322
return sectorStates, nil
309323
}
310324

@@ -324,22 +338,24 @@ type SectorStateEvents struct {
324338
// Then compares current and parent SectorStates to produce a SectorStateEvents structure containing all sectors that are
325339
// removed, recovering, faulted, and recovered for the state transition from parent miner state to current miner state.
326340
func DiffMinerSectorStates(ctx context.Context, extState extraction.State) (*SectorStateEvents, error) {
341+
ctx, span := otel.Tracer("").Start(ctx, "DiffMinerSectorStates")
342+
defer span.End()
327343
var (
328344
previous, current *SectorStates
329345
err error
330346
)
331347

332348
// load previous and current miner sector states in parallel
333-
grp, _ := errgroup.WithContext(ctx)
349+
grp, grpCtx := errgroup.WithContext(ctx)
334350
grp.Go(func() error {
335-
previous, err = LoadSectorState(extState.ParentState())
351+
previous, err = LoadSectorState(grpCtx, extState.ParentState())
336352
if err != nil {
337353
return fmt.Errorf("loading previous sector states %w", err)
338354
}
339355
return nil
340356
})
341357
grp.Go(func() error {
342-
current, err = LoadSectorState(extState.CurrentState())
358+
current, err = LoadSectorState(grpCtx, extState.CurrentState())
343359
if err != nil {
344360
return fmt.Errorf("loading current sector states %w", err)
345361
}

0 commit comments

Comments
 (0)