Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: curio: sectors UI #11869

Merged
merged 74 commits into from
Apr 18, 2024
Merged
Show file tree
Hide file tree
Changes from 64 commits
Commits
Show all changes
74 commits
Select commit Hold shift + click to select a range
d36245c
cfg edit 1
snadrus Jan 30, 2024
fb86554
jsonschema deps
snadrus Feb 1, 2024
f6f4d0e
feat: lp mig - first few steps
snadrus Feb 12, 2024
229645b
lp mig: default tasks
snadrus Feb 13, 2024
5a61b87
code comments
snadrus Feb 13, 2024
17ffd12
docs
snadrus Feb 13, 2024
0c8969d
lp-mig-progress
snadrus Feb 20, 2024
aa049ba
Merge branch 'master' into easyMigration
snadrus Feb 20, 2024
6765ac1
shared
snadrus Feb 20, 2024
d47b2f7
comments and todos
snadrus Feb 26, 2024
443b05c
fix: curio: rename lotus-provider to curio (#11645)
LexLuthr Feb 29, 2024
b686823
lp: channels doc
snadrus Feb 29, 2024
86f8624
Merge branch 'easyMigration' of https://github.com/filecoin-project/l…
snadrus Feb 29, 2024
5c2a86b
finish easy-migration TODOs
snadrus Mar 2, 2024
345dd9c
out generate
snadrus Mar 2, 2024
94e2a37
Merge branch 'master' into easyMigration
snadrus Mar 2, 2024
ef9e3f2
merging and more renames
snadrus Mar 2, 2024
af19d34
avoid make-all
snadrus Mar 3, 2024
590537e
minor doc stuff
snadrus Mar 5, 2024
3ff1e4d
cu: make gen
snadrus Mar 6, 2024
ea1dd33
make gen fix
snadrus Mar 6, 2024
0c3d0ce
conflict-resolve
snadrus Mar 6, 2024
dedad07
Merge branch 'master' into easyMigration
snadrus Mar 6, 2024
5470aec
make gen
snadrus Mar 7, 2024
6505b90
tryfix
snadrus Mar 7, 2024
9fa63fb
go mod tidy
snadrus Mar 7, 2024
4c7130e
minor ez migration fixes
snadrus Mar 7, 2024
5086714
ez setup - ui cleanups
snadrus Mar 8, 2024
11f21a0
better error message
snadrus Mar 8, 2024
9d4ed63
guided setup colors
snadrus Mar 8, 2024
ea0b09e
better path to saveconfigtolayer
snadrus Mar 8, 2024
b94a75c
loadconfigwithupgrades fix
snadrus Mar 8, 2024
795bc6d
readMiner oops
snadrus Mar 8, 2024
01886bc
guided - homedir
snadrus Mar 8, 2024
97cb2d0
err if miner is running
snadrus Mar 8, 2024
d520d5c
prompt error should exit
snadrus Mar 8, 2024
1e27ea7
process already running, miner_id sectors in migration
snadrus Mar 8, 2024
ded8122
dont prompt for language a second time
snadrus Mar 8, 2024
500c92b
check miner stopped
Mar 8, 2024
aab78c6
unlock repo
Mar 8, 2024
f03c7d3
render and sql oops
snadrus Mar 8, 2024
0daa23d
Merge branch 'easyMigration' of https://github.com/filecoin-project/l…
snadrus Mar 8, 2024
2e4711e
curio easyMig - some fixes
snadrus Mar 12, 2024
01eae29
easyMigration runs successfully
snadrus Mar 12, 2024
daa2df3
lint
snadrus Mar 12, 2024
445c4d2
Merge branch 'master' into feat/config-edit for easy merge later
snadrus Mar 13, 2024
d075e09
Merge branch 'easyMigration' into feat/config-edit for later simplifi…
snadrus Mar 13, 2024
7dedf18
part 2 of last
snadrus Mar 13, 2024
8de43ee
message
snadrus Apr 1, 2024
763bbfe
Merge branch 'master' into feat/config-edit
snadrus Apr 3, 2024
6634520
merge addtl
snadrus Apr 3, 2024
e2a9f2e
fixing guided setup for myself
snadrus Apr 3, 2024
cd78a66
warn-on-no-post
snadrus Apr 4, 2024
e934222
EditorLoads
snadrus Apr 5, 2024
a8da71b
cleanups and styles
snadrus Apr 6, 2024
1ce78fe
Merge branch 'master' into feat/config-edit
snadrus Apr 6, 2024
a69fb0c
create info
LexLuthr Apr 9, 2024
76fc81d
fix tests
LexLuthr Apr 9, 2024
7f822e6
make gen
snadrus Apr 9, 2024
3d6894f
Merge branch 'feat/config-edit' of https://github.com/filecoin-projec…
snadrus Apr 9, 2024
c009921
sector early bird
snadrus Apr 12, 2024
1d49deb
sectors v2
snadrus Apr 13, 2024
af07c48
sector termination v1
snadrus Apr 13, 2024
a3455de
terminate2
snadrus Apr 13, 2024
1dd8546
mjs
snadrus Apr 16, 2024
7454069
minor things
snadrus Apr 16, 2024
5a856c1
flag bad sectors
LexLuthr Apr 16, 2024
e777bed
Merge branch 'master' into feat/sector-ui
LexLuthr Apr 16, 2024
f8c6252
fix errors
LexLuthr Apr 16, 2024
0f294bf
Merge branch 'master' into feat/sector-ui
LexLuthr Apr 16, 2024
cc2429b
add dealweight and deals
LexLuthr Apr 16, 2024
d03b15d
change column width
LexLuthr Apr 17, 2024
700600f
refactor sql, handle sealing sectors
LexLuthr Apr 17, 2024
dddf2e4
fix estimates
LexLuthr Apr 18, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ build/paramfetch.sh
*.snap
devgen.car
localnet.json
/*.ndjson

*-fuzz.zip
/chain/types/work_msg/
Expand Down
9 changes: 9 additions & 0 deletions chain/types/fil.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ import (
"math/big"
"strings"

"github.com/invopop/jsonschema"

"github.com/filecoin-project/lotus/build"
)

Expand Down Expand Up @@ -138,5 +140,12 @@ func MustParseFIL(s string) FIL {
return n
}

func (f FIL) JSONSchema() *jsonschema.Schema {
return &jsonschema.Schema{
Type: "string",
Pattern: `^((\d+(\.\d+)?|0x[0-9a-fA-F]+))( ([aA]([tT][tT][oO])?)?[fF][iI][lL])?$`,
}
}

var _ encoding.TextMarshaler = (*FIL)(nil)
var _ encoding.TextUnmarshaler = (*FIL)(nil)
122 changes: 74 additions & 48 deletions cli/spcli/sectors.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package spcli

import (
"bufio"
"context"
"encoding/csv"
"encoding/json"
"errors"
Expand All @@ -16,6 +17,7 @@ import (

"github.com/fatih/color"
cbor "github.com/ipfs/go-ipld-cbor"
"github.com/samber/lo"
"github.com/urfave/cli/v2"
"golang.org/x/xerrors"

Expand Down Expand Up @@ -1353,44 +1355,20 @@ func TerminateSectorCmd(getActorAddress ActorAddressGetter) *cli.Command {
}
}

mi, err := nodeApi.StateMinerInfo(ctx, maddr, types.EmptyTSK)
if err != nil {
return err
}

terminationDeclarationParams := []miner2.TerminationDeclaration{}

for _, sn := range cctx.Args().Slice() {
sectorNum, err := strconv.ParseUint(sn, 10, 64)
var outerErr error
sectorNumbers := lo.Map(cctx.Args().Slice(), func(sn string, _ int) int {
sectorNum, err := strconv.Atoi(sn)
if err != nil {
return fmt.Errorf("could not parse sector number: %w", err)
outerErr = fmt.Errorf("could not parse sector number: %w", err)
return 0
}

sectorbit := bitfield.New()
sectorbit.Set(sectorNum)

loca, err := nodeApi.StateSectorPartition(ctx, maddr, abi.SectorNumber(sectorNum), types.EmptyTSK)
if err != nil {
return fmt.Errorf("get state sector partition %s", err)
}

para := miner2.TerminationDeclaration{
Deadline: loca.Deadline,
Partition: loca.Partition,
Sectors: sectorbit,
}

terminationDeclarationParams = append(terminationDeclarationParams, para)
}

terminateSectorParams := &miner2.TerminateSectorsParams{
Terminations: terminationDeclarationParams,
return sectorNum
})
if outerErr != nil {
return outerErr
}

sp, err := actors.SerializeParams(terminateSectorParams)
if err != nil {
return xerrors.Errorf("serializing params: %w", err)
}
confidence := uint64(cctx.Int("confidence"))

var fromAddr address.Address
if from := cctx.String("from"); from != "" {
Expand All @@ -1400,33 +1378,81 @@ func TerminateSectorCmd(getActorAddress ActorAddressGetter) *cli.Command {
return fmt.Errorf("parsing address %s: %w", from, err)
}
} else {
mi, err := nodeApi.StateMinerInfo(ctx, maddr, types.EmptyTSK)
if err != nil {
return err
}

fromAddr = mi.Worker
}

smsg, err := nodeApi.MpoolPushMessage(ctx, &types.Message{
From: fromAddr,
To: maddr,
Method: builtin.MethodsMiner.TerminateSectors,

Value: big.Zero(),
Params: sp,
}, nil)
smsg, err := TerminateSectors(ctx, nodeApi, maddr, sectorNumbers, fromAddr)
if err != nil {
return xerrors.Errorf("mpool push message: %w", err)
return err
}

fmt.Println("sent termination message:", smsg.Cid())

wait, err := nodeApi.StateWaitMsg(ctx, smsg.Cid(), uint64(cctx.Int("confidence")))
wait, err := nodeApi.StateWaitMsg(ctx, smsg.Cid(), confidence)
if err != nil {
return err
}

if wait.Receipt.ExitCode.IsError() {
return fmt.Errorf("terminate sectors message returned exit %d", wait.Receipt.ExitCode)
}

return nil
},
}
}

type TerminatorNode interface {
StateSectorPartition(ctx context.Context, maddr address.Address, sectorNumber abi.SectorNumber, tok types.TipSetKey) (*miner.SectorLocation, error)
MpoolPushMessage(ctx context.Context, msg *types.Message, spec *api.MessageSendSpec) (*types.SignedMessage, error)
}

func TerminateSectors(ctx context.Context, full TerminatorNode, maddr address.Address, sectorNumbers []int, fromAddr address.Address) (*types.SignedMessage, error) {

terminationDeclarationParams := []miner2.TerminationDeclaration{}

for _, sectorNum := range sectorNumbers {

sectorbit := bitfield.New()
sectorbit.Set(uint64(sectorNum))

loca, err := full.StateSectorPartition(ctx, maddr, abi.SectorNumber(sectorNum), types.EmptyTSK)
if err != nil {
return nil, fmt.Errorf("get state sector partition %s", err)
}

para := miner2.TerminationDeclaration{
Deadline: loca.Deadline,
Partition: loca.Partition,
Sectors: sectorbit,
}

terminationDeclarationParams = append(terminationDeclarationParams, para)
}

terminateSectorParams := &miner2.TerminateSectorsParams{
Terminations: terminationDeclarationParams,
}

sp, errA := actors.SerializeParams(terminateSectorParams)
if errA != nil {
return nil, xerrors.Errorf("serializing params: %w", errA)
}

smsg, err := full.MpoolPushMessage(ctx, &types.Message{
From: fromAddr,
To: maddr,
Method: builtin.MethodsMiner.TerminateSectors,

Value: big.Zero(),
Params: sp,
}, nil)
if err != nil {
return nil, xerrors.Errorf("mpool push message: %w", err)
}

fmt.Println("sent termination message:", smsg.Cid())

return smsg, nil
}
3 changes: 3 additions & 0 deletions cmd/curio/cli.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,9 @@ var cliCmd = &cli.Command{
// set already
return nil
}
if os.Getenv("LOTUS_DOCS_GENERATION") == "1" {
return nil
}

db, err := deps.MakeDB(cctx)
if err != nil {
Expand Down
4 changes: 4 additions & 0 deletions cmd/curio/deps/deps.go
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,7 @@ func GetDeps(ctx context.Context, cctx *cli.Context) (*Deps, error) {
}

type Deps struct {
Layers []string
Cfg *config.CurioConfig // values
DB *harmonydb.DB // has itest capability
Full api.FullNode
Expand Down Expand Up @@ -212,6 +213,9 @@ func (deps *Deps) PopulateRemainingDeps(ctx context.Context, cctx *cli.Context,
return err
}
}
if deps.Layers == nil {
deps.Layers = append([]string{"base"}, cctx.StringSlice("layers")...) // Always stack on top of "base" layer
}

if deps.Cfg == nil {
// The config feeds into task runners & their helpers
Expand Down
6 changes: 3 additions & 3 deletions cmd/curio/guidedsetup/guidedsetup.go
Original file line number Diff line number Diff line change
Expand Up @@ -244,7 +244,7 @@ type MigrationData struct {

func complete(d *MigrationData) {
stepCompleted(d, d.T("Lotus-Miner to Curio Migration."))
d.say(plain, "Try the web interface with %s for further guided improvements.", "--layers=gui")
d.say(plain, "Try the web interface with %s for further guided improvements.", code.Render("curio run --layers=gui"))
d.say(plain, "You can now migrate your market node (%s), if applicable.", "Boost")
}

Expand Down Expand Up @@ -279,7 +279,7 @@ func configToDB(d *MigrationData) {

chainApiInfo := fmt.Sprintf("%s:%s", string(token), ainfo.Addr)

d.MinerID, err = SaveConfigToLayer(d.MinerConfigPath, "", false, chainApiInfo)
d.MinerID, err = SaveConfigToLayer(d.MinerConfigPath, chainApiInfo)
if err != nil {
d.say(notice, "Error saving config to layer: %s. Aborting Migration", err.Error())
os.Exit(1)
Expand Down Expand Up @@ -423,7 +423,7 @@ func verifySectors(d *MigrationData) {
time.Sleep(5 * time.Second)
}
d.say(plain, "The sectors are in the database. The database is ready for %s.", "Curio")
d.say(notice, "Now shut down lotus-miner and move the systems to %s.", "Curio")
d.say(notice, "Now shut down lotus-miner and lotus-worker and use run %s instead.", code.Render("curio run"))

_, err = (&promptui.Prompt{Label: d.T("Press return to continue")}).Run()
if err != nil {
Expand Down
44 changes: 19 additions & 25 deletions cmd/curio/guidedsetup/shared.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import (
"bytes"
"context"
"encoding/base64"
"errors"
"fmt"
"os"
"path"
Expand All @@ -30,7 +29,7 @@ const (

const FlagMinerRepoDeprecation = "storagerepo"

func SaveConfigToLayer(minerRepoPath, layerName string, overwrite bool, chainApiInfo string) (minerAddress address.Address, err error) {
func SaveConfigToLayer(minerRepoPath, chainApiInfo string) (minerAddress address.Address, err error) {
_, say := SetupLanguage()
ctx := context.Background()

Expand Down Expand Up @@ -165,6 +164,12 @@ func SaveConfigToLayer(minerRepoPath, layerName string, overwrite bool, chainApi
baseCfg.Addresses = lo.Filter(baseCfg.Addresses, func(a config.CurioAddresses, _ int) bool {
return len(a.MinerAddresses) > 0
})
if baseCfg.Apis.ChainApiInfo == nil {
baseCfg.Apis.ChainApiInfo = append(baseCfg.Apis.ChainApiInfo, chainApiInfo)
}
if baseCfg.Apis.StorageRPCSecret == "" {
baseCfg.Apis.StorageRPCSecret = curioCfg.Apis.StorageRPCSecret
}

cb, err := config.ConfigUpdate(baseCfg, config.DefaultCurioConfig(), config.Commented(true), config.DefaultKeepUncommented(), config.NoEnv())
if err != nil {
Expand All @@ -174,44 +179,33 @@ func SaveConfigToLayer(minerRepoPath, layerName string, overwrite bool, chainApi
if err != nil {
return minerAddress, xerrors.Errorf("cannot update base config: %w", err)
}
say(plain, "Configuration 'base' was updated to include this miner's address and its wallet setup.")
say(plain, "Configuration 'base' was updated to include this miner's address (%s) and its wallet setup.", minerAddress)
}
say(plain, "Compare the configurations %s to %s. Changes between the miner IDs other than wallet addreses should be a new, minimal layer for runners that need it.", "base", "mig-"+curioCfg.Addresses[0].MinerAddresses[0])
skipWritingToBase:
} else if layerName == "" {
cfg, err := deps.GetDefaultConfig(true)
if err != nil {
return minerAddress, xerrors.Errorf("Cannot get default config: %w", err)
}
} else {
_, err = db.Exec(ctx, `INSERT INTO harmony_config (title, config) VALUES ('base', $1)
ON CONFLICT(title) DO UPDATE SET config=EXCLUDED.config`, cfg)
ON CONFLICT(title) DO UPDATE SET config=EXCLUDED.config`, configTOML)

if err != nil {
return minerAddress, xerrors.Errorf("Cannot insert base config: %w", err)
}
say(notice, "Configuration 'base' was created to include this miner's address and its wallet setup.")
say(notice, "Configuration 'base' was created to resemble this lotus-miner's config.toml .")
}

if layerName == "" { // only make mig if base exists and we are different. // compare to base.
layerName = fmt.Sprintf("mig-%s", curioCfg.Addresses[0].MinerAddresses[0])
overwrite = true
} else {
if lo.Contains(titles, layerName) && !overwrite {
return minerAddress, errors.New("the overwrite flag is needed to replace existing layer: " + layerName)
}
}
if overwrite {
_, err := db.Exec(ctx, "DELETE FROM harmony_config WHERE title=$1", layerName)
{ // make a layer representing the migration
layerName := fmt.Sprintf("mig-%s", curioCfg.Addresses[0].MinerAddresses[0])
_, err = db.Exec(ctx, "DELETE FROM harmony_config WHERE title=$1", layerName)
if err != nil {
return minerAddress, xerrors.Errorf("Cannot delete existing layer: %w", err)
}
}

_, err = db.Exec(ctx, "INSERT INTO harmony_config (title, config) VALUES ($1, $2)", layerName, configTOML.String())
if err != nil {
return minerAddress, xerrors.Errorf("Cannot insert layer after layer created message: %w", err)
_, err = db.Exec(ctx, "INSERT INTO harmony_config (title, config) VALUES ($1, $2)", layerName, configTOML.String())
if err != nil {
return minerAddress, xerrors.Errorf("Cannot insert layer after layer created message: %w", err)
}
say(plain, "Layer %s created. ", layerName)
}
say(plain, "Layer %s created. ", layerName)

dbSettings := getDBSettings(*smCfg)
say(plain, "To work with the config: ")
Expand Down
Loading