From dcf62d9569d10da200eae4234d104172fafef081 Mon Sep 17 00:00:00 2001 From: Dirk McCormick Date: Tue, 14 Jun 2022 16:59:15 +0200 Subject: [PATCH 1/3] feat: consolidate import-data commands into one --- api/api.go | 1 + api/proxy_gen.go | 13 ++++++ build/openrpc/boost.json.gz | Bin 4675 -> 4759 bytes cmd/boostd/import_data.go | 68 ++++++++++++++++++++--------- cmd/boostd/legacy_deals.go | 46 ------------------- cmd/boostd/main.go | 1 - documentation/en/api-v1-methods.md | 66 ++++++++++++++++++++++++++++ node/impl/boost.go | 4 ++ storagemarket/provider.go | 9 ++++ 9 files changed, 141 insertions(+), 67 deletions(-) delete mode 100644 cmd/boostd/legacy_deals.go diff --git a/api/api.go b/api/api.go index 44d602ef9..2dc9e0146 100644 --- a/api/api.go +++ b/api/api.go @@ -36,6 +36,7 @@ type Boost interface { BoostIndexerAnnounceAllDeals(ctx context.Context) error //perm:admin BoostOfflineDealWithData(ctx context.Context, dealUuid uuid.UUID, filePath string) (*ProviderDealRejectionInfo, error) //perm:admin BoostDeal(ctx context.Context, dealUuid uuid.UUID) (*smtypes.ProviderDealState, error) //perm:admin + BoostDealBySignedProposalCid(ctx context.Context, proposalCid cid.Cid) (*smtypes.ProviderDealState, error) //perm:admin BoostDummyDeal(context.Context, smtypes.DealParams) (*ProviderDealRejectionInfo, error) //perm:admin BoostDagstoreRegisterShard(ctx context.Context, key string) error //perm:admin BoostDagstoreInitializeShard(ctx context.Context, key string) error //perm:admin diff --git a/api/proxy_gen.go b/api/proxy_gen.go index 982c91c29..ade455970 100644 --- a/api/proxy_gen.go +++ b/api/proxy_gen.go @@ -49,6 +49,8 @@ type BoostStruct struct { BoostDeal func(p0 context.Context, p1 uuid.UUID) (*smtypes.ProviderDealState, error) `perm:"admin"` + BoostDealBySignedProposalCid func(p0 context.Context, p1 cid.Cid) (*smtypes.ProviderDealState, error) `perm:"admin"` + BoostDummyDeal func(p0 context.Context, p1 smtypes.DealParams) (*ProviderDealRejectionInfo, error) `perm:"admin"` BoostIndexerAnnounceAllDeals func(p0 context.Context) error `perm:"admin"` @@ -312,6 +314,17 @@ func (s *BoostStub) BoostDeal(p0 context.Context, p1 uuid.UUID) (*smtypes.Provid return nil, ErrNotSupported } +func (s *BoostStruct) BoostDealBySignedProposalCid(p0 context.Context, p1 cid.Cid) (*smtypes.ProviderDealState, error) { + if s.Internal.BoostDealBySignedProposalCid == nil { + return nil, ErrNotSupported + } + return s.Internal.BoostDealBySignedProposalCid(p0, p1) +} + +func (s *BoostStub) BoostDealBySignedProposalCid(p0 context.Context, p1 cid.Cid) (*smtypes.ProviderDealState, error) { + return nil, ErrNotSupported +} + func (s *BoostStruct) BoostDummyDeal(p0 context.Context, p1 smtypes.DealParams) (*ProviderDealRejectionInfo, error) { if s.Internal.BoostDummyDeal == nil { return nil, ErrNotSupported diff --git a/build/openrpc/boost.json.gz b/build/openrpc/boost.json.gz index c11f503d3646161714183eb4e115eb541b063306..654f64db8220057b045e07c7cb38111956ac2737 100644 GIT binary patch literal 4759 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 F0007IG?xGX diff --git a/cmd/boostd/import_data.go b/cmd/boostd/import_data.go index 1a0f0e77c..8f163cc36 100644 --- a/cmd/boostd/import_data.go +++ b/cmd/boostd/import_data.go @@ -2,6 +2,8 @@ package main import ( "fmt" + "github.com/ipfs/go-cid" + "strings" bcli "github.com/filecoin-project/boost/cli" "github.com/google/uuid" @@ -9,34 +11,60 @@ import ( ) var importDataCmd = &cli.Command{ - Name: "import-data", - Usage: "Import data for offline deal made with Boost", - Flags: []cli.Flag{ - &cli.StringFlag{ - Name: "deal-uuid", - Usage: "uuid of the offline deal", - Required: true, - }, - &cli.StringFlag{ - Name: "filepath", - Usage: "path of the file containing the offline deal data", - Required: true, - }, - }, + Name: "import-data", + Usage: "Import data for offline deal made with Boost", + ArgsUsage: "/ ", Action: func(cctx *cli.Context) error { + if cctx.Args().Len() < 2 { + return fmt.Errorf("must specify proposal CID / deal UUID and file path") + } + + id := cctx.Args().Get(0) + filePath := cctx.Args().Get(1) + + // Parse the first parameter as a deal UUID or a proposal CID + var proposalCid *cid.Cid + dealUuid, err := uuid.Parse(id) + if err != nil { + propCid, err := cid.Decode(id) + if err != nil { + return fmt.Errorf("could not parse '%s' as deal uuid or proposal cid", id) + } + proposalCid = &propCid + } + napi, closer, err := bcli.GetBoostAPI(cctx) if err != nil { return err } defer closer() - filePath := cctx.String("filepath") - id := cctx.String("deal-uuid") + // If the user has supplied a signed proposal cid + if proposalCid != nil { + // Look up the deal in the boost database + deal, err := napi.BoostDealBySignedProposalCid(cctx.Context, *proposalCid) + if err != nil { + // If the error is anything other than a Not Found error, + // return the error + if !strings.Contains(err.Error(), "not found") { + return err + } - dealUuid, err := uuid.Parse(id) - if err != nil { - return fmt.Errorf("failed to parse deal uuid '%s'", id) + // The deal is not in the boost database, try the legacy + // markets datastore (v1.1.0 deal) + err := napi.MarketImportDealData(cctx.Context, *proposalCid, filePath) + if err != nil { + return err + } + fmt.Printf("Offline deal import for v1.1.0 deal %s scheduled for execution\n", proposalCid.String()) + return nil + } + + // Get the deal UUID from the deal + dealUuid = deal.DealUuid } + + // Deal proposal by deal uuid (v1.2.0 deal) rej, err := napi.BoostOfflineDealWithData(cctx.Context, dealUuid, filePath) if err != nil { return fmt.Errorf("failed to execute offline deal: %w", err) @@ -44,7 +72,7 @@ var importDataCmd = &cli.Command{ if rej != nil && rej.Reason != "" { return fmt.Errorf("offline deal %s rejected: %s", dealUuid, rej.Reason) } - fmt.Println("Offline deal accepted and scheduled for execution") + fmt.Printf("Offline deal import for v1.2.0 deal %s scheduled for execution\n", dealUuid) return nil }, } diff --git a/cmd/boostd/legacy_deals.go b/cmd/boostd/legacy_deals.go deleted file mode 100644 index 0217681d0..000000000 --- a/cmd/boostd/legacy_deals.go +++ /dev/null @@ -1,46 +0,0 @@ -package main - -import ( - "fmt" - - bcli "github.com/filecoin-project/boost/cli" - "github.com/ipfs/go-cid" - "github.com/urfave/cli/v2" -) - -var storageDealsCmd = &cli.Command{ - Name: "storage-deals", - Usage: "Manage legacy storage deals and related configuration (Markets V1)", - Category: "legacy", - Subcommands: []*cli.Command{ - dealsImportDataCmd, - }, -} - -var dealsImportDataCmd = &cli.Command{ - Name: "import-data", - Usage: "Manually import data for a deal (Markets V1)", - ArgsUsage: " ", - Action: func(cctx *cli.Context) error { - api, closer, err := bcli.GetBoostAPI(cctx) - if err != nil { - return err - } - defer closer() - - ctx := bcli.ReqContext(cctx) - - if cctx.Args().Len() < 2 { - return fmt.Errorf("must specify proposal CID and file path") - } - - propCid, err := cid.Decode(cctx.Args().Get(0)) - if err != nil { - return err - } - - fpath := cctx.Args().Get(1) - - return api.MarketImportDealData(ctx, propCid, fpath) - }, -} diff --git a/cmd/boostd/main.go b/cmd/boostd/main.go index 81d6fdeda..c414818ad 100644 --- a/cmd/boostd/main.go +++ b/cmd/boostd/main.go @@ -40,7 +40,6 @@ func main() { backupCmd, restoreCmd, dummydealCmd, - storageDealsCmd, dataTransfersCmd, retrievalDealsCmd, indexProvCmd, diff --git a/documentation/en/api-v1-methods.md b/documentation/en/api-v1-methods.md index 7dd786484..7042379f4 100644 --- a/documentation/en/api-v1-methods.md +++ b/documentation/en/api-v1-methods.md @@ -12,6 +12,7 @@ * [BoostDagstoreRecoverShard](#boostdagstorerecovershard) * [BoostDagstoreRegisterShard](#boostdagstoreregistershard) * [BoostDeal](#boostdeal) + * [BoostDealBySignedProposalCid](#boostdealbysignedproposalcid) * [BoostDummyDeal](#boostdummydeal) * [BoostIndexerAnnounceAllDeals](#boostindexerannouncealldeals) * [BoostOfflineDealWithData](#boostofflinedealwithdata) @@ -296,6 +297,71 @@ Response: } ``` +### BoostDealBySignedProposalCid + + +Perms: admin + +Inputs: +```json +[ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + } +] +``` + +Response: +```json +{ + "DealUuid": "07070707-0707-0707-0707-070707070707", + "CreatedAt": "0001-01-01T00:00:00Z", + "ClientDealProposal": { + "Proposal": { + "PieceCID": { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + "PieceSize": 1032, + "VerifiedDeal": true, + "Client": "f01234", + "Provider": "f01234", + "Label": "string value", + "StartEpoch": 10101, + "EndEpoch": 10101, + "StoragePricePerEpoch": "0", + "ProviderCollateral": "0", + "ClientCollateral": "0" + }, + "ClientSignature": { + "Type": 2, + "Data": "Ynl0ZSBhcnJheQ==" + } + }, + "IsOffline": true, + "ClientPeerID": "12D3KooWGzxzKZYveHXtpG6AsrUJBcWxHBFS2HsEoGTxrMLvKXtf", + "DealDataRoot": { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + "InboundFilePath": "string value", + "Transfer": { + "Type": "string value", + "ClientID": "string value", + "Params": "Ynl0ZSBhcnJheQ==", + "Size": 42 + }, + "ChainDealID": 5432, + "PublishCID": null, + "SectorID": 9, + "Offset": 1032, + "Length": 1032, + "Checkpoint": 1, + "CheckpointAt": "0001-01-01T00:00:00Z", + "Err": "string value", + "Retry": "auto", + "NBytesReceived": 9 +} +``` + ### BoostDummyDeal diff --git a/node/impl/boost.go b/node/impl/boost.go index 18d970adb..03f0a2344 100644 --- a/node/impl/boost.go +++ b/node/impl/boost.go @@ -118,6 +118,10 @@ func (sm *BoostAPI) BoostDeal(ctx context.Context, dealUuid uuid.UUID) (*types.P return sm.StorageProvider.Deal(ctx, dealUuid) } +func (sm *BoostAPI) BoostDealBySignedProposalCid(ctx context.Context, proposalCid cid.Cid) (*types.ProviderDealState, error) { + return sm.StorageProvider.DealBySignedProposalCid(ctx, proposalCid) +} + func (sm *BoostAPI) BoostIndexerAnnounceAllDeals(ctx context.Context) error { return sm.IndexProvider.IndexerAnnounceAllDeals(ctx) } diff --git a/storagemarket/provider.go b/storagemarket/provider.go index 2fc580763..481a24a6e 100644 --- a/storagemarket/provider.go +++ b/storagemarket/provider.go @@ -5,6 +5,7 @@ import ( "database/sql" "errors" "fmt" + "github.com/ipfs/go-cid" "io" "os" "sync" @@ -172,6 +173,14 @@ func (p *Provider) Deal(ctx context.Context, dealUuid uuid.UUID) (*types.Provide return deal, nil } +func (p *Provider) DealBySignedProposalCid(ctx context.Context, propCid cid.Cid) (*types.ProviderDealState, error) { + deal, err := p.dealsDB.BySignedProposalCID(ctx, propCid) + if errors.Is(err, sql.ErrNoRows) { + return nil, fmt.Errorf("getting deal %s: %w", propCid, ErrDealNotFound) + } + return deal, nil +} + func (p *Provider) NBytesReceived(dealUuid uuid.UUID) uint64 { return p.transfers.getBytes(dealUuid) } From d871ca42021a60bb9fe7bf4dbce809d7d90744ee Mon Sep 17 00:00:00 2001 From: dirkmc Date: Wed, 15 Jun 2022 13:03:29 +0200 Subject: [PATCH 2/3] Update cmd/boostd/import_data.go Co-authored-by: Anton Evangelatov --- cmd/boostd/import_data.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/boostd/import_data.go b/cmd/boostd/import_data.go index 8f163cc36..8ad74aad8 100644 --- a/cmd/boostd/import_data.go +++ b/cmd/boostd/import_data.go @@ -13,7 +13,7 @@ import ( var importDataCmd = &cli.Command{ Name: "import-data", Usage: "Import data for offline deal made with Boost", - ArgsUsage: "/ ", + ArgsUsage: " or ", Action: func(cctx *cli.Context) error { if cctx.Args().Len() < 2 { return fmt.Errorf("must specify proposal CID / deal UUID and file path") From 103ed6b2575314d8bc7e506eb104ff17d8708780 Mon Sep 17 00:00:00 2001 From: dirkmc Date: Wed, 15 Jun 2022 13:04:17 +0200 Subject: [PATCH 3/3] Update cmd/boostd/import_data.go Co-authored-by: Anton Evangelatov --- cmd/boostd/import_data.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/boostd/import_data.go b/cmd/boostd/import_data.go index 8ad74aad8..b2852b812 100644 --- a/cmd/boostd/import_data.go +++ b/cmd/boostd/import_data.go @@ -54,7 +54,7 @@ var importDataCmd = &cli.Command{ // markets datastore (v1.1.0 deal) err := napi.MarketImportDealData(cctx.Context, *proposalCid, filePath) if err != nil { - return err + return fmt.Errorf("couldnt import v1.1.0 deal, or find boost deal: %w", err) } fmt.Printf("Offline deal import for v1.1.0 deal %s scheduled for execution\n", proposalCid.String()) return nil