Commit Graph

243 Commits

Author SHA1 Message Date
Aarsh Shah
d7076778e2
integrate DAG store and CARv2 in deal-making (#6671)
This commit removes badger from the deal-making processes, and
moves to a new architecture with the dagstore as the cental
component on the miner-side, and CARv2s on the client-side.

Every deal that has been handed off to the sealing subsystem becomes
a shard in the dagstore. Shards are mounted via the LotusMount, which
teaches the dagstore how to load the related piece when serving
retrievals.

When the miner starts the Lotus for the first time with this patch,
we will perform a one-time migration of all active deals into the
dagstore. This is a lightweight process, and it consists simply
of registering the shards in the dagstore.

Shards are backed by the unsealed copy of the piece. This is currently
a CARv1. However, the dagstore keeps CARv2 indices for all pieces, so
when it's time to acquire a shard to serve a retrieval, the unsealed
CARv1 is joined with its index (safeguarded by the dagstore), to form
a read-only blockstore, thus taking the place of the monolithic
badger.

Data transfers have been adjusted to interface directly with CARv2 files.
On inbound transfers (client retrievals, miner storage deals), we stream
the received data into a CARv2 ReadWrite blockstore. On outbound transfers
(client storage deals, miner retrievals), we serve the data off a CARv2
ReadOnly blockstore.

Client-side imports are managed by the refactored *imports.Manager
component (when not using IPFS integration). Just like it before, we use
the go-filestore library to avoid duplicating the data from the original
file in the resulting UnixFS DAG (concretely the leaves). However, the
target of those imports are what we call "ref-CARv2s": CARv2 files placed
under the `$LOTUS_PATH/imports` directory, containing the intermediate
nodes in full, and the leaves as positional references to the original file
on disk.

Client-side retrievals are placed into CARv2 files in the location:
`$LOTUS_PATH/retrievals`.

A new set of `Dagstore*` JSON-RPC operations and `lotus-miner dagstore`
subcommands have been introduced on the miner-side to inspect and manage
the dagstore.

Despite moving to a CARv2-backed system, the IPFS integration has been
respected, and it continues to be possible to make storage deals with data
held in an IPFS node, and to perform retrievals directly into an IPFS node.

NOTE: because the "staging" and "client" Badger blockstores are no longer
used, existing imports on the client will be rendered useless. On startup,
Lotus will enumerate all imports and print WARN statements on the log for
each import that needs to be reimported. These log lines contain these
messages:

- import lacks carv2 path; import will not work; please reimport
- import has missing/broken carv2; please reimport

At the end, we will print a "sanity check completed" message indicating
the count of imports found, and how many were deemed broken.

Co-authored-by: Aarsh Shah <aarshkshah1992@gmail.com>
Co-authored-by: Dirk McCormick <dirkmdev@gmail.com>

Co-authored-by: Raúl Kripalani <raul@protocol.ai>
Co-authored-by: Dirk McCormick <dirkmdev@gmail.com>
2021-08-16 23:34:32 +01:00
Anton Evangelatov
fe31956713 fetch peer id from chain 2021-07-21 11:43:19 +02:00
hannahhoward
92ec239202 fix(node): ClientRetrieve stops on cancel
When a deal is cancelled, any in progress calls to ClientRetrieve or ClientRetrieveWithEvents should
return
2021-07-12 14:46:18 -07:00
Łukasz Magiera
3f3336340f Fix wallet error messages 2021-06-25 10:48:47 +02:00
Łukasz Magiera
a7746961fb Merge remote-tracking branch 'origin/master' into feat/list-retrievals 2021-06-04 20:49:01 +02:00
Łukasz Magiera
ffa47659a1 Merge remote-tracking branch 'origin/feat/nv13' into feat/nv13-1.11 2021-05-31 21:38:34 +02:00
Aayush Rajasekaran
fba5c65ffd Extend the default deal start epoch delay 2021-05-28 12:35:48 -04:00
hannahhoward
19b6dc8d1e feat(cli): add a list retrievals command
Currently, there is no way to inspect retrievals on a client. This adds said command, allow with
corresponding APIs
2021-05-27 11:48:25 -07:00
Aayush Rajasekaran
d9e86afa24 Tweak client calcDealExpiration to consider genesis miners 2021-05-26 21:46:37 -04:00
Peter Rabbitson
6f71eab8ce Adjust lp2p retry params 2021-05-11 04:26:04 +02:00
Peter Rabbitson
e648b72d8d Merge remote-tracking branch 'origin/master' into feat/stateless-offline-dealflow 2021-05-06 15:57:10 +02:00
Reskorey
58bee65bcb go fmt 2021-04-23 16:10:51 +08:00
Reskorey
7738886936
fix full node painc
fix: full node painc  when calling  RPC  Filecoin.ClientRetrieve without the order.Tatol pecified.
2021-04-23 15:43:41 +08:00
Peter Rabbitson
b79be2a2c2 Merge remote-tracking branch 'origin/master' into feat/stateless-offline-dealflow 2021-04-05 16:06:44 +02:00
Peter Rabbitson
7fddbb528d Introduce stateless offline dealflow, bypassing the FSM/deallists
This is aproposal for an additional flag --manual-stateless-deal and a
corresponding API endpoint ClientStatelessDeal. This allows firing off
an offline-style deal against a miner without keeping further track of
it locally.

Not keeping any local state introduces the limitation of requiring free
storage deals, as there is nothing to tie the payment channel setup to.

Rationale/need for this type of flow is the case of incredibly large
sets of data nd deals, where the client and providers have prearranged
payment ahead of time, and the client has a separate-from-lotus database
of deal inventory. This way the client can use their lotus node merely
as a network gateway, without running into any limitations currently
present in both lotus as a whole and go-fil-markets in particular.

Specific context for this work is filecoin-discover, where the requirement
is to onboard ~ 12,000,000 individual deals against a pool of miners
with whom the client has prearranged a relationship.
2021-04-05 13:11:10 +02:00
Łukasz Magiera
4538550999 Merge remote-tracking branch 'origin/master' into feat/local-retrieval 2021-04-02 12:36:28 +02:00
Anton Evangelatov
df003d44d2 include Stages and DealStages only on ClientDealInfo, not on ClientListDeals 2021-04-01 17:08:01 +03:00
Anton Evangelatov
967fbf52c6 resolve conflicts 2021-03-31 23:14:29 +03:00
Łukasz Magiera
dfe8a1c1e2 client: Set the client var in the correct scope 2021-03-31 19:38:02 +02:00
Łukasz Magiera
f2ab316fb1 Local retrieval support 2021-03-30 21:32:06 +02:00
Raúl Kripalani
fd91c095c4 rename command to cancel-retrieval; rename args to follow Lotus style. 2021-03-26 16:37:46 +00:00
Dirk McCormick
b13f6a3209 fix: cancel retrieval deal - disallow negative deal ID 2021-03-26 09:51:07 +01:00
Anton Evangelatov
a202f9d19e add cancel-retrieval-deal cmd 2021-03-24 18:18:49 +02:00
Anton Evangelatov
86772a09c7 use new channelmonitor.Config 2021-03-19 13:53:03 +02:00
Anton Evangelatov
9d6c77d93f remove interactive UX; add inspect-deal cmd 2021-03-18 14:53:03 +02:00
Łukasz Magiera
39ad3d3b27 Check format in client commP util 2021-02-16 20:48:31 +01:00
Dirk McCormick
a6e3856776 Revert "feat: deals - show data transfer %"
This reverts commit b6c9ddccff.
2021-02-16 12:32:45 +01:00
Dirk McCormick
b6c9ddccff feat: deals - show data transfer % 2021-02-10 09:56:23 +01:00
Steven Allen
03cd3760bb correctly pick the seal type based on the network version
Of course, we should really just run all of our tests post actors v2.
2021-01-21 15:21:20 -08:00
Aayush Rajasekaran
ab90a3b2bc Actors update: MinerInfo.SealProofType has been removed 2021-01-21 15:21:19 -08:00
Dirk McCormick
72cb130e17 feat: show data transfer ID in list-deals 2020-12-08 15:23:26 +01:00
hannahhoward
218f7c2c5d feat(markets): update markets, extract commp 2020-11-20 13:29:14 -08:00
Steven Allen
bead8ac38e use the miner's proof type when proposing storage deals 2020-11-16 19:04:17 +01:00
Steven Allen
219c695967 fix storage adapter miner 2020-11-16 19:03:30 +01:00
Łukasz Magiera
6bea9dd178 Making sealing logic work with multiple seal proof types 2020-11-16 19:03:30 +01:00
Łukasz Magiera
8c60069bb8
Merge pull request #4535 from filecoin-project/feat/clientdeal-cache-commd
client deal: Cache CommD when creating multiple deals
2020-10-27 03:58:25 +01:00
Łukasz Magiera
31a474a1ca Move CommPWriter to lib/ 2020-10-26 15:16:28 +01:00
Łukasz Magiera
a37c372d06
Merge pull request #4572 from filecoin-project/feat/data-transfer-utils
Flesh out data transfer features
2020-10-26 13:29:26 +01:00
Łukasz Magiera
de2cbfa8a9 client deal: Cache CommD when creating multiple deals 2020-10-23 22:20:17 +02:00
Łukasz Magiera
36816fb4f3 Fix list-asks, deals with non-genesis miners in lite-mode 2020-10-23 17:08:21 +02:00
hannahhoward
98297cef4d feat(data-transfer): fill in utils 2020-10-22 13:40:26 -07:00
Łukasz Magiera
7c16f2182c Merge branch 'animesh2049/status-api' of github.com:animesh2049/lotus into animesh2049-animesh2049/status-api 2020-10-22 14:14:50 +02:00
hannahhoward
4edebcec2b feat(markets): update markets 0.9.0 and add data transfer restart command 2020-10-13 03:41:08 -07:00
Steven Allen
283fd054e8 fix a race when retrieving pieces
We'd read the deal ID without synchronizing. This could (and probably did given
the history of flaky deal tests) cause us to miss events.

This patch also makes sure to always unsubscribe from events, even on error.
2020-10-09 15:35:44 -07:00
Animesh
ce247bcab3 Add api for getting status given a code 2020-10-07 10:27:51 +05:30
Steven Allen
b6500beaab Merge branch 'master' into asr/spec-v1 2020-10-05 10:29:09 -07:00
Łukasz Magiera
97087fe576
Merge pull request #4122 from filecoin-project/asr/client-wallet
Convert ID addresses to key addresses before checking wallet
2020-10-04 17:20:04 +02:00
Aayush Rajasekaran
8fe8da6f4c Add verified status to api.DealInfo 2020-10-03 03:39:59 -04:00
Steven Allen
8292d60196 Merge branch 'master' into asr/spec-v1 2020-10-02 18:03:03 -07:00
Łukasz Magiera
e848c13ff1 client: bump default deal start buffer 2020-10-02 19:39:34 +02:00
Aayush Rajasekaran
6f0453c581 Convert ID addresses to key addresses before checking wallet 2020-10-01 04:41:24 -04:00
Steven Allen
35e606d397 remove direct specs-actors miner access from expiration calculation 2020-09-30 13:17:56 -07:00
hannahhoward
be884e27be feat(markets): update markets 0.7.0 2020-09-30 10:26:50 -07:00
hannahhoward
3fc791b0e8 feat(markets): update markets v0.6.2 2020-09-23 12:17:16 -07:00
Steven Allen
1bf3b4989d rename imports to match actors code
`sed -i 's/\bv0\(\w\)\(\w*\)/\L\1\E\20/g' **/*.go`
2020-09-18 14:59:27 -07:00
Aayush Rajasekaran
b5ba7a0fad Miner migration 2020-09-17 02:21:16 -04:00
Aayush Rajasekaran
774e068436 Update to specs-actors v0.9.8 2020-09-10 17:41:55 -04:00
hannahhoward
2db4b57013 feat(markets): upgrade markets 0.6.0 2020-09-07 15:48:42 -04:00
Aayush Rajasekaran
39755a294a Update to specs v0.9.6 2020-09-07 15:48:41 -04:00
Ingar Shu
a4ded8c2b9
Add watch option to list-deals 2020-08-28 10:40:27 -07:00
hannahhoward
1cd49cec39 fix(client): insure cancelled context avoids lock 2020-08-26 10:59:07 -07:00
hannahhoward
10c1399474 fix(retrieval): resolve retrieval close event panic
Refactor ClientRetrieve command to remove the possibility of a send on close channel race condition
2020-08-26 10:48:23 -07:00
Łukasz Magiera
9bc48a8867
Merge pull request #3198 from filecoin-project/fix/retrieval-streaming-cleanup
Retrieval CLI fixes
2020-08-24 22:47:09 +02:00
Steven Allen
5733c71c50 Lint everything
We were ignoring quite a few error cases, and had one case where we weren't
actually updating state where we wanted to. Unfortunately, if the linter doesn't
pass, nobody has any reason to actually check lint failures in CI.

There are three remaining XXXs marked in the code for lint.
2020-08-20 20:46:36 -07:00
Whyrusleeping
af3fe206d6
Merge pull request #3122 from filecoin-project/feat/cmd-improvements
sorted deal listings
2020-08-20 13:29:01 -07:00
Ingar Shu
c02c69a8d6
Check deal id when emitting events
Make sure to unsubscribe from retrieval events
2020-08-20 09:16:18 -07:00
hannahhoward
0086f76a90 feat(lotus-miner): add data transfer list cmd
add equivalent command to list data transfers on miner side, extract common functionality for reuse
2020-08-20 01:35:48 -07:00
hannahhoward
66ac7c195c feat(cli): add updates to data transfer
Add an API to get data transfer updates and add modify the CLI to be an
ongoing monitoring plan
2020-08-18 17:36:29 -07:00
hannahhoward
f511cc188a feat(cli): data transfer command
add command to monitor data transfers
2020-08-18 16:26:21 -07:00
Mike Greenberg
8675ca561d fix(api): Filter malformed peer ID before RPC marshaling 2020-08-18 16:29:21 -04:00
Łukasz Magiera
4cd56b3b99 impl: wait in ClientRetrieve 2020-08-18 15:27:56 +02:00
Aayush Rajasekaran
add56c8b81 Create eventless version of ClientRetrieve 2020-08-18 05:49:56 -04:00
whyrusleeping
f05cff478f sorted deal listings 2020-08-17 14:48:49 -07:00
Ingar Shu
cb71386ed9
Don't send finishing event if there is no error 2020-08-17 14:39:08 -07:00
Ingar Shu
7fbbf23e5a
Initialize FundsSpent to zero in RetrievalEvent 2020-08-17 14:39:08 -07:00
Raúl Kripalani
efdc428d5d keep storage-fsm (renamed to storage-sealing) and sector-storage in extern. 2020-08-17 14:26:18 +01:00
Raúl Kripalani
3c17cd655e integrate extern/sector-storage into lotus proper. 2020-08-16 11:09:58 +01:00
whyrusleeping
eb2879ca22 allow client to specify provider collateral 2020-08-13 21:47:36 -04:00
Peter Rabbitson
fd49ef8de6 Stop requiring miner address / sector size for lotus client commP
At present, and at least for the medium term (even with the transition to NSE)
the structure of a piece (and thus commP) will remain identical for every size
of sector.

The offline deal flow would benefit greatly if the `lotus client commP`
interface is able to calculate commP without having access to a fully synced
sync, or without even being online.

This is particularly important for filecoin-discover, as we want to allow
miners to spot-check their purchased HDDs, way before they need to accept
the mainnet deal proposals.

See comment/links in node/impl/client/client.go for details on code flow
2020-08-12 22:03:00 +02:00
Ingar Shu
8f56814ffb
Change formatting, stringify errors before returning over JSONRPC 2020-08-12 10:54:15 -07:00
Ingar Shu
53e06f358a
client retrieval logging 2020-08-11 13:04:00 -07:00
hannahhoward
a89c290f62 feat(markets): update to 0.5.4 2020-08-05 15:35:59 -07:00
Aayush Rajasekaran
26804c0557 Set miner addresses when querying ask 2020-08-05 16:54:45 -04:00
Łukasz Magiera
90baf06011 gofmt 2020-08-01 09:40:25 +02:00
hannahhoward
3cac1080cc feat(retrievalstoremgr): add retrievalstoremgr
add manager for retrievals to handle different cases for IPFS/non-ipfs
2020-07-31 14:16:18 -07:00
hannahhoward
6b67c1cf39 revert(markets): remove multistore on client retrieval
Revert multistore functionality for retrieval client -- the need to do this is to support powergate.
we actually need an option for configuring how this command works -- so that it can use the
blockstore OR the multistore
2020-07-31 13:29:20 -07:00
Łukasz Magiera
b6c9169a87 client cli: Interactive deal command 2020-07-31 18:23:36 +02:00
whyrusleeping
005d60d6b4 better clientside calculation of default deal starts 2020-07-28 18:18:21 -07:00
hannahhoward
5a623cccb5 feat(markets): update markets mulitple deal stores 2020-07-27 23:13:28 -07:00
hannahhoward
dd885b7302 feat(multistore): extract multistore code to repo
Extract multistore + multiread blockstore to a seperate repo
2020-07-24 14:47:22 -07:00
hannahhoward
5b8d3068f7 feat(markets): update to markets 0.5.1
update to markets 0.5.1, pass on params v1 correctly for retrieval
2020-07-23 14:01:34 -07:00
Frank
c38b8b1265 close file 2020-07-23 18:21:13 +08:00
whyrusleeping
fda0651bb5 a few improvements and fixes for the retrieval CLI 2020-07-21 16:43:57 -07:00
Jakub Sztandera
cc1d23a94c
Use single multi ds
Signed-off-by: Jakub Sztandera <kubuxu@protocol.ai>
2020-07-17 22:14:37 +02:00
hannahhoward
61f120222f feat(markets): update markets with new retrieval 2020-07-15 14:04:31 -07:00
Ingar Shu
4aa30c1a51
Plumb piece cid in miner-specific query functions 2020-07-09 13:14:24 -07:00
Ingar Shu
171ce39e8c
Add piece cid to retrieval queries 2020-07-09 13:03:17 -07:00
Łukasz Magiera
cc09c5b6d9 client: Don't use filestore for local improts 2020-07-08 23:13:14 +02:00
Łukasz Magiera
5a117d8edf gofmt 2020-07-08 23:05:54 +02:00
Łukasz Magiera
802f16c542 client: Reenable nocopy on import 2020-07-08 23:05:43 +02:00