Skip to content

Commit 4a66850

Browse files
authored
feat(shed): cron queue inspection util (#12825)
* cron queue inspector * Print correct * Print moar correct * Epochs are signed --------- Co-authored-by: zenground0 <[email protected]>
1 parent ff620b0 commit 4a66850

File tree

1 file changed

+64
-0
lines changed

1 file changed

+64
-0
lines changed

cmd/lotus-shed/cron-count.go

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,25 @@
11
package main
22

33
import (
4+
"bytes"
5+
"encoding/binary"
46
"encoding/json"
57
"fmt"
68
"os"
79

810
"github.com/ipfs/go-cid"
911
ipldcbor "github.com/ipfs/go-ipld-cbor"
1012
"github.com/urfave/cli/v2"
13+
cbg "github.com/whyrusleeping/cbor-gen"
1114
"golang.org/x/xerrors"
1215

1316
"github.com/filecoin-project/go-address"
1417
"github.com/filecoin-project/go-bitfield"
1518
"github.com/filecoin-project/go-state-types/abi"
19+
"github.com/filecoin-project/go-state-types/builtin"
1620
miner11 "github.com/filecoin-project/go-state-types/builtin/v11/miner"
1721
"github.com/filecoin-project/go-state-types/builtin/v11/util/adt"
22+
power "github.com/filecoin-project/go-state-types/builtin/v15/power"
1823

1924
"github.com/filecoin-project/lotus/api"
2025
"github.com/filecoin-project/lotus/build/buildconstants"
@@ -28,6 +33,7 @@ var cronWcCmd = &cli.Command{
2833
Subcommands: []*cli.Command{
2934
minerDeadlineCronCountCmd,
3035
minerDeadlinePartitionMeasurementCmd,
36+
cronQueueCountCmd,
3137
},
3238
}
3339

@@ -269,6 +275,64 @@ var minerDeadlinePartitionMeasurementCmd = &cli.Command{
269275
},
270276
}
271277

278+
var cronQueueCountCmd = &cli.Command{
279+
Name: "queue",
280+
Description: "list all entries in the cron queue",
281+
Action: func(c *cli.Context) error {
282+
n, acloser, err := lcli.GetFullNodeAPI(c)
283+
if err != nil {
284+
return err
285+
}
286+
defer acloser()
287+
ctx := lcli.ReqContext(c)
288+
289+
bs := ReadOnlyAPIBlockstore{n}
290+
adtStore := adt.WrapStore(ctx, ipldcbor.NewCborStore(&bs))
291+
292+
// Get power actor state
293+
powerActor, err := n.StateGetActor(ctx, builtin.StoragePowerActorAddr, types.EmptyTSK)
294+
if err != nil {
295+
return xerrors.Errorf("failed to get power actor: %w", err)
296+
}
297+
298+
var powerState power.State
299+
if err := adtStore.Get(ctx, powerActor.Head, &powerState); err != nil {
300+
return xerrors.Errorf("failed to load power state: %w", err)
301+
}
302+
303+
// Load cron queue
304+
q, err := adt.AsMap(adtStore, powerState.CronEventQueue, power.CronQueueHamtBitwidth)
305+
if err != nil {
306+
return xerrors.Errorf("failed to load cron queue hamt: %w", err)
307+
}
308+
amtRoot := cbg.CborCid{}
309+
if err := q.ForEach(&amtRoot, func(epoch string) error {
310+
epochInt, err := binary.ReadVarint(bytes.NewReader([]byte(epoch)))
311+
if err != nil {
312+
return xerrors.Errorf("failed to parse epoch: %w", err)
313+
}
314+
events, err := adt.AsArray(adtStore, cid.Cid(amtRoot), power.CronQueueAmtBitwidth)
315+
if err != nil {
316+
return xerrors.Errorf("failed to load cron queue amt: %w", err)
317+
}
318+
var event power.CronEvent
319+
if err := events.ForEach(&event, func(i int64) error {
320+
fmt.Printf("Epoch: %d, Miner: %s\n", epochInt, event.MinerAddr)
321+
return nil
322+
}); err != nil {
323+
return xerrors.Errorf("failed to iterate cron events: %w", err)
324+
}
325+
326+
return nil
327+
328+
}); err != nil {
329+
return xerrors.Errorf("failed to iterate cron events: %w", err)
330+
}
331+
return nil
332+
333+
},
334+
}
335+
272336
var minerDeadlineCronCountCmd = &cli.Command{
273337
Name: "deadline",
274338
Description: "list all addresses of miners with active deadline crons",

0 commit comments

Comments
 (0)