From 1916561e60e3a2a2e8b306cb161dae9ef75f856f Mon Sep 17 00:00:00 2001 From: Jennifer Wang Date: Thu, 10 Feb 2022 23:38:41 -0500 Subject: [PATCH 01/48] bump the version to v1.15.0-rc1 --- build/openrpc/full.json.gz | Bin 26596 -> 26596 bytes build/openrpc/miner.json.gz | Bin 12903 -> 12903 bytes build/openrpc/worker.json.gz | Bin 3960 -> 3960 bytes build/version.go | 2 +- documentation/en/cli-lotus-miner.md | 2 +- documentation/en/cli-lotus-worker.md | 2 +- documentation/en/cli-lotus.md | 2 +- 7 files changed, 4 insertions(+), 4 deletions(-) diff --git a/build/openrpc/full.json.gz b/build/openrpc/full.json.gz index 368f32aa9c4f1988b87731e2736c950e1e0a573a..ed1abf06e2aadc4a1bdc3a1463a3140e3f88c43d 100644 GIT binary patch literal 26596 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 A82|tP literal 26596 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%0D! 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 Date: Thu, 10 Feb 2022 23:42:38 -0500 Subject: [PATCH 02/48] add changelog --- CHANGELOG.md | 174 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 174 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a420421de..fd29ea152 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,178 @@ # Lotus changelog +# 1.15.0-rc1 / 2022-02-10 + +This is the first release candidates of v1.15.0, detailed changelog will be updated later. + +- github.com/filecoin-project/lotus: + - bump the version to v1.15.0-rc1 + - chore: build: v1.14.0 -> master ([filecoin-project/lotus#8053](https://github.com/filecoin-project/lotus/pull/8053)) + - FinalizeReplicaUpdate ([filecoin-project/lotus#8018](https://github.com/filecoin-project/lotus/pull/8018)) + - splitstore sortless compaction ([filecoin-project/lotus#8008](https://github.com/filecoin-project/lotus/pull/8008)) + - perf: chain: Make drand logs in daemon less noisy (#7955) ([filecoin-project/lotus#7955](https://github.com/filecoin-project/lotus/pull/7955)) + - chore: shed: storage stats 2.0 ([filecoin-project/lotus#7941](https://github.com/filecoin-project/lotus/pull/7941)) + - StartEpochSealingBuffer triggers packing on timer ([filecoin-project/lotus#7905](https://github.com/filecoin-project/lotus/pull/7905)) + - deps: update go-paramfetch to v0.0.4 ([filecoin-project/lotus#8050](https://github.com/filecoin-project/lotus/pull/8050)) + - fix: sealing: Stop recovery attempts after fault ([filecoin-project/lotus#8014](https://github.com/filecoin-project/lotus/pull/8014)) + - chore: update build and deps ([filecoin-project/lotus#8047](https://github.com/filecoin-project/lotus/pull/8047)) + - update libp2p to v0.18.0-rc4 ([filecoin-project/lotus#8044](https://github.com/filecoin-project/lotus/pull/8044)) + - update go-libp2p to v0.18.0-rc3 ([filecoin-project/lotus#8022](https://github.com/filecoin-project/lotus/pull/8022)) + - misc: api: Annotate lotus tests according to listed behaviors ([filecoin-project/lotus#7835](https://github.com/filecoin-project/lotus/pull/7835)) + - some basic splitstore refactors ([filecoin-project/lotus#7999](https://github.com/filecoin-project/lotus/pull/7999)) + - feat: mpool: Cache state nonces ([filecoin-project/lotus#8005](https://github.com/filecoin-project/lotus/pull/8005)) + - chore: sealer: quieten a log ([filecoin-project/lotus#7998](https://github.com/filecoin-project/lotus/pull/7998)) + - chore: build: make the OhSnap epoch configurable by an envvar for devnets ([filecoin-project/lotus#7995](https://github.com/filecoin-project/lotus/pull/7995)) + - chore: chain: fix log ([filecoin-project/lotus#7993](https://github.com/filecoin-project/lotus/pull/7993)) + - tvx: supply network version when extracting messages. ([filecoin-project/lotus#7996](https://github.com/filecoin-project/lotus/pull/7996)) + - fix: sealer: manager should lock Unsealed for ReplicaUpdate ([filecoin-project/lotus#7986](https://github.com/filecoin-project/lotus/pull/7986)) + - chore: remove inaccurate comment in sealtasks ([filecoin-project/lotus#7977](https://github.com/filecoin-project/lotus/pull/7977)) + - update go-libp2p to v0.18.0-rc2 ([filecoin-project/lotus#7984](https://github.com/filecoin-project/lotus/pull/7984)) + - Fix: sealer: ReplicaUpdate should fetch the correct files ([filecoin-project/lotus#7983](https://github.com/filecoin-project/lotus/pull/7983)) + - libp2p v0.18.0-rc1 and initial resource manager integration ([filecoin-project/lotus#7969](https://github.com/filecoin-project/lotus/pull/7969)) + - chore: merge release/v1.14.0 PRs into master ([filecoin-project/lotus#7979](https://github.com/filecoin-project/lotus/pull/7979)) + - chore: update PR template ([filecoin-project/lotus#7918](https://github.com/filecoin-project/lotus/pull/7918)) + - Fix: chain: create a new VM for each epoch ([filecoin-project/lotus#7966](https://github.com/filecoin-project/lotus/pull/7966)) + - feat(deps): update markets stack ([filecoin-project/lotus#7959](https://github.com/filecoin-project/lotus/pull/7959)) + - Use go-libp2p-connmgr v0.3.1 ([filecoin-project/lotus#7957](https://github.com/filecoin-project/lotus/pull/7957)) + - feat: #7747 sealing: Adding conf variable for capping number of concurrent unsealing jobs (#7884) ([filecoin-project/lotus#7884](https://github.com/filecoin-project/lotus/pull/7884)) + - build: release: bump master version to v1.15.0-dev ([filecoin-project/lotus#7922](https://github.com/filecoin-project/lotus/pull/7922)) + - feat: build: butterfly SNAPNET ([filecoin-project/lotus#7932](https://github.com/filecoin-project/lotus/pull/7932)) + - correctness fixes for the autobatch blockstore ([filecoin-project/lotus#7940](https://github.com/filecoin-project/lotus/pull/7940)) + - fix: #7869 sealing: Add more deal expiration checks during PRU pipeline ([filecoin-project/lotus#7871](https://github.com/filecoin-project/lotus/pull/7871)) + - fix: blockstore: Add missing locks to autobatch::Get() ([filecoin-project/lotus#7939](https://github.com/filecoin-project/lotus/pull/7939)) + - feat: state: Fast migration for v15 ([filecoin-project/lotus#7933](https://github.com/filecoin-project/lotus/pull/7933)) + - enhancement: #7891 sectors: disable existing existing cc upgrade path 2 days before the upgrade epoch ([filecoin-project/lotus#7900](https://github.com/filecoin-project/lotus/pull/7900)) + - chore: deps: Integrate proof v11.0.0 ([filecoin-project/lotus#7923](https://github.com/filecoin-project/lotus/pull/7923)) + - Snap Deals Lotus Integration: FSM Posting and integration test ([filecoin-project/lotus#7810](https://github.com/filecoin-project/lotus/pull/7810)) + - chore: deps: Update go-paramfetch ([filecoin-project/lotus#7917](https://github.com/filecoin-project/lotus/pull/7917)) + - feat: #7880 gas: add gas charge for VerifyReplicaUpdate ([filecoin-project/lotus#7897](https://github.com/filecoin-project/lotus/pull/7897)) + - misc: build: v1.13.2 back to master ([filecoin-project/lotus#7910](https://github.com/filecoin-project/lotus/pull/7910)) + - FIX: #7904 CI: generated vectors from v7 for bleeding edge ([filecoin-project/lotus#7903](https://github.com/filecoin-project/lotus/pull/7903)) + - misc: docs: remove issue number from the pr title ([filecoin-project/lotus#7902](https://github.com/filecoin-project/lotus/pull/7902)) + - Fix: state: circsuypply calc around null blocks ([filecoin-project/lotus#7890](https://github.com/filecoin-project/lotus/pull/7890)) + - test vector runner fixes for v6 vectors ([filecoin-project/lotus#7881](https://github.com/filecoin-project/lotus/pull/7881)) + - Shed: Add a util to send a batch of messages ([filecoin-project/lotus#7667](https://github.com/filecoin-project/lotus/pull/7667)) + - Snapcraft grade no develgrade ([filecoin-project/lotus#7802](https://github.com/filecoin-project/lotus/pull/7802)) + - fix: doc generation struct slice example value ([filecoin-project/lotus#7851](https://github.com/filecoin-project/lotus/pull/7851)) + - fix: returned error not be accept correctly ([filecoin-project/lotus#7852](https://github.com/filecoin-project/lotus/pull/7852)) + - Add api for transfer diagnostics ([filecoin-project/lotus#7759](https://github.com/filecoin-project/lotus/pull/7759)) + - Refactor: VM: Remove the NetworkVersionGetter ([filecoin-project/lotus#7818](https://github.com/filecoin-project/lotus/pull/7818)) + - fix: #7577 markets: When retrying Add Piece, first seek to start of reader ([filecoin-project/lotus#7812](https://github.com/filecoin-project/lotus/pull/7812)) + - feat: #6017 market: retrieval ask CLI command ([filecoin-project/lotus#7814](https://github.com/filecoin-project/lotus/pull/7814)) + - misc: n/a sealing: Fix grammatical error in a log warning message ([filecoin-project/lotus#7831](https://github.com/filecoin-project/lotus/pull/7831)) + - sectors update-state checks if sector exists before changing its state ([filecoin-project/lotus#7762](https://github.com/filecoin-project/lotus/pull/7762)) + - refactor: state: Move randomness versioning out of the VM ([filecoin-project/lotus#7816](https://github.com/filecoin-project/lotus/pull/7816)) + - feat(graphsync): allow setting of per-peer incoming requests for miners ([filecoin-project/lotus#7578](https://github.com/filecoin-project/lotus/pull/7578)) + - updating to new datastore/blockstore code with contexts ([filecoin-project/lotus#7646](https://github.com/filecoin-project/lotus/pull/7646)) + - Shed: Add a util to list terminated deals ([filecoin-project/lotus#7774](https://github.com/filecoin-project/lotus/pull/7774)) + - VM: Circ supply should be constant per epoch ([filecoin-project/lotus#7811](https://github.com/filecoin-project/lotus/pull/7811)) + - chore: create pull_request_template.md ([filecoin-project/lotus#7726](https://github.com/filecoin-project/lotus/pull/7726)) + - Mempool msg selection should respect block message limits ([filecoin-project/lotus#7321](https://github.com/filecoin-project/lotus/pull/7321)) + - Merge v15 work into master ([filecoin-project/lotus#7784](https://github.com/filecoin-project/lotus/pull/7784)) + - Expose EnableGasTracing as an env_var ([filecoin-project/lotus#7750](https://github.com/filecoin-project/lotus/pull/7750)) + - Minor improvement for OpenTelemetry ([filecoin-project/lotus#7760](https://github.com/filecoin-project/lotus/pull/7760)) + - Sort lotus-miner retrieval-deals by dealId ([filecoin-project/lotus#7749](https://github.com/filecoin-project/lotus/pull/7749)) + - Make retrieval even faster ([filecoin-project/lotus#7746](https://github.com/filecoin-project/lotus/pull/7746)) + - dep/fix 7701 Dependency: update to ipld-legacy to v0.1.1 ([filecoin-project/lotus#7751](https://github.com/filecoin-project/lotus/pull/7751)) + - Command to list active sector locks ([filecoin-project/lotus#7735](https://github.com/filecoin-project/lotus/pull/7735)) + - dagstore pieceReader: Always read full in ReadAt ([filecoin-project/lotus#7737](https://github.com/filecoin-project/lotus/pull/7737)) + - SplitStore: supress compaction near upgrades ([filecoin-project/lotus#7734](https://github.com/filecoin-project/lotus/pull/7734)) + - Disable appimage ([filecoin-project/lotus#7707](https://github.com/filecoin-project/lotus/pull/7707)) + - Initial switch to OpenTelemetry ([filecoin-project/lotus#7725](https://github.com/filecoin-project/lotus/pull/7725)) + - Bump the master version to v1.13.3-dev ([filecoin-project/lotus#7717](https://github.com/filecoin-project/lotus/pull/7717)) +- github.com/filecoin-project/dagstore (v0.4.3 -> v0.4.4): + failed to fetch repo +- github.com/filecoin-project/go-amt-ipld/v4 (null -> v4.0.0): + - v4 (#60) ([filecoin-project/go-amt-ipld#60](https://github.com/filecoin-project/go-amt-ipld/pull/60)) + - Merge pull request from GHSA-3wpc-wmc7-8p5g + - add .github/workflows/tagpush.yml + - add .github/workflows/release-check.yml + - add .github/workflows/releaser.yml + - update .github/workflows/go-check.yml + - update .github/workflows/go-test.yml + - add version.json file + - fix: fix bitWidth error message (#58) ([filecoin-project/go-amt-ipld#58](https://github.com/filecoin-project/go-amt-ipld/pull/58)) + - update .github/workflows/go-check.yml + - update .github/workflows/go-test.yml + - update .github/workflows/automerge.yml +- github.com/filecoin-project/go-commp-utils (v0.1.2 -> v0.1.3): + - chore(deps): clean up dependencies (#7) ([filecoin-project/go-commp-utils#7](https://github.com/filecoin-project/go-commp-utils/pull/7)) +- github.com/filecoin-project/go-ds-versioning (v0.1.0 -> v0.1.1): + - update to context datastores (#3) ([filecoin-project/go-ds-versioning#3](https://github.com/filecoin-project/go-ds-versioning/pull/3)) + - ci(circle): fix versions (#4) ([filecoin-project/go-ds-versioning#4](https://github.com/filecoin-project/go-ds-versioning/pull/4)) +- github.com/filecoin-project/go-fil-markets (v1.13.4 -> v1.19.0): + - release: v1.19.0 + - Update to go-data-transfer v1.14.0 / go-libp2p v0.18.0-rc1 (#669) ([filecoin-project/go-fil-markets#669](https://github.com/filecoin-project/go-fil-markets/pull/669)) + - release: v1.18.0 (#671) ([filecoin-project/go-fil-markets#671](https://github.com/filecoin-project/go-fil-markets/pull/671)) + - revert index provider PR #629 and associated PRs (#670) ([filecoin-project/go-fil-markets#670](https://github.com/filecoin-project/go-fil-markets/pull/670)) + - log advertisement cid for announcement and update deps (#667) ([filecoin-project/go-fil-markets#667](https://github.com/filecoin-project/go-fil-markets/pull/667)) + - release: v1.15.0 ([filecoin-project/go-fil-markets#661](https://github.com/filecoin-project/go-fil-markets/pull/661)) + - retrieve by any CID (not just root CID) and reference provider integration (#629) ([filecoin-project/go-fil-markets#629](https://github.com/filecoin-project/go-fil-markets/pull/629)) + - release: v1.14.1 ([filecoin-project/go-fil-markets#660](https://github.com/filecoin-project/go-fil-markets/pull/660)) + - refactor: isolate commp in its own package to avoid exposing pulling filecoin-ffi (#659) ([filecoin-project/go-fil-markets#659](https://github.com/filecoin-project/go-fil-markets/pull/659)) + - release: v1.14.0 ([filecoin-project/go-fil-markets#658](https://github.com/filecoin-project/go-fil-markets/pull/658)) + - add SeekStart method to inflator reader (#656) ([filecoin-project/go-fil-markets#656](https://github.com/filecoin-project/go-fil-markets/pull/656)) + - Merge tag 'v1.13.6' + - Timeout provider after waiting a period of time for transfer to restart (#655) ([filecoin-project/go-fil-markets#655](https://github.com/filecoin-project/go-fil-markets/pull/655)) + - Update to context datastores (#653) ([filecoin-project/go-fil-markets#653](https://github.com/filecoin-project/go-fil-markets/pull/653)) + - Fix and de-dupe link to spec (#652) ([filecoin-project/go-fil-markets#652](https://github.com/filecoin-project/go-fil-markets/pull/652)) + - release: v1.13.4 (#651) ([filecoin-project/go-fil-markets#651](https://github.com/filecoin-project/go-fil-markets/pull/651)) +- github.com/filecoin-project/go-paramfetch (v0.0.2 -> v0.0.4): + - retry fetching once before erroring ([filecoin-project/go-paramfetch#22](https://github.com/filecoin-project/go-paramfetch/pull/22)) + - Always verify SnapDeals params ([filecoin-project/go-paramfetch#20](https://github.com/filecoin-project/go-paramfetch/pull/20)) +- github.com/filecoin-project/go-state-types (v0.1.1 -> v0.1.3): + - CBOR encode Addr Pairs for keys (#35) ([filecoin-project/go-state-types#35](https://github.com/filecoin-project/go-state-types/pull/35)) + - Add AddrPairKey (#34) ([filecoin-project/go-state-types#34](https://github.com/filecoin-project/go-state-types/pull/34)) +- github.com/filecoin-project/go-statestore (v0.1.1 -> v0.2.0): + - update to context datastores ([filecoin-project/go-statestore#10](https://github.com/filecoin-project/go-statestore/pull/10)) +- github.com/filecoin-project/go-storedcounter (v0.0.0-20200421200003-1c99c62e8a5b -> v0.1.0): + - Update go-datastore ([filecoin-project/go-storedcounter#1](https://github.com/filecoin-project/go-storedcounter/pull/1)) +- github.com/filecoin-project/specs-actors/v2 (v2.3.5 -> v2.3.6): + - Update to context datastores (#1541) ([filecoin-project/specs-actors#1541](https://github.com/filecoin-project/specs-actors/pull/1541)) +- github.com/filecoin-project/specs-storage (v0.1.1-0.20201105051918-5188d9774506 -> v0.2.0): + - FinalizeReplicaUpdate (#22) ([filecoin-project/specs-storage#22](https://github.com/filecoin-project/specs-storage/pull/22)) + - Add release of sectorkey and replica update ([filecoin-project/specs-storage#20](https://github.com/filecoin-project/specs-storage/pull/20)) + - Feat/update post gen (#19) ([filecoin-project/specs-storage#19](https://github.com/filecoin-project/specs-storage/pull/19)) + - Add sector key to ReplicaUpdate iface method (#18) ([filecoin-project/specs-storage#18](https://github.com/filecoin-project/specs-storage/pull/18)) + - Update for snap deals (#17) ([filecoin-project/specs-storage#17](https://github.com/filecoin-project/specs-storage/pull/17)) + - Merge remote-tracking branch 'origin/feat/sector-ref' + +Contributors + +| Contributor | Commits | Lines ± | Files Changed | +|-------------|---------|---------|---------------| +| Aayush Rajasekaran | 116 | +12792/-3989 | 579 | +| zenground0 | 38 | +8894/-1521 | 343 | +| vyzo | 121 | +4537/-1470 | 258 | +| zl | 1 | +3725/-309 | 8 | +| dirkmc | 7 | +1392/-1110 | 61 | +| Jennifer Wang | 55 | +890/-806 | 121 | +| Łukasz Magiera | 35 | +1143/-339 | 104 | +| whyrusleeping | 2 | +483/-585 | 28 | +| Darko Brdareski | 14 | +725/-276 | 154 | +| Rod Vagg | 3 | +45/-949 | 12 | +| hannahhoward | 10 | +481/-133 | 35 | +| Hannah Howard | 3 | +371/-234 | 22 | +| c r | 4 | +425/-75 | 18 | +| TheMenko | 8 | +237/-179 | 17 | +| Aayush | 15 | +197/-106 | 57 | +| ZenGround0 | 3 | +263/-25 | 11 | +| Dirk McCormick | 12 | +188/-40 | 27 | +| Peter Rabbitson | 3 | +128/-62 | 3 | +| Steven Allen | 2 | +110/-74 | 2 | +| Raúl Kripalani | 6 | +128/-49 | 9 | +| Whyrusleeping | 1 | +76/-70 | 8 | +| web3-bot | 10 | +99/-17 | 10 | +| Jiaying Wang | 15 | +58/-23 | 15 | +| Aarsh Shah | 1 | +23/-19 | 5 | +| Travis Person | 2 | +2/-20 | 4 | +| Jakub Sztandera | 3 | +13/-5 | 5 | +| gstuart | 3 | +12/-1 | 3 | +| Cory Schwartz | 4 | +5/-6 | 4 | +| pefish | 1 | +4/-3 | 1 | +| Colin Kennedy | 1 | +4/-2 | 1 | +| Rob Quist | 1 | +2/-2 | 1 | +| shotcollin | 1 | +1/-1 | 1 | + # v1.13.2 / 2022-01-09 From 75b8e4c981cf8baac73d654110b33fdedfd66a67 Mon Sep 17 00:00:00 2001 From: Aayush Date: Mon, 14 Feb 2022 13:28:49 -0500 Subject: [PATCH 03/48] fix: sealer: allow enable/disabling ReplicaUpdate tasks --- cmd/lotus-miner/init.go | 15 +++++++++------ cmd/lotus-seal-worker/main.go | 8 ++++++++ cmd/lotus-seal-worker/tasks.go | 13 ++++++++----- documentation/en/cli-lotus-worker.md | 5 +++-- documentation/en/default-lotus-miner-config.toml | 3 +++ extern/sector-storage/manager.go | 4 ++++ node/config/def.go | 1 + 7 files changed, 36 insertions(+), 13 deletions(-) diff --git a/cmd/lotus-miner/init.go b/cmd/lotus-miner/init.go index ae742c663..59ea75b10 100644 --- a/cmd/lotus-miner/init.go +++ b/cmd/lotus-miner/init.go @@ -467,12 +467,15 @@ func storageMinerInit(ctx context.Context, cctx *cli.Context, api v1api.FullNode stor := stores.NewRemote(lstor, si, http.Header(sa), 10, &stores.DefaultPartialFileHandler{}) smgr, err := sectorstorage.New(ctx, lstor, stor, lr, si, sectorstorage.SealerConfig{ - ParallelFetchLimit: 10, - AllowAddPiece: true, - AllowPreCommit1: true, - AllowPreCommit2: true, - AllowCommit: true, - AllowUnseal: true, + ParallelFetchLimit: 10, + AllowAddPiece: true, + AllowPreCommit1: true, + AllowPreCommit2: true, + AllowCommit: true, + AllowUnseal: true, + AllowReplicaUpdate: true, + AllowProveReplicaUpdate2: true, + AllowRegenSectorKey: true, }, wsts, smsts) if err != nil { return err diff --git a/cmd/lotus-seal-worker/main.go b/cmd/lotus-seal-worker/main.go index 84ff1ccdd..2116dd228 100644 --- a/cmd/lotus-seal-worker/main.go +++ b/cmd/lotus-seal-worker/main.go @@ -173,6 +173,11 @@ var runCmd = &cli.Command{ Usage: "enable prove replica update 2", Value: true, }, + &cli.BoolFlag{ + Name: "regen-sector-key", + Usage: "enable regen sector key", + Value: true, + }, &cli.IntFlag{ Name: "parallel-fetch-limit", Usage: "maximum fetch operations to run in parallel", @@ -284,6 +289,9 @@ var runCmd = &cli.Command{ if cctx.Bool("prove-replica-update2") { taskTypes = append(taskTypes, sealtasks.TTProveReplicaUpdate2) } + if cctx.Bool("regen-sector-key") { + taskTypes = append(taskTypes, sealtasks.TTRegenSectorKey) + } if len(taskTypes) == 0 { return xerrors.Errorf("no task types specified") diff --git a/cmd/lotus-seal-worker/tasks.go b/cmd/lotus-seal-worker/tasks.go index 02e5d6cfd..52133d09d 100644 --- a/cmd/lotus-seal-worker/tasks.go +++ b/cmd/lotus-seal-worker/tasks.go @@ -22,11 +22,14 @@ var tasksCmd = &cli.Command{ } var allowSetting = map[sealtasks.TaskType]struct{}{ - sealtasks.TTAddPiece: {}, - sealtasks.TTPreCommit1: {}, - sealtasks.TTPreCommit2: {}, - sealtasks.TTCommit2: {}, - sealtasks.TTUnseal: {}, + sealtasks.TTAddPiece: {}, + sealtasks.TTPreCommit1: {}, + sealtasks.TTPreCommit2: {}, + sealtasks.TTCommit2: {}, + sealtasks.TTUnseal: {}, + sealtasks.TTReplicaUpdate: {}, + sealtasks.TTProveReplicaUpdate2: {}, + sealtasks.TTRegenSectorKey: {}, } var settableStr = func() string { diff --git a/documentation/en/cli-lotus-worker.md b/documentation/en/cli-lotus-worker.md index 89def0b53..04f55e99c 100644 --- a/documentation/en/cli-lotus-worker.md +++ b/documentation/en/cli-lotus-worker.md @@ -46,6 +46,7 @@ OPTIONS: --commit enable commit (32G sectors: all cores or GPUs, 128GiB Memory + 64GiB swap) (default: true) --replica-update enable replica update (default: true) --prove-replica-update2 enable prove replica update 2 (default: true) + --regen-sector-key enable regen sector key (default: true) --parallel-fetch-limit value maximum fetch operations to run in parallel (default: 5) --timeout value used when 'listen' is unspecified. must be a valid duration recognized by golang's time.ParseDuration function (default: "30m") --help, -h show help (default: false) @@ -170,7 +171,7 @@ NAME: lotus-worker tasks enable - Enable a task type USAGE: - lotus-worker tasks enable [command options] [UNS|C2|PC2|PC1|AP] + lotus-worker tasks enable [command options] [UNS|C2|PC2|PC1|PR2|RU|AP|GSK] OPTIONS: --help, -h show help (default: false) @@ -183,7 +184,7 @@ NAME: lotus-worker tasks disable - Disable a task type USAGE: - lotus-worker tasks disable [command options] [UNS|C2|PC2|PC1|AP] + lotus-worker tasks disable [command options] [UNS|C2|PC2|PC1|PR2|RU|AP|GSK] OPTIONS: --help, -h show help (default: false) diff --git a/documentation/en/default-lotus-miner-config.toml b/documentation/en/default-lotus-miner-config.toml index d8c774c75..818f0b73c 100644 --- a/documentation/en/default-lotus-miner-config.toml +++ b/documentation/en/default-lotus-miner-config.toml @@ -438,6 +438,9 @@ # env var: LOTUS_STORAGE_ALLOWPROVEREPLICAUPDATE2 #AllowProveReplicaUpdate2 = true + # env var: LOTUS_STORAGE_ALLOWREGENSECTORKEY + #AllowRegenSectorKey = true + # env var: LOTUS_STORAGE_RESOURCEFILTERING #ResourceFiltering = "hardware" diff --git a/extern/sector-storage/manager.go b/extern/sector-storage/manager.go index fcbfa2e69..897ba4f06 100644 --- a/extern/sector-storage/manager.go +++ b/extern/sector-storage/manager.go @@ -105,6 +105,7 @@ type SealerConfig struct { AllowUnseal bool AllowReplicaUpdate bool AllowProveReplicaUpdate2 bool + AllowRegenSectorKey bool // ResourceFiltering instructs the system which resource filtering strategy // to use when evaluating tasks against this worker. An empty value defaults @@ -169,6 +170,9 @@ func New(ctx context.Context, lstor *stores.Local, stor *stores.Remote, ls store if sc.AllowProveReplicaUpdate2 { localTasks = append(localTasks, sealtasks.TTProveReplicaUpdate2) } + if sc.AllowRegenSectorKey { + localTasks = append(localTasks, sealtasks.TTRegenSectorKey) + } wcfg := WorkerConfig{ IgnoreResourceFiltering: sc.ResourceFiltering == ResourceFilteringDisabled, diff --git a/node/config/def.go b/node/config/def.go index 157350866..aceeaadf5 100644 --- a/node/config/def.go +++ b/node/config/def.go @@ -139,6 +139,7 @@ func DefaultStorageMiner() *StorageMiner { AllowUnseal: true, AllowReplicaUpdate: true, AllowProveReplicaUpdate2: true, + AllowRegenSectorKey: true, // Default to 10 - tcp should still be able to figure this out, and // it's the ratio between 10gbit / 1gbit From 71f0f4c33545b4ab65d34d44b86f862725e4c60e Mon Sep 17 00:00:00 2001 From: Aayush Date: Wed, 16 Feb 2022 13:04:48 -0500 Subject: [PATCH 04/48] feat: tweak v15 migration params --- chain/consensus/filcns/upgrades.go | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/chain/consensus/filcns/upgrades.go b/chain/consensus/filcns/upgrades.go index 2fa020d3d..116684b9f 100644 --- a/chain/consensus/filcns/upgrades.go +++ b/chain/consensus/filcns/upgrades.go @@ -165,13 +165,8 @@ func DefaultUpgradeSchedule() stmgr.UpgradeSchedule { Migration: UpgradeActorsV7, PreMigrations: []stmgr.PreMigration{{ PreMigration: PreUpgradeActorsV7, - StartWithin: 120, + StartWithin: 180, DontStartWithin: 60, - StopWithin: 35, - }, { - PreMigration: PreUpgradeActorsV7, - StartWithin: 30, - DontStartWithin: 15, StopWithin: 5, }}, Expensive: true, @@ -1264,7 +1259,7 @@ func upgradeActorsV7Common( root cid.Cid, epoch abi.ChainEpoch, ts *types.TipSet, config nv15.Config, ) (cid.Cid, error) { - writeStore := blockstore.NewAutobatch(ctx, sm.ChainStore().StateBlockstore(), units.GiB) + writeStore := blockstore.NewAutobatch(ctx, sm.ChainStore().StateBlockstore(), units.GiB/4) // TODO: pretty sure we'd achieve nothing by doing this, confirm in review //buf := blockstore.NewTieredBstore(sm.ChainStore().StateBlockstore(), writeStore) store := store.ActorStore(ctx, writeStore) From ae7e5f4b2c65359247588d46454d9831f0684352 Mon Sep 17 00:00:00 2001 From: Jennifer Wang Date: Wed, 16 Feb 2022 19:31:45 -0500 Subject: [PATCH 05/48] typo in variable name --- cmd/lotus-seal-worker/main.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/lotus-seal-worker/main.go b/cmd/lotus-seal-worker/main.go index 2116dd228..9e6843dbf 100644 --- a/cmd/lotus-seal-worker/main.go +++ b/cmd/lotus-seal-worker/main.go @@ -283,7 +283,7 @@ var runCmd = &cli.Command{ if cctx.Bool("commit") { taskTypes = append(taskTypes, sealtasks.TTCommit2) } - if cctx.Bool("replicaupdate") { + if cctx.Bool("replica-update") { taskTypes = append(taskTypes, sealtasks.TTReplicaUpdate) } if cctx.Bool("prove-replica-update2") { From 3399f721132df8a2c52289ae0b3ef4ce0d895706 Mon Sep 17 00:00:00 2001 From: Aayush Date: Wed, 16 Feb 2022 19:24:28 -0500 Subject: [PATCH 06/48] sealer: fix error message --- extern/storage-sealing/checks.go | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/extern/storage-sealing/checks.go b/extern/storage-sealing/checks.go index 56b0677c4..dc045ded2 100644 --- a/extern/storage-sealing/checks.go +++ b/extern/storage-sealing/checks.go @@ -214,8 +214,13 @@ func checkReplicaUpdate(ctx context.Context, maddr address.Address, si SectorInf if err != nil { return &ErrApi{xerrors.Errorf("calling StateComputeDataCommitment: %w", err)} } - if si.UpdateUnsealed == nil || !commD.Equals(*si.UpdateUnsealed) { - return &ErrBadRU{xerrors.Errorf("on chain CommD differs from sector: %s != %s", commD, si.CommD)} + + if si.UpdateUnsealed == nil { + return &ErrBadRU{xerrors.New("nil UpdateUnsealed cid after replica update")} + } + + if !commD.Equals(*si.UpdateUnsealed) { + return &ErrBadRU{xerrors.Errorf("calculated CommD differs from updated replica: %s != %s", commD, *si.UpdateUnsealed)} } if si.UpdateSealed == nil { From a57594729412710c32077d574424482b6190c1b1 Mon Sep 17 00:00:00 2001 From: vyzo Date: Tue, 22 Feb 2022 12:19:26 +0200 Subject: [PATCH 07/48] update go-libp2p to v0.18.0-rc5 --- go.mod | 4 ++-- go.sum | 11 ++++++----- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/go.mod b/go.mod index f22400ded..1f22c71a2 100644 --- a/go.mod +++ b/go.mod @@ -108,7 +108,7 @@ require ( github.com/kelseyhightower/envconfig v1.4.0 github.com/libp2p/go-buffer-pool v0.0.2 github.com/libp2p/go-eventbus v0.2.1 - github.com/libp2p/go-libp2p v0.18.0-rc4 + github.com/libp2p/go-libp2p v0.18.0-rc5 github.com/libp2p/go-libp2p-connmgr v0.3.1 // indirect github.com/libp2p/go-libp2p-core v0.14.0 github.com/libp2p/go-libp2p-discovery v0.6.0 @@ -120,7 +120,7 @@ require ( github.com/libp2p/go-libp2p-record v0.1.3 github.com/libp2p/go-libp2p-resource-manager v0.1.3 github.com/libp2p/go-libp2p-routing-helpers v0.2.3 - github.com/libp2p/go-libp2p-swarm v0.10.1 + github.com/libp2p/go-libp2p-swarm v0.10.2 github.com/libp2p/go-libp2p-tls v0.3.1 github.com/libp2p/go-libp2p-yamux v0.8.2 github.com/libp2p/go-maddr-filter v0.1.0 diff --git a/go.sum b/go.sum index 6b725b5df..08eb1c9ee 100644 --- a/go.sum +++ b/go.sum @@ -995,8 +995,8 @@ github.com/libp2p/go-libp2p v0.14.4/go.mod h1:EIRU0Of4J5S8rkockZM7eJp2S0UrCyi55m github.com/libp2p/go-libp2p v0.16.0/go.mod h1:ump42BsirwAWxKzsCiFnTtN1Yc+DuPu76fyMX364/O4= github.com/libp2p/go-libp2p v0.17.0/go.mod h1:Fkin50rsGdv5mm5BshBUtPRZknt9esfmYXBOYcwOTgw= github.com/libp2p/go-libp2p v0.18.0-rc1/go.mod h1:RgYlH7IIWHXREimC92bw5Lg1V2R5XmSzuLHb5fTnr+8= -github.com/libp2p/go-libp2p v0.18.0-rc4 h1:OUsSbeu7q+Ck/bV9wHDxFzb08ORqBupHhpCmRBhWrJ8= -github.com/libp2p/go-libp2p v0.18.0-rc4/go.mod h1:wzmsk1ioOq9FGQys2BN5BIw4nugP6+R+CyW3JbPEbbs= +github.com/libp2p/go-libp2p v0.18.0-rc5 h1:88wWDHb9nNo0vBNCupLde3OTnFAkugOCNkrDfl3ivK4= +github.com/libp2p/go-libp2p v0.18.0-rc5/go.mod h1:aZPS5l84bDvCvP4jkyEUT/J6YOpUq33Fgqrs3K59mpI= github.com/libp2p/go-libp2p-asn-util v0.0.0-20200825225859-85005c6cf052/go.mod h1:nRMRTab+kZuk0LnKZpxhOVH/ndsdr2Nr//Zltc/vwgo= github.com/libp2p/go-libp2p-asn-util v0.1.0 h1:rABPCO77SjdbJ/eJ/ynIo8vWICy1VEnL5JAxJbQLo1E= github.com/libp2p/go-libp2p-asn-util v0.1.0/go.mod h1:wu+AnM9Ii2KgO5jMmS1rz9dvzTdj8BXqsPR9HR0XB7I= @@ -1181,8 +1181,8 @@ github.com/libp2p/go-libp2p-swarm v0.5.3/go.mod h1:NBn7eNW2lu568L7Ns9wdFrOhgRlkR github.com/libp2p/go-libp2p-swarm v0.8.0/go.mod h1:sOMp6dPuqco0r0GHTzfVheVBh6UEL0L1lXUZ5ot2Fvc= github.com/libp2p/go-libp2p-swarm v0.9.0/go.mod h1:2f8d8uxTJmpeqHF/1ujjdXZp+98nNIbujVOMEZxCbZ8= github.com/libp2p/go-libp2p-swarm v0.10.0/go.mod h1:71ceMcV6Rg/0rIQ97rsZWMzto1l9LnNquef+efcRbmA= -github.com/libp2p/go-libp2p-swarm v0.10.1 h1:lXW3pgGt+BVmkzcFX61erX7l6Lt+WAamNhwa2Kf3eJM= -github.com/libp2p/go-libp2p-swarm v0.10.1/go.mod h1:Pdkq0QU5a+qu+oyqIV3bknMsnzk9lnNyKvB9acJ5aZs= +github.com/libp2p/go-libp2p-swarm v0.10.2 h1:UaXf+CTq6Ns1N2V1EgqJ9Q3xaRsiN7ImVlDMpirMAWw= +github.com/libp2p/go-libp2p-swarm v0.10.2/go.mod h1:Pdkq0QU5a+qu+oyqIV3bknMsnzk9lnNyKvB9acJ5aZs= github.com/libp2p/go-libp2p-testing v0.0.1/go.mod h1:gvchhf3FQOtBdr+eFUABet5a4MBLK8jM3V4Zghvmi+E= github.com/libp2p/go-libp2p-testing v0.0.2/go.mod h1:gvchhf3FQOtBdr+eFUABet5a4MBLK8jM3V4Zghvmi+E= github.com/libp2p/go-libp2p-testing v0.0.3/go.mod h1:gvchhf3FQOtBdr+eFUABet5a4MBLK8jM3V4Zghvmi+E= @@ -1298,8 +1298,9 @@ github.com/libp2p/go-tcp-transport v0.2.3/go.mod h1:9dvr03yqrPyYGIEN6Dy5UvdJZjyP github.com/libp2p/go-tcp-transport v0.2.4/go.mod h1:9dvr03yqrPyYGIEN6Dy5UvdJZjyPFvl1S/igQ5QD1SU= github.com/libp2p/go-tcp-transport v0.2.7/go.mod h1:lue9p1b3VmZj1MhhEGB/etmvF/nBQ0X9CW2DutBT3MM= github.com/libp2p/go-tcp-transport v0.4.0/go.mod h1:0y52Rwrn4076xdJYu/51/qJIdxz+EWDAOG2S45sV3VI= -github.com/libp2p/go-tcp-transport v0.5.0 h1:3ZPW8HAuyRAuFzyabE0hSrCXKKSWzROnZZX7DtcIatY= github.com/libp2p/go-tcp-transport v0.5.0/go.mod h1:UPPL0DIjQqiWRwVAb+CEQlaAG0rp/mCqJfIhFcLHc4Y= +github.com/libp2p/go-tcp-transport v0.5.1 h1:edOOs688VLZAozWC7Kj5/6HHXKNwi9M6wgRmmLa8M6Q= +github.com/libp2p/go-tcp-transport v0.5.1/go.mod h1:UPPL0DIjQqiWRwVAb+CEQlaAG0rp/mCqJfIhFcLHc4Y= github.com/libp2p/go-testutil v0.0.1/go.mod h1:iAcJc/DKJQanJ5ws2V+u5ywdL2n12X1WbbEG+Jjy69I= github.com/libp2p/go-testutil v0.1.0/go.mod h1:81b2n5HypcVyrCg/MJx4Wgfp/VHojytjVe/gLzZ2Ehc= github.com/libp2p/go-ws-transport v0.0.5/go.mod h1:Qbl4BxPfXXhhd/o0wcrgoaItHqA9tnZjoFZnxykuaXU= From 79562a7175cd3792d822bf452cab382603d6d813 Mon Sep 17 00:00:00 2001 From: jennijuju Date: Fri, 25 Feb 2022 10:28:47 -0500 Subject: [PATCH 08/48] add flag usage --- cmd/lotus-miner/sectors.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/cmd/lotus-miner/sectors.go b/cmd/lotus-miner/sectors.go index a5ab14c82..11fe1c354 100644 --- a/cmd/lotus-miner/sectors.go +++ b/cmd/lotus-miner/sectors.go @@ -1525,6 +1525,12 @@ var sectorsSnapAbortCmd = &cli.Command{ Name: "abort-upgrade", Usage: "Abort the attempted (SnapDeals) upgrade of a CC sector, reverting it to as before", ArgsUsage: "", + Flags: []cli.Flag{ + &cli.BoolFlag{ + Name: "really-do-it", + Usage: "pass this flag if you know what you are doing", + }, + }, Action: func(cctx *cli.Context) error { if cctx.Args().Len() != 1 { return lcli.ShowHelp(cctx, xerrors.Errorf("must pass sector number")) From 433f9f8a13a1113e2077bdb9282c98e129f49084 Mon Sep 17 00:00:00 2001 From: jennijuju Date: Fri, 25 Feb 2022 10:48:08 -0500 Subject: [PATCH 09/48] make gen --- documentation/en/cli-lotus-miner.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/documentation/en/cli-lotus-miner.md b/documentation/en/cli-lotus-miner.md index bb9589401..b842d0ac3 100644 --- a/documentation/en/cli-lotus-miner.md +++ b/documentation/en/cli-lotus-miner.md @@ -1757,7 +1757,8 @@ USAGE: lotus-miner sectors abort-upgrade [command options] OPTIONS: - --help, -h show help (default: false) + --really-do-it pass this flag if you know what you are doing (default: false) + --help, -h show help (default: false) ``` From 30ae1dd8e8ca3f09d6281124d51be10c39102ba2 Mon Sep 17 00:00:00 2001 From: Aayush Date: Tue, 1 Mar 2022 09:47:44 -0500 Subject: [PATCH 10/48] Lotus release v1.15.0-rc2 --- CHANGELOG.md | 4 ++-- build/openrpc/full.json.gz | Bin 26596 -> 26596 bytes build/openrpc/miner.json.gz | Bin 12926 -> 12926 bytes build/openrpc/worker.json.gz | Bin 3960 -> 3960 bytes build/version.go | 2 +- documentation/en/cli-lotus-miner.md | 2 +- documentation/en/cli-lotus-worker.md | 2 +- documentation/en/cli-lotus.md | 2 +- 8 files changed, 6 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 158935b25..44eae6e4b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,7 @@ # Lotus changelog -# 1.15.0-rc1 / 2022-02-10 +# 1.15.0-rc2 / 2022-03-01 -This is the first release candidates of v1.15.0, detailed changelog will be updated later. +This is the second release candidates of v1.15.0, detailed changelog will be updated later. - github.com/filecoin-project/lotus: - bump the version to v1.15.0-rc1 diff --git a/build/openrpc/full.json.gz b/build/openrpc/full.json.gz index ed1abf06e2aadc4a1bdc3a1463a3140e3f88c43d..6b5c3135fcbc36def3460027b158c12914a40818 100644 GIT binary patch delta 23 fcmaEIp7F_f#tD6lwj29>(>Vf5dgp4ovoZhxf@%pR delta 23 fcmaEIp7F_f#tD6lrW^Zx(>Ww#XYgvevoZhxeG3Rl diff --git a/build/openrpc/miner.json.gz b/build/openrpc/miner.json.gz index 5a8c320f373874e20dea11be258166c213a4d2c4..f64a87117de1c34302520d8acff22c5c837d562d 100644 GIT binary patch delta 21 dcmeyD@-JmV7h~1N?$?GKoIfWDiB~c)004LP2=M>_ delta 21 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 Date: Wed, 2 Mar 2022 15:20:18 -0500 Subject: [PATCH 11/48] Revert "update go-libp2p to v0.18.0-rc5" This reverts commit a57594729412710c32077d574424482b6190c1b1. --- go.mod | 4 ++-- go.sum | 11 +++++------ 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/go.mod b/go.mod index 51623166c..bd3ab2f4a 100644 --- a/go.mod +++ b/go.mod @@ -110,7 +110,7 @@ require ( github.com/kelseyhightower/envconfig v1.4.0 github.com/libp2p/go-buffer-pool v0.0.2 github.com/libp2p/go-eventbus v0.2.1 - github.com/libp2p/go-libp2p v0.18.0-rc5 + github.com/libp2p/go-libp2p v0.18.0-rc4 github.com/libp2p/go-libp2p-connmgr v0.3.1 // indirect github.com/libp2p/go-libp2p-core v0.14.0 github.com/libp2p/go-libp2p-discovery v0.6.0 @@ -122,7 +122,7 @@ require ( github.com/libp2p/go-libp2p-record v0.1.3 github.com/libp2p/go-libp2p-resource-manager v0.1.3 github.com/libp2p/go-libp2p-routing-helpers v0.2.3 - github.com/libp2p/go-libp2p-swarm v0.10.2 + github.com/libp2p/go-libp2p-swarm v0.10.1 github.com/libp2p/go-libp2p-tls v0.3.1 github.com/libp2p/go-libp2p-yamux v0.8.2 github.com/libp2p/go-maddr-filter v0.1.0 diff --git a/go.sum b/go.sum index 08eb1c9ee..6b725b5df 100644 --- a/go.sum +++ b/go.sum @@ -995,8 +995,8 @@ github.com/libp2p/go-libp2p v0.14.4/go.mod h1:EIRU0Of4J5S8rkockZM7eJp2S0UrCyi55m github.com/libp2p/go-libp2p v0.16.0/go.mod h1:ump42BsirwAWxKzsCiFnTtN1Yc+DuPu76fyMX364/O4= github.com/libp2p/go-libp2p v0.17.0/go.mod h1:Fkin50rsGdv5mm5BshBUtPRZknt9esfmYXBOYcwOTgw= github.com/libp2p/go-libp2p v0.18.0-rc1/go.mod h1:RgYlH7IIWHXREimC92bw5Lg1V2R5XmSzuLHb5fTnr+8= -github.com/libp2p/go-libp2p v0.18.0-rc5 h1:88wWDHb9nNo0vBNCupLde3OTnFAkugOCNkrDfl3ivK4= -github.com/libp2p/go-libp2p v0.18.0-rc5/go.mod h1:aZPS5l84bDvCvP4jkyEUT/J6YOpUq33Fgqrs3K59mpI= +github.com/libp2p/go-libp2p v0.18.0-rc4 h1:OUsSbeu7q+Ck/bV9wHDxFzb08ORqBupHhpCmRBhWrJ8= +github.com/libp2p/go-libp2p v0.18.0-rc4/go.mod h1:wzmsk1ioOq9FGQys2BN5BIw4nugP6+R+CyW3JbPEbbs= github.com/libp2p/go-libp2p-asn-util v0.0.0-20200825225859-85005c6cf052/go.mod h1:nRMRTab+kZuk0LnKZpxhOVH/ndsdr2Nr//Zltc/vwgo= github.com/libp2p/go-libp2p-asn-util v0.1.0 h1:rABPCO77SjdbJ/eJ/ynIo8vWICy1VEnL5JAxJbQLo1E= github.com/libp2p/go-libp2p-asn-util v0.1.0/go.mod h1:wu+AnM9Ii2KgO5jMmS1rz9dvzTdj8BXqsPR9HR0XB7I= @@ -1181,8 +1181,8 @@ github.com/libp2p/go-libp2p-swarm v0.5.3/go.mod h1:NBn7eNW2lu568L7Ns9wdFrOhgRlkR github.com/libp2p/go-libp2p-swarm v0.8.0/go.mod h1:sOMp6dPuqco0r0GHTzfVheVBh6UEL0L1lXUZ5ot2Fvc= github.com/libp2p/go-libp2p-swarm v0.9.0/go.mod h1:2f8d8uxTJmpeqHF/1ujjdXZp+98nNIbujVOMEZxCbZ8= github.com/libp2p/go-libp2p-swarm v0.10.0/go.mod h1:71ceMcV6Rg/0rIQ97rsZWMzto1l9LnNquef+efcRbmA= -github.com/libp2p/go-libp2p-swarm v0.10.2 h1:UaXf+CTq6Ns1N2V1EgqJ9Q3xaRsiN7ImVlDMpirMAWw= -github.com/libp2p/go-libp2p-swarm v0.10.2/go.mod h1:Pdkq0QU5a+qu+oyqIV3bknMsnzk9lnNyKvB9acJ5aZs= +github.com/libp2p/go-libp2p-swarm v0.10.1 h1:lXW3pgGt+BVmkzcFX61erX7l6Lt+WAamNhwa2Kf3eJM= +github.com/libp2p/go-libp2p-swarm v0.10.1/go.mod h1:Pdkq0QU5a+qu+oyqIV3bknMsnzk9lnNyKvB9acJ5aZs= github.com/libp2p/go-libp2p-testing v0.0.1/go.mod h1:gvchhf3FQOtBdr+eFUABet5a4MBLK8jM3V4Zghvmi+E= github.com/libp2p/go-libp2p-testing v0.0.2/go.mod h1:gvchhf3FQOtBdr+eFUABet5a4MBLK8jM3V4Zghvmi+E= github.com/libp2p/go-libp2p-testing v0.0.3/go.mod h1:gvchhf3FQOtBdr+eFUABet5a4MBLK8jM3V4Zghvmi+E= @@ -1298,9 +1298,8 @@ github.com/libp2p/go-tcp-transport v0.2.3/go.mod h1:9dvr03yqrPyYGIEN6Dy5UvdJZjyP github.com/libp2p/go-tcp-transport v0.2.4/go.mod h1:9dvr03yqrPyYGIEN6Dy5UvdJZjyPFvl1S/igQ5QD1SU= github.com/libp2p/go-tcp-transport v0.2.7/go.mod h1:lue9p1b3VmZj1MhhEGB/etmvF/nBQ0X9CW2DutBT3MM= github.com/libp2p/go-tcp-transport v0.4.0/go.mod h1:0y52Rwrn4076xdJYu/51/qJIdxz+EWDAOG2S45sV3VI= +github.com/libp2p/go-tcp-transport v0.5.0 h1:3ZPW8HAuyRAuFzyabE0hSrCXKKSWzROnZZX7DtcIatY= github.com/libp2p/go-tcp-transport v0.5.0/go.mod h1:UPPL0DIjQqiWRwVAb+CEQlaAG0rp/mCqJfIhFcLHc4Y= -github.com/libp2p/go-tcp-transport v0.5.1 h1:edOOs688VLZAozWC7Kj5/6HHXKNwi9M6wgRmmLa8M6Q= -github.com/libp2p/go-tcp-transport v0.5.1/go.mod h1:UPPL0DIjQqiWRwVAb+CEQlaAG0rp/mCqJfIhFcLHc4Y= github.com/libp2p/go-testutil v0.0.1/go.mod h1:iAcJc/DKJQanJ5ws2V+u5ywdL2n12X1WbbEG+Jjy69I= github.com/libp2p/go-testutil v0.1.0/go.mod h1:81b2n5HypcVyrCg/MJx4Wgfp/VHojytjVe/gLzZ2Ehc= github.com/libp2p/go-ws-transport v0.0.5/go.mod h1:Qbl4BxPfXXhhd/o0wcrgoaItHqA9tnZjoFZnxykuaXU= From 7207740af42e3743ca885a939a0b3bbdc198bef7 Mon Sep 17 00:00:00 2001 From: Aayush Date: Wed, 2 Mar 2022 15:21:10 -0500 Subject: [PATCH 12/48] Revert "update libp2p to v0.18.0-rc4" This reverts commit 80e9f762610cc70807b33bf77b99dbb4f58b173b. --- go.mod | 6 +++--- go.sum | 10 ++++------ 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/go.mod b/go.mod index bd3ab2f4a..43a5a3850 100644 --- a/go.mod +++ b/go.mod @@ -110,7 +110,7 @@ require ( github.com/kelseyhightower/envconfig v1.4.0 github.com/libp2p/go-buffer-pool v0.0.2 github.com/libp2p/go-eventbus v0.2.1 - github.com/libp2p/go-libp2p v0.18.0-rc4 + github.com/libp2p/go-libp2p v0.18.0-rc3 github.com/libp2p/go-libp2p-connmgr v0.3.1 // indirect github.com/libp2p/go-libp2p-core v0.14.0 github.com/libp2p/go-libp2p-discovery v0.6.0 @@ -118,13 +118,13 @@ require ( github.com/libp2p/go-libp2p-noise v0.3.0 github.com/libp2p/go-libp2p-peerstore v0.6.0 github.com/libp2p/go-libp2p-pubsub v0.6.1 - github.com/libp2p/go-libp2p-quic-transport v0.16.1 + github.com/libp2p/go-libp2p-quic-transport v0.16.0 github.com/libp2p/go-libp2p-record v0.1.3 github.com/libp2p/go-libp2p-resource-manager v0.1.3 github.com/libp2p/go-libp2p-routing-helpers v0.2.3 github.com/libp2p/go-libp2p-swarm v0.10.1 github.com/libp2p/go-libp2p-tls v0.3.1 - github.com/libp2p/go-libp2p-yamux v0.8.2 + github.com/libp2p/go-libp2p-yamux v0.8.1 github.com/libp2p/go-maddr-filter v0.1.0 github.com/mattn/go-isatty v0.0.14 github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 diff --git a/go.sum b/go.sum index 6b725b5df..5162d7084 100644 --- a/go.sum +++ b/go.sum @@ -995,8 +995,8 @@ github.com/libp2p/go-libp2p v0.14.4/go.mod h1:EIRU0Of4J5S8rkockZM7eJp2S0UrCyi55m github.com/libp2p/go-libp2p v0.16.0/go.mod h1:ump42BsirwAWxKzsCiFnTtN1Yc+DuPu76fyMX364/O4= github.com/libp2p/go-libp2p v0.17.0/go.mod h1:Fkin50rsGdv5mm5BshBUtPRZknt9esfmYXBOYcwOTgw= github.com/libp2p/go-libp2p v0.18.0-rc1/go.mod h1:RgYlH7IIWHXREimC92bw5Lg1V2R5XmSzuLHb5fTnr+8= -github.com/libp2p/go-libp2p v0.18.0-rc4 h1:OUsSbeu7q+Ck/bV9wHDxFzb08ORqBupHhpCmRBhWrJ8= -github.com/libp2p/go-libp2p v0.18.0-rc4/go.mod h1:wzmsk1ioOq9FGQys2BN5BIw4nugP6+R+CyW3JbPEbbs= +github.com/libp2p/go-libp2p v0.18.0-rc3 h1:tI+dAFDgOCeHRF6FgvXpqbrVz+ZFabX/pXO2BUdHu4o= +github.com/libp2p/go-libp2p v0.18.0-rc3/go.mod h1:WYL+Xw1iuwi6rdfzw5VIEpD+HqzYucHZ6fcUuumbI3M= github.com/libp2p/go-libp2p-asn-util v0.0.0-20200825225859-85005c6cf052/go.mod h1:nRMRTab+kZuk0LnKZpxhOVH/ndsdr2Nr//Zltc/vwgo= github.com/libp2p/go-libp2p-asn-util v0.1.0 h1:rABPCO77SjdbJ/eJ/ynIo8vWICy1VEnL5JAxJbQLo1E= github.com/libp2p/go-libp2p-asn-util v0.1.0/go.mod h1:wu+AnM9Ii2KgO5jMmS1rz9dvzTdj8BXqsPR9HR0XB7I= @@ -1148,9 +1148,8 @@ github.com/libp2p/go-libp2p-quic-transport v0.11.2/go.mod h1:wlanzKtIh6pHrq+0U3p github.com/libp2p/go-libp2p-quic-transport v0.13.0/go.mod h1:39/ZWJ1TW/jx1iFkKzzUg00W6tDJh73FC0xYudjr7Hc= github.com/libp2p/go-libp2p-quic-transport v0.15.0/go.mod h1:wv4uGwjcqe8Mhjj7N/Ic0aKjA+/10UnMlSzLO0yRpYQ= github.com/libp2p/go-libp2p-quic-transport v0.15.2/go.mod h1:wv4uGwjcqe8Mhjj7N/Ic0aKjA+/10UnMlSzLO0yRpYQ= +github.com/libp2p/go-libp2p-quic-transport v0.16.0 h1:aVg9/jr+R2esov5sH7wkXrmYmqJiUjtLMLYX3L9KYdY= github.com/libp2p/go-libp2p-quic-transport v0.16.0/go.mod h1:1BXjVMzr+w7EkPfiHkKnwsWjPjtfaNT0q8RS3tGDvEQ= -github.com/libp2p/go-libp2p-quic-transport v0.16.1 h1:N/XqYXHurphPLDfXYhll8NyqzdZYQqAF4GIr7+SmLV8= -github.com/libp2p/go-libp2p-quic-transport v0.16.1/go.mod h1:1BXjVMzr+w7EkPfiHkKnwsWjPjtfaNT0q8RS3tGDvEQ= github.com/libp2p/go-libp2p-record v0.0.1/go.mod h1:grzqg263Rug/sRex85QrDOLntdFAymLDLm7lxMgU79Q= github.com/libp2p/go-libp2p-record v0.1.0/go.mod h1:ujNc8iuE5dlKWVy6wuL6dd58t0n7xI4hAIl8pE6wu5Q= github.com/libp2p/go-libp2p-record v0.1.1/go.mod h1:VRgKajOyMVgP/F0L5g3kH7SVskp17vFi2xheb5uMJtg= @@ -1230,9 +1229,8 @@ github.com/libp2p/go-libp2p-yamux v0.5.4/go.mod h1:tfrXbyaTqqSU654GTvK3ocnSZL3Bu github.com/libp2p/go-libp2p-yamux v0.6.0/go.mod h1:MRhd6mAYnFRnSISp4M8i0ClV/j+mWHo2mYLifWGw33k= github.com/libp2p/go-libp2p-yamux v0.7.0/go.mod h1:fMyA0CsPfHkIuBU0wjRGrCjTBFiXTXxG0k5M4ETv+08= github.com/libp2p/go-libp2p-yamux v0.8.0/go.mod h1:yTkPgN2ib8FHyU1ZcVD7aelzyAqXXwEPbyx+aSKm9h8= +github.com/libp2p/go-libp2p-yamux v0.8.1 h1:pi7zUeZ4Z9TpbUMntvSvoP3dFD4SEw/VPybxBcOZGzg= github.com/libp2p/go-libp2p-yamux v0.8.1/go.mod h1:rUozF8Jah2dL9LLGyBaBeTQeARdwhefMCTQVQt6QobE= -github.com/libp2p/go-libp2p-yamux v0.8.2 h1:6GKWntresp0TFxMP/oSoH96nV8XKJRdynXsdp43dn0Y= -github.com/libp2p/go-libp2p-yamux v0.8.2/go.mod h1:rUozF8Jah2dL9LLGyBaBeTQeARdwhefMCTQVQt6QobE= github.com/libp2p/go-maddr-filter v0.0.1/go.mod h1:6eT12kSQMA9x2pvFQa+xesMKUBlj9VImZbj3B9FBH/Q= github.com/libp2p/go-maddr-filter v0.0.4/go.mod h1:6eT12kSQMA9x2pvFQa+xesMKUBlj9VImZbj3B9FBH/Q= github.com/libp2p/go-maddr-filter v0.0.5/go.mod h1:Jk+36PMfIqCJhAnaASRH83bdAvfDRp/w6ENFaC9bG+M= From 94678bacea480310987556bab7d5038dad963507 Mon Sep 17 00:00:00 2001 From: Aayush Date: Wed, 2 Mar 2022 15:21:31 -0500 Subject: [PATCH 13/48] Revert "update go-libp2p to v0.18.0-rc3" This reverts commit e78c4ab9b302a9fd4c00449d3143145b7ff3f234. --- go.mod | 4 ++-- go.sum | 11 +++++------ 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/go.mod b/go.mod index 43a5a3850..9e2434833 100644 --- a/go.mod +++ b/go.mod @@ -110,7 +110,7 @@ require ( github.com/kelseyhightower/envconfig v1.4.0 github.com/libp2p/go-buffer-pool v0.0.2 github.com/libp2p/go-eventbus v0.2.1 - github.com/libp2p/go-libp2p v0.18.0-rc3 + github.com/libp2p/go-libp2p v0.18.0-rc2 github.com/libp2p/go-libp2p-connmgr v0.3.1 // indirect github.com/libp2p/go-libp2p-core v0.14.0 github.com/libp2p/go-libp2p-discovery v0.6.0 @@ -120,7 +120,7 @@ require ( github.com/libp2p/go-libp2p-pubsub v0.6.1 github.com/libp2p/go-libp2p-quic-transport v0.16.0 github.com/libp2p/go-libp2p-record v0.1.3 - github.com/libp2p/go-libp2p-resource-manager v0.1.3 + github.com/libp2p/go-libp2p-resource-manager v0.1.2 github.com/libp2p/go-libp2p-routing-helpers v0.2.3 github.com/libp2p/go-libp2p-swarm v0.10.1 github.com/libp2p/go-libp2p-tls v0.3.1 diff --git a/go.sum b/go.sum index 5162d7084..48c9ce090 100644 --- a/go.sum +++ b/go.sum @@ -995,8 +995,8 @@ github.com/libp2p/go-libp2p v0.14.4/go.mod h1:EIRU0Of4J5S8rkockZM7eJp2S0UrCyi55m github.com/libp2p/go-libp2p v0.16.0/go.mod h1:ump42BsirwAWxKzsCiFnTtN1Yc+DuPu76fyMX364/O4= github.com/libp2p/go-libp2p v0.17.0/go.mod h1:Fkin50rsGdv5mm5BshBUtPRZknt9esfmYXBOYcwOTgw= github.com/libp2p/go-libp2p v0.18.0-rc1/go.mod h1:RgYlH7IIWHXREimC92bw5Lg1V2R5XmSzuLHb5fTnr+8= -github.com/libp2p/go-libp2p v0.18.0-rc3 h1:tI+dAFDgOCeHRF6FgvXpqbrVz+ZFabX/pXO2BUdHu4o= -github.com/libp2p/go-libp2p v0.18.0-rc3/go.mod h1:WYL+Xw1iuwi6rdfzw5VIEpD+HqzYucHZ6fcUuumbI3M= +github.com/libp2p/go-libp2p v0.18.0-rc2 h1:ZLzGMdp1cVwxmA0vFpPVUDPQYUdHHGX7I58nXwpNr7Y= +github.com/libp2p/go-libp2p v0.18.0-rc2/go.mod h1:gGNCvn0T19AzyNPDWej2vsAlZFZVnS+IxqckjnsOyM0= github.com/libp2p/go-libp2p-asn-util v0.0.0-20200825225859-85005c6cf052/go.mod h1:nRMRTab+kZuk0LnKZpxhOVH/ndsdr2Nr//Zltc/vwgo= github.com/libp2p/go-libp2p-asn-util v0.1.0 h1:rABPCO77SjdbJ/eJ/ynIo8vWICy1VEnL5JAxJbQLo1E= github.com/libp2p/go-libp2p-asn-util v0.1.0/go.mod h1:wu+AnM9Ii2KgO5jMmS1rz9dvzTdj8BXqsPR9HR0XB7I= @@ -1157,8 +1157,8 @@ github.com/libp2p/go-libp2p-record v0.1.2/go.mod h1:pal0eNcT5nqZaTV7UGhqeGqxFgGd github.com/libp2p/go-libp2p-record v0.1.3 h1:R27hoScIhQf/A8XJZ8lYpnqh9LatJ5YbHs28kCIfql0= github.com/libp2p/go-libp2p-record v0.1.3/go.mod h1:yNUff/adKIfPnYQXgp6FQmNu3gLJ6EMg7+/vv2+9pY4= github.com/libp2p/go-libp2p-resource-manager v0.1.0/go.mod h1:wJPNjeE4XQlxeidwqVY5G6DLOKqFK33u2n8blpl0I6Y= -github.com/libp2p/go-libp2p-resource-manager v0.1.3 h1:Umf0tW6WNXSb6Uoma0YT56azB5iikL/aeGAP7s7+f5o= -github.com/libp2p/go-libp2p-resource-manager v0.1.3/go.mod h1:wJPNjeE4XQlxeidwqVY5G6DLOKqFK33u2n8blpl0I6Y= +github.com/libp2p/go-libp2p-resource-manager v0.1.2 h1:t66B/6EF6ivWEUgvO34NKOT3oPtkb+JTBJHdsIMx+mg= +github.com/libp2p/go-libp2p-resource-manager v0.1.2/go.mod h1:wJPNjeE4XQlxeidwqVY5G6DLOKqFK33u2n8blpl0I6Y= github.com/libp2p/go-libp2p-routing v0.0.1/go.mod h1:N51q3yTr4Zdr7V8Jt2JIktVU+3xBBylx1MZeVA6t1Ys= github.com/libp2p/go-libp2p-routing v0.1.0/go.mod h1:zfLhI1RI8RLEzmEaaPwzonRvXeeSHddONWkcTcB54nE= github.com/libp2p/go-libp2p-routing-helpers v0.2.3 h1:xY61alxJ6PurSi+MXbywZpelvuU4U4p/gPTxjqCqTzY= @@ -1211,9 +1211,8 @@ github.com/libp2p/go-libp2p-transport-upgrader v0.4.3/go.mod h1:bpkldbOWXMrXhpZb github.com/libp2p/go-libp2p-transport-upgrader v0.4.6/go.mod h1:JE0WQuQdy+uLZ5zOaI3Nw9dWGYJIA7mywEtP2lMvnyk= github.com/libp2p/go-libp2p-transport-upgrader v0.5.0/go.mod h1:Rc+XODlB3yce7dvFV4q/RmyJGsFcCZRkeZMu/Zdg0mo= github.com/libp2p/go-libp2p-transport-upgrader v0.6.0/go.mod h1:1e07y1ZSZdHo9HPbuU8IztM1Cj+DR5twgycb4pnRzRo= +github.com/libp2p/go-libp2p-transport-upgrader v0.7.0 h1:ADnLrL7fC4Vy7HPjk9oGof7nDeTqGXuof85Ar6kin9Q= github.com/libp2p/go-libp2p-transport-upgrader v0.7.0/go.mod h1:GIR2aTRp1J5yjVlkUoFqMkdobfob6RnAwYg/RZPhrzg= -github.com/libp2p/go-libp2p-transport-upgrader v0.7.1 h1:MSMe+tUfxpC9GArTz7a4G5zQKQgGh00Vio87d3j3xIg= -github.com/libp2p/go-libp2p-transport-upgrader v0.7.1/go.mod h1:GIR2aTRp1J5yjVlkUoFqMkdobfob6RnAwYg/RZPhrzg= github.com/libp2p/go-libp2p-xor v0.0.0-20210714161855-5c005aca55db/go.mod h1:LSTM5yRnjGZbWNTA/hRwq2gGFrvRIbQJscoIL/u6InY= github.com/libp2p/go-libp2p-yamux v0.1.2/go.mod h1:xUoV/RmYkg6BW/qGxA9XJyg+HzXFYkeXbnhjmnYzKp8= github.com/libp2p/go-libp2p-yamux v0.1.3/go.mod h1:VGSQVrqkh6y4nm0189qqxMtvyBft44MOYYPpYKXiVt4= From 2aab4d4f05e426aa75c60d08198af46967fd4350 Mon Sep 17 00:00:00 2001 From: Aayush Date: Wed, 2 Mar 2022 15:22:06 -0500 Subject: [PATCH 14/48] Revert "update go-libp2p to v0.18.0-rc2" This reverts commit 6e5f5214636599e20f57b9f120f8de091b14b0cc. --- go.mod | 6 +++--- go.sum | 9 +++------ 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/go.mod b/go.mod index 9e2434833..ce96e08b1 100644 --- a/go.mod +++ b/go.mod @@ -110,7 +110,7 @@ require ( github.com/kelseyhightower/envconfig v1.4.0 github.com/libp2p/go-buffer-pool v0.0.2 github.com/libp2p/go-eventbus v0.2.1 - github.com/libp2p/go-libp2p v0.18.0-rc2 + github.com/libp2p/go-libp2p v0.18.0-rc1 github.com/libp2p/go-libp2p-connmgr v0.3.1 // indirect github.com/libp2p/go-libp2p-core v0.14.0 github.com/libp2p/go-libp2p-discovery v0.6.0 @@ -122,9 +122,9 @@ require ( github.com/libp2p/go-libp2p-record v0.1.3 github.com/libp2p/go-libp2p-resource-manager v0.1.2 github.com/libp2p/go-libp2p-routing-helpers v0.2.3 - github.com/libp2p/go-libp2p-swarm v0.10.1 + github.com/libp2p/go-libp2p-swarm v0.10.0 github.com/libp2p/go-libp2p-tls v0.3.1 - github.com/libp2p/go-libp2p-yamux v0.8.1 + github.com/libp2p/go-libp2p-yamux v0.8.0 github.com/libp2p/go-maddr-filter v0.1.0 github.com/mattn/go-isatty v0.0.14 github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 diff --git a/go.sum b/go.sum index 48c9ce090..e6a941762 100644 --- a/go.sum +++ b/go.sum @@ -994,9 +994,8 @@ github.com/libp2p/go-libp2p v0.14.3/go.mod h1:d12V4PdKbpL0T1/gsUNN8DfgMuRPDX8bS2 github.com/libp2p/go-libp2p v0.14.4/go.mod h1:EIRU0Of4J5S8rkockZM7eJp2S0UrCyi55m2kJVru3rM= github.com/libp2p/go-libp2p v0.16.0/go.mod h1:ump42BsirwAWxKzsCiFnTtN1Yc+DuPu76fyMX364/O4= github.com/libp2p/go-libp2p v0.17.0/go.mod h1:Fkin50rsGdv5mm5BshBUtPRZknt9esfmYXBOYcwOTgw= +github.com/libp2p/go-libp2p v0.18.0-rc1 h1:CFHROLGmMwe/p8tR3sHahg/1NSaZa2EGbu7nDmdC+RY= github.com/libp2p/go-libp2p v0.18.0-rc1/go.mod h1:RgYlH7IIWHXREimC92bw5Lg1V2R5XmSzuLHb5fTnr+8= -github.com/libp2p/go-libp2p v0.18.0-rc2 h1:ZLzGMdp1cVwxmA0vFpPVUDPQYUdHHGX7I58nXwpNr7Y= -github.com/libp2p/go-libp2p v0.18.0-rc2/go.mod h1:gGNCvn0T19AzyNPDWej2vsAlZFZVnS+IxqckjnsOyM0= github.com/libp2p/go-libp2p-asn-util v0.0.0-20200825225859-85005c6cf052/go.mod h1:nRMRTab+kZuk0LnKZpxhOVH/ndsdr2Nr//Zltc/vwgo= github.com/libp2p/go-libp2p-asn-util v0.1.0 h1:rABPCO77SjdbJ/eJ/ynIo8vWICy1VEnL5JAxJbQLo1E= github.com/libp2p/go-libp2p-asn-util v0.1.0/go.mod h1:wu+AnM9Ii2KgO5jMmS1rz9dvzTdj8BXqsPR9HR0XB7I= @@ -1179,9 +1178,8 @@ github.com/libp2p/go-libp2p-swarm v0.5.0/go.mod h1:sU9i6BoHE0Ve5SKz3y9WfKrh8dUat github.com/libp2p/go-libp2p-swarm v0.5.3/go.mod h1:NBn7eNW2lu568L7Ns9wdFrOhgRlkRnIDg0FLKbuu3i8= github.com/libp2p/go-libp2p-swarm v0.8.0/go.mod h1:sOMp6dPuqco0r0GHTzfVheVBh6UEL0L1lXUZ5ot2Fvc= github.com/libp2p/go-libp2p-swarm v0.9.0/go.mod h1:2f8d8uxTJmpeqHF/1ujjdXZp+98nNIbujVOMEZxCbZ8= +github.com/libp2p/go-libp2p-swarm v0.10.0 h1:1yr7UCwxCN92cw9g9Q+fnJSlk7lOB1RetoEewxhGVL0= github.com/libp2p/go-libp2p-swarm v0.10.0/go.mod h1:71ceMcV6Rg/0rIQ97rsZWMzto1l9LnNquef+efcRbmA= -github.com/libp2p/go-libp2p-swarm v0.10.1 h1:lXW3pgGt+BVmkzcFX61erX7l6Lt+WAamNhwa2Kf3eJM= -github.com/libp2p/go-libp2p-swarm v0.10.1/go.mod h1:Pdkq0QU5a+qu+oyqIV3bknMsnzk9lnNyKvB9acJ5aZs= github.com/libp2p/go-libp2p-testing v0.0.1/go.mod h1:gvchhf3FQOtBdr+eFUABet5a4MBLK8jM3V4Zghvmi+E= github.com/libp2p/go-libp2p-testing v0.0.2/go.mod h1:gvchhf3FQOtBdr+eFUABet5a4MBLK8jM3V4Zghvmi+E= github.com/libp2p/go-libp2p-testing v0.0.3/go.mod h1:gvchhf3FQOtBdr+eFUABet5a4MBLK8jM3V4Zghvmi+E= @@ -1227,9 +1225,8 @@ github.com/libp2p/go-libp2p-yamux v0.5.0/go.mod h1:AyR8k5EzyM2QN9Bbdg6X1SkVVuqLw github.com/libp2p/go-libp2p-yamux v0.5.4/go.mod h1:tfrXbyaTqqSU654GTvK3ocnSZL3BuHoeTSqhcel1wsE= github.com/libp2p/go-libp2p-yamux v0.6.0/go.mod h1:MRhd6mAYnFRnSISp4M8i0ClV/j+mWHo2mYLifWGw33k= github.com/libp2p/go-libp2p-yamux v0.7.0/go.mod h1:fMyA0CsPfHkIuBU0wjRGrCjTBFiXTXxG0k5M4ETv+08= +github.com/libp2p/go-libp2p-yamux v0.8.0 h1:APQYlttIj+Rr5sfa6siojwsi0ZwcIh/exHIUl9hZr6o= github.com/libp2p/go-libp2p-yamux v0.8.0/go.mod h1:yTkPgN2ib8FHyU1ZcVD7aelzyAqXXwEPbyx+aSKm9h8= -github.com/libp2p/go-libp2p-yamux v0.8.1 h1:pi7zUeZ4Z9TpbUMntvSvoP3dFD4SEw/VPybxBcOZGzg= -github.com/libp2p/go-libp2p-yamux v0.8.1/go.mod h1:rUozF8Jah2dL9LLGyBaBeTQeARdwhefMCTQVQt6QobE= github.com/libp2p/go-maddr-filter v0.0.1/go.mod h1:6eT12kSQMA9x2pvFQa+xesMKUBlj9VImZbj3B9FBH/Q= github.com/libp2p/go-maddr-filter v0.0.4/go.mod h1:6eT12kSQMA9x2pvFQa+xesMKUBlj9VImZbj3B9FBH/Q= github.com/libp2p/go-maddr-filter v0.0.5/go.mod h1:Jk+36PMfIqCJhAnaASRH83bdAvfDRp/w6ENFaC9bG+M= From 6dc696b7459cbcacc1cf3d36c1120f0ab7a47242 Mon Sep 17 00:00:00 2001 From: Aayush Date: Wed, 2 Mar 2022 15:29:25 -0500 Subject: [PATCH 15/48] Revert "feat: update to go-fil-markets v1.19.0" This reverts commit 8a47a71772a412597c34af114ebc36e34a52f72d. --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index ce96e08b1..b66011246 100644 --- a/go.mod +++ b/go.mod @@ -38,7 +38,7 @@ require ( github.com/filecoin-project/go-data-transfer v1.14.0 github.com/filecoin-project/go-fil-commcid v0.1.0 github.com/filecoin-project/go-fil-commp-hashhash v0.1.0 - github.com/filecoin-project/go-fil-markets v1.19.0 + github.com/filecoin-project/go-fil-markets v1.19.0-rc1 github.com/filecoin-project/go-jsonrpc v0.1.5 github.com/filecoin-project/go-padreader v0.0.1 github.com/filecoin-project/go-paramfetch v0.0.4 diff --git a/go.sum b/go.sum index e6a941762..050cd4800 100644 --- a/go.sum +++ b/go.sum @@ -327,8 +327,8 @@ github.com/filecoin-project/go-fil-commcid v0.1.0 h1:3R4ds1A9r6cr8mvZBfMYxTS88Oq github.com/filecoin-project/go-fil-commcid v0.1.0/go.mod h1:Eaox7Hvus1JgPrL5+M3+h7aSPHc0cVqpSxA+TxIEpZQ= github.com/filecoin-project/go-fil-commp-hashhash v0.1.0 h1:imrrpZWEHRnNqqv0tN7LXep5bFEVOVmQWHJvl2mgsGo= github.com/filecoin-project/go-fil-commp-hashhash v0.1.0/go.mod h1:73S8WSEWh9vr0fDJVnKADhfIv/d6dCbAGaAGWbdJEI8= -github.com/filecoin-project/go-fil-markets v1.19.0 h1:kap2q2wTM6tfkVO5gMA5DD9GUeTvkDhMfhjCtEwMDM8= -github.com/filecoin-project/go-fil-markets v1.19.0/go.mod h1:qsb3apmo4RSJYCEq40QxVdU7UZospN6nFJLOBHuaIbc= +github.com/filecoin-project/go-fil-markets v1.19.0-rc1 h1:T8Ql+Yj9bm0nzn9o43WBrRGxtWj2aYRq2UY7hDaep0I= +github.com/filecoin-project/go-fil-markets v1.19.0-rc1/go.mod h1:qsb3apmo4RSJYCEq40QxVdU7UZospN6nFJLOBHuaIbc= github.com/filecoin-project/go-hamt-ipld v0.1.5 h1:uoXrKbCQZ49OHpsTCkrThPNelC4W3LPEk0OrS/ytIBM= github.com/filecoin-project/go-hamt-ipld v0.1.5/go.mod h1:6Is+ONR5Cd5R6XZoCse1CWaXZc0Hdb/JeX+EQCQzX24= github.com/filecoin-project/go-hamt-ipld/v2 v2.0.0 h1:b3UDemBYN2HNfk3KOXNuxgTTxlWi3xVvbQP0IT38fvM= From 17ac5835081bf840a1264eaac843cea3e8112556 Mon Sep 17 00:00:00 2001 From: Aayush Date: Wed, 2 Mar 2022 15:29:26 -0500 Subject: [PATCH 16/48] Revert "close the rcmgr on shutdown" This reverts commit 73ec10a49ea6f80b338ada16c16a089f40f645d6. --- node/modules/lp2p/rcmgr.go | 6 ------ 1 file changed, 6 deletions(-) diff --git a/node/modules/lp2p/rcmgr.go b/node/modules/lp2p/rcmgr.go index 8b286ff5e..df52b4a4f 100644 --- a/node/modules/lp2p/rcmgr.go +++ b/node/modules/lp2p/rcmgr.go @@ -1,7 +1,6 @@ package lp2p import ( - "context" "errors" "fmt" "os" @@ -57,11 +56,6 @@ func ResourceManager(lc fx.Lifecycle, repo repo.LockedRepo) (network.ResourceMan return nil, fmt.Errorf("error creating resource manager: %w", err) } - lc.Append(fx.Hook{ - OnStop: func(_ context.Context) error { - return mgr.Close() - }}) - return mgr, nil } From 48e28898a66dcd66522e3978206b1e54db1b8b24 Mon Sep 17 00:00:00 2001 From: Aayush Date: Wed, 2 Mar 2022 15:29:27 -0500 Subject: [PATCH 17/48] Revert "fix lint" This reverts commit 325a4c0e5b16a50fd2d3b89663e065a9116aeacb. --- cli/net.go | 30 +++++++++++++++++------------- node/modules/lp2p/rcmgr.go | 2 +- 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/cli/net.go b/cli/net.go index 524b0d753..18f21f767 100644 --- a/cli/net.go +++ b/cli/net.go @@ -643,7 +643,9 @@ var NetStatCmd = &cli.Command{ } enc := json.NewEncoder(os.Stdout) - return enc.Encode(result) + enc.Encode(result) + + return nil }, } @@ -692,19 +694,21 @@ var NetLimitCmd = &cli.Command{ return api.NetSetLimit(ctx, scope, limit) + } else { + if len(args) != 1 { + return xerrors.Errorf("must specify exactly one scope") + } + scope := args[0] + + result, err := api.NetLimit(ctx, scope) + if err != nil { + return err + } + + enc := json.NewEncoder(os.Stdout) + enc.Encode(result) } - if len(args) != 1 { - return xerrors.Errorf("must specify exactly one scope") - } - scope := args[0] - - result, err := api.NetLimit(ctx, scope) - if err != nil { - return err - } - - enc := json.NewEncoder(os.Stdout) - return enc.Encode(result) + return nil }, } diff --git a/node/modules/lp2p/rcmgr.go b/node/modules/lp2p/rcmgr.go index df52b4a4f..a012fc1f4 100644 --- a/node/modules/lp2p/rcmgr.go +++ b/node/modules/lp2p/rcmgr.go @@ -26,7 +26,7 @@ func ResourceManager(lc fx.Lifecycle, repo repo.LockedRepo) (network.ResourceMan limitsIn, err := os.Open(limitsFile) switch { case err == nil: - defer limitsIn.Close() //nolint:errcheck + defer limitsIn.Close() limiter, err = rcmgr.NewDefaultLimiterFromJSON(limitsIn) if err != nil { return nil, fmt.Errorf("error parsing limit file: %w", err) From 7dbf0ced82374a0b57c1650b43eee0fb1ee14f53 Mon Sep 17 00:00:00 2001 From: Aayush Date: Wed, 2 Mar 2022 15:39:14 -0500 Subject: [PATCH 18/48] Revert "make gen and friends" This reverts commit b360c9403f12b460081a32ce9c6e06a450f089cb. --- api/mocks/mock_full.go | 44 -------- api/proxy_gen.go | 39 ------- api/v0api/v0mocks/mock_full.go | 44 -------- documentation/en/api-v0-methods-miner.md | 117 -------------------- documentation/en/api-v0-methods.md | 117 -------------------- documentation/en/api-v1-unstable-methods.md | 117 -------------------- documentation/en/cli-lotus-miner.md | 54 --------- documentation/en/cli-lotus.md | 54 --------- 8 files changed, 586 deletions(-) diff --git a/api/mocks/mock_full.go b/api/mocks/mock_full.go index e985a794d..3f9d75433 100644 --- a/api/mocks/mock_full.go +++ b/api/mocks/mock_full.go @@ -1811,21 +1811,6 @@ func (mr *MockFullNodeMockRecorder) NetFindPeer(arg0, arg1 interface{}) *gomock. return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NetFindPeer", reflect.TypeOf((*MockFullNode)(nil).NetFindPeer), arg0, arg1) } -// NetLimit mocks base method. -func (m *MockFullNode) NetLimit(arg0 context.Context, arg1 string) (api.NetLimit, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "NetLimit", arg0, arg1) - ret0, _ := ret[0].(api.NetLimit) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// NetLimit indicates an expected call of NetLimit. -func (mr *MockFullNodeMockRecorder) NetLimit(arg0, arg1 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NetLimit", reflect.TypeOf((*MockFullNode)(nil).NetLimit), arg0, arg1) -} - // NetPeerInfo mocks base method. func (m *MockFullNode) NetPeerInfo(arg0 context.Context, arg1 peer.ID) (*api.ExtendedPeerInfo, error) { m.ctrl.T.Helper() @@ -1871,35 +1856,6 @@ func (mr *MockFullNodeMockRecorder) NetPubsubScores(arg0 interface{}) *gomock.Ca return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NetPubsubScores", reflect.TypeOf((*MockFullNode)(nil).NetPubsubScores), arg0) } -// NetSetLimit mocks base method. -func (m *MockFullNode) NetSetLimit(arg0 context.Context, arg1 string, arg2 api.NetLimit) error { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "NetSetLimit", arg0, arg1, arg2) - ret0, _ := ret[0].(error) - return ret0 -} - -// NetSetLimit indicates an expected call of NetSetLimit. -func (mr *MockFullNodeMockRecorder) NetSetLimit(arg0, arg1, arg2 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NetSetLimit", reflect.TypeOf((*MockFullNode)(nil).NetSetLimit), arg0, arg1, arg2) -} - -// NetStat mocks base method. -func (m *MockFullNode) NetStat(arg0 context.Context, arg1 string) (api.NetStat, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "NetStat", arg0, arg1) - ret0, _ := ret[0].(api.NetStat) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// NetStat indicates an expected call of NetStat. -func (mr *MockFullNodeMockRecorder) NetStat(arg0, arg1 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NetStat", reflect.TypeOf((*MockFullNode)(nil).NetStat), arg0, arg1) -} - // NodeStatus mocks base method. func (m *MockFullNode) NodeStatus(arg0 context.Context, arg1 bool) (api.NodeStatus, error) { m.ctrl.T.Helper() diff --git a/api/proxy_gen.go b/api/proxy_gen.go index 25a1730af..f2bc95a90 100644 --- a/api/proxy_gen.go +++ b/api/proxy_gen.go @@ -587,17 +587,11 @@ type NetStruct struct { NetFindPeer func(p0 context.Context, p1 peer.ID) (peer.AddrInfo, error) `perm:"read"` - NetLimit func(p0 context.Context, p1 string) (NetLimit, error) `perm:"read"` - NetPeerInfo func(p0 context.Context, p1 peer.ID) (*ExtendedPeerInfo, error) `perm:"read"` NetPeers func(p0 context.Context) ([]peer.AddrInfo, error) `perm:"read"` NetPubsubScores func(p0 context.Context) ([]PubsubScore, error) `perm:"read"` - - NetSetLimit func(p0 context.Context, p1 string, p2 NetLimit) error `perm:"admin"` - - NetStat func(p0 context.Context, p1 string) (NetStat, error) `perm:"read"` } } @@ -3637,17 +3631,6 @@ func (s *NetStub) NetFindPeer(p0 context.Context, p1 peer.ID) (peer.AddrInfo, er return *new(peer.AddrInfo), ErrNotSupported } -func (s *NetStruct) NetLimit(p0 context.Context, p1 string) (NetLimit, error) { - if s.Internal.NetLimit == nil { - return *new(NetLimit), ErrNotSupported - } - return s.Internal.NetLimit(p0, p1) -} - -func (s *NetStub) NetLimit(p0 context.Context, p1 string) (NetLimit, error) { - return *new(NetLimit), ErrNotSupported -} - func (s *NetStruct) NetPeerInfo(p0 context.Context, p1 peer.ID) (*ExtendedPeerInfo, error) { if s.Internal.NetPeerInfo == nil { return nil, ErrNotSupported @@ -3681,28 +3664,6 @@ func (s *NetStub) NetPubsubScores(p0 context.Context) ([]PubsubScore, error) { return *new([]PubsubScore), ErrNotSupported } -func (s *NetStruct) NetSetLimit(p0 context.Context, p1 string, p2 NetLimit) error { - if s.Internal.NetSetLimit == nil { - return ErrNotSupported - } - return s.Internal.NetSetLimit(p0, p1, p2) -} - -func (s *NetStub) NetSetLimit(p0 context.Context, p1 string, p2 NetLimit) error { - return ErrNotSupported -} - -func (s *NetStruct) NetStat(p0 context.Context, p1 string) (NetStat, error) { - if s.Internal.NetStat == nil { - return *new(NetStat), ErrNotSupported - } - return s.Internal.NetStat(p0, p1) -} - -func (s *NetStub) NetStat(p0 context.Context, p1 string) (NetStat, error) { - return *new(NetStat), ErrNotSupported -} - func (s *SignableStruct) Sign(p0 context.Context, p1 SignFunc) error { if s.Internal.Sign == nil { return ErrNotSupported diff --git a/api/v0api/v0mocks/mock_full.go b/api/v0api/v0mocks/mock_full.go index 26d795940..3e9caaee8 100644 --- a/api/v0api/v0mocks/mock_full.go +++ b/api/v0api/v0mocks/mock_full.go @@ -1724,21 +1724,6 @@ func (mr *MockFullNodeMockRecorder) NetFindPeer(arg0, arg1 interface{}) *gomock. return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NetFindPeer", reflect.TypeOf((*MockFullNode)(nil).NetFindPeer), arg0, arg1) } -// NetLimit mocks base method. -func (m *MockFullNode) NetLimit(arg0 context.Context, arg1 string) (api.NetLimit, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "NetLimit", arg0, arg1) - ret0, _ := ret[0].(api.NetLimit) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// NetLimit indicates an expected call of NetLimit. -func (mr *MockFullNodeMockRecorder) NetLimit(arg0, arg1 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NetLimit", reflect.TypeOf((*MockFullNode)(nil).NetLimit), arg0, arg1) -} - // NetPeerInfo mocks base method. func (m *MockFullNode) NetPeerInfo(arg0 context.Context, arg1 peer.ID) (*api.ExtendedPeerInfo, error) { m.ctrl.T.Helper() @@ -1784,35 +1769,6 @@ func (mr *MockFullNodeMockRecorder) NetPubsubScores(arg0 interface{}) *gomock.Ca return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NetPubsubScores", reflect.TypeOf((*MockFullNode)(nil).NetPubsubScores), arg0) } -// NetSetLimit mocks base method. -func (m *MockFullNode) NetSetLimit(arg0 context.Context, arg1 string, arg2 api.NetLimit) error { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "NetSetLimit", arg0, arg1, arg2) - ret0, _ := ret[0].(error) - return ret0 -} - -// NetSetLimit indicates an expected call of NetSetLimit. -func (mr *MockFullNodeMockRecorder) NetSetLimit(arg0, arg1, arg2 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NetSetLimit", reflect.TypeOf((*MockFullNode)(nil).NetSetLimit), arg0, arg1, arg2) -} - -// NetStat mocks base method. -func (m *MockFullNode) NetStat(arg0 context.Context, arg1 string) (api.NetStat, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "NetStat", arg0, arg1) - ret0, _ := ret[0].(api.NetStat) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// NetStat indicates an expected call of NetStat. -func (mr *MockFullNodeMockRecorder) NetStat(arg0, arg1 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NetStat", reflect.TypeOf((*MockFullNode)(nil).NetStat), arg0, arg1) -} - // PaychAllocateLane mocks base method. func (m *MockFullNode) PaychAllocateLane(arg0 context.Context, arg1 address.Address) (uint64, error) { m.ctrl.T.Helper() diff --git a/documentation/en/api-v0-methods-miner.md b/documentation/en/api-v0-methods-miner.md index a84f89842..1c3bbb5b1 100644 --- a/documentation/en/api-v0-methods-miner.md +++ b/documentation/en/api-v0-methods-miner.md @@ -81,12 +81,9 @@ * [NetConnectedness](#NetConnectedness) * [NetDisconnect](#NetDisconnect) * [NetFindPeer](#NetFindPeer) - * [NetLimit](#NetLimit) * [NetPeerInfo](#NetPeerInfo) * [NetPeers](#NetPeers) * [NetPubsubScores](#NetPubsubScores) - * [NetSetLimit](#NetSetLimit) - * [NetStat](#NetStat) * [Pieces](#Pieces) * [PiecesGetCIDInfo](#PiecesGetCIDInfo) * [PiecesGetPieceInfo](#PiecesGetPieceInfo) @@ -1706,32 +1703,6 @@ Response: } ``` -### NetLimit - - -Perms: read - -Inputs: -```json -[ - "string value" -] -``` - -Response: -```json -{ - "Memory": 123, - "Streams": 3, - "StreamsInbound": 1, - "StreamsOutbound": 2, - "Conns": 4, - "ConnsInbound": 3, - "ConnsOutbound": 4, - "FD": 5 -} -``` - ### NetPeerInfo @@ -1817,94 +1788,6 @@ Response: ] ``` -### NetSetLimit - - -Perms: admin - -Inputs: -```json -[ - "string value", - { - "Memory": 123, - "Streams": 3, - "StreamsInbound": 1, - "StreamsOutbound": 2, - "Conns": 4, - "ConnsInbound": 3, - "ConnsOutbound": 4, - "FD": 5 - } -] -``` - -Response: `{}` - -### NetStat - - -Perms: read - -Inputs: -```json -[ - "string value" -] -``` - -Response: -```json -{ - "System": { - "NumStreamsInbound": 123, - "NumStreamsOutbound": 123, - "NumConnsInbound": 123, - "NumConnsOutbound": 123, - "NumFD": 123, - "Memory": 9 - }, - "Transient": { - "NumStreamsInbound": 123, - "NumStreamsOutbound": 123, - "NumConnsInbound": 123, - "NumConnsOutbound": 123, - "NumFD": 123, - "Memory": 9 - }, - "Services": { - "abc": { - "NumStreamsInbound": 1, - "NumStreamsOutbound": 2, - "NumConnsInbound": 3, - "NumConnsOutbound": 4, - "NumFD": 5, - "Memory": 123 - } - }, - "Protocols": { - "abc": { - "NumStreamsInbound": 1, - "NumStreamsOutbound": 2, - "NumConnsInbound": 3, - "NumConnsOutbound": 4, - "NumFD": 5, - "Memory": 123 - } - }, - "Peers": { - "abc": { - "NumStreamsInbound": 1, - "NumStreamsOutbound": 2, - "NumConnsInbound": 3, - "NumConnsOutbound": 4, - "NumFD": 5, - "Memory": 123 - } - } -} -``` - ## Pieces diff --git a/documentation/en/api-v0-methods.md b/documentation/en/api-v0-methods.md index 883d4d274..88c4d8187 100644 --- a/documentation/en/api-v0-methods.md +++ b/documentation/en/api-v0-methods.md @@ -128,12 +128,9 @@ * [NetConnectedness](#NetConnectedness) * [NetDisconnect](#NetDisconnect) * [NetFindPeer](#NetFindPeer) - * [NetLimit](#NetLimit) * [NetPeerInfo](#NetPeerInfo) * [NetPeers](#NetPeers) * [NetPubsubScores](#NetPubsubScores) - * [NetSetLimit](#NetSetLimit) - * [NetStat](#NetStat) * [Paych](#Paych) * [PaychAllocateLane](#PaychAllocateLane) * [PaychAvailableFunds](#PaychAvailableFunds) @@ -3824,32 +3821,6 @@ Response: } ``` -### NetLimit - - -Perms: read - -Inputs: -```json -[ - "string value" -] -``` - -Response: -```json -{ - "Memory": 123, - "Streams": 3, - "StreamsInbound": 1, - "StreamsOutbound": 2, - "Conns": 4, - "ConnsInbound": 3, - "ConnsOutbound": 4, - "FD": 5 -} -``` - ### NetPeerInfo @@ -3935,94 +3906,6 @@ Response: ] ``` -### NetSetLimit - - -Perms: admin - -Inputs: -```json -[ - "string value", - { - "Memory": 123, - "Streams": 3, - "StreamsInbound": 1, - "StreamsOutbound": 2, - "Conns": 4, - "ConnsInbound": 3, - "ConnsOutbound": 4, - "FD": 5 - } -] -``` - -Response: `{}` - -### NetStat - - -Perms: read - -Inputs: -```json -[ - "string value" -] -``` - -Response: -```json -{ - "System": { - "NumStreamsInbound": 123, - "NumStreamsOutbound": 123, - "NumConnsInbound": 123, - "NumConnsOutbound": 123, - "NumFD": 123, - "Memory": 9 - }, - "Transient": { - "NumStreamsInbound": 123, - "NumStreamsOutbound": 123, - "NumConnsInbound": 123, - "NumConnsOutbound": 123, - "NumFD": 123, - "Memory": 9 - }, - "Services": { - "abc": { - "NumStreamsInbound": 1, - "NumStreamsOutbound": 2, - "NumConnsInbound": 3, - "NumConnsOutbound": 4, - "NumFD": 5, - "Memory": 123 - } - }, - "Protocols": { - "abc": { - "NumStreamsInbound": 1, - "NumStreamsOutbound": 2, - "NumConnsInbound": 3, - "NumConnsOutbound": 4, - "NumFD": 5, - "Memory": 123 - } - }, - "Peers": { - "abc": { - "NumStreamsInbound": 1, - "NumStreamsOutbound": 2, - "NumConnsInbound": 3, - "NumConnsOutbound": 4, - "NumFD": 5, - "Memory": 123 - } - } -} -``` - ## Paych The Paych methods are for interacting with and managing payment channels diff --git a/documentation/en/api-v1-unstable-methods.md b/documentation/en/api-v1-unstable-methods.md index a5fdd9994..7d5f4665e 100644 --- a/documentation/en/api-v1-unstable-methods.md +++ b/documentation/en/api-v1-unstable-methods.md @@ -134,12 +134,9 @@ * [NetConnectedness](#NetConnectedness) * [NetDisconnect](#NetDisconnect) * [NetFindPeer](#NetFindPeer) - * [NetLimit](#NetLimit) * [NetPeerInfo](#NetPeerInfo) * [NetPeers](#NetPeers) * [NetPubsubScores](#NetPubsubScores) - * [NetSetLimit](#NetSetLimit) - * [NetStat](#NetStat) * [Node](#Node) * [NodeStatus](#NodeStatus) * [Paych](#Paych) @@ -4185,32 +4182,6 @@ Response: } ``` -### NetLimit - - -Perms: read - -Inputs: -```json -[ - "string value" -] -``` - -Response: -```json -{ - "Memory": 123, - "Streams": 3, - "StreamsInbound": 1, - "StreamsOutbound": 2, - "Conns": 4, - "ConnsInbound": 3, - "ConnsOutbound": 4, - "FD": 5 -} -``` - ### NetPeerInfo @@ -4296,94 +4267,6 @@ Response: ] ``` -### NetSetLimit - - -Perms: admin - -Inputs: -```json -[ - "string value", - { - "Memory": 123, - "Streams": 3, - "StreamsInbound": 1, - "StreamsOutbound": 2, - "Conns": 4, - "ConnsInbound": 3, - "ConnsOutbound": 4, - "FD": 5 - } -] -``` - -Response: `{}` - -### NetStat - - -Perms: read - -Inputs: -```json -[ - "string value" -] -``` - -Response: -```json -{ - "System": { - "NumStreamsInbound": 123, - "NumStreamsOutbound": 123, - "NumConnsInbound": 123, - "NumConnsOutbound": 123, - "NumFD": 123, - "Memory": 9 - }, - "Transient": { - "NumStreamsInbound": 123, - "NumStreamsOutbound": 123, - "NumConnsInbound": 123, - "NumConnsOutbound": 123, - "NumFD": 123, - "Memory": 9 - }, - "Services": { - "abc": { - "NumStreamsInbound": 1, - "NumStreamsOutbound": 2, - "NumConnsInbound": 3, - "NumConnsOutbound": 4, - "NumFD": 5, - "Memory": 123 - } - }, - "Protocols": { - "abc": { - "NumStreamsInbound": 1, - "NumStreamsOutbound": 2, - "NumConnsInbound": 3, - "NumConnsOutbound": 4, - "NumFD": 5, - "Memory": 123 - } - }, - "Peers": { - "abc": { - "NumStreamsInbound": 1, - "NumStreamsOutbound": 2, - "NumConnsInbound": 3, - "NumConnsOutbound": 4, - "NumFD": 5, - "Memory": 123 - } - } -} -``` - ## Node These methods are general node management and status commands diff --git a/documentation/en/cli-lotus-miner.md b/documentation/en/cli-lotus-miner.md index bce1f1c47..ab0622ab1 100644 --- a/documentation/en/cli-lotus-miner.md +++ b/documentation/en/cli-lotus-miner.md @@ -1160,8 +1160,6 @@ COMMANDS: reachability Print information about reachability from the internet bandwidth Print bandwidth usage information block Manage network connection gating rules - stat Report resource usage for a scope - limit Get or set resource limits for a scope help, h Shows a list of commands or help for one command OPTIONS: @@ -1430,58 +1428,6 @@ OPTIONS: ``` -### lotus-miner net stat -``` -NAME: - lotus-miner net stat - Report resource usage for a scope - -USAGE: - lotus-miner net stat [command options] scope - -DESCRIPTION: - Report resource usage for a scope. - - The scope can be one of the following: - - system -- reports the system aggregate resource usage. - - transient -- reports the transient resource usage. - - svc: -- reports the resource usage of a specific service. - - proto: -- reports the resource usage of a specific protocol. - - peer: -- reports the resource usage of a specific peer. - - all -- reports the resource usage for all currently active scopes. - - -OPTIONS: - --help, -h show help (default: false) - -``` - -### lotus-miner net limit -``` -NAME: - lotus-miner net limit - Get or set resource limits for a scope - -USAGE: - lotus-miner net limit [command options] scope [limit] - -DESCRIPTION: - Get or set resource limits for a scope. - - The scope can be one of the following: - - system -- reports the system aggregate resource usage. - - transient -- reports the transient resource usage. - - svc: -- reports the resource usage of a specific service. - - proto: -- reports the resource usage of a specific protocol. - - peer: -- reports the resource usage of a specific peer. - - The limit is json-formatted, with the same structure as the limits file. - - -OPTIONS: - --set set the limit for a scope (default: false) - --help, -h show help (default: false) - -``` - ## lotus-miner pieces ``` NAME: diff --git a/documentation/en/cli-lotus.md b/documentation/en/cli-lotus.md index a5fd6deb9..b69ae2cac 100644 --- a/documentation/en/cli-lotus.md +++ b/documentation/en/cli-lotus.md @@ -2616,8 +2616,6 @@ COMMANDS: reachability Print information about reachability from the internet bandwidth Print bandwidth usage information block Manage network connection gating rules - stat Report resource usage for a scope - limit Get or set resource limits for a scope help, h Shows a list of commands or help for one command OPTIONS: @@ -2886,58 +2884,6 @@ OPTIONS: ``` -### lotus net stat -``` -NAME: - lotus net stat - Report resource usage for a scope - -USAGE: - lotus net stat [command options] scope - -DESCRIPTION: - Report resource usage for a scope. - - The scope can be one of the following: - - system -- reports the system aggregate resource usage. - - transient -- reports the transient resource usage. - - svc: -- reports the resource usage of a specific service. - - proto: -- reports the resource usage of a specific protocol. - - peer: -- reports the resource usage of a specific peer. - - all -- reports the resource usage for all currently active scopes. - - -OPTIONS: - --help, -h show help (default: false) - -``` - -### lotus net limit -``` -NAME: - lotus net limit - Get or set resource limits for a scope - -USAGE: - lotus net limit [command options] scope [limit] - -DESCRIPTION: - Get or set resource limits for a scope. - - The scope can be one of the following: - - system -- reports the system aggregate resource usage. - - transient -- reports the transient resource usage. - - svc: -- reports the resource usage of a specific service. - - proto: -- reports the resource usage of a specific protocol. - - peer: -- reports the resource usage of a specific peer. - - The limit is json-formatted, with the same structure as the limits file. - - -OPTIONS: - --set set the limit for a scope (default: false) - --help, -h show help (default: false) - -``` - ## lotus sync ``` NAME: From bf0470ad0903e7c780f95a6c0cd4cb5de29652fe Mon Sep 17 00:00:00 2001 From: Aayush Date: Wed, 2 Mar 2022 15:39:15 -0500 Subject: [PATCH 19/48] Revert "fix issues with fil-markets/data-transfer updates" This reverts commit ca4ee1e8cfb202c8f76f63d5b1a6f3aff6ec24e6. --- markets/loggers/loggers.go | 1 + 1 file changed, 1 insertion(+) diff --git a/markets/loggers/loggers.go b/markets/loggers/loggers.go index 0d542a45d..2d13a64a1 100644 --- a/markets/loggers/loggers.go +++ b/markets/loggers/loggers.go @@ -40,6 +40,7 @@ func DataTransferLogger(event datatransfer.Event, state datatransfer.ChannelStat "sent", state.Sent(), "received", state.Received(), "queued", state.Queued(), + "received count", state.ReceivedCidsTotal(), "total size", state.TotalSize(), "remote peer", state.OtherPeer(), "event message", event.Message, From a7e02f7207180c42655a60efb0ab1443d0e1a3e6 Mon Sep 17 00:00:00 2001 From: Aayush Date: Wed, 2 Mar 2022 15:39:16 -0500 Subject: [PATCH 20/48] Revert "update go-fil-markets@v0.19.0-rc1" This reverts commit 2e5474e864d0f3ffd323f881946faa1b7c0a707d. --- go.mod | 5 +++-- go.sum | 8 ++++---- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/go.mod b/go.mod index b66011246..e59744190 100644 --- a/go.mod +++ b/go.mod @@ -35,10 +35,10 @@ require ( github.com/filecoin-project/go-cbor-util v0.0.1 github.com/filecoin-project/go-commp-utils v0.1.3 github.com/filecoin-project/go-crypto v0.0.1 - github.com/filecoin-project/go-data-transfer v1.14.0 + github.com/filecoin-project/go-data-transfer v1.13.0 github.com/filecoin-project/go-fil-commcid v0.1.0 github.com/filecoin-project/go-fil-commp-hashhash v0.1.0 - github.com/filecoin-project/go-fil-markets v1.19.0-rc1 + github.com/filecoin-project/go-fil-markets v1.17.0 github.com/filecoin-project/go-jsonrpc v0.1.5 github.com/filecoin-project/go-padreader v0.0.1 github.com/filecoin-project/go-paramfetch v0.0.4 @@ -126,6 +126,7 @@ require ( github.com/libp2p/go-libp2p-tls v0.3.1 github.com/libp2p/go-libp2p-yamux v0.8.0 github.com/libp2p/go-maddr-filter v0.1.0 + github.com/libp2p/go-yamux/v3 v3.0.2 // indirect github.com/mattn/go-isatty v0.0.14 github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 github.com/mitchellh/go-homedir v1.1.0 diff --git a/go.sum b/go.sum index 050cd4800..7d5b7200f 100644 --- a/go.sum +++ b/go.sum @@ -316,8 +316,8 @@ github.com/filecoin-project/go-commp-utils v0.1.3/go.mod h1:3ENlD1pZySaUout0p9AN github.com/filecoin-project/go-crypto v0.0.0-20191218222705-effae4ea9f03/go.mod h1:+viYnvGtUTgJRdy6oaeF4MTFKAfatX071MPDPBL11EQ= github.com/filecoin-project/go-crypto v0.0.1 h1:AcvpSGGCgjaY8y1az6AMfKQWreF/pWO2JJGLl6gCq6o= github.com/filecoin-project/go-crypto v0.0.1/go.mod h1:+viYnvGtUTgJRdy6oaeF4MTFKAfatX071MPDPBL11EQ= -github.com/filecoin-project/go-data-transfer v1.14.0 h1:4pnfJk8FYtqcdAg+QRGzaz57seUC/Tz+HJgPuGB7zdg= -github.com/filecoin-project/go-data-transfer v1.14.0/go.mod h1:wNJKhaLLYBJDM3VFvgvYi4iUjPa69pz/1Q5Q4HzX2wE= +github.com/filecoin-project/go-data-transfer v1.13.0 h1:UqjBfacClqAmnzukek1oPxJXDM3l5UI/WX8CRN2/VkM= +github.com/filecoin-project/go-data-transfer v1.13.0/go.mod h1:TcUtAdQl1ofnLV9oH3gPC93Hjce9yuKnq4O4j2M/BU4= github.com/filecoin-project/go-ds-versioning v0.0.0-20211206185234-508abd7c2aff/go.mod h1:C9/l9PnB1+mwPa26BBVpCjG/XQCB0yj/q5CK2J8X1I4= github.com/filecoin-project/go-ds-versioning v0.1.1 h1:JiyBqaQlwC+UM0WhcBtVEeT3XrX59mQhT8U3p7nu86o= github.com/filecoin-project/go-ds-versioning v0.1.1/go.mod h1:C9/l9PnB1+mwPa26BBVpCjG/XQCB0yj/q5CK2J8X1I4= @@ -327,8 +327,8 @@ github.com/filecoin-project/go-fil-commcid v0.1.0 h1:3R4ds1A9r6cr8mvZBfMYxTS88Oq github.com/filecoin-project/go-fil-commcid v0.1.0/go.mod h1:Eaox7Hvus1JgPrL5+M3+h7aSPHc0cVqpSxA+TxIEpZQ= github.com/filecoin-project/go-fil-commp-hashhash v0.1.0 h1:imrrpZWEHRnNqqv0tN7LXep5bFEVOVmQWHJvl2mgsGo= github.com/filecoin-project/go-fil-commp-hashhash v0.1.0/go.mod h1:73S8WSEWh9vr0fDJVnKADhfIv/d6dCbAGaAGWbdJEI8= -github.com/filecoin-project/go-fil-markets v1.19.0-rc1 h1:T8Ql+Yj9bm0nzn9o43WBrRGxtWj2aYRq2UY7hDaep0I= -github.com/filecoin-project/go-fil-markets v1.19.0-rc1/go.mod h1:qsb3apmo4RSJYCEq40QxVdU7UZospN6nFJLOBHuaIbc= +github.com/filecoin-project/go-fil-markets v1.17.0 h1:i9U6hZ+peri6Ygfwoda0YBk4bo1SHkd58EPBRgXCRlQ= +github.com/filecoin-project/go-fil-markets v1.17.0/go.mod h1:tKRMkDovSJiUo8yDt6YQM/gHMfNVYya0YTdayGhRnRY= github.com/filecoin-project/go-hamt-ipld v0.1.5 h1:uoXrKbCQZ49OHpsTCkrThPNelC4W3LPEk0OrS/ytIBM= github.com/filecoin-project/go-hamt-ipld v0.1.5/go.mod h1:6Is+ONR5Cd5R6XZoCse1CWaXZc0Hdb/JeX+EQCQzX24= github.com/filecoin-project/go-hamt-ipld/v2 v2.0.0 h1:b3UDemBYN2HNfk3KOXNuxgTTxlWi3xVvbQP0IT38fvM= From ce040b7d338c39bd551180ae1ec615a5a23de446 Mon Sep 17 00:00:00 2001 From: Aayush Date: Wed, 2 Mar 2022 15:39:17 -0500 Subject: [PATCH 21/48] Revert "add description for net stat and limit commands" This reverts commit 19c8ea328808c36d2d7128dd4e45e8d5098914ef. --- cli/net.go | 25 ++----------------------- 1 file changed, 2 insertions(+), 23 deletions(-) diff --git a/cli/net.go b/cli/net.go index 18f21f767..104b4b40e 100644 --- a/cli/net.go +++ b/cli/net.go @@ -611,18 +611,8 @@ var NetBlockListCmd = &cli.Command{ var NetStatCmd = &cli.Command{ Name: "stat", - Usage: "Report resource usage for a scope", + Usage: "report resource stat for a scope", ArgsUsage: "scope", - Description: `Report resource usage for a scope. - - The scope can be one of the following: - - system -- reports the system aggregate resource usage. - - transient -- reports the transient resource usage. - - svc: -- reports the resource usage of a specific service. - - proto: -- reports the resource usage of a specific protocol. - - peer: -- reports the resource usage of a specific peer. - - all -- reports the resource usage for all currently active scopes. -`, Action: func(cctx *cli.Context) error { api, closer, err := GetAPI(cctx) if err != nil { @@ -651,19 +641,8 @@ var NetStatCmd = &cli.Command{ var NetLimitCmd = &cli.Command{ Name: "limit", - Usage: "Get or set resource limits for a scope", + Usage: "get or set resource limit for a scope", ArgsUsage: "scope [limit]", - Description: `Get or set resource limits for a scope. - - The scope can be one of the following: - - system -- reports the system aggregate resource usage. - - transient -- reports the transient resource usage. - - svc: -- reports the resource usage of a specific service. - - proto: -- reports the resource usage of a specific protocol. - - peer: -- reports the resource usage of a specific peer. - - The limit is json-formatted, with the same structure as the limits file. -`, Flags: []cli.Flag{ &cli.BoolFlag{ Name: "set", From 4968babb32a3e18437354ebdd52bd5dc89c80c63 Mon Sep 17 00:00:00 2001 From: Aayush Date: Wed, 2 Mar 2022 15:39:17 -0500 Subject: [PATCH 22/48] Revert "go mod: update go-libp2p-resource-manager@v0.1.2" This reverts commit 6260271b780ad2a7d9cd4d15c5646c843136c54c. --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index e59744190..0f3ae1da7 100644 --- a/go.mod +++ b/go.mod @@ -120,7 +120,7 @@ require ( github.com/libp2p/go-libp2p-pubsub v0.6.1 github.com/libp2p/go-libp2p-quic-transport v0.16.0 github.com/libp2p/go-libp2p-record v0.1.3 - github.com/libp2p/go-libp2p-resource-manager v0.1.2 + github.com/libp2p/go-libp2p-resource-manager v0.1.1 github.com/libp2p/go-libp2p-routing-helpers v0.2.3 github.com/libp2p/go-libp2p-swarm v0.10.0 github.com/libp2p/go-libp2p-tls v0.3.1 diff --git a/go.sum b/go.sum index 7d5b7200f..a3eff4794 100644 --- a/go.sum +++ b/go.sum @@ -1156,8 +1156,8 @@ github.com/libp2p/go-libp2p-record v0.1.2/go.mod h1:pal0eNcT5nqZaTV7UGhqeGqxFgGd github.com/libp2p/go-libp2p-record v0.1.3 h1:R27hoScIhQf/A8XJZ8lYpnqh9LatJ5YbHs28kCIfql0= github.com/libp2p/go-libp2p-record v0.1.3/go.mod h1:yNUff/adKIfPnYQXgp6FQmNu3gLJ6EMg7+/vv2+9pY4= github.com/libp2p/go-libp2p-resource-manager v0.1.0/go.mod h1:wJPNjeE4XQlxeidwqVY5G6DLOKqFK33u2n8blpl0I6Y= -github.com/libp2p/go-libp2p-resource-manager v0.1.2 h1:t66B/6EF6ivWEUgvO34NKOT3oPtkb+JTBJHdsIMx+mg= -github.com/libp2p/go-libp2p-resource-manager v0.1.2/go.mod h1:wJPNjeE4XQlxeidwqVY5G6DLOKqFK33u2n8blpl0I6Y= +github.com/libp2p/go-libp2p-resource-manager v0.1.1 h1:JZ++ezpl2SVP2bj4Z+EPSmrKFS9vQVpkgC28G3DBJcA= +github.com/libp2p/go-libp2p-resource-manager v0.1.1/go.mod h1:wJPNjeE4XQlxeidwqVY5G6DLOKqFK33u2n8blpl0I6Y= github.com/libp2p/go-libp2p-routing v0.0.1/go.mod h1:N51q3yTr4Zdr7V8Jt2JIktVU+3xBBylx1MZeVA6t1Ys= github.com/libp2p/go-libp2p-routing v0.1.0/go.mod h1:zfLhI1RI8RLEzmEaaPwzonRvXeeSHddONWkcTcB54nE= github.com/libp2p/go-libp2p-routing-helpers v0.2.3 h1:xY61alxJ6PurSi+MXbywZpelvuU4U4p/gPTxjqCqTzY= From 581cb34b11695a8666280ccb3bdb690b2e0a8570 Mon Sep 17 00:00:00 2001 From: Aayush Date: Wed, 2 Mar 2022 15:39:18 -0500 Subject: [PATCH 23/48] Revert "go mod: update go-yamux@v3.0.2" This reverts commit 83427c478f5af534e39f92dcc2f378627ce63fef. --- go.mod | 1 - go.sum | 3 +-- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 0f3ae1da7..8fd765eda 100644 --- a/go.mod +++ b/go.mod @@ -126,7 +126,6 @@ require ( github.com/libp2p/go-libp2p-tls v0.3.1 github.com/libp2p/go-libp2p-yamux v0.8.0 github.com/libp2p/go-maddr-filter v0.1.0 - github.com/libp2p/go-yamux/v3 v3.0.2 // indirect github.com/mattn/go-isatty v0.0.14 github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 github.com/mitchellh/go-homedir v1.1.0 diff --git a/go.sum b/go.sum index a3eff4794..e29c59dba 100644 --- a/go.sum +++ b/go.sum @@ -1317,9 +1317,8 @@ github.com/libp2p/go-yamux v1.4.1 h1:P1Fe9vF4th5JOxxgQvfbOHkrGqIZniTLf+ddhZp8YTI github.com/libp2p/go-yamux v1.4.1/go.mod h1:fr7aVgmdNGJK+N1g+b6DW6VxzbRCjCOejR/hkmpooHE= github.com/libp2p/go-yamux/v2 v2.2.0/go.mod h1:3So6P6TV6r75R9jiBpiIKgU/66lOarCZjqROGxzPpPQ= github.com/libp2p/go-yamux/v2 v2.3.0/go.mod h1:iTU+lOIn/2h0AgKcL49clNTwfEw+WSfDYrXe05EyKIs= +github.com/libp2p/go-yamux/v3 v3.0.1 h1:lIdxHGVZ+y/EHgCrqGNt4Q+Mk9qu26MbOWH/yRw+Ihk= github.com/libp2p/go-yamux/v3 v3.0.1/go.mod h1:s2LsDhHbh+RfCsQoICSYt58U2f8ijtPANFD8BmE74Bo= -github.com/libp2p/go-yamux/v3 v3.0.2 h1:LW0q5+A1Wy0npEsPJP9wmare2NH4ohNluN5EWVwv2mE= -github.com/libp2p/go-yamux/v3 v3.0.2/go.mod h1:s2LsDhHbh+RfCsQoICSYt58U2f8ijtPANFD8BmE74Bo= github.com/libp2p/zeroconf/v2 v2.1.1/go.mod h1:fuJqLnUwZTshS3U/bMRJ3+ow/v9oid1n0DmyYyNO1Xs= github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= From e49d499bb5d108e92a38f5a58f740837fa9a2981 Mon Sep 17 00:00:00 2001 From: Aayush Date: Wed, 2 Mar 2022 15:39:18 -0500 Subject: [PATCH 24/48] Revert "fix mocknet.New invocation" This reverts commit 0870f48b5caaaa78e505b398ce13962b5ecdbc19. --- chain/sync_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/chain/sync_test.go b/chain/sync_test.go index 35566169f..0779551bc 100644 --- a/chain/sync_test.go +++ b/chain/sync_test.go @@ -104,7 +104,7 @@ func prepSyncTest(t testing.TB, h int) *syncTestUtil { ctx: ctx, cancel: cancel, - mn: mocknet.New(), + mn: mocknet.New(ctx), g: g, us: filcns.DefaultUpgradeSchedule(), } @@ -158,7 +158,7 @@ func prepSyncTestWithV5Height(t testing.TB, h int, v5height abi.ChainEpoch) *syn ctx: ctx, cancel: cancel, - mn: mocknet.New(), + mn: mocknet.New(ctx), g: g, us: sched, } From f281027a1c204cb18c41c917ec385a56d382e707 Mon Sep 17 00:00:00 2001 From: Aayush Date: Wed, 2 Mar 2022 15:39:19 -0500 Subject: [PATCH 25/48] Revert "fix mocknet.New invocation" This reverts commit c3fb68545a7fe8ce572f947907100e46d2d52fdb. --- itests/kit/ensemble.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/itests/kit/ensemble.go b/itests/kit/ensemble.go index 0227ee81e..dfd3d8cd7 100644 --- a/itests/kit/ensemble.go +++ b/itests/kit/ensemble.go @@ -277,7 +277,7 @@ func (n *Ensemble) Start() *Ensemble { // We haven't been bootstrapped yet, we need to generate genesis and // create the networking backbone. gtempl = n.generateGenesis() - n.mn = mocknet.New() + n.mn = mocknet.New(ctx) } // --------------------- From f9f6f35b93d6565f71e1e5ab08c893746054655b Mon Sep 17 00:00:00 2001 From: Aayush Date: Wed, 2 Mar 2022 15:39:19 -0500 Subject: [PATCH 26/48] Revert "go mod: update go-libp2p-pubsub" This reverts commit aa599bfaf99aca0048e76eb8c742385df74eee60. --- go.mod | 2 +- go.sum | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 8fd765eda..b46b653d5 100644 --- a/go.mod +++ b/go.mod @@ -117,7 +117,7 @@ require ( github.com/libp2p/go-libp2p-kad-dht v0.15.0 github.com/libp2p/go-libp2p-noise v0.3.0 github.com/libp2p/go-libp2p-peerstore v0.6.0 - github.com/libp2p/go-libp2p-pubsub v0.6.1 + github.com/libp2p/go-libp2p-pubsub v0.6.0 github.com/libp2p/go-libp2p-quic-transport v0.16.0 github.com/libp2p/go-libp2p-record v0.1.3 github.com/libp2p/go-libp2p-resource-manager v0.1.1 diff --git a/go.sum b/go.sum index e29c59dba..02acbd5e6 100644 --- a/go.sum +++ b/go.sum @@ -1138,9 +1138,8 @@ github.com/libp2p/go-libp2p-pnet v0.2.0/go.mod h1:Qqvq6JH/oMZGwqs3N1Fqhv8NVhrdYc github.com/libp2p/go-libp2p-protocol v0.0.1/go.mod h1:Af9n4PiruirSDjHycM1QuiMi/1VZNHYcK8cLgFJLZ4s= github.com/libp2p/go-libp2p-protocol v0.1.0/go.mod h1:KQPHpAabB57XQxGrXCNvbL6UEXfQqUgC/1adR2Xtflk= github.com/libp2p/go-libp2p-pubsub v0.1.1/go.mod h1:ZwlKzRSe1eGvSIdU5bD7+8RZN/Uzw0t1Bp9R1znpR/Q= +github.com/libp2p/go-libp2p-pubsub v0.6.0 h1:98+RXuEWW17U6cAijK1yaTf6mw/B+n5yPA421z+dlo0= github.com/libp2p/go-libp2p-pubsub v0.6.0/go.mod h1:nJv87QM2cU0w45KPR1rZicq+FmFIOD16zmT+ep1nOmg= -github.com/libp2p/go-libp2p-pubsub v0.6.1 h1:wycbV+f4rreCoVY61Do6g/BUk0RIrbNRcYVbn+QkjGk= -github.com/libp2p/go-libp2p-pubsub v0.6.1/go.mod h1:nJv87QM2cU0w45KPR1rZicq+FmFIOD16zmT+ep1nOmg= github.com/libp2p/go-libp2p-quic-transport v0.1.1/go.mod h1:wqG/jzhF3Pu2NrhJEvE+IE0NTHNXslOPn9JQzyCAxzU= github.com/libp2p/go-libp2p-quic-transport v0.10.0/go.mod h1:RfJbZ8IqXIhxBRm5hqUEJqjiiY8xmEuq3HUDS993MkA= github.com/libp2p/go-libp2p-quic-transport v0.11.2/go.mod h1:wlanzKtIh6pHrq+0U3p3DY9PJfGqxMgPaGKaK5LifwQ= From 11fc068cfe09a7e33d4329f4bcea26c3f6ef0a83 Mon Sep 17 00:00:00 2001 From: Aayush Date: Wed, 2 Mar 2022 15:39:19 -0500 Subject: [PATCH 27/48] Revert "go mod: go-libp2p-resource-manager@v0.1.1" This reverts commit 62c0f35b5ab2f17b63f90c6a1ed220d3e6e9e7ac. --- go.mod | 2 +- go.sum | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index b46b653d5..432ce7486 100644 --- a/go.mod +++ b/go.mod @@ -120,7 +120,7 @@ require ( github.com/libp2p/go-libp2p-pubsub v0.6.0 github.com/libp2p/go-libp2p-quic-transport v0.16.0 github.com/libp2p/go-libp2p-record v0.1.3 - github.com/libp2p/go-libp2p-resource-manager v0.1.1 + github.com/libp2p/go-libp2p-resource-manager v0.1.0 github.com/libp2p/go-libp2p-routing-helpers v0.2.3 github.com/libp2p/go-libp2p-swarm v0.10.0 github.com/libp2p/go-libp2p-tls v0.3.1 diff --git a/go.sum b/go.sum index 02acbd5e6..c23fb89e3 100644 --- a/go.sum +++ b/go.sum @@ -1154,9 +1154,8 @@ github.com/libp2p/go-libp2p-record v0.1.1/go.mod h1:VRgKajOyMVgP/F0L5g3kH7SVskp1 github.com/libp2p/go-libp2p-record v0.1.2/go.mod h1:pal0eNcT5nqZaTV7UGhqeGqxFgGdsU/9W//C8dqjQDk= github.com/libp2p/go-libp2p-record v0.1.3 h1:R27hoScIhQf/A8XJZ8lYpnqh9LatJ5YbHs28kCIfql0= github.com/libp2p/go-libp2p-record v0.1.3/go.mod h1:yNUff/adKIfPnYQXgp6FQmNu3gLJ6EMg7+/vv2+9pY4= +github.com/libp2p/go-libp2p-resource-manager v0.1.0 h1:tYpbhLPVC4egLavupAi9jGKKLeMemyGq5tnfBc8taBs= github.com/libp2p/go-libp2p-resource-manager v0.1.0/go.mod h1:wJPNjeE4XQlxeidwqVY5G6DLOKqFK33u2n8blpl0I6Y= -github.com/libp2p/go-libp2p-resource-manager v0.1.1 h1:JZ++ezpl2SVP2bj4Z+EPSmrKFS9vQVpkgC28G3DBJcA= -github.com/libp2p/go-libp2p-resource-manager v0.1.1/go.mod h1:wJPNjeE4XQlxeidwqVY5G6DLOKqFK33u2n8blpl0I6Y= github.com/libp2p/go-libp2p-routing v0.0.1/go.mod h1:N51q3yTr4Zdr7V8Jt2JIktVU+3xBBylx1MZeVA6t1Ys= github.com/libp2p/go-libp2p-routing v0.1.0/go.mod h1:zfLhI1RI8RLEzmEaaPwzonRvXeeSHddONWkcTcB54nE= github.com/libp2p/go-libp2p-routing-helpers v0.2.3 h1:xY61alxJ6PurSi+MXbywZpelvuU4U4p/gPTxjqCqTzY= From 99e1b9e2aa3979f22654d974f1eb6d43247b851a Mon Sep 17 00:00:00 2001 From: Aayush Date: Wed, 2 Mar 2022 15:39:20 -0500 Subject: [PATCH 28/48] Revert "add net stat and limit cli" This reverts commit 0de1566eaff66bbd4574ae9806968dde6c676a5f. --- cli/net.go | 85 ------------------------------------------------------ 1 file changed, 85 deletions(-) diff --git a/cli/net.go b/cli/net.go index 104b4b40e..fdd0a13d6 100644 --- a/cli/net.go +++ b/cli/net.go @@ -36,8 +36,6 @@ var NetCmd = &cli.Command{ NetReachability, NetBandwidthCmd, NetBlockCmd, - NetStatCmd, - NetLimitCmd, }, } @@ -608,86 +606,3 @@ var NetBlockListCmd = &cli.Command{ return nil }, } - -var NetStatCmd = &cli.Command{ - Name: "stat", - Usage: "report resource stat for a scope", - ArgsUsage: "scope", - Action: func(cctx *cli.Context) error { - api, closer, err := GetAPI(cctx) - if err != nil { - return err - } - defer closer() - ctx := ReqContext(cctx) - - args := cctx.Args().Slice() - if len(args) != 1 { - return xerrors.Errorf("must specify exactly one scope") - } - scope := args[0] - - result, err := api.NetStat(ctx, scope) - if err != nil { - return err - } - - enc := json.NewEncoder(os.Stdout) - enc.Encode(result) - - return nil - }, -} - -var NetLimitCmd = &cli.Command{ - Name: "limit", - Usage: "get or set resource limit for a scope", - ArgsUsage: "scope [limit]", - Flags: []cli.Flag{ - &cli.BoolFlag{ - Name: "set", - Usage: "set the limit for a scope", - }, - }, - Action: func(cctx *cli.Context) error { - api, closer, err := GetAPI(cctx) - if err != nil { - return err - } - defer closer() - ctx := ReqContext(cctx) - args := cctx.Args().Slice() - - if cctx.Bool("set") { - if len(args) != 2 { - return xerrors.Errorf("must specify exactly a scope and a limit") - } - scope := args[0] - limitStr := args[1] - - var limit atypes.NetLimit - err := json.Unmarshal([]byte(limitStr), &limit) - if err != nil { - return xerrors.Errorf("error decoding limit: %w", err) - } - - return api.NetSetLimit(ctx, scope, limit) - - } else { - if len(args) != 1 { - return xerrors.Errorf("must specify exactly one scope") - } - scope := args[0] - - result, err := api.NetLimit(ctx, scope) - if err != nil { - return err - } - - enc := json.NewEncoder(os.Stdout) - enc.Encode(result) - } - - return nil - }, -} From bac17061d45dc85ea04421ffcc25d215527a555c Mon Sep 17 00:00:00 2001 From: Aayush Date: Wed, 2 Mar 2022 15:39:21 -0500 Subject: [PATCH 29/48] Revert "add examples to docgen" This reverts commit 39bf59d37217bd31f6708947717568183dc24882. --- api/docgen/docgen.go | 28 ---------------------------- 1 file changed, 28 deletions(-) diff --git a/api/docgen/docgen.go b/api/docgen/docgen.go index 1190b0dc4..571599935 100644 --- a/api/docgen/docgen.go +++ b/api/docgen/docgen.go @@ -300,34 +300,6 @@ func init() { Error: "", }) addExample(storiface.ResourceTable) - addExample(network.ScopeStat{ - Memory: 123, - NumStreamsInbound: 1, - NumStreamsOutbound: 2, - NumConnsInbound: 3, - NumConnsOutbound: 4, - NumFD: 5, - }) - addExample(map[string]network.ScopeStat{ - "abc": { - Memory: 123, - NumStreamsInbound: 1, - NumStreamsOutbound: 2, - NumConnsInbound: 3, - NumConnsOutbound: 4, - NumFD: 5, - }}) - addExample(api.NetLimit{ - Memory: 123, - StreamsInbound: 1, - StreamsOutbound: 2, - Streams: 3, - ConnsInbound: 3, - ConnsOutbound: 4, - Conns: 4, - FD: 5, - }) - } func GetAPIType(name, pkg string) (i interface{}, t reflect.Type, permStruct []reflect.Type) { From b8747e3afcf67cfabe822ddf5b6d31c8306b8eeb Mon Sep 17 00:00:00 2001 From: Aayush Date: Wed, 2 Mar 2022 15:39:21 -0500 Subject: [PATCH 30/48] Revert "add resource manager Net(Set)Limit api" This reverts commit 554848fe6b2384780b08632c71c304df899a7200. --- api/api_net.go | 4 +- api/types.go | 16 +--- node/impl/net/rcmgr.go | 171 +---------------------------------------- 3 files changed, 3 insertions(+), 188 deletions(-) diff --git a/api/api_net.go b/api/api_net.go index 7dddb09ac..0a389e5ed 100644 --- a/api/api_net.go +++ b/api/api_net.go @@ -52,9 +52,7 @@ type Net interface { NetBlockList(ctx context.Context) (NetBlockList, error) //perm:read // ResourceManager API - NetStat(ctx context.Context, scope string) (NetStat, error) //perm:read - NetLimit(ctx context.Context, scope string) (NetLimit, error) //perm:read - NetSetLimit(ctx context.Context, scope string, limit NetLimit) error //perm:admin + NetStat(ctx context.Context, scope string) (NetStat, error) //perm:read // ID returns peerID of libp2p node backing this API ID(context.Context) (peer.ID, error) //perm:read diff --git a/api/types.go b/api/types.go index c688edf4b..66fb79850 100644 --- a/api/types.go +++ b/api/types.go @@ -135,21 +135,7 @@ type NetStat struct { Transient *network.ScopeStat `json:",omitempty"` Services map[string]network.ScopeStat `json:",omitempty"` Protocols map[string]network.ScopeStat `json:",omitempty"` - Peers map[string]network.ScopeStat `json:",omitempty"` -} - -type NetLimit struct { - Dynamic bool `json:",omitempty"` - // set if Dynamic is false - Memory int64 `json:",omitempty"` - // set if Dynamic is true - MemoryFraction float64 `json:",omitempty"` - MinMemory int64 `json:",omitempty"` - MaxMemory int64 `json:",omitempty"` - - Streams, StreamsInbound, StreamsOutbound int - Conns, ConnsInbound, ConnsOutbound int - FD int + Peers map[string]network.ScopeStat } type ExtendedPeerInfo struct { diff --git a/node/impl/net/rcmgr.go b/node/impl/net/rcmgr.go index 1b6d57d8e..2084d3a35 100644 --- a/node/impl/net/rcmgr.go +++ b/node/impl/net/rcmgr.go @@ -85,7 +85,7 @@ func (a *NetAPI) NetStat(ctx context.Context, scope string) (result api.NetStat, p := scope[5:] pid, err := peer.IDFromString(p) if err != nil { - return result, xerrors.Errorf("invalid peer ID: %s: %w", p, err) + return result, err } err = a.ResourceManager.ViewPeer(pid, func(s network.PeerScope) error { stat := s.Stat() @@ -100,172 +100,3 @@ func (a *NetAPI) NetStat(ctx context.Context, scope string) (result api.NetStat, return result, xerrors.Errorf("invalid scope %s", scope) } } - -func (a *NetAPI) NetLimit(ctx context.Context, scope string) (result api.NetLimit, err error) { - getLimit := func(s network.ResourceScope) error { - limiter, ok := s.(rcmgr.ResourceScopeLimiter) - if !ok { - return xerrors.Errorf("resource scope doesn't implement ResourceScopeLimiter interface") - } - - limit := limiter.Limit() - switch l := limit.(type) { - case *rcmgr.StaticLimit: - result.Memory = l.Memory - result.Streams = l.BaseLimit.Streams - result.StreamsInbound = l.BaseLimit.StreamsInbound - result.StreamsOutbound = l.BaseLimit.StreamsOutbound - result.Conns = l.BaseLimit.Conns - result.ConnsInbound = l.BaseLimit.ConnsInbound - result.ConnsOutbound = l.BaseLimit.ConnsOutbound - result.FD = l.BaseLimit.FD - - case *rcmgr.DynamicLimit: - result.Dynamic = true - result.MemoryFraction = l.MemoryLimit.MemoryFraction - result.MinMemory = l.MemoryLimit.MinMemory - result.MaxMemory = l.MemoryLimit.MaxMemory - result.Streams = l.BaseLimit.Streams - result.StreamsInbound = l.BaseLimit.StreamsInbound - result.StreamsOutbound = l.BaseLimit.StreamsOutbound - result.Conns = l.BaseLimit.Conns - result.ConnsInbound = l.BaseLimit.ConnsInbound - result.ConnsOutbound = l.BaseLimit.ConnsOutbound - result.FD = l.BaseLimit.FD - - default: - return xerrors.Errorf("unknown limit type %T", limit) - } - - return nil - } - - switch { - case scope == "system": - err = a.ResourceManager.ViewSystem(func(s network.ResourceScope) error { - return getLimit(s) - }) - return result, err - - case scope == "transient": - err = a.ResourceManager.ViewTransient(func(s network.ResourceScope) error { - return getLimit(s) - }) - return result, err - - case strings.HasPrefix(scope, "svc:"): - svc := scope[4:] - err = a.ResourceManager.ViewService(svc, func(s network.ServiceScope) error { - return getLimit(s) - }) - return result, err - - case strings.HasPrefix(scope, "proto:"): - proto := scope[6:] - err = a.ResourceManager.ViewProtocol(protocol.ID(proto), func(s network.ProtocolScope) error { - return getLimit(s) - }) - return result, err - - case strings.HasPrefix(scope, "peer:"): - p := scope[5:] - pid, err := peer.IDFromString(p) - if err != nil { - return result, xerrors.Errorf("invalid peer ID: %s: %w", p, err) - } - err = a.ResourceManager.ViewPeer(pid, func(s network.PeerScope) error { - return getLimit(s) - }) - return result, err - - default: - return result, xerrors.Errorf("invalid scope %s", scope) - } -} - -func (a *NetAPI) NetSetLimit(ctx context.Context, scope string, limit api.NetLimit) error { - setLimit := func(s network.ResourceScope) error { - limiter, ok := s.(rcmgr.ResourceScopeLimiter) - if !ok { - return xerrors.Errorf("resource scope doesn't implement ResourceScopeLimiter interface") - } - - var newLimit rcmgr.Limit - if limit.Dynamic { - newLimit = &rcmgr.DynamicLimit{ - MemoryLimit: rcmgr.MemoryLimit{ - MemoryFraction: limit.MemoryFraction, - MinMemory: limit.MinMemory, - MaxMemory: limit.MaxMemory, - }, - BaseLimit: rcmgr.BaseLimit{ - Streams: limit.Streams, - StreamsInbound: limit.StreamsInbound, - StreamsOutbound: limit.StreamsOutbound, - Conns: limit.Conns, - ConnsInbound: limit.ConnsInbound, - ConnsOutbound: limit.ConnsOutbound, - FD: limit.FD, - }, - } - } else { - newLimit = &rcmgr.StaticLimit{ - Memory: limit.Memory, - BaseLimit: rcmgr.BaseLimit{ - Streams: limit.Streams, - StreamsInbound: limit.StreamsInbound, - StreamsOutbound: limit.StreamsOutbound, - Conns: limit.Conns, - ConnsInbound: limit.ConnsInbound, - ConnsOutbound: limit.ConnsOutbound, - FD: limit.FD, - }, - } - } - - limiter.SetLimit(newLimit) - return nil - } - - switch { - case scope == "system": - err := a.ResourceManager.ViewSystem(func(s network.ResourceScope) error { - return setLimit(s) - }) - return err - - case scope == "transient": - err := a.ResourceManager.ViewTransient(func(s network.ResourceScope) error { - return setLimit(s) - }) - return err - - case strings.HasPrefix(scope, "svc:"): - svc := scope[4:] - err := a.ResourceManager.ViewService(svc, func(s network.ServiceScope) error { - return setLimit(s) - }) - return err - - case strings.HasPrefix(scope, "proto:"): - proto := scope[6:] - err := a.ResourceManager.ViewProtocol(protocol.ID(proto), func(s network.ProtocolScope) error { - return setLimit(s) - }) - return err - - case strings.HasPrefix(scope, "peer:"): - p := scope[5:] - pid, err := peer.IDFromString(p) - if err != nil { - return xerrors.Errorf("invalid peer ID: %s: %w", p, err) - } - err = a.ResourceManager.ViewPeer(pid, func(s network.PeerScope) error { - return setLimit(s) - }) - return err - - default: - return xerrors.Errorf("invalid scope %s", scope) - } -} From e9e28f75e2d42d49d6cb881dceb24d51aa195633 Mon Sep 17 00:00:00 2001 From: Aayush Date: Wed, 2 Mar 2022 15:39:22 -0500 Subject: [PATCH 31/48] Revert "add resource manager NetStat api" This reverts commit d05d5bcb70a55411cb4cc5bdeb1b7edcecfca617. --- api/api_net.go | 3 -- api/types.go | 9 ---- node/impl/net/net.go | 13 +++--- node/impl/net/rcmgr.go | 102 ----------------------------------------- 4 files changed, 6 insertions(+), 121 deletions(-) delete mode 100644 node/impl/net/rcmgr.go diff --git a/api/api_net.go b/api/api_net.go index 0a389e5ed..4cf9ca336 100644 --- a/api/api_net.go +++ b/api/api_net.go @@ -51,9 +51,6 @@ type Net interface { NetBlockRemove(ctx context.Context, acl NetBlockList) error //perm:admin NetBlockList(ctx context.Context) (NetBlockList, error) //perm:read - // ResourceManager API - NetStat(ctx context.Context, scope string) (NetStat, error) //perm:read - // ID returns peerID of libp2p node backing this API ID(context.Context) (peer.ID, error) //perm:read } diff --git a/api/types.go b/api/types.go index 66fb79850..81345306d 100644 --- a/api/types.go +++ b/api/types.go @@ -12,7 +12,6 @@ import ( "github.com/ipfs/go-cid" "github.com/ipfs/go-graphsync" - "github.com/libp2p/go-libp2p-core/network" "github.com/libp2p/go-libp2p-core/peer" pubsub "github.com/libp2p/go-libp2p-pubsub" ma "github.com/multiformats/go-multiaddr" @@ -130,14 +129,6 @@ type NetBlockList struct { IPSubnets []string } -type NetStat struct { - System *network.ScopeStat `json:",omitempty"` - Transient *network.ScopeStat `json:",omitempty"` - Services map[string]network.ScopeStat `json:",omitempty"` - Protocols map[string]network.ScopeStat `json:",omitempty"` - Peers map[string]network.ScopeStat -} - type ExtendedPeerInfo struct { ID peer.ID Agent string diff --git a/node/impl/net/net.go b/node/impl/net/net.go index 27e7734a1..a1003ffe5 100644 --- a/node/impl/net/net.go +++ b/node/impl/net/net.go @@ -25,13 +25,12 @@ import ( type NetAPI struct { fx.In - RawHost lp2p.RawHost - Host host.Host - Router lp2p.BaseIpfsRouting - ConnGater *conngater.BasicConnectionGater - ResourceManager network.ResourceManager - Reporter metrics.Reporter - Sk *dtypes.ScoreKeeper + RawHost lp2p.RawHost + Host host.Host + Router lp2p.BaseIpfsRouting + ConnGater *conngater.BasicConnectionGater + Reporter metrics.Reporter + Sk *dtypes.ScoreKeeper } func (a *NetAPI) ID(context.Context) (peer.ID, error) { diff --git a/node/impl/net/rcmgr.go b/node/impl/net/rcmgr.go deleted file mode 100644 index 2084d3a35..000000000 --- a/node/impl/net/rcmgr.go +++ /dev/null @@ -1,102 +0,0 @@ -package net - -import ( - "context" - "strings" - - "golang.org/x/xerrors" - - "github.com/libp2p/go-libp2p-core/network" - "github.com/libp2p/go-libp2p-core/peer" - "github.com/libp2p/go-libp2p-core/protocol" - rcmgr "github.com/libp2p/go-libp2p-resource-manager" - - "github.com/filecoin-project/lotus/api" -) - -func (a *NetAPI) NetStat(ctx context.Context, scope string) (result api.NetStat, err error) { - switch { - case scope == "all": - rapi, ok := a.ResourceManager.(rcmgr.ResourceManagerState) - if !ok { - return result, xerrors.Errorf("rexource manager does not support ResourceManagerState API") - } - - stat := rapi.Stat() - result.System = &stat.System - result.Transient = &stat.Transient - if len(stat.Services) > 0 { - result.Services = stat.Services - } - if len(stat.Protocols) > 0 { - result.Protocols = make(map[string]network.ScopeStat, len(stat.Protocols)) - for proto, stat := range stat.Protocols { - result.Protocols[string(proto)] = stat - } - } - if len(stat.Peers) > 0 { - result.Peers = make(map[string]network.ScopeStat, len(stat.Peers)) - for p, stat := range stat.Peers { - result.Peers[p.Pretty()] = stat - } - } - - return result, nil - - case scope == "system": - err = a.ResourceManager.ViewSystem(func(s network.ResourceScope) error { - stat := s.Stat() - result.System = &stat - return nil - }) - return result, err - - case scope == "transient": - err = a.ResourceManager.ViewTransient(func(s network.ResourceScope) error { - stat := s.Stat() - result.Transient = &stat - return nil - }) - return result, err - - case strings.HasPrefix(scope, "svc:"): - svc := scope[4:] - err = a.ResourceManager.ViewService(svc, func(s network.ServiceScope) error { - stat := s.Stat() - result.Services = map[string]network.ScopeStat{ - svc: stat, - } - return nil - }) - return result, err - - case strings.HasPrefix(scope, "proto:"): - proto := scope[6:] - err = a.ResourceManager.ViewProtocol(protocol.ID(proto), func(s network.ProtocolScope) error { - stat := s.Stat() - result.Protocols = map[string]network.ScopeStat{ - proto: stat, - } - return nil - }) - return result, err - - case strings.HasPrefix(scope, "peer:"): - p := scope[5:] - pid, err := peer.IDFromString(p) - if err != nil { - return result, err - } - err = a.ResourceManager.ViewPeer(pid, func(s network.PeerScope) error { - stat := s.Stat() - result.Peers = map[string]network.ScopeStat{ - p: stat, - } - return nil - }) - return result, err - - default: - return result, xerrors.Errorf("invalid scope %s", scope) - } -} From b5912d15432dff51c9e6784f3efd0ed100e949d6 Mon Sep 17 00:00:00 2001 From: Aayush Date: Wed, 2 Mar 2022 15:39:22 -0500 Subject: [PATCH 32/48] Revert "instantiate resource manager in DI" This reverts commit 8d3f98fe386f96a3824b0ae7da39a0be463772e0. --- node/builder.go | 6 ---- node/modules/lp2p/rcmgr.go | 66 -------------------------------------- 2 files changed, 72 deletions(-) delete mode 100644 node/modules/lp2p/rcmgr.go diff --git a/node/builder.go b/node/builder.go index 6770e8dc8..96d217ec3 100644 --- a/node/builder.go +++ b/node/builder.go @@ -15,7 +15,6 @@ import ( logging "github.com/ipfs/go-log/v2" ci "github.com/libp2p/go-libp2p-core/crypto" "github.com/libp2p/go-libp2p-core/host" - "github.com/libp2p/go-libp2p-core/network" "github.com/libp2p/go-libp2p-core/peer" "github.com/libp2p/go-libp2p-core/peerstore" "github.com/libp2p/go-libp2p-core/routing" @@ -69,7 +68,6 @@ var ( BandwidthReporterKey = special{11} // Libp2p option ConnGaterKey = special{12} // libp2p option DAGStoreKey = special{13} // constructor returns multiple values - ResourceManagerKey = special{14} // Libp2p option ) type invoke int @@ -217,10 +215,6 @@ var LibP2P = Options( Override(ConnectionManagerKey, lp2p.ConnectionManager(50, 200, 20*time.Second, nil)), Override(new(*conngater.BasicConnectionGater), lp2p.ConnGater), Override(ConnGaterKey, lp2p.ConnGaterOption), - - // Services (resource management) - Override(new(network.ResourceManager), lp2p.ResourceManager), - Override(ResourceManagerKey, lp2p.ResourceManagerOption), ) func IsType(t repo.RepoType) func(s *Settings) bool { diff --git a/node/modules/lp2p/rcmgr.go b/node/modules/lp2p/rcmgr.go deleted file mode 100644 index a012fc1f4..000000000 --- a/node/modules/lp2p/rcmgr.go +++ /dev/null @@ -1,66 +0,0 @@ -package lp2p - -import ( - "errors" - "fmt" - "os" - "path/filepath" - - "go.uber.org/fx" - - "github.com/libp2p/go-libp2p" - "github.com/libp2p/go-libp2p-core/network" - rcmgr "github.com/libp2p/go-libp2p-resource-manager" - - "github.com/filecoin-project/lotus/node/repo" -) - -func ResourceManager(lc fx.Lifecycle, repo repo.LockedRepo) (network.ResourceManager, error) { - var limiter *rcmgr.BasicLimiter - var opts []rcmgr.Option - - repoPath := repo.Path() - - // create limiter -- parse $repo/limits.json if exists - limitsFile := filepath.Join(repoPath, "limits.json") - limitsIn, err := os.Open(limitsFile) - switch { - case err == nil: - defer limitsIn.Close() - limiter, err = rcmgr.NewDefaultLimiterFromJSON(limitsIn) - if err != nil { - return nil, fmt.Errorf("error parsing limit file: %w", err) - } - - case errors.Is(err, os.ErrNotExist): - limiter = rcmgr.NewDefaultLimiter() - - default: - return nil, err - } - - // TODO: also set appropriate default limits for lotus protocols - libp2p.SetDefaultServiceLimits(limiter) - - if os.Getenv("LOTUS_DEBUG_RCMGR") != "" { - debugPath := filepath.Join(repoPath, "debug") - if err := os.MkdirAll(debugPath, 0755); err != nil { - return nil, fmt.Errorf("error creating debug directory: %w", err) - } - traceFile := filepath.Join(debugPath, "rcmgr.json.gz") - opts = append(opts, rcmgr.WithTrace(traceFile)) - } - - mgr, err := rcmgr.NewResourceManager(limiter, opts...) - if err != nil { - return nil, fmt.Errorf("error creating resource manager: %w", err) - } - - return mgr, nil -} - -func ResourceManagerOption(mgr network.ResourceManager) Libp2pOpts { - return Libp2pOpts{ - Opts: []libp2p.Option{libp2p.ResourceManager(mgr)}, - } -} From 85886287b43bba6f0aae8eda2079cf5182ef7c97 Mon Sep 17 00:00:00 2001 From: Aayush Date: Wed, 2 Mar 2022 15:39:23 -0500 Subject: [PATCH 33/48] Revert "use the libp2p connmgr" This reverts commit 826cdb2186e49d7f5a48d8ba25a9b820b634a42f. --- node/modules/lp2p/libp2p.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/node/modules/lp2p/libp2p.go b/node/modules/lp2p/libp2p.go index 997792d48..5d8ece732 100644 --- a/node/modules/lp2p/libp2p.go +++ b/node/modules/lp2p/libp2p.go @@ -10,10 +10,10 @@ import ( logging "github.com/ipfs/go-log/v2" "github.com/libp2p/go-libp2p" + connmgr "github.com/libp2p/go-libp2p-connmgr" "github.com/libp2p/go-libp2p-core/crypto" "github.com/libp2p/go-libp2p-core/peer" "github.com/libp2p/go-libp2p-core/peerstore" - "github.com/libp2p/go-libp2p/p2p/net/connmgr" "go.uber.org/fx" ) From 04f2d3543bca94a50a9fde4b89b94110eaf23e86 Mon Sep 17 00:00:00 2001 From: Aayush Date: Wed, 2 Mar 2022 15:39:23 -0500 Subject: [PATCH 34/48] Revert "go mod: go-libp2p-resource-manager" This reverts commit c394fbdfc3aaf369dc517446a9fd9fac74007b7c. --- go.mod | 1 - 1 file changed, 1 deletion(-) diff --git a/go.mod b/go.mod index 432ce7486..0c388823b 100644 --- a/go.mod +++ b/go.mod @@ -120,7 +120,6 @@ require ( github.com/libp2p/go-libp2p-pubsub v0.6.0 github.com/libp2p/go-libp2p-quic-transport v0.16.0 github.com/libp2p/go-libp2p-record v0.1.3 - github.com/libp2p/go-libp2p-resource-manager v0.1.0 github.com/libp2p/go-libp2p-routing-helpers v0.2.3 github.com/libp2p/go-libp2p-swarm v0.10.0 github.com/libp2p/go-libp2p-tls v0.3.1 From 08bbfed8254ad56123d880d65b34c960da97ae3a Mon Sep 17 00:00:00 2001 From: Aayush Date: Wed, 2 Mar 2022 15:39:24 -0500 Subject: [PATCH 35/48] Revert "go mod: go-libp2p@v0.18.0-rc1" This reverts commit 2fb5837a55ed8d9e8319be512b45b874452562ce. --- go.mod | 16 +++++++-------- go.sum | 63 ++++++++++++++++++++-------------------------------------- 2 files changed, 29 insertions(+), 50 deletions(-) diff --git a/go.mod b/go.mod index 0c388823b..0a4943f12 100644 --- a/go.mod +++ b/go.mod @@ -94,7 +94,7 @@ require ( github.com/ipfs/go-ipld-cbor v0.0.6 github.com/ipfs/go-ipld-format v0.2.0 github.com/ipfs/go-ipld-legacy v0.1.1 // indirect - github.com/ipfs/go-log/v2 v2.5.0 + github.com/ipfs/go-log/v2 v2.4.0 github.com/ipfs/go-merkledag v0.5.1 github.com/ipfs/go-metrics-interface v0.0.1 github.com/ipfs/go-metrics-prometheus v0.0.2 @@ -110,26 +110,26 @@ require ( github.com/kelseyhightower/envconfig v1.4.0 github.com/libp2p/go-buffer-pool v0.0.2 github.com/libp2p/go-eventbus v0.2.1 - github.com/libp2p/go-libp2p v0.18.0-rc1 - github.com/libp2p/go-libp2p-connmgr v0.3.1 // indirect - github.com/libp2p/go-libp2p-core v0.14.0 + github.com/libp2p/go-libp2p v0.17.0 + github.com/libp2p/go-libp2p-connmgr v0.3.1 + github.com/libp2p/go-libp2p-core v0.13.0 github.com/libp2p/go-libp2p-discovery v0.6.0 github.com/libp2p/go-libp2p-kad-dht v0.15.0 github.com/libp2p/go-libp2p-noise v0.3.0 github.com/libp2p/go-libp2p-peerstore v0.6.0 github.com/libp2p/go-libp2p-pubsub v0.6.0 - github.com/libp2p/go-libp2p-quic-transport v0.16.0 + github.com/libp2p/go-libp2p-quic-transport v0.15.2 github.com/libp2p/go-libp2p-record v0.1.3 github.com/libp2p/go-libp2p-routing-helpers v0.2.3 - github.com/libp2p/go-libp2p-swarm v0.10.0 + github.com/libp2p/go-libp2p-swarm v0.9.0 github.com/libp2p/go-libp2p-tls v0.3.1 - github.com/libp2p/go-libp2p-yamux v0.8.0 + github.com/libp2p/go-libp2p-yamux v0.7.0 github.com/libp2p/go-maddr-filter v0.1.0 github.com/mattn/go-isatty v0.0.14 github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 github.com/mitchellh/go-homedir v1.1.0 github.com/multiformats/go-base32 v0.0.4 - github.com/multiformats/go-multiaddr v0.5.0 + github.com/multiformats/go-multiaddr v0.4.1 github.com/multiformats/go-multiaddr-dns v0.3.1 github.com/multiformats/go-multibase v0.0.3 github.com/multiformats/go-multihash v0.1.0 diff --git a/go.sum b/go.sum index c23fb89e3..8a04740cc 100644 --- a/go.sum +++ b/go.sum @@ -807,9 +807,8 @@ github.com/ipfs/go-log/v2 v2.1.2-0.20200626104915-0016c0b4b3e4/go.mod h1:2v2nsGf github.com/ipfs/go-log/v2 v2.1.2/go.mod h1:2v2nsGfZsvvAJz13SyFzf9ObaqwHiHxsPLEHntrv9KM= github.com/ipfs/go-log/v2 v2.1.3/go.mod h1:/8d0SH3Su5Ooc31QlL1WysJhvyOTDCjcCZ9Axpmri6g= github.com/ipfs/go-log/v2 v2.3.0/go.mod h1:QqGoj30OTpnKaG/LKTGTxoP2mmQtjVMEnK72gynbe/g= +github.com/ipfs/go-log/v2 v2.4.0 h1:iR/2o9PGWanVJrBgIH5Ff8mPGOwpqLaPIAFqSnsdlzk= github.com/ipfs/go-log/v2 v2.4.0/go.mod h1:nPZnh7Cj7lwS3LpRU5Mwr2ol1c2gXIEXuF6aywqrtmo= -github.com/ipfs/go-log/v2 v2.5.0 h1:+MhAooFd9XZNvR0i9FriKW6HB0ql7HNXUuflWtc0dd4= -github.com/ipfs/go-log/v2 v2.5.0/go.mod h1:prSpmC1Gpllc9UYWxDiZDreBYw7zp4Iqp1kOLU9U5UI= github.com/ipfs/go-merkledag v0.0.6/go.mod h1:QYPdnlvkOg7GnQRofu9XZimC5ZW5Wi3bKys/4GQQfto= github.com/ipfs/go-merkledag v0.2.3/go.mod h1:SQiXrtSts3KGNmgOzMICy5c0POOpUNQLvB3ClKnBAlk= github.com/ipfs/go-merkledag v0.2.4/go.mod h1:SQiXrtSts3KGNmgOzMICy5c0POOpUNQLvB3ClKnBAlk= @@ -960,6 +959,7 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/libp2p/go-addr-util v0.0.1/go.mod h1:4ac6O7n9rIAKB1dnd+s8IbbMXkt+oBpzX4/+RACcnlQ= github.com/libp2p/go-addr-util v0.0.2/go.mod h1:Ecd6Fb3yIuLzq4bD7VcywcVSBtefcAwnUISBM3WG15E= +github.com/libp2p/go-addr-util v0.1.0 h1:acKsntI33w2bTU7tC9a0SaPimJGfSI0bFKC18ChxeVI= github.com/libp2p/go-addr-util v0.1.0/go.mod h1:6I3ZYuFr2O/9D+SoyM0zEw0EF3YkldtTX406BpdQMqw= github.com/libp2p/go-buffer-pool v0.0.1/go.mod h1:xtyIz9PMobb13WaxR6Zo1Pd1zXJKYg0a8KiIvDp3TzQ= github.com/libp2p/go-buffer-pool v0.0.2 h1:QNK2iAFa8gjAe1SPz6mHSMuCcjs+X1wlHzeOSqcmlfs= @@ -993,9 +993,8 @@ github.com/libp2p/go-libp2p v0.8.1/go.mod h1:QRNH9pwdbEBpx5DTJYg+qxcVaDMAz3Ee/qD github.com/libp2p/go-libp2p v0.14.3/go.mod h1:d12V4PdKbpL0T1/gsUNN8DfgMuRPDX8bS2QxCZlwRH0= github.com/libp2p/go-libp2p v0.14.4/go.mod h1:EIRU0Of4J5S8rkockZM7eJp2S0UrCyi55m2kJVru3rM= github.com/libp2p/go-libp2p v0.16.0/go.mod h1:ump42BsirwAWxKzsCiFnTtN1Yc+DuPu76fyMX364/O4= +github.com/libp2p/go-libp2p v0.17.0 h1:8l4GV401OSd4dFRyHDtIT/mEzdh/aQGoFC8xshYgm5M= github.com/libp2p/go-libp2p v0.17.0/go.mod h1:Fkin50rsGdv5mm5BshBUtPRZknt9esfmYXBOYcwOTgw= -github.com/libp2p/go-libp2p v0.18.0-rc1 h1:CFHROLGmMwe/p8tR3sHahg/1NSaZa2EGbu7nDmdC+RY= -github.com/libp2p/go-libp2p v0.18.0-rc1/go.mod h1:RgYlH7IIWHXREimC92bw5Lg1V2R5XmSzuLHb5fTnr+8= github.com/libp2p/go-libp2p-asn-util v0.0.0-20200825225859-85005c6cf052/go.mod h1:nRMRTab+kZuk0LnKZpxhOVH/ndsdr2Nr//Zltc/vwgo= github.com/libp2p/go-libp2p-asn-util v0.1.0 h1:rABPCO77SjdbJ/eJ/ynIo8vWICy1VEnL5JAxJbQLo1E= github.com/libp2p/go-libp2p-asn-util v0.1.0/go.mod h1:wu+AnM9Ii2KgO5jMmS1rz9dvzTdj8BXqsPR9HR0XB7I= @@ -1007,6 +1006,7 @@ github.com/libp2p/go-libp2p-autonat v0.2.1/go.mod h1:MWtAhV5Ko1l6QBsHQNSuM6b1sRk github.com/libp2p/go-libp2p-autonat v0.2.2/go.mod h1:HsM62HkqZmHR2k1xgX34WuWDzk/nBwNHoeyyT4IWV6A= github.com/libp2p/go-libp2p-autonat v0.4.2/go.mod h1:YxaJlpr81FhdOv3W3BTconZPfhaYivRdf53g+S2wobk= github.com/libp2p/go-libp2p-autonat v0.6.0/go.mod h1:bFC6kY8jwzNNWoqc8iGE57vsfwyJ/lP4O4DOV1e0B2o= +github.com/libp2p/go-libp2p-autonat v0.7.0 h1:rCP5s+A2dlhM1Xd66wurE0k7S7pPmM0D+FlqqSBXxks= github.com/libp2p/go-libp2p-autonat v0.7.0/go.mod h1:uPvPn6J7cN+LCfFwW5tpOYvAz5NvPTc4iBamTV/WDMg= github.com/libp2p/go-libp2p-autonat-svc v0.1.0/go.mod h1:fqi8Obl/z3R4PFVLm8xFtZ6PBL9MlV/xumymRFkKq5A= github.com/libp2p/go-libp2p-blankhost v0.0.1/go.mod h1:Ibpbw/7cPPYwFb7PACIWdvxxv0t0XCCI10t7czjAjTc= @@ -1022,9 +1022,8 @@ github.com/libp2p/go-libp2p-circuit v0.1.1/go.mod h1:Ahq4cY3V9VJcHcn1SBXjr78AbFk github.com/libp2p/go-libp2p-circuit v0.1.3/go.mod h1:Xqh2TjSy8DD5iV2cCOMzdynd6h8OTBGoV1AWbWor3qM= github.com/libp2p/go-libp2p-circuit v0.1.4/go.mod h1:CY67BrEjKNDhdTk8UgBX1Y/H5c3xkAcs3gnksxY7osU= github.com/libp2p/go-libp2p-circuit v0.2.1/go.mod h1:BXPwYDN5A8z4OEY9sOfr2DUQMLQvKt/6oku45YUmjIo= +github.com/libp2p/go-libp2p-circuit v0.4.0 h1:eqQ3sEYkGTtybWgr6JLqJY6QLtPWRErvFjFDfAOO1wc= github.com/libp2p/go-libp2p-circuit v0.4.0/go.mod h1:t/ktoFIUzM6uLQ+o1G6NuBl2ANhBKN9Bc8jRIk31MoA= -github.com/libp2p/go-libp2p-circuit v0.6.0 h1:rw/HlhmUB3OktS/Ygz6+2XABOmHKzZpPUuMNUMosj8w= -github.com/libp2p/go-libp2p-circuit v0.6.0/go.mod h1:kB8hY+zCpMeScyvFrKrGicRdid6vNXbunKE4rXATZ0M= github.com/libp2p/go-libp2p-connmgr v0.1.1/go.mod h1:wZxh8veAmU5qdrfJ0ZBLcU8oJe9L82ciVP/fl1VHjXk= github.com/libp2p/go-libp2p-connmgr v0.2.4/go.mod h1:YV0b/RIm8NGPnnNWM7hG9Q38OeQiQfKhHCCs1++ufn0= github.com/libp2p/go-libp2p-connmgr v0.3.0/go.mod h1:RVoyPjJm0J9Vd1m6qUN2Tn7kJm4rL1Ml20pFsFgPGik= @@ -1063,9 +1062,8 @@ github.com/libp2p/go-libp2p-core v0.9.0/go.mod h1:ESsbz31oC3C1AvMJoGx26RTuCkNhmk github.com/libp2p/go-libp2p-core v0.10.0/go.mod h1:ECdxehoYosLYHgDDFa2N4yE8Y7aQRAMf0sX9mf2sbGg= github.com/libp2p/go-libp2p-core v0.11.0/go.mod h1:ECdxehoYosLYHgDDFa2N4yE8Y7aQRAMf0sX9mf2sbGg= github.com/libp2p/go-libp2p-core v0.12.0/go.mod h1:ECdxehoYosLYHgDDFa2N4yE8Y7aQRAMf0sX9mf2sbGg= +github.com/libp2p/go-libp2p-core v0.13.0 h1:IFG/s8dN6JN2OTrXX9eq2wNU/Zlz2KLdwZUp5FplgXI= github.com/libp2p/go-libp2p-core v0.13.0/go.mod h1:ECdxehoYosLYHgDDFa2N4yE8Y7aQRAMf0sX9mf2sbGg= -github.com/libp2p/go-libp2p-core v0.14.0 h1:0kYSgiK/D7Eo28GTuRXo5YHsWwAisVpFCqCVPUd/vJs= -github.com/libp2p/go-libp2p-core v0.14.0/go.mod h1:tLasfcVdTXnixsLB0QYaT1syJOhsbrhG7q6pGrHtBg8= github.com/libp2p/go-libp2p-crypto v0.0.1/go.mod h1:yJkNyDmO341d5wwXxDUGO0LykUVT72ImHNUqh5D/dBE= github.com/libp2p/go-libp2p-crypto v0.0.2/go.mod h1:eETI5OUfBnvARGOHrJz2eWNyTUxEGZnBxMcbUjfIj4I= github.com/libp2p/go-libp2p-crypto v0.1.0/go.mod h1:sPUokVISZiy+nNuTTH/TY+leRSxnFj/2GLjtOTW90hI= @@ -1100,9 +1098,8 @@ github.com/libp2p/go-libp2p-mplex v0.2.1/go.mod h1:SC99Rxs8Vuzrf/6WhmH41kNn13TiY github.com/libp2p/go-libp2p-mplex v0.2.2/go.mod h1:74S9eum0tVQdAfFiKxAyKzNdSuLqw5oadDq7+L/FELo= github.com/libp2p/go-libp2p-mplex v0.2.3/go.mod h1:CK3p2+9qH9x+7ER/gWWDYJ3QW5ZxWDkm+dVvjfuG3ek= github.com/libp2p/go-libp2p-mplex v0.4.0/go.mod h1:yCyWJE2sc6TBTnFpjvLuEJgTSw/u+MamvzILKdX7asw= +github.com/libp2p/go-libp2p-mplex v0.4.1 h1:/pyhkP1nLwjG3OM+VuaNJkQT/Pqq73WzB3aDN3Fx1sc= github.com/libp2p/go-libp2p-mplex v0.4.1/go.mod h1:cmy+3GfqfM1PceHTLL7zQzAAYaryDu6iPSC+CIb094g= -github.com/libp2p/go-libp2p-mplex v0.5.0 h1:vt3k4E4HSND9XH4Z8rUpacPJFSAgLOv6HDvG8W9Ks9E= -github.com/libp2p/go-libp2p-mplex v0.5.0/go.mod h1:eLImPJLkj3iG5t5lq68w3Vm5NAQ5BcKwrrb2VmOYb3M= github.com/libp2p/go-libp2p-nat v0.0.4/go.mod h1:N9Js/zVtAXqaeT99cXgTV9e75KpnWCvVOiGzlcHmBbY= github.com/libp2p/go-libp2p-nat v0.0.5/go.mod h1:1qubaE5bTZMJE+E/uu2URroMbzdubFz1ChgiN79yKPE= github.com/libp2p/go-libp2p-nat v0.0.6/go.mod h1:iV59LVhB3IkFvS6S6sauVTSOrNEANnINbI/fkaLimiw= @@ -1145,17 +1142,14 @@ github.com/libp2p/go-libp2p-quic-transport v0.10.0/go.mod h1:RfJbZ8IqXIhxBRm5hqU github.com/libp2p/go-libp2p-quic-transport v0.11.2/go.mod h1:wlanzKtIh6pHrq+0U3p3DY9PJfGqxMgPaGKaK5LifwQ= github.com/libp2p/go-libp2p-quic-transport v0.13.0/go.mod h1:39/ZWJ1TW/jx1iFkKzzUg00W6tDJh73FC0xYudjr7Hc= github.com/libp2p/go-libp2p-quic-transport v0.15.0/go.mod h1:wv4uGwjcqe8Mhjj7N/Ic0aKjA+/10UnMlSzLO0yRpYQ= +github.com/libp2p/go-libp2p-quic-transport v0.15.2 h1:wHBEceRy+1/8Ec8dAIyr+/P7L2YefIGprPVy5LrMM+k= github.com/libp2p/go-libp2p-quic-transport v0.15.2/go.mod h1:wv4uGwjcqe8Mhjj7N/Ic0aKjA+/10UnMlSzLO0yRpYQ= -github.com/libp2p/go-libp2p-quic-transport v0.16.0 h1:aVg9/jr+R2esov5sH7wkXrmYmqJiUjtLMLYX3L9KYdY= -github.com/libp2p/go-libp2p-quic-transport v0.16.0/go.mod h1:1BXjVMzr+w7EkPfiHkKnwsWjPjtfaNT0q8RS3tGDvEQ= github.com/libp2p/go-libp2p-record v0.0.1/go.mod h1:grzqg263Rug/sRex85QrDOLntdFAymLDLm7lxMgU79Q= github.com/libp2p/go-libp2p-record v0.1.0/go.mod h1:ujNc8iuE5dlKWVy6wuL6dd58t0n7xI4hAIl8pE6wu5Q= github.com/libp2p/go-libp2p-record v0.1.1/go.mod h1:VRgKajOyMVgP/F0L5g3kH7SVskp17vFi2xheb5uMJtg= github.com/libp2p/go-libp2p-record v0.1.2/go.mod h1:pal0eNcT5nqZaTV7UGhqeGqxFgGdsU/9W//C8dqjQDk= github.com/libp2p/go-libp2p-record v0.1.3 h1:R27hoScIhQf/A8XJZ8lYpnqh9LatJ5YbHs28kCIfql0= github.com/libp2p/go-libp2p-record v0.1.3/go.mod h1:yNUff/adKIfPnYQXgp6FQmNu3gLJ6EMg7+/vv2+9pY4= -github.com/libp2p/go-libp2p-resource-manager v0.1.0 h1:tYpbhLPVC4egLavupAi9jGKKLeMemyGq5tnfBc8taBs= -github.com/libp2p/go-libp2p-resource-manager v0.1.0/go.mod h1:wJPNjeE4XQlxeidwqVY5G6DLOKqFK33u2n8blpl0I6Y= github.com/libp2p/go-libp2p-routing v0.0.1/go.mod h1:N51q3yTr4Zdr7V8Jt2JIktVU+3xBBylx1MZeVA6t1Ys= github.com/libp2p/go-libp2p-routing v0.1.0/go.mod h1:zfLhI1RI8RLEzmEaaPwzonRvXeeSHddONWkcTcB54nE= github.com/libp2p/go-libp2p-routing-helpers v0.2.3 h1:xY61alxJ6PurSi+MXbywZpelvuU4U4p/gPTxjqCqTzY= @@ -1175,9 +1169,8 @@ github.com/libp2p/go-libp2p-swarm v0.3.0/go.mod h1:hdv95GWCTmzkgeJpP+GK/9D9puJeg github.com/libp2p/go-libp2p-swarm v0.5.0/go.mod h1:sU9i6BoHE0Ve5SKz3y9WfKrh8dUat6JknzUehFx8xW4= github.com/libp2p/go-libp2p-swarm v0.5.3/go.mod h1:NBn7eNW2lu568L7Ns9wdFrOhgRlkRnIDg0FLKbuu3i8= github.com/libp2p/go-libp2p-swarm v0.8.0/go.mod h1:sOMp6dPuqco0r0GHTzfVheVBh6UEL0L1lXUZ5ot2Fvc= +github.com/libp2p/go-libp2p-swarm v0.9.0 h1:LdWjHDVjPMYt3NCG2EHcQiIP8XzA8BHhHz8ZLAYol2Y= github.com/libp2p/go-libp2p-swarm v0.9.0/go.mod h1:2f8d8uxTJmpeqHF/1ujjdXZp+98nNIbujVOMEZxCbZ8= -github.com/libp2p/go-libp2p-swarm v0.10.0 h1:1yr7UCwxCN92cw9g9Q+fnJSlk7lOB1RetoEewxhGVL0= -github.com/libp2p/go-libp2p-swarm v0.10.0/go.mod h1:71ceMcV6Rg/0rIQ97rsZWMzto1l9LnNquef+efcRbmA= github.com/libp2p/go-libp2p-testing v0.0.1/go.mod h1:gvchhf3FQOtBdr+eFUABet5a4MBLK8jM3V4Zghvmi+E= github.com/libp2p/go-libp2p-testing v0.0.2/go.mod h1:gvchhf3FQOtBdr+eFUABet5a4MBLK8jM3V4Zghvmi+E= github.com/libp2p/go-libp2p-testing v0.0.3/go.mod h1:gvchhf3FQOtBdr+eFUABet5a4MBLK8jM3V4Zghvmi+E= @@ -1189,9 +1182,8 @@ github.com/libp2p/go-libp2p-testing v0.3.0/go.mod h1:efZkql4UZ7OVsEfaxNHZPzIehts github.com/libp2p/go-libp2p-testing v0.4.0/go.mod h1:Q+PFXYoiYFN5CAEG2w3gLPEzotlKsNSbKQ/lImlOWF0= github.com/libp2p/go-libp2p-testing v0.4.2/go.mod h1:Q+PFXYoiYFN5CAEG2w3gLPEzotlKsNSbKQ/lImlOWF0= github.com/libp2p/go-libp2p-testing v0.5.0/go.mod h1:QBk8fqIL1XNcno/l3/hhaIEn4aLRijpYOR+zVjjlh+A= +github.com/libp2p/go-libp2p-testing v0.6.0 h1:tV/wz6mS1VoAYA/5DGTiyzw9TJ+eXMCMvzU5VPLJSgg= github.com/libp2p/go-libp2p-testing v0.6.0/go.mod h1:QBk8fqIL1XNcno/l3/hhaIEn4aLRijpYOR+zVjjlh+A= -github.com/libp2p/go-libp2p-testing v0.7.0 h1:9bfyhNINizxuLrKsenzGaZalXRXIaAEmx1BP/PzF1gM= -github.com/libp2p/go-libp2p-testing v0.7.0/go.mod h1:OLbdn9DbgdMwv00v+tlp1l3oe2Cl+FAjoWIA2pa0X6E= github.com/libp2p/go-libp2p-tls v0.1.3/go.mod h1:wZfuewxOndz5RTnCAxFliGjvYSDA40sKitV4c50uI1M= github.com/libp2p/go-libp2p-tls v0.3.0/go.mod h1:fwF5X6PWGxm6IDRwF3V8AVCCj/hOd5oFlg+wo2FxJDY= github.com/libp2p/go-libp2p-tls v0.3.1 h1:lsE2zYte+rZCEOHF72J1Fg3XK3dGQyKvI6i5ehJfEp0= @@ -1206,9 +1198,8 @@ github.com/libp2p/go-libp2p-transport-upgrader v0.4.2/go.mod h1:NR8ne1VwfreD5VIW github.com/libp2p/go-libp2p-transport-upgrader v0.4.3/go.mod h1:bpkldbOWXMrXhpZbSV1mQxTrefOg2Fi+k1ClDSA4ppw= github.com/libp2p/go-libp2p-transport-upgrader v0.4.6/go.mod h1:JE0WQuQdy+uLZ5zOaI3Nw9dWGYJIA7mywEtP2lMvnyk= github.com/libp2p/go-libp2p-transport-upgrader v0.5.0/go.mod h1:Rc+XODlB3yce7dvFV4q/RmyJGsFcCZRkeZMu/Zdg0mo= +github.com/libp2p/go-libp2p-transport-upgrader v0.6.0 h1:GfMCU+2aGGEm1zW3UcOz6wYSn8tXQalFfVfcww99i5A= github.com/libp2p/go-libp2p-transport-upgrader v0.6.0/go.mod h1:1e07y1ZSZdHo9HPbuU8IztM1Cj+DR5twgycb4pnRzRo= -github.com/libp2p/go-libp2p-transport-upgrader v0.7.0 h1:ADnLrL7fC4Vy7HPjk9oGof7nDeTqGXuof85Ar6kin9Q= -github.com/libp2p/go-libp2p-transport-upgrader v0.7.0/go.mod h1:GIR2aTRp1J5yjVlkUoFqMkdobfob6RnAwYg/RZPhrzg= github.com/libp2p/go-libp2p-xor v0.0.0-20210714161855-5c005aca55db/go.mod h1:LSTM5yRnjGZbWNTA/hRwq2gGFrvRIbQJscoIL/u6InY= github.com/libp2p/go-libp2p-yamux v0.1.2/go.mod h1:xUoV/RmYkg6BW/qGxA9XJyg+HzXFYkeXbnhjmnYzKp8= github.com/libp2p/go-libp2p-yamux v0.1.3/go.mod h1:VGSQVrqkh6y4nm0189qqxMtvyBft44MOYYPpYKXiVt4= @@ -1222,9 +1213,8 @@ github.com/libp2p/go-libp2p-yamux v0.4.0/go.mod h1:+DWDjtFMzoAwYLVkNZftoucn7PelN github.com/libp2p/go-libp2p-yamux v0.5.0/go.mod h1:AyR8k5EzyM2QN9Bbdg6X1SkVVuqLwTGf0L4DFq9g6po= github.com/libp2p/go-libp2p-yamux v0.5.4/go.mod h1:tfrXbyaTqqSU654GTvK3ocnSZL3BuHoeTSqhcel1wsE= github.com/libp2p/go-libp2p-yamux v0.6.0/go.mod h1:MRhd6mAYnFRnSISp4M8i0ClV/j+mWHo2mYLifWGw33k= +github.com/libp2p/go-libp2p-yamux v0.7.0 h1:bVXHbTj/XH4uBBsPrg26BlDABk5WYRlssY73P0SjhPc= github.com/libp2p/go-libp2p-yamux v0.7.0/go.mod h1:fMyA0CsPfHkIuBU0wjRGrCjTBFiXTXxG0k5M4ETv+08= -github.com/libp2p/go-libp2p-yamux v0.8.0 h1:APQYlttIj+Rr5sfa6siojwsi0ZwcIh/exHIUl9hZr6o= -github.com/libp2p/go-libp2p-yamux v0.8.0/go.mod h1:yTkPgN2ib8FHyU1ZcVD7aelzyAqXXwEPbyx+aSKm9h8= github.com/libp2p/go-maddr-filter v0.0.1/go.mod h1:6eT12kSQMA9x2pvFQa+xesMKUBlj9VImZbj3B9FBH/Q= github.com/libp2p/go-maddr-filter v0.0.4/go.mod h1:6eT12kSQMA9x2pvFQa+xesMKUBlj9VImZbj3B9FBH/Q= github.com/libp2p/go-maddr-filter v0.0.5/go.mod h1:Jk+36PMfIqCJhAnaASRH83bdAvfDRp/w6ENFaC9bG+M= @@ -1236,9 +1226,8 @@ github.com/libp2p/go-mplex v0.1.0/go.mod h1:SXgmdki2kwCUlCCbfGLEgHjC4pFqhTp0ZoV6 github.com/libp2p/go-mplex v0.1.1/go.mod h1:Xgz2RDCi3co0LeZfgjm4OgUF15+sVR8SRcu3SFXI1lk= github.com/libp2p/go-mplex v0.1.2/go.mod h1:Xgz2RDCi3co0LeZfgjm4OgUF15+sVR8SRcu3SFXI1lk= github.com/libp2p/go-mplex v0.2.0/go.mod h1:0Oy/A9PQlwBytDRp4wSkFnzHYDKcpLot35JQ6msjvYQ= +github.com/libp2p/go-mplex v0.3.0 h1:U1T+vmCYJaEoDJPV1aq31N56hS+lJgb397GsylNSgrU= github.com/libp2p/go-mplex v0.3.0/go.mod h1:0Oy/A9PQlwBytDRp4wSkFnzHYDKcpLot35JQ6msjvYQ= -github.com/libp2p/go-mplex v0.4.0 h1:Ukkez9/4EOX5rTw4sHefNJp10dksftAA05ZgyjplUbM= -github.com/libp2p/go-mplex v0.4.0/go.mod h1:y26Lx+wNVtMYMaPu300Cbot5LkEZ4tJaNYeHeT9dh6E= github.com/libp2p/go-msgio v0.0.2/go.mod h1:63lBBgOTDKQL6EWazRMCwXsEeEeK9O2Cd+0+6OOuipQ= github.com/libp2p/go-msgio v0.0.3/go.mod h1:63lBBgOTDKQL6EWazRMCwXsEeEeK9O2Cd+0+6OOuipQ= github.com/libp2p/go-msgio v0.0.4/go.mod h1:63lBBgOTDKQL6EWazRMCwXsEeEeK9O2Cd+0+6OOuipQ= @@ -1253,9 +1242,8 @@ github.com/libp2p/go-nat v0.1.0/go.mod h1:X7teVkwRHNInVNWQiO/tAiAVRwSr5zoRz4YSTC github.com/libp2p/go-netroute v0.1.2/go.mod h1:jZLDV+1PE8y5XxBySEBgbuVAXbhtuHSdmLPL2n9MKbk= github.com/libp2p/go-netroute v0.1.3/go.mod h1:jZLDV+1PE8y5XxBySEBgbuVAXbhtuHSdmLPL2n9MKbk= github.com/libp2p/go-netroute v0.1.5/go.mod h1:V1SR3AaECRkEQCoFFzYwVYWvYIEtlxx89+O3qcpCl4A= +github.com/libp2p/go-netroute v0.1.6 h1:ruPJStbYyXVYGQ81uzEDzuvbYRLKRrLvTYd33yomC38= github.com/libp2p/go-netroute v0.1.6/go.mod h1:AqhkMh0VuWmfgtxKPp3Oc1LdU5QSWS7wl0QLhSZqXxQ= -github.com/libp2p/go-netroute v0.2.0 h1:0FpsbsvuSnAhXFnCY0VLFbJOzaK0VnP0r1QT/o4nWRE= -github.com/libp2p/go-netroute v0.2.0/go.mod h1:Vio7LTzZ+6hoT4CMZi5/6CpY3Snzh2vgZhWgxMNwlQI= github.com/libp2p/go-openssl v0.0.2/go.mod h1:v8Zw2ijCSWBQi8Pq5GAixw6DbFfa9u6VIYDXnvOXkc0= github.com/libp2p/go-openssl v0.0.3/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= github.com/libp2p/go-openssl v0.0.4/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= @@ -1274,14 +1262,14 @@ github.com/libp2p/go-reuseport-transport v0.1.0 h1:C3PHeHjmnz8m6f0uydObj02tMEoi7 github.com/libp2p/go-reuseport-transport v0.1.0/go.mod h1:vev0C0uMkzriDY59yFHD9v+ujJvYmDQVLowvAjEOmfw= github.com/libp2p/go-sockaddr v0.0.2/go.mod h1:syPvOmNs24S3dFVGJA1/mrqdeijPxLV2Le3BRLKd68k= github.com/libp2p/go-sockaddr v0.1.0/go.mod h1:syPvOmNs24S3dFVGJA1/mrqdeijPxLV2Le3BRLKd68k= +github.com/libp2p/go-sockaddr v0.1.1 h1:yD80l2ZOdGksnOyHrhxDdTDFrf7Oy+v3FMVArIRgZxQ= github.com/libp2p/go-sockaddr v0.1.1/go.mod h1:syPvOmNs24S3dFVGJA1/mrqdeijPxLV2Le3BRLKd68k= github.com/libp2p/go-stream-muxer v0.0.1/go.mod h1:bAo8x7YkSpadMTbtTaxGVHWUQsR/l5MEaHbKaliuT14= github.com/libp2p/go-stream-muxer v0.1.0/go.mod h1:8JAVsjeRBCWwPoZeH0W1imLOcriqXJyFvB0mR4A04sQ= github.com/libp2p/go-stream-muxer-multistream v0.1.1/go.mod h1:zmGdfkQ1AzOECIAcccoL8L//laqawOsO03zX8Sa+eGw= github.com/libp2p/go-stream-muxer-multistream v0.2.0/go.mod h1:j9eyPol/LLRqT+GPLSxvimPhNph4sfYfMoDPd7HkzIc= +github.com/libp2p/go-stream-muxer-multistream v0.3.0 h1:TqnSHPJEIqDEO7h1wZZ0p3DXdvDSiLHQidKKUGZtiOY= github.com/libp2p/go-stream-muxer-multistream v0.3.0/go.mod h1:yDh8abSIzmZtqtOt64gFJUXEryejzNb0lisTt+fAMJA= -github.com/libp2p/go-stream-muxer-multistream v0.4.0 h1:HsM/9OdtqnIzjVXcxTXjmqKrj3gJ8kacaOJwJS1ipaY= -github.com/libp2p/go-stream-muxer-multistream v0.4.0/go.mod h1:nb+dGViZleRP4XcyHuZSVrJCBl55nRBOMmiSL/dyziw= github.com/libp2p/go-tcp-transport v0.0.4/go.mod h1:+E8HvC8ezEVOxIo3V5vCK9l1y/19K427vCzQ+xHKH/o= github.com/libp2p/go-tcp-transport v0.1.0/go.mod h1:oJ8I5VXryj493DEJ7OsBieu8fcg2nHGctwtInJVpipc= github.com/libp2p/go-tcp-transport v0.1.1/go.mod h1:3HzGvLbx6etZjnFlERyakbaYPdfjg2pWP97dFZworkY= @@ -1289,9 +1277,8 @@ github.com/libp2p/go-tcp-transport v0.2.0/go.mod h1:vX2U0CnWimU4h0SGSEsg++AzvBcr github.com/libp2p/go-tcp-transport v0.2.3/go.mod h1:9dvr03yqrPyYGIEN6Dy5UvdJZjyPFvl1S/igQ5QD1SU= github.com/libp2p/go-tcp-transport v0.2.4/go.mod h1:9dvr03yqrPyYGIEN6Dy5UvdJZjyPFvl1S/igQ5QD1SU= github.com/libp2p/go-tcp-transport v0.2.7/go.mod h1:lue9p1b3VmZj1MhhEGB/etmvF/nBQ0X9CW2DutBT3MM= +github.com/libp2p/go-tcp-transport v0.4.0 h1:VDyg4j6en3OuXf90gfDQh5Sy9KowO9udnd0OU8PP6zg= github.com/libp2p/go-tcp-transport v0.4.0/go.mod h1:0y52Rwrn4076xdJYu/51/qJIdxz+EWDAOG2S45sV3VI= -github.com/libp2p/go-tcp-transport v0.5.0 h1:3ZPW8HAuyRAuFzyabE0hSrCXKKSWzROnZZX7DtcIatY= -github.com/libp2p/go-tcp-transport v0.5.0/go.mod h1:UPPL0DIjQqiWRwVAb+CEQlaAG0rp/mCqJfIhFcLHc4Y= github.com/libp2p/go-testutil v0.0.1/go.mod h1:iAcJc/DKJQanJ5ws2V+u5ywdL2n12X1WbbEG+Jjy69I= github.com/libp2p/go-testutil v0.1.0/go.mod h1:81b2n5HypcVyrCg/MJx4Wgfp/VHojytjVe/gLzZ2Ehc= github.com/libp2p/go-ws-transport v0.0.5/go.mod h1:Qbl4BxPfXXhhd/o0wcrgoaItHqA9tnZjoFZnxykuaXU= @@ -1300,9 +1287,8 @@ github.com/libp2p/go-ws-transport v0.1.2/go.mod h1:dsh2Ld8F+XNmzpkaAijmg5Is+e9l6 github.com/libp2p/go-ws-transport v0.2.0/go.mod h1:9BHJz/4Q5A9ludYWKoGCFC5gUElzlHoKzu0yY9p/klM= github.com/libp2p/go-ws-transport v0.3.0/go.mod h1:bpgTJmRZAvVHrgHybCVyqoBmyLQ1fiZuEaBYusP5zsk= github.com/libp2p/go-ws-transport v0.4.0/go.mod h1:EcIEKqf/7GDjth6ksuS/6p7R49V4CBY6/E7R/iyhYUA= +github.com/libp2p/go-ws-transport v0.5.0 h1:cO6x4P0v6PfxbKnxmf5cY2Ny4OPDGYkUqNvZzp/zdlo= github.com/libp2p/go-ws-transport v0.5.0/go.mod h1:I2juo1dNTbl8BKSBYo98XY85kU2xds1iamArLvl8kNg= -github.com/libp2p/go-ws-transport v0.6.0 h1:326XBL6Q+5CQ2KtjXz32+eGu02W/Kz2+Fm4SpXdr0q4= -github.com/libp2p/go-ws-transport v0.6.0/go.mod h1:dXqtI9e2JV9FtF1NOtWVZSKXh5zXvnuwPXfj8GPBbYU= github.com/libp2p/go-yamux v1.2.1/go.mod h1:FGTiPvoV/3DVdgWpX+tM0OW3tsM+W5bSE3gZwqQTcow= github.com/libp2p/go-yamux v1.2.2/go.mod h1:FGTiPvoV/3DVdgWpX+tM0OW3tsM+W5bSE3gZwqQTcow= github.com/libp2p/go-yamux v1.2.3/go.mod h1:FGTiPvoV/3DVdgWpX+tM0OW3tsM+W5bSE3gZwqQTcow= @@ -1314,9 +1300,8 @@ github.com/libp2p/go-yamux v1.4.0/go.mod h1:fr7aVgmdNGJK+N1g+b6DW6VxzbRCjCOejR/h github.com/libp2p/go-yamux v1.4.1 h1:P1Fe9vF4th5JOxxgQvfbOHkrGqIZniTLf+ddhZp8YTI= github.com/libp2p/go-yamux v1.4.1/go.mod h1:fr7aVgmdNGJK+N1g+b6DW6VxzbRCjCOejR/hkmpooHE= github.com/libp2p/go-yamux/v2 v2.2.0/go.mod h1:3So6P6TV6r75R9jiBpiIKgU/66lOarCZjqROGxzPpPQ= +github.com/libp2p/go-yamux/v2 v2.3.0 h1:luRV68GS1vqqr6EFUjtu1kr51d+IbW0gSowu8emYWAI= github.com/libp2p/go-yamux/v2 v2.3.0/go.mod h1:iTU+lOIn/2h0AgKcL49clNTwfEw+WSfDYrXe05EyKIs= -github.com/libp2p/go-yamux/v3 v3.0.1 h1:lIdxHGVZ+y/EHgCrqGNt4Q+Mk9qu26MbOWH/yRw+Ihk= -github.com/libp2p/go-yamux/v3 v3.0.1/go.mod h1:s2LsDhHbh+RfCsQoICSYt58U2f8ijtPANFD8BmE74Bo= github.com/libp2p/zeroconf/v2 v2.1.1/go.mod h1:fuJqLnUwZTshS3U/bMRJ3+ow/v9oid1n0DmyYyNO1Xs= github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= @@ -1324,9 +1309,8 @@ github.com/lucas-clemente/quic-go v0.11.2/go.mod h1:PpMmPfPKO9nKJ/psF49ESTAGQSdf github.com/lucas-clemente/quic-go v0.19.3/go.mod h1:ADXpNbTQjq1hIzCpB+y/k5iz4n4z4IwqoLb94Kh5Hu8= github.com/lucas-clemente/quic-go v0.21.2/go.mod h1:vF5M1XqhBAHgbjKcJOXY3JZz3GP0T3FQhz/uyOUS38Q= github.com/lucas-clemente/quic-go v0.23.0/go.mod h1:paZuzjXCE5mj6sikVLMvqXk8lJV2AsqtJ6bDhjEfxx0= +github.com/lucas-clemente/quic-go v0.24.0 h1:ToR7SIIEdrgOhgVTHvPgdVRJfgVy+N0wQAagH7L4d5g= github.com/lucas-clemente/quic-go v0.24.0/go.mod h1:paZuzjXCE5mj6sikVLMvqXk8lJV2AsqtJ6bDhjEfxx0= -github.com/lucas-clemente/quic-go v0.25.0 h1:K+X9Gvd7JXsOHtU0N2icZ2Nw3rx82uBej3mP4CLgibc= -github.com/lucas-clemente/quic-go v0.25.0/go.mod h1:YtzP8bxRVCBlO77yRanE264+fY/T2U9ZlW1AaHOsMOg= github.com/lucasb-eyer/go-colorful v1.0.3 h1:QIbQXiugsb+q10B+MI+7DI1oQLdmnep86tWFlaaUAac= github.com/lucasb-eyer/go-colorful v1.0.3/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= github.com/lufia/iostat v1.1.0/go.mod h1:rEPNA0xXgjHQjuI5Cy05sLlS2oRcSlWHRLrvh/AQ+Pg= @@ -1353,8 +1337,6 @@ github.com/marten-seemann/qtls-go1-16 v0.1.4/go.mod h1:gNpI2Ol+lRS3WwSOtIUUtRwZE github.com/marten-seemann/qtls-go1-17 v0.1.0-rc.1/go.mod h1:fz4HIxByo+LlWcreM4CZOYNuz3taBQ8rN2X6FqvaWo8= github.com/marten-seemann/qtls-go1-17 v0.1.0 h1:P9ggrs5xtwiqXv/FHNwntmuLMNq3KaSIG93AtAZ48xk= github.com/marten-seemann/qtls-go1-17 v0.1.0/go.mod h1:fz4HIxByo+LlWcreM4CZOYNuz3taBQ8rN2X6FqvaWo8= -github.com/marten-seemann/qtls-go1-18 v0.1.0-beta.1 h1:EnzzN9fPUkUck/1CuY1FlzBaIYMoiBsdwTNmNGkwUUM= -github.com/marten-seemann/qtls-go1-18 v0.1.0-beta.1/go.mod h1:PUhIQk19LoFt2174H4+an8TYvWOGjb/hHwphBeaDHwI= github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd h1:br0buuQ854V8u83wA0rVZ8ttrq5CpaPZdvrK0LP2lOk= github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd/go.mod h1:QuCEs1Nt24+FYQEqAAncTDPJIuGs+LxK1MCiFL25pMU= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= @@ -1453,9 +1435,8 @@ github.com/multiformats/go-multiaddr v0.3.0/go.mod h1:dF9kph9wfJ+3VLAaeBqo9Of8x4 github.com/multiformats/go-multiaddr v0.3.1/go.mod h1:uPbspcUPd5AfaP6ql3ujFY+QWzmBD8uLLL4bXW0XfGc= github.com/multiformats/go-multiaddr v0.3.3/go.mod h1:lCKNGP1EQ1eZ35Za2wlqnabm9xQkib3fyB+nZXHLag0= github.com/multiformats/go-multiaddr v0.4.0/go.mod h1:YcpyLH8ZPudLxQlemYBPhSm0/oCXAT8Z4mzFpyoPyRc= +github.com/multiformats/go-multiaddr v0.4.1 h1:Pq37uLx3hsyNlTDir7FZyU8+cFCTqd5y1KiM2IzOutI= github.com/multiformats/go-multiaddr v0.4.1/go.mod h1:3afI9HfVW8csiF8UZqtpYRiDyew8pRX7qLIGHu9FLuM= -github.com/multiformats/go-multiaddr v0.5.0 h1:i/JuOoVg4szYQ4YEzDGtb2h0o8M7CG/Yq6cGlcjWZpM= -github.com/multiformats/go-multiaddr v0.5.0/go.mod h1:3KAxNkUqLTJ20AAwN4XVX4kZar+bR+gh4zgbfr3SNug= github.com/multiformats/go-multiaddr-dns v0.0.1/go.mod h1:9kWcqw/Pj6FwxAwW38n/9403szc57zJPs45fmnznu3Q= github.com/multiformats/go-multiaddr-dns v0.0.2/go.mod h1:9kWcqw/Pj6FwxAwW38n/9403szc57zJPs45fmnznu3Q= github.com/multiformats/go-multiaddr-dns v0.0.3/go.mod h1:9kWcqw/Pj6FwxAwW38n/9403szc57zJPs45fmnznu3Q= @@ -1576,8 +1557,6 @@ github.com/openzipkin/zipkin-go v0.2.5/go.mod h1:KpXfKdgRDnnhsxw4pNIH9Md5lyFqKUa github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 h1:onHthvaw9LFnH4t2DcNVpwGmV9E1BkGknEliJkfwQj0= -github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58/go.mod h1:DXv8WO4yhMYhSNPKjeNKa5WY9YCIEBRbNzFFPJbWO6Y= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= From 898f523162c3c3e438e1be39ffaf5f120d02af4f Mon Sep 17 00:00:00 2001 From: Aayush Date: Wed, 2 Mar 2022 15:41:41 -0500 Subject: [PATCH 36/48] Upgrade to go-data-transfer 1.14.1 --- go.mod | 2 +- go.sum | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/go.mod b/go.mod index 0a4943f12..f8a1b1d76 100644 --- a/go.mod +++ b/go.mod @@ -35,7 +35,7 @@ require ( github.com/filecoin-project/go-cbor-util v0.0.1 github.com/filecoin-project/go-commp-utils v0.1.3 github.com/filecoin-project/go-crypto v0.0.1 - github.com/filecoin-project/go-data-transfer v1.13.0 + github.com/filecoin-project/go-data-transfer v1.14.1 github.com/filecoin-project/go-fil-commcid v0.1.0 github.com/filecoin-project/go-fil-commp-hashhash v0.1.0 github.com/filecoin-project/go-fil-markets v1.17.0 diff --git a/go.sum b/go.sum index 8a04740cc..cb7fb0a34 100644 --- a/go.sum +++ b/go.sum @@ -316,8 +316,9 @@ github.com/filecoin-project/go-commp-utils v0.1.3/go.mod h1:3ENlD1pZySaUout0p9AN github.com/filecoin-project/go-crypto v0.0.0-20191218222705-effae4ea9f03/go.mod h1:+viYnvGtUTgJRdy6oaeF4MTFKAfatX071MPDPBL11EQ= github.com/filecoin-project/go-crypto v0.0.1 h1:AcvpSGGCgjaY8y1az6AMfKQWreF/pWO2JJGLl6gCq6o= github.com/filecoin-project/go-crypto v0.0.1/go.mod h1:+viYnvGtUTgJRdy6oaeF4MTFKAfatX071MPDPBL11EQ= -github.com/filecoin-project/go-data-transfer v1.13.0 h1:UqjBfacClqAmnzukek1oPxJXDM3l5UI/WX8CRN2/VkM= github.com/filecoin-project/go-data-transfer v1.13.0/go.mod h1:TcUtAdQl1ofnLV9oH3gPC93Hjce9yuKnq4O4j2M/BU4= +github.com/filecoin-project/go-data-transfer v1.14.1 h1:c6V9mXzC1uLAoSCqWQe4lHrN/iwMGPw36xoDDYHlH/M= +github.com/filecoin-project/go-data-transfer v1.14.1/go.mod h1:TcUtAdQl1ofnLV9oH3gPC93Hjce9yuKnq4O4j2M/BU4= github.com/filecoin-project/go-ds-versioning v0.0.0-20211206185234-508abd7c2aff/go.mod h1:C9/l9PnB1+mwPa26BBVpCjG/XQCB0yj/q5CK2J8X1I4= github.com/filecoin-project/go-ds-versioning v0.1.1 h1:JiyBqaQlwC+UM0WhcBtVEeT3XrX59mQhT8U3p7nu86o= github.com/filecoin-project/go-ds-versioning v0.1.1/go.mod h1:C9/l9PnB1+mwPa26BBVpCjG/XQCB0yj/q5CK2J8X1I4= From 1bc1cd33662c6137a357b21f8af6be1877a74eb3 Mon Sep 17 00:00:00 2001 From: Aayush Date: Wed, 2 Mar 2022 15:41:53 -0500 Subject: [PATCH 37/48] Upgrade to go-fil-markets 1.19.2 --- go.mod | 3 ++- go.sum | 5 ++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/go.mod b/go.mod index f8a1b1d76..08cbb4f99 100644 --- a/go.mod +++ b/go.mod @@ -36,9 +36,10 @@ require ( github.com/filecoin-project/go-commp-utils v0.1.3 github.com/filecoin-project/go-crypto v0.0.1 github.com/filecoin-project/go-data-transfer v1.14.1 + github.com/filecoin-project/go-ds-versioning v0.1.1 // indirect github.com/filecoin-project/go-fil-commcid v0.1.0 github.com/filecoin-project/go-fil-commp-hashhash v0.1.0 - github.com/filecoin-project/go-fil-markets v1.17.0 + github.com/filecoin-project/go-fil-markets v1.19.2 github.com/filecoin-project/go-jsonrpc v0.1.5 github.com/filecoin-project/go-padreader v0.0.1 github.com/filecoin-project/go-paramfetch v0.0.4 diff --git a/go.sum b/go.sum index cb7fb0a34..930ebb074 100644 --- a/go.sum +++ b/go.sum @@ -316,7 +316,6 @@ github.com/filecoin-project/go-commp-utils v0.1.3/go.mod h1:3ENlD1pZySaUout0p9AN github.com/filecoin-project/go-crypto v0.0.0-20191218222705-effae4ea9f03/go.mod h1:+viYnvGtUTgJRdy6oaeF4MTFKAfatX071MPDPBL11EQ= github.com/filecoin-project/go-crypto v0.0.1 h1:AcvpSGGCgjaY8y1az6AMfKQWreF/pWO2JJGLl6gCq6o= github.com/filecoin-project/go-crypto v0.0.1/go.mod h1:+viYnvGtUTgJRdy6oaeF4MTFKAfatX071MPDPBL11EQ= -github.com/filecoin-project/go-data-transfer v1.13.0/go.mod h1:TcUtAdQl1ofnLV9oH3gPC93Hjce9yuKnq4O4j2M/BU4= github.com/filecoin-project/go-data-transfer v1.14.1 h1:c6V9mXzC1uLAoSCqWQe4lHrN/iwMGPw36xoDDYHlH/M= github.com/filecoin-project/go-data-transfer v1.14.1/go.mod h1:TcUtAdQl1ofnLV9oH3gPC93Hjce9yuKnq4O4j2M/BU4= github.com/filecoin-project/go-ds-versioning v0.0.0-20211206185234-508abd7c2aff/go.mod h1:C9/l9PnB1+mwPa26BBVpCjG/XQCB0yj/q5CK2J8X1I4= @@ -328,8 +327,8 @@ github.com/filecoin-project/go-fil-commcid v0.1.0 h1:3R4ds1A9r6cr8mvZBfMYxTS88Oq github.com/filecoin-project/go-fil-commcid v0.1.0/go.mod h1:Eaox7Hvus1JgPrL5+M3+h7aSPHc0cVqpSxA+TxIEpZQ= github.com/filecoin-project/go-fil-commp-hashhash v0.1.0 h1:imrrpZWEHRnNqqv0tN7LXep5bFEVOVmQWHJvl2mgsGo= github.com/filecoin-project/go-fil-commp-hashhash v0.1.0/go.mod h1:73S8WSEWh9vr0fDJVnKADhfIv/d6dCbAGaAGWbdJEI8= -github.com/filecoin-project/go-fil-markets v1.17.0 h1:i9U6hZ+peri6Ygfwoda0YBk4bo1SHkd58EPBRgXCRlQ= -github.com/filecoin-project/go-fil-markets v1.17.0/go.mod h1:tKRMkDovSJiUo8yDt6YQM/gHMfNVYya0YTdayGhRnRY= +github.com/filecoin-project/go-fil-markets v1.19.2 h1:E+e0OhGAxluSbMExcEH91FErWwMQlkMlpF/Ijjny6Z0= +github.com/filecoin-project/go-fil-markets v1.19.2/go.mod h1:hYDiJHSKib3wo33rfKM1ujyaY2E0KFdsX6JdzaXTI08= github.com/filecoin-project/go-hamt-ipld v0.1.5 h1:uoXrKbCQZ49OHpsTCkrThPNelC4W3LPEk0OrS/ytIBM= github.com/filecoin-project/go-hamt-ipld v0.1.5/go.mod h1:6Is+ONR5Cd5R6XZoCse1CWaXZc0Hdb/JeX+EQCQzX24= github.com/filecoin-project/go-hamt-ipld/v2 v2.0.0 h1:b3UDemBYN2HNfk3KOXNuxgTTxlWi3xVvbQP0IT38fvM= From ebe1ca7c771657ed68be1574ada0a1695bad4996 Mon Sep 17 00:00:00 2001 From: Aayush Date: Wed, 2 Mar 2022 15:48:07 -0500 Subject: [PATCH 38/48] make gen --- build/openrpc/full.json.gz | Bin 26596 -> 26594 bytes build/openrpc/miner.json.gz | Bin 12926 -> 12927 bytes build/openrpc/worker.json.gz | Bin 3960 -> 3962 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/build/openrpc/full.json.gz b/build/openrpc/full.json.gz index 6b5c3135fcbc36def3460027b158c12914a40818..5d87fffe9153a4decdbe8e68e87ac05a1d675f8a 100644 GIT binary patch delta 21159 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 |coh_y>%%D@F6TG=k9%qVV${;L(E1ooES0^Gt( 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 delta 21149 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

rMx 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

u)RVlW=36c}wH?W#*z~H+XG;b6uCjK>#qx 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 diff --git a/build/openrpc/miner.json.gz b/build/openrpc/miner.json.gz index f64a87117de1c34302520d8acff22c5c837d562d..5d05474e602abc3936d1d5f590e5b7810681d8c9 100644 GIT binary patch delta 12303 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 delta 12290 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≀gT7urlaP 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 Ui<`y&2LJ&7|ENzSa0cc80MtdrmjD0& literal 3960 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 Date: Tue, 1 Mar 2022 21:56:12 -0500 Subject: [PATCH 39/48] pay for the collateral difference needed if the miner available balance is insufficient --- extern/storage-sealing/states_replica_update.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extern/storage-sealing/states_replica_update.go b/extern/storage-sealing/states_replica_update.go index 8683a11d8..bede7a5fa 100644 --- a/extern/storage-sealing/states_replica_update.go +++ b/extern/storage-sealing/states_replica_update.go @@ -168,7 +168,7 @@ func (m *Sealing) handleSubmitReplicaUpdate(ctx statemachine.Context, sector Sec log.Errorf("no good address to send replica update message from: %+v", err) return ctx.Send(SectorSubmitReplicaUpdateFailed{}) } - mcid, err := m.Api.SendMsg(ctx.Context(), from, m.maddr, miner.Methods.ProveReplicaUpdates, big.Zero(), big.Int(m.feeCfg.MaxCommitGasFee), enc.Bytes()) + mcid, err := m.Api.SendMsg(ctx.Context(), from, m.maddr, miner.Methods.ProveReplicaUpdates, collateral, big.Int(m.feeCfg.MaxCommitGasFee), enc.Bytes()) if err != nil { log.Errorf("handleSubmitReplicaUpdate: error sending message: %+v", err) return ctx.Send(SectorSubmitReplicaUpdateFailed{}) From 7073f31f84ad30e296ee7562390321c959d674cb Mon Sep 17 00:00:00 2001 From: zenground0 Date: Wed, 2 Mar 2022 09:33:33 -0700 Subject: [PATCH 40/48] Handle finalize failures in fsm --- cmd/lotus-miner/info.go | 1 + extern/storage-sealing/fsm.go | 6 ++ extern/storage-sealing/sector_state.go | 130 +++++++++++++------------ 3 files changed, 73 insertions(+), 64 deletions(-) diff --git a/cmd/lotus-miner/info.go b/cmd/lotus-miner/info.go index 1133908ca..249a839d6 100644 --- a/cmd/lotus-miner/info.go +++ b/cmd/lotus-miner/info.go @@ -527,6 +527,7 @@ var stateList = []stateMeta{ {col: color.FgRed, state: sealing.SnapDealsDealsExpired}, {col: color.FgRed, state: sealing.ReplicaUpdateFailed}, {col: color.FgRed, state: sealing.ReleaseSectorKeyFailed}, + {col: color.FgRed, state: sealing.FinalizeReplicaUpdateFailed}, } func init() { diff --git a/extern/storage-sealing/fsm.go b/extern/storage-sealing/fsm.go index 251d3a74a..8678a0fe9 100644 --- a/extern/storage-sealing/fsm.go +++ b/extern/storage-sealing/fsm.go @@ -175,6 +175,7 @@ var fsmPlanners = map[SectorState]func(events []statemachine.Event, state *Secto ), FinalizeReplicaUpdate: planOne( on(SectorFinalized{}, UpdateActivating), + on(SectorFinalizeFailed{}, FinalizeReplicaUpdateFailed), ), UpdateActivating: planOne( on(SectorUpdateActive{}, ReleaseSectorKey), @@ -267,6 +268,9 @@ var fsmPlanners = map[SectorState]func(events []statemachine.Event, state *Secto ReleaseSectorKeyFailed: planOne( on(SectorUpdateActive{}, ReleaseSectorKey), ), + FinalizeReplicaUpdateFailed: planOne( + on(SectorRetryFinalize{}, FinalizeReplicaUpdate), + ), // Post-seal @@ -536,6 +540,8 @@ func (m *Sealing) plan(events []statemachine.Event, state *SectorInfo) (func(sta return m.handleSubmitReplicaUpdateFailed, processed, nil case ReleaseSectorKeyFailed: return m.handleReleaseSectorKeyFailed, 0, err + case FinalizeReplicaUpdateFailed: + return m.handleFinalizeFailed, processed, nil case AbortUpgrade: return m.handleAbortUpgrade, processed, nil diff --git a/extern/storage-sealing/sector_state.go b/extern/storage-sealing/sector_state.go index 5c2c56171..0f8228d02 100644 --- a/extern/storage-sealing/sector_state.go +++ b/extern/storage-sealing/sector_state.go @@ -3,64 +3,65 @@ package sealing type SectorState string var ExistSectorStateList = map[SectorState]struct{}{ - Empty: {}, - WaitDeals: {}, - Packing: {}, - AddPiece: {}, - AddPieceFailed: {}, - GetTicket: {}, - PreCommit1: {}, - PreCommit2: {}, - PreCommitting: {}, - PreCommitWait: {}, - SubmitPreCommitBatch: {}, - PreCommitBatchWait: {}, - WaitSeed: {}, - Committing: {}, - CommitFinalize: {}, - CommitFinalizeFailed: {}, - SubmitCommit: {}, - CommitWait: {}, - SubmitCommitAggregate: {}, - CommitAggregateWait: {}, - FinalizeSector: {}, - Proving: {}, - FailedUnrecoverable: {}, - SealPreCommit1Failed: {}, - SealPreCommit2Failed: {}, - PreCommitFailed: {}, - ComputeProofFailed: {}, - CommitFailed: {}, - PackingFailed: {}, - FinalizeFailed: {}, - DealsExpired: {}, - RecoverDealIDs: {}, - Faulty: {}, - FaultReported: {}, - FaultedFinal: {}, - Terminating: {}, - TerminateWait: {}, - TerminateFinality: {}, - TerminateFailed: {}, - Removing: {}, - RemoveFailed: {}, - Removed: {}, - SnapDealsWaitDeals: {}, - SnapDealsAddPiece: {}, - SnapDealsPacking: {}, - UpdateReplica: {}, - ProveReplicaUpdate: {}, - SubmitReplicaUpdate: {}, - ReplicaUpdateWait: {}, - UpdateActivating: {}, - ReleaseSectorKey: {}, - FinalizeReplicaUpdate: {}, - SnapDealsAddPieceFailed: {}, - SnapDealsDealsExpired: {}, - SnapDealsRecoverDealIDs: {}, - ReplicaUpdateFailed: {}, - ReleaseSectorKeyFailed: {}, - AbortUpgrade: {}, + Empty: {}, + WaitDeals: {}, + Packing: {}, + AddPiece: {}, + AddPieceFailed: {}, + GetTicket: {}, + PreCommit1: {}, + PreCommit2: {}, + PreCommitting: {}, + PreCommitWait: {}, + SubmitPreCommitBatch: {}, + PreCommitBatchWait: {}, + WaitSeed: {}, + Committing: {}, + CommitFinalize: {}, + CommitFinalizeFailed: {}, + SubmitCommit: {}, + CommitWait: {}, + SubmitCommitAggregate: {}, + CommitAggregateWait: {}, + FinalizeSector: {}, + Proving: {}, + FailedUnrecoverable: {}, + SealPreCommit1Failed: {}, + SealPreCommit2Failed: {}, + PreCommitFailed: {}, + ComputeProofFailed: {}, + CommitFailed: {}, + PackingFailed: {}, + FinalizeFailed: {}, + DealsExpired: {}, + RecoverDealIDs: {}, + Faulty: {}, + FaultReported: {}, + FaultedFinal: {}, + Terminating: {}, + TerminateWait: {}, + TerminateFinality: {}, + TerminateFailed: {}, + Removing: {}, + RemoveFailed: {}, + Removed: {}, + SnapDealsWaitDeals: {}, + SnapDealsAddPiece: {}, + SnapDealsPacking: {}, + UpdateReplica: {}, + ProveReplicaUpdate: {}, + SubmitReplicaUpdate: {}, + ReplicaUpdateWait: {}, + UpdateActivating: {}, + ReleaseSectorKey: {}, + FinalizeReplicaUpdate: {}, + SnapDealsAddPieceFailed: {}, + SnapDealsDealsExpired: {}, + SnapDealsRecoverDealIDs: {}, + ReplicaUpdateFailed: {}, + ReleaseSectorKeyFailed: {}, + FinalizeReplicaUpdateFailed: {}, + AbortUpgrade: {}, } // cmd/lotus-miner/info.go defines CLI colors corresponding to these states @@ -124,12 +125,13 @@ const ( RecoverDealIDs SectorState = "RecoverDealIDs" // snap deals error modes - SnapDealsAddPieceFailed SectorState = "SnapDealsAddPieceFailed" - SnapDealsDealsExpired SectorState = "SnapDealsDealsExpired" - SnapDealsRecoverDealIDs SectorState = "SnapDealsRecoverDealIDs" - AbortUpgrade SectorState = "AbortUpgrade" - ReplicaUpdateFailed SectorState = "ReplicaUpdateFailed" - ReleaseSectorKeyFailed SectorState = "ReleaseSectorKeyFailed" + SnapDealsAddPieceFailed SectorState = "SnapDealsAddPieceFailed" + SnapDealsDealsExpired SectorState = "SnapDealsDealsExpired" + SnapDealsRecoverDealIDs SectorState = "SnapDealsRecoverDealIDs" + AbortUpgrade SectorState = "AbortUpgrade" + ReplicaUpdateFailed SectorState = "ReplicaUpdateFailed" + ReleaseSectorKeyFailed SectorState = "ReleaseSectorKeyFailed" + FinalizeReplicaUpdateFailed SectorState = "FinalizeReplicaUpdateFailed" Faulty SectorState = "Faulty" // sector is corrupted or gone for some reason FaultReported SectorState = "FaultReported" // sector has been declared as a fault on chain From 2e1bb7e8cc7604e3c257d0d5415ce362c0c06a11 Mon Sep 17 00:00:00 2001 From: Aayush Date: Wed, 2 Mar 2022 16:55:33 -0500 Subject: [PATCH 41/48] Lotus release v1.15.0-rc3 --- CHANGELOG.md | 4 ++-- build/openrpc/full.json.gz | Bin 26594 -> 26594 bytes build/openrpc/miner.json.gz | Bin 12927 -> 12927 bytes build/openrpc/worker.json.gz | Bin 3962 -> 3962 bytes build/version.go | 2 +- documentation/en/cli-lotus-miner.md | 2 +- documentation/en/cli-lotus-worker.md | 2 +- documentation/en/cli-lotus.md | 2 +- 8 files changed, 6 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 44eae6e4b..b687cfb7c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,7 @@ # Lotus changelog -# 1.15.0-rc2 / 2022-03-01 +# 1.15.0-rc3 / 2022-03-02 -This is the second release candidates of v1.15.0, detailed changelog will be updated later. +This is the third release candidates of v1.15.0, detailed changelog will be updated later. This RC drops the libp2p upgrade that was included in the earlier 2 RCs. - github.com/filecoin-project/lotus: - bump the version to v1.15.0-rc1 diff --git a/build/openrpc/full.json.gz b/build/openrpc/full.json.gz index 5d87fffe9153a4decdbe8e68e87ac05a1d675f8a..6baa5905bfef54c12e5b734437e0093c5707e9de 100644 GIT binary patch literal 26594 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 Gu>S*yyWxKT delta 26551 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 diff --git a/build/openrpc/miner.json.gz b/build/openrpc/miner.json.gz index 5d05474e602abc3936d1d5f590e5b7810681d8c9..48524e76fd398063db7935762abd305874a6d3e4 100644 GIT binary patch delta 21 dcmeyL@;_xl7i0X!?l*=U<&Uo=idQl*004Zh3B>>a delta 21 ccmeyL@;_xl7o-2i?l*=U61}B$;+0Gc0CdL)yZ`_I diff --git a/build/openrpc/worker.json.gz b/build/openrpc/worker.json.gz index 89d26d1617df98cc652350e8b25e5e0d3dbb18ff..7c4eac1de0dff757047bd7343ef3cb13bf31401e 100644 GIT binary patch delta 21 dcmew*_e*X Date: Wed, 2 Mar 2022 09:33:33 -0700 Subject: [PATCH 42/48] Handle finalize failures in fsm --- cmd/lotus-miner/info.go | 1 + extern/storage-sealing/fsm.go | 6 ++ extern/storage-sealing/sector_state.go | 130 +++++++++++++------------ 3 files changed, 73 insertions(+), 64 deletions(-) diff --git a/cmd/lotus-miner/info.go b/cmd/lotus-miner/info.go index 1133908ca..249a839d6 100644 --- a/cmd/lotus-miner/info.go +++ b/cmd/lotus-miner/info.go @@ -527,6 +527,7 @@ var stateList = []stateMeta{ {col: color.FgRed, state: sealing.SnapDealsDealsExpired}, {col: color.FgRed, state: sealing.ReplicaUpdateFailed}, {col: color.FgRed, state: sealing.ReleaseSectorKeyFailed}, + {col: color.FgRed, state: sealing.FinalizeReplicaUpdateFailed}, } func init() { diff --git a/extern/storage-sealing/fsm.go b/extern/storage-sealing/fsm.go index 251d3a74a..8678a0fe9 100644 --- a/extern/storage-sealing/fsm.go +++ b/extern/storage-sealing/fsm.go @@ -175,6 +175,7 @@ var fsmPlanners = map[SectorState]func(events []statemachine.Event, state *Secto ), FinalizeReplicaUpdate: planOne( on(SectorFinalized{}, UpdateActivating), + on(SectorFinalizeFailed{}, FinalizeReplicaUpdateFailed), ), UpdateActivating: planOne( on(SectorUpdateActive{}, ReleaseSectorKey), @@ -267,6 +268,9 @@ var fsmPlanners = map[SectorState]func(events []statemachine.Event, state *Secto ReleaseSectorKeyFailed: planOne( on(SectorUpdateActive{}, ReleaseSectorKey), ), + FinalizeReplicaUpdateFailed: planOne( + on(SectorRetryFinalize{}, FinalizeReplicaUpdate), + ), // Post-seal @@ -536,6 +540,8 @@ func (m *Sealing) plan(events []statemachine.Event, state *SectorInfo) (func(sta return m.handleSubmitReplicaUpdateFailed, processed, nil case ReleaseSectorKeyFailed: return m.handleReleaseSectorKeyFailed, 0, err + case FinalizeReplicaUpdateFailed: + return m.handleFinalizeFailed, processed, nil case AbortUpgrade: return m.handleAbortUpgrade, processed, nil diff --git a/extern/storage-sealing/sector_state.go b/extern/storage-sealing/sector_state.go index 5c2c56171..0f8228d02 100644 --- a/extern/storage-sealing/sector_state.go +++ b/extern/storage-sealing/sector_state.go @@ -3,64 +3,65 @@ package sealing type SectorState string var ExistSectorStateList = map[SectorState]struct{}{ - Empty: {}, - WaitDeals: {}, - Packing: {}, - AddPiece: {}, - AddPieceFailed: {}, - GetTicket: {}, - PreCommit1: {}, - PreCommit2: {}, - PreCommitting: {}, - PreCommitWait: {}, - SubmitPreCommitBatch: {}, - PreCommitBatchWait: {}, - WaitSeed: {}, - Committing: {}, - CommitFinalize: {}, - CommitFinalizeFailed: {}, - SubmitCommit: {}, - CommitWait: {}, - SubmitCommitAggregate: {}, - CommitAggregateWait: {}, - FinalizeSector: {}, - Proving: {}, - FailedUnrecoverable: {}, - SealPreCommit1Failed: {}, - SealPreCommit2Failed: {}, - PreCommitFailed: {}, - ComputeProofFailed: {}, - CommitFailed: {}, - PackingFailed: {}, - FinalizeFailed: {}, - DealsExpired: {}, - RecoverDealIDs: {}, - Faulty: {}, - FaultReported: {}, - FaultedFinal: {}, - Terminating: {}, - TerminateWait: {}, - TerminateFinality: {}, - TerminateFailed: {}, - Removing: {}, - RemoveFailed: {}, - Removed: {}, - SnapDealsWaitDeals: {}, - SnapDealsAddPiece: {}, - SnapDealsPacking: {}, - UpdateReplica: {}, - ProveReplicaUpdate: {}, - SubmitReplicaUpdate: {}, - ReplicaUpdateWait: {}, - UpdateActivating: {}, - ReleaseSectorKey: {}, - FinalizeReplicaUpdate: {}, - SnapDealsAddPieceFailed: {}, - SnapDealsDealsExpired: {}, - SnapDealsRecoverDealIDs: {}, - ReplicaUpdateFailed: {}, - ReleaseSectorKeyFailed: {}, - AbortUpgrade: {}, + Empty: {}, + WaitDeals: {}, + Packing: {}, + AddPiece: {}, + AddPieceFailed: {}, + GetTicket: {}, + PreCommit1: {}, + PreCommit2: {}, + PreCommitting: {}, + PreCommitWait: {}, + SubmitPreCommitBatch: {}, + PreCommitBatchWait: {}, + WaitSeed: {}, + Committing: {}, + CommitFinalize: {}, + CommitFinalizeFailed: {}, + SubmitCommit: {}, + CommitWait: {}, + SubmitCommitAggregate: {}, + CommitAggregateWait: {}, + FinalizeSector: {}, + Proving: {}, + FailedUnrecoverable: {}, + SealPreCommit1Failed: {}, + SealPreCommit2Failed: {}, + PreCommitFailed: {}, + ComputeProofFailed: {}, + CommitFailed: {}, + PackingFailed: {}, + FinalizeFailed: {}, + DealsExpired: {}, + RecoverDealIDs: {}, + Faulty: {}, + FaultReported: {}, + FaultedFinal: {}, + Terminating: {}, + TerminateWait: {}, + TerminateFinality: {}, + TerminateFailed: {}, + Removing: {}, + RemoveFailed: {}, + Removed: {}, + SnapDealsWaitDeals: {}, + SnapDealsAddPiece: {}, + SnapDealsPacking: {}, + UpdateReplica: {}, + ProveReplicaUpdate: {}, + SubmitReplicaUpdate: {}, + ReplicaUpdateWait: {}, + UpdateActivating: {}, + ReleaseSectorKey: {}, + FinalizeReplicaUpdate: {}, + SnapDealsAddPieceFailed: {}, + SnapDealsDealsExpired: {}, + SnapDealsRecoverDealIDs: {}, + ReplicaUpdateFailed: {}, + ReleaseSectorKeyFailed: {}, + FinalizeReplicaUpdateFailed: {}, + AbortUpgrade: {}, } // cmd/lotus-miner/info.go defines CLI colors corresponding to these states @@ -124,12 +125,13 @@ const ( RecoverDealIDs SectorState = "RecoverDealIDs" // snap deals error modes - SnapDealsAddPieceFailed SectorState = "SnapDealsAddPieceFailed" - SnapDealsDealsExpired SectorState = "SnapDealsDealsExpired" - SnapDealsRecoverDealIDs SectorState = "SnapDealsRecoverDealIDs" - AbortUpgrade SectorState = "AbortUpgrade" - ReplicaUpdateFailed SectorState = "ReplicaUpdateFailed" - ReleaseSectorKeyFailed SectorState = "ReleaseSectorKeyFailed" + SnapDealsAddPieceFailed SectorState = "SnapDealsAddPieceFailed" + SnapDealsDealsExpired SectorState = "SnapDealsDealsExpired" + SnapDealsRecoverDealIDs SectorState = "SnapDealsRecoverDealIDs" + AbortUpgrade SectorState = "AbortUpgrade" + ReplicaUpdateFailed SectorState = "ReplicaUpdateFailed" + ReleaseSectorKeyFailed SectorState = "ReleaseSectorKeyFailed" + FinalizeReplicaUpdateFailed SectorState = "FinalizeReplicaUpdateFailed" Faulty SectorState = "Faulty" // sector is corrupted or gone for some reason FaultReported SectorState = "FaultReported" // sector has been declared as a fault on chain From 93e22da5395692ec4bd33613d5d3fc73596e5876 Mon Sep 17 00:00:00 2001 From: zenground0 Date: Wed, 2 Mar 2022 13:03:03 -0700 Subject: [PATCH 43/48] Log instead of error normal shutdown of state machine --- extern/storage-sealing/fsm.go | 36 ++++++++++++++++++++++------------- 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/extern/storage-sealing/fsm.go b/extern/storage-sealing/fsm.go index 8678a0fe9..2c50d1885 100644 --- a/extern/storage-sealing/fsm.go +++ b/extern/storage-sealing/fsm.go @@ -19,7 +19,13 @@ import ( func (m *Sealing) Plan(events []statemachine.Event, user interface{}) (interface{}, uint64, error) { next, processed, err := m.plan(events, user.(*SectorInfo)) if err != nil || next == nil { - return nil, processed, err + l := Log{ + Timestamp: uint64(time.Now().Unix()), + Message: fmt.Sprintf("state machine error: %s", err), + Kind: fmt.Sprintf("error;%T", err), + } + user.(*SectorInfo).logAppend(l) + return nil, processed, nil } return func(ctx statemachine.Context, si SectorInfo) error { @@ -313,6 +319,21 @@ var fsmPlanners = map[SectorState]func(events []statemachine.Event, state *Secto FailedUnrecoverable: final, } +func (state *SectorInfo) logAppend(l Log) { + if len(state.Log) > 8000 { + log.Warnw("truncating sector log", "sector", state.SectorNumber) + state.Log[2000] = Log{ + Timestamp: uint64(time.Now().Unix()), + Message: "truncating log (above 8000 entries)", + Kind: fmt.Sprintf("truncate"), + } + + state.Log = append(state.Log[:2000], state.Log[6000:]...) + } + + state.Log = append(state.Log, l) +} + func (m *Sealing) logEvents(events []statemachine.Event, state *SectorInfo) { for _, event := range events { log.Debugw("sector event", "sector", state.SectorNumber, "type", fmt.Sprintf("%T", event.User), "event", event.User) @@ -341,18 +362,7 @@ func (m *Sealing) logEvents(events []statemachine.Event, state *SectorInfo) { l.Trace = fmt.Sprintf("%+v", err) } - if len(state.Log) > 8000 { - log.Warnw("truncating sector log", "sector", state.SectorNumber) - state.Log[2000] = Log{ - Timestamp: uint64(time.Now().Unix()), - Message: "truncating log (above 8000 entries)", - Kind: fmt.Sprintf("truncate"), - } - - state.Log = append(state.Log[:2000], state.Log[6000:]...) - } - - state.Log = append(state.Log, l) + state.logAppend(l) } } From e51b10e6a5c91e440c1fa51e92ec150316848ff3 Mon Sep 17 00:00:00 2001 From: Jennifer Wang Date: Thu, 3 Mar 2022 18:57:20 -0500 Subject: [PATCH 44/48] release v1.14.4 --- CHANGELOG.md | 10 ++++++++++ build/openrpc/full.json.gz | Bin 25706 -> 25705 bytes build/openrpc/miner.json.gz | Bin 11768 -> 11768 bytes build/openrpc/worker.json.gz | Bin 3845 -> 3845 bytes build/version.go | 2 +- documentation/en/cli-lotus-miner.md | 2 +- documentation/en/cli-lotus-worker.md | 2 +- documentation/en/cli-lotus.md | 2 +- 8 files changed, 14 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 629635c1e..ebb5b6a5a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,15 @@ # Lotus changelog +# 1.14.4 / 2022-03-03 + +This is a *highly recommended* optional release for storage providers that are doing snap deals. This fix the bug +that causes some snap deal sectors are stuck in `FinalizeReplicaUpdate`. In addition, SPs should be able to force +update sectors status without getting blocked by `normal shutdown of state machine`. + +# v1.14.3 / 2022-02-28 + +This is an **optional** release, that includes a fix to properly register the `--really-do-it` flag for abort-upgrade. + # 1.14.2 / 2022-02-24 This is an **optional** release of lotus, that's had a couple more improvements w.r.t Snap experience for storage providers in preparation of the[upcoming OhSnap upgrade](https://github.com/filecoin-project/community/discussions/74?sort=new#discussioncomment-1922550). diff --git a/build/openrpc/full.json.gz b/build/openrpc/full.json.gz index d6f1437743b300f25103a5f74057caeaff6a4d93..f49edde9dc991573574a1402faac05ce7126bc5a 100644 GIT binary patch delta 30 mcmaELg7M`E#tB`FUpIEYWn?_Pxr*sUBFE_pKjtiMRt5m=s0{i5 delta 31 ncmaEPg7MV}#tB`F-!^u?Wn_Baxw(?*MIuL6!HU&c+^h@$1EmgO diff --git a/build/openrpc/miner.json.gz b/build/openrpc/miner.json.gz index 676bd4d72b0ab84c251f62902faa5fc1061b4748..9c85c08e5ddcede63290c629045be3f80f92948e 100644 GIT binary patch delta 11735 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 diff --git a/build/openrpc/worker.json.gz b/build/openrpc/worker.json.gz index 84c7626f7b0f83752db042c59e80910a3214a92e..e8e1f8c67740bf76458a1e8103a6078d2e7ebfa9 100644 GIT binary patch delta 21 dcmZpbYn7YO$QZk^shW@D Date: Wed, 9 Mar 2022 16:51:48 -0500 Subject: [PATCH 45/48] update v1.15.0 changelog --- CHANGELOG.md | 273 +++++++++++++++++++++------------------------------ 1 file changed, 110 insertions(+), 163 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a8b875560..b50d7cc9e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,177 +1,123 @@ # Lotus changelog -# 1.15.0-rc3 / 2022-03-02 -This is the third release candidates of v1.15.0, detailed changelog will be updated later. This RC drops the libp2p upgrade that was included in the earlier 2 RCs. +# 1.15.0 / 2022-03-09 -- github.com/filecoin-project/lotus: - - bump the version to v1.15.0-rc1 - - chore: build: v1.14.0 -> master ([filecoin-project/lotus#8053](https://github.com/filecoin-project/lotus/pull/8053)) - - FinalizeReplicaUpdate ([filecoin-project/lotus#8018](https://github.com/filecoin-project/lotus/pull/8018)) - - splitstore sortless compaction ([filecoin-project/lotus#8008](https://github.com/filecoin-project/lotus/pull/8008)) - - perf: chain: Make drand logs in daemon less noisy (#7955) ([filecoin-project/lotus#7955](https://github.com/filecoin-project/lotus/pull/7955)) - - chore: shed: storage stats 2.0 ([filecoin-project/lotus#7941](https://github.com/filecoin-project/lotus/pull/7941)) - - StartEpochSealingBuffer triggers packing on timer ([filecoin-project/lotus#7905](https://github.com/filecoin-project/lotus/pull/7905)) - - deps: update go-paramfetch to v0.0.4 ([filecoin-project/lotus#8050](https://github.com/filecoin-project/lotus/pull/8050)) - - fix: sealing: Stop recovery attempts after fault ([filecoin-project/lotus#8014](https://github.com/filecoin-project/lotus/pull/8014)) - - chore: update build and deps ([filecoin-project/lotus#8047](https://github.com/filecoin-project/lotus/pull/8047)) - - update libp2p to v0.18.0-rc4 ([filecoin-project/lotus#8044](https://github.com/filecoin-project/lotus/pull/8044)) - - update go-libp2p to v0.18.0-rc3 ([filecoin-project/lotus#8022](https://github.com/filecoin-project/lotus/pull/8022)) - - misc: api: Annotate lotus tests according to listed behaviors ([filecoin-project/lotus#7835](https://github.com/filecoin-project/lotus/pull/7835)) - - some basic splitstore refactors ([filecoin-project/lotus#7999](https://github.com/filecoin-project/lotus/pull/7999)) - - feat: mpool: Cache state nonces ([filecoin-project/lotus#8005](https://github.com/filecoin-project/lotus/pull/8005)) - - chore: sealer: quieten a log ([filecoin-project/lotus#7998](https://github.com/filecoin-project/lotus/pull/7998)) - - chore: build: make the OhSnap epoch configurable by an envvar for devnets ([filecoin-project/lotus#7995](https://github.com/filecoin-project/lotus/pull/7995)) - - chore: chain: fix log ([filecoin-project/lotus#7993](https://github.com/filecoin-project/lotus/pull/7993)) - - tvx: supply network version when extracting messages. ([filecoin-project/lotus#7996](https://github.com/filecoin-project/lotus/pull/7996)) - - fix: sealer: manager should lock Unsealed for ReplicaUpdate ([filecoin-project/lotus#7986](https://github.com/filecoin-project/lotus/pull/7986)) - - chore: remove inaccurate comment in sealtasks ([filecoin-project/lotus#7977](https://github.com/filecoin-project/lotus/pull/7977)) - - update go-libp2p to v0.18.0-rc2 ([filecoin-project/lotus#7984](https://github.com/filecoin-project/lotus/pull/7984)) - - Fix: sealer: ReplicaUpdate should fetch the correct files ([filecoin-project/lotus#7983](https://github.com/filecoin-project/lotus/pull/7983)) - - libp2p v0.18.0-rc1 and initial resource manager integration ([filecoin-project/lotus#7969](https://github.com/filecoin-project/lotus/pull/7969)) - - chore: merge release/v1.14.0 PRs into master ([filecoin-project/lotus#7979](https://github.com/filecoin-project/lotus/pull/7979)) - - chore: update PR template ([filecoin-project/lotus#7918](https://github.com/filecoin-project/lotus/pull/7918)) - - Fix: chain: create a new VM for each epoch ([filecoin-project/lotus#7966](https://github.com/filecoin-project/lotus/pull/7966)) +This is an optional release with retrieval improvements(client side), SP ux with unsealing, snap deals and regular deal making and many other new features, improvements and bug fixes. + +## Highlights +- feat:sealing: StartEpochSealingBuffer triggers packing on time([filecoin-project/lotus#7905](https://github.com/filecoin-project/lotus/pull/7905)) + - use the `StartEpochSealingBuffer` configuration variable as a way to enforce that sectors are packed for sealing / updating no matter how many deals they have if the nearest deal start date is close enough to the present. +- feat: #6017 market: retrieval ask CLI command ([filecoin-project/lotus#7814](https://github.com/filecoin-project/lotus/pull/7814)) +- feat(graphsync): allow setting of per-peer incoming requests for miners ([filecoin-project/lotus#7578](https://github.com/filecoin-project/lotus/pull/7578)) + - by setting `SimultaneousTransfersForStoragePerClient` in deal making configuration. +- Make retrieval even faster ([filecoin-project/lotus#7746](https://github.com/filecoin-project/lotus/pull/7746)) +- feat: #7747 sealing: Adding conf variable for capping number of concurrent unsealing jobs (#7884) ([filecoin-project/lotus#7884](https://github.com/filecoin-project/lotus/pull/7884)) + - by setting `MaxConcurrentUnseals` in `DAGStoreConfig` + +## New Features +- fix: sealing: Stop recovery attempts after fault ([filecoin-project/lotus#8014](https://github.com/filecoin-project/lotus/pull/8014)) +- feat: mpool: Cache state nonces ([filecoin-project/lotus#8005](https://github.com/filecoin-project/lotus/pull/8005)) +- chore: build: make the OhSnap epoch configurable by an envvar for devnets ([filecoin-project/lotus#7995](https://github.com/filecoin-project/lotus/pull/7995)) +- Shed: Add a util to send a batch of messages ([filecoin-project/lotus#7667](https://github.com/filecoin-project/lotus/pull/7667)) +- Add api for transfer diagnostics ([filecoin-project/lotus#7759](https://github.com/filecoin-project/lotus/pull/7759)) +- Shed: Add a util to list terminated deals ([filecoin-project/lotus#7774](https://github.com/filecoin-project/lotus/pull/7774)) +- Expose EnableGasTracing as an env_var ([filecoin-project/lotus#7750](https://github.com/filecoin-project/lotus/pull/7750)) +- Command to list active sector locks ([filecoin-project/lotus#7735](https://github.com/filecoin-project/lotus/pull/7735)) +- Initial switch to OpenTelemetry ([filecoin-project/lotus#7725](https://github.com/filecoin-project/lotus/pull/7725)) + +## Improvements +- splitstore sortless compaction ([filecoin-project/lotus#8008](https://github.com/filecoin-project/lotus/pull/8008)) +- perf: chain: Make drand logs in daemon less noisy (#7955) ([filecoin-project/lotus#7955](https://github.com/filecoin-project/lotus/pull/7955)) +- chore: shed: storage stats 2.0 ([filecoin-project/lotus#7941](https://github.com/filecoin-project/lotus/pull/7941)) +- misc: api: Annotate lotus tests according to listed behaviors ([filecoin-project/lotus#7835](https://github.com/filecoin-project/lotus/pull/7835)) +- some basic splitstore refactors ([filecoin-project/lotus#7999](https://github.com/filecoin-project/lotus/pull/7999)) +- chore: sealer: quieten a log ([filecoin-project/lotus#7998](https://github.com/filecoin-project/lotus/pull/7998)) +- tvx: supply network version when extracting messages. ([filecoin-project/lotus#7996](https://github.com/filecoin-project/lotus/pull/7996)) +- chore: remove inaccurate comment in sealtasks ([filecoin-project/lotus#7977](https://github.com/filecoin-project/lotus/pull/7977)) +- Refactor: VM: Remove the NetworkVersionGetter ([filecoin-project/lotus#7818](https://github.com/filecoin-project/lotus/pull/7818)) +- refactor: state: Move randomness versioning out of the VM ([filecoin-project/lotus#7816](https://github.com/filecoin-project/lotus/pull/7816)) +- updating to new datastore/blockstore code with contexts ([filecoin-project/lotus#7646](https://github.com/filecoin-project/lotus/pull/7646)) +- Mempool msg selection should respect block message limits ([filecoin-project/lotus#7321](https://github.com/filecoin-project/lotus/pull/7321)) +- Minor improvement for OpenTelemetry ([filecoin-project/lotus#7760](https://github.com/filecoin-project/lotus/pull/7760)) +- Sort lotus-miner retrieval-deals by dealId ([filecoin-project/lotus#7749](https://github.com/filecoin-project/lotus/pull/7749)) +- dagstore pieceReader: Always read full in ReadAt ([filecoin-project/lotus#7737](https://github.com/filecoin-project/lotus/pull/7737)) + +## Bug Fixes +- fix:snap: pay for the collateral difference needed if the miner available balance is insufficient ([filecoin-project/lotus#8234](https://github.com/filecoin-project/lotus/pull/8234)) +- sealer: fix error message ([filecoin-project/lotus#8136](https://github.com/filecoin-project/lotus/pull/8136)) +- typo in variable name ([filecoin-project/lotus#8134](https://github.com/filecoin-project/lotus/pull/8134)) +- fix: sealer: allow enable/disabling ReplicaUpdate tasks ([filecoin-project/lotus#8093](https://github.com/filecoin-project/lotus/pull/8093)) +- chore: chain: fix log ([filecoin-project/lotus#7993](https://github.com/filecoin-project/lotus/pull/7993)) +- Fix: chain: create a new VM for each epoch ([filecoin-project/lotus#7966](https://github.com/filecoin-project/lotus/pull/7966)) +- fix: doc generation struct slice example value ([filecoin-project/lotus#7851](https://github.com/filecoin-project/lotus/pull/7851)) +- fix: returned error not be accept correctly ([filecoin-project/lotus#7852](https://github.com/filecoin-project/lotus/pull/7852)) +- fix: #7577 markets: When retrying Add Piece, first seek to start of reader ([filecoin-project/lotus#7812](https://github.com/filecoin-project/lotus/pull/7812)) +- misc: n/a sealing: Fix grammatical error in a log warning message ([filecoin-project/lotus#7831](https://github.com/filecoin-project/lotus/pull/7831)) +- sectors update-state checks if sector exists before changing its state ([filecoin-project/lotus#7762](https://github.com/filecoin-project/lotus/pull/7762)) +- SplitStore: supress compaction near upgrades ([filecoin-project/lotus#7734](https://github.com/filecoin-project/lotus/pull/7734)) + +## Dependency Updates +- github.com/filecoin-project/go-commp-utils (v0.1.2 -> v0.1.3): +- github.com/filecoin-project/dagstore (v0.4.3 -> v0.4.4): +- github.com/filecoin-project/go-fil-markets (v1.13.4 -> v1.19.2): +- github.com/filecoin-project/go-statestore (v0.1.1 -> v0.2.0): +- github.com/filecoin-project/go-storedcounter (v0.0.0-20200421200003-1c99c62e8a5b -> v0.1.0): +- github.com/filecoin-project/specs-actors/v2 (v2.3.5 -> v2.3.6): - feat(deps): update markets stack ([filecoin-project/lotus#7959](https://github.com/filecoin-project/lotus/pull/7959)) - Use go-libp2p-connmgr v0.3.1 ([filecoin-project/lotus#7957](https://github.com/filecoin-project/lotus/pull/7957)) - - feat: #7747 sealing: Adding conf variable for capping number of concurrent unsealing jobs (#7884) ([filecoin-project/lotus#7884](https://github.com/filecoin-project/lotus/pull/7884)) - - build: release: bump master version to v1.15.0-dev ([filecoin-project/lotus#7922](https://github.com/filecoin-project/lotus/pull/7922)) - - feat: build: butterfly SNAPNET ([filecoin-project/lotus#7932](https://github.com/filecoin-project/lotus/pull/7932)) - - correctness fixes for the autobatch blockstore ([filecoin-project/lotus#7940](https://github.com/filecoin-project/lotus/pull/7940)) - - fix: #7869 sealing: Add more deal expiration checks during PRU pipeline ([filecoin-project/lotus#7871](https://github.com/filecoin-project/lotus/pull/7871)) - - fix: blockstore: Add missing locks to autobatch::Get() ([filecoin-project/lotus#7939](https://github.com/filecoin-project/lotus/pull/7939)) - - feat: state: Fast migration for v15 ([filecoin-project/lotus#7933](https://github.com/filecoin-project/lotus/pull/7933)) - - enhancement: #7891 sectors: disable existing existing cc upgrade path 2 days before the upgrade epoch ([filecoin-project/lotus#7900](https://github.com/filecoin-project/lotus/pull/7900)) - - chore: deps: Integrate proof v11.0.0 ([filecoin-project/lotus#7923](https://github.com/filecoin-project/lotus/pull/7923)) - - Snap Deals Lotus Integration: FSM Posting and integration test ([filecoin-project/lotus#7810](https://github.com/filecoin-project/lotus/pull/7810)) - - chore: deps: Update go-paramfetch ([filecoin-project/lotus#7917](https://github.com/filecoin-project/lotus/pull/7917)) - - feat: #7880 gas: add gas charge for VerifyReplicaUpdate ([filecoin-project/lotus#7897](https://github.com/filecoin-project/lotus/pull/7897)) - - misc: build: v1.13.2 back to master ([filecoin-project/lotus#7910](https://github.com/filecoin-project/lotus/pull/7910)) - - FIX: #7904 CI: generated vectors from v7 for bleeding edge ([filecoin-project/lotus#7903](https://github.com/filecoin-project/lotus/pull/7903)) - - misc: docs: remove issue number from the pr title ([filecoin-project/lotus#7902](https://github.com/filecoin-project/lotus/pull/7902)) - - Fix: state: circsuypply calc around null blocks ([filecoin-project/lotus#7890](https://github.com/filecoin-project/lotus/pull/7890)) - - test vector runner fixes for v6 vectors ([filecoin-project/lotus#7881](https://github.com/filecoin-project/lotus/pull/7881)) - - Shed: Add a util to send a batch of messages ([filecoin-project/lotus#7667](https://github.com/filecoin-project/lotus/pull/7667)) - - Snapcraft grade no develgrade ([filecoin-project/lotus#7802](https://github.com/filecoin-project/lotus/pull/7802)) - - fix: doc generation struct slice example value ([filecoin-project/lotus#7851](https://github.com/filecoin-project/lotus/pull/7851)) - - fix: returned error not be accept correctly ([filecoin-project/lotus#7852](https://github.com/filecoin-project/lotus/pull/7852)) - - Add api for transfer diagnostics ([filecoin-project/lotus#7759](https://github.com/filecoin-project/lotus/pull/7759)) - - Refactor: VM: Remove the NetworkVersionGetter ([filecoin-project/lotus#7818](https://github.com/filecoin-project/lotus/pull/7818)) - - fix: #7577 markets: When retrying Add Piece, first seek to start of reader ([filecoin-project/lotus#7812](https://github.com/filecoin-project/lotus/pull/7812)) - - feat: #6017 market: retrieval ask CLI command ([filecoin-project/lotus#7814](https://github.com/filecoin-project/lotus/pull/7814)) - - misc: n/a sealing: Fix grammatical error in a log warning message ([filecoin-project/lotus#7831](https://github.com/filecoin-project/lotus/pull/7831)) - - sectors update-state checks if sector exists before changing its state ([filecoin-project/lotus#7762](https://github.com/filecoin-project/lotus/pull/7762)) - - refactor: state: Move randomness versioning out of the VM ([filecoin-project/lotus#7816](https://github.com/filecoin-project/lotus/pull/7816)) - - feat(graphsync): allow setting of per-peer incoming requests for miners ([filecoin-project/lotus#7578](https://github.com/filecoin-project/lotus/pull/7578)) - - updating to new datastore/blockstore code with contexts ([filecoin-project/lotus#7646](https://github.com/filecoin-project/lotus/pull/7646)) - - Shed: Add a util to list terminated deals ([filecoin-project/lotus#7774](https://github.com/filecoin-project/lotus/pull/7774)) - - VM: Circ supply should be constant per epoch ([filecoin-project/lotus#7811](https://github.com/filecoin-project/lotus/pull/7811)) - - chore: create pull_request_template.md ([filecoin-project/lotus#7726](https://github.com/filecoin-project/lotus/pull/7726)) - - Mempool msg selection should respect block message limits ([filecoin-project/lotus#7321](https://github.com/filecoin-project/lotus/pull/7321)) - - Merge v15 work into master ([filecoin-project/lotus#7784](https://github.com/filecoin-project/lotus/pull/7784)) - - Expose EnableGasTracing as an env_var ([filecoin-project/lotus#7750](https://github.com/filecoin-project/lotus/pull/7750)) - - Minor improvement for OpenTelemetry ([filecoin-project/lotus#7760](https://github.com/filecoin-project/lotus/pull/7760)) - - Sort lotus-miner retrieval-deals by dealId ([filecoin-project/lotus#7749](https://github.com/filecoin-project/lotus/pull/7749)) - - Make retrieval even faster ([filecoin-project/lotus#7746](https://github.com/filecoin-project/lotus/pull/7746)) - dep/fix 7701 Dependency: update to ipld-legacy to v0.1.1 ([filecoin-project/lotus#7751](https://github.com/filecoin-project/lotus/pull/7751)) - - Command to list active sector locks ([filecoin-project/lotus#7735](https://github.com/filecoin-project/lotus/pull/7735)) - - dagstore pieceReader: Always read full in ReadAt ([filecoin-project/lotus#7737](https://github.com/filecoin-project/lotus/pull/7737)) - - SplitStore: supress compaction near upgrades ([filecoin-project/lotus#7734](https://github.com/filecoin-project/lotus/pull/7734)) - - Disable appimage ([filecoin-project/lotus#7707](https://github.com/filecoin-project/lotus/pull/7707)) - - Initial switch to OpenTelemetry ([filecoin-project/lotus#7725](https://github.com/filecoin-project/lotus/pull/7725)) - - Bump the master version to v1.13.3-dev ([filecoin-project/lotus#7717](https://github.com/filecoin-project/lotus/pull/7717)) -- github.com/filecoin-project/dagstore (v0.4.3 -> v0.4.4): - failed to fetch repo -- github.com/filecoin-project/go-amt-ipld/v4 (null -> v4.0.0): - - v4 (#60) ([filecoin-project/go-amt-ipld#60](https://github.com/filecoin-project/go-amt-ipld/pull/60)) - - Merge pull request from GHSA-3wpc-wmc7-8p5g - - add .github/workflows/tagpush.yml - - add .github/workflows/release-check.yml - - add .github/workflows/releaser.yml - - update .github/workflows/go-check.yml - - update .github/workflows/go-test.yml - - add version.json file - - fix: fix bitWidth error message (#58) ([filecoin-project/go-amt-ipld#58](https://github.com/filecoin-project/go-amt-ipld/pull/58)) - - update .github/workflows/go-check.yml - - update .github/workflows/go-test.yml - - update .github/workflows/automerge.yml -- github.com/filecoin-project/go-commp-utils (v0.1.2 -> v0.1.3): - - chore(deps): clean up dependencies (#7) ([filecoin-project/go-commp-utils#7](https://github.com/filecoin-project/go-commp-utils/pull/7)) -- github.com/filecoin-project/go-ds-versioning (v0.1.0 -> v0.1.1): - - update to context datastores (#3) ([filecoin-project/go-ds-versioning#3](https://github.com/filecoin-project/go-ds-versioning/pull/3)) - - ci(circle): fix versions (#4) ([filecoin-project/go-ds-versioning#4](https://github.com/filecoin-project/go-ds-versioning/pull/4)) -- github.com/filecoin-project/go-fil-markets (v1.13.4 -> v1.19.0): - - release: v1.19.0 - - Update to go-data-transfer v1.14.0 / go-libp2p v0.18.0-rc1 (#669) ([filecoin-project/go-fil-markets#669](https://github.com/filecoin-project/go-fil-markets/pull/669)) - - release: v1.18.0 (#671) ([filecoin-project/go-fil-markets#671](https://github.com/filecoin-project/go-fil-markets/pull/671)) - - revert index provider PR #629 and associated PRs (#670) ([filecoin-project/go-fil-markets#670](https://github.com/filecoin-project/go-fil-markets/pull/670)) - - log advertisement cid for announcement and update deps (#667) ([filecoin-project/go-fil-markets#667](https://github.com/filecoin-project/go-fil-markets/pull/667)) - - release: v1.15.0 ([filecoin-project/go-fil-markets#661](https://github.com/filecoin-project/go-fil-markets/pull/661)) - - retrieve by any CID (not just root CID) and reference provider integration (#629) ([filecoin-project/go-fil-markets#629](https://github.com/filecoin-project/go-fil-markets/pull/629)) - - release: v1.14.1 ([filecoin-project/go-fil-markets#660](https://github.com/filecoin-project/go-fil-markets/pull/660)) - - refactor: isolate commp in its own package to avoid exposing pulling filecoin-ffi (#659) ([filecoin-project/go-fil-markets#659](https://github.com/filecoin-project/go-fil-markets/pull/659)) - - release: v1.14.0 ([filecoin-project/go-fil-markets#658](https://github.com/filecoin-project/go-fil-markets/pull/658)) - - add SeekStart method to inflator reader (#656) ([filecoin-project/go-fil-markets#656](https://github.com/filecoin-project/go-fil-markets/pull/656)) - - Merge tag 'v1.13.6' - - Timeout provider after waiting a period of time for transfer to restart (#655) ([filecoin-project/go-fil-markets#655](https://github.com/filecoin-project/go-fil-markets/pull/655)) - - Update to context datastores (#653) ([filecoin-project/go-fil-markets#653](https://github.com/filecoin-project/go-fil-markets/pull/653)) - - Fix and de-dupe link to spec (#652) ([filecoin-project/go-fil-markets#652](https://github.com/filecoin-project/go-fil-markets/pull/652)) - - release: v1.13.4 (#651) ([filecoin-project/go-fil-markets#651](https://github.com/filecoin-project/go-fil-markets/pull/651)) -- github.com/filecoin-project/go-paramfetch (v0.0.2 -> v0.0.4): - - retry fetching once before erroring ([filecoin-project/go-paramfetch#22](https://github.com/filecoin-project/go-paramfetch/pull/22)) - - Always verify SnapDeals params ([filecoin-project/go-paramfetch#20](https://github.com/filecoin-project/go-paramfetch/pull/20)) -- github.com/filecoin-project/go-state-types (v0.1.1 -> v0.1.3): - - CBOR encode Addr Pairs for keys (#35) ([filecoin-project/go-state-types#35](https://github.com/filecoin-project/go-state-types/pull/35)) - - Add AddrPairKey (#34) ([filecoin-project/go-state-types#34](https://github.com/filecoin-project/go-state-types/pull/34)) -- github.com/filecoin-project/go-statestore (v0.1.1 -> v0.2.0): - - update to context datastores ([filecoin-project/go-statestore#10](https://github.com/filecoin-project/go-statestore/pull/10)) -- github.com/filecoin-project/go-storedcounter (v0.0.0-20200421200003-1c99c62e8a5b -> v0.1.0): - - Update go-datastore ([filecoin-project/go-storedcounter#1](https://github.com/filecoin-project/go-storedcounter/pull/1)) -- github.com/filecoin-project/specs-actors/v2 (v2.3.5 -> v2.3.6): - - Update to context datastores (#1541) ([filecoin-project/specs-actors#1541](https://github.com/filecoin-project/specs-actors/pull/1541)) -- github.com/filecoin-project/specs-storage (v0.1.1-0.20201105051918-5188d9774506 -> v0.2.0): - - FinalizeReplicaUpdate (#22) ([filecoin-project/specs-storage#22](https://github.com/filecoin-project/specs-storage/pull/22)) - - Add release of sectorkey and replica update ([filecoin-project/specs-storage#20](https://github.com/filecoin-project/specs-storage/pull/20)) - - Feat/update post gen (#19) ([filecoin-project/specs-storage#19](https://github.com/filecoin-project/specs-storage/pull/19)) - - Add sector key to ReplicaUpdate iface method (#18) ([filecoin-project/specs-storage#18](https://github.com/filecoin-project/specs-storage/pull/18)) - - Update for snap deals (#17) ([filecoin-project/specs-storage#17](https://github.com/filecoin-project/specs-storage/pull/17)) - - Merge remote-tracking branch 'origin/feat/sector-ref' -Contributors +## Others +- chore: backport: release ([filecoin-project/lotus#8245](https://github.com/filecoin-project/lotus/pull/8245)) +- Lotus release v1.15.0-rc3 ([filecoin-project/lotus#8236](https://github.com/filecoin-project/lotus/pull/8236)) +- Lotus release v1.15.0-rc2 ([filecoin-project/lotus#8211](https://github.com/filecoin-project/lotus/pull/8211)) +- Merge branch 'releases' into release/v1.15.0 +- chore: build: backport releases ([filecoin-project/lotus#8193](https://github.com/filecoin-project/lotus/pull/8193)) +- Merge branch 'releases' into release/v1.15.0 +- bump the version to v1.15.0-rc1 +- chore: build: v1.14.0 -> master ([filecoin-project/lotus#8053](https://github.com/filecoin-project/lotus/pull/8053)) +- chore: merge release/v1.14.0 PRs into master ([filecoin-project/lotus#7979](https://github.com/filecoin-project/lotus/pull/7979)) +- chore: update PR template ([filecoin-project/lotus#7918](https://github.com/filecoin-project/lotus/pull/7918)) +- build: release: bump master version to v1.15.0-dev ([filecoin-project/lotus#7922](https://github.com/filecoin-project/lotus/pull/7922)) +- misc: docs: remove issue number from the pr title ([filecoin-project/lotus#7902](https://github.com/filecoin-project/lotus/pull/7902)) +- Snapcraft grade no develgrade ([filecoin-project/lotus#7802](https://github.com/filecoin-project/lotus/pull/7802)) +- chore: create pull_request_template.md ([filecoin-project/lotus#7726](https://github.com/filecoin-project/lotus/pull/7726)) +- Disable appimage ([filecoin-project/lotus#7707](https://github.com/filecoin-project/lotus/pull/7707)) +## Contributors | Contributor | Commits | Lines ± | Files Changed | |-------------|---------|---------|---------------| -| Aayush Rajasekaran | 116 | +12792/-3989 | 579 | -| zenground0 | 38 | +8894/-1521 | 343 | -| vyzo | 121 | +4537/-1470 | 258 | -| zl | 1 | +3725/-309 | 8 | -| dirkmc | 7 | +1392/-1110 | 61 | -| Jennifer Wang | 55 | +890/-806 | 121 | -| Łukasz Magiera | 35 | +1143/-339 | 104 | -| whyrusleeping | 2 | +483/-585 | 28 | +| @arajasek | 73 | +7232/-2778 | 386 | +| @zenground0 | 27 | +5604/-1049 | 219 | +| @vyzo | 118 | +4356/-1470 | 253 | +| @zl | 1 | +3725/-309 | 8 | +| @dirkmc | 7 | +1392/-1110 | 61 | +| arajasek | 37 | +221/-1329 | 90 | +| @magik6k | 33 | +1138/-336 | 101 | +| @whyrusleeping | 2 | +483/-585 | 28 | | Darko Brdareski | 14 | +725/-276 | 154 | -| Rod Vagg | 3 | +45/-949 | 12 | -| hannahhoward | 10 | +481/-133 | 35 | -| Hannah Howard | 3 | +371/-234 | 22 | -| c r | 4 | +425/-75 | 18 | -| TheMenko | 8 | +237/-179 | 17 | -| Aayush | 15 | +197/-106 | 57 | -| ZenGround0 | 3 | +263/-25 | 11 | -| Dirk McCormick | 12 | +188/-40 | 27 | -| Peter Rabbitson | 3 | +128/-62 | 3 | -| Steven Allen | 2 | +110/-74 | 2 | -| Raúl Kripalani | 6 | +128/-49 | 9 | -| Whyrusleeping | 1 | +76/-70 | 8 | -| web3-bot | 10 | +99/-17 | 10 | -| Jiaying Wang | 15 | +58/-23 | 15 | -| Aarsh Shah | 1 | +23/-19 | 5 | -| Travis Person | 2 | +2/-20 | 4 | -| Jakub Sztandera | 3 | +13/-5 | 5 | -| gstuart | 3 | +12/-1 | 3 | -| Cory Schwartz | 4 | +5/-6 | 4 | -| pefish | 1 | +4/-3 | 1 | +| @rvagg | 2 | +43/-947 | 10 | +| @hannahhoward | 5 | +436/-335 | 31 | +| @hannahhoward | 12 | +507/-133 | 37 | +| @jennijuju | 27 | +333/-178 | 54 | +| @TheMenko | 8 | +237/-179 | 17 | +| c r | 2 | +227/-45 | 12 | +| @dirkmck | 12 | +188/-40 | 27 | +| @ribasushi | 3 | +128/-62 | 3 | +| @raulk | 6 | +128/-49 | 9 | +| @Whyrusleeping | 1 | +76/-70 | 8 | +| @Stebalien | 1 | +55/-37 | 1 | +| @jennijuju | 11 | +29/-16 | 11 | +| @aarshkshah1992 | 1 | +23/-19 | 5 | +| @travisperson | 1 | +0/-18 | 2 | +| @gstuart | 3 | +12/-1 | 3 | +| @coryschwartz | 4 | +5/-6 | 4 | +| @pefish | 1 | +4/-3 | 1 | +| @Kubuxu | 1 | +5/-2 | 2 | | Colin Kennedy | 1 | +4/-2 | 1 | | Rob Quist | 1 | +2/-2 | 1 | -| shotcollin | 1 | +1/-1 | 1 | +| @shotcollin | 1 | +1/-1 | 1 | + # 1.14.4 / 2022-03-03 @@ -1061,7 +1007,7 @@ This is a **highly recommended** but optional Lotus v1.11.1 release that introd | dependabot[bot] | 1 | +3/-3 | 1 | | zhoutian527 | 1 | +2/-2 | 1 | | xloem | 1 | +4/-0 | 1 | -| @travisperson| 2 | +2/-2 | 3 | +| | 2 | +2/-2 | 3 | | Liviu Damian | 2 | +2/-2 | 2 | | @jimpick | 2 | +2/-2 | 2 | | Frank | 1 | +3/-0 | 1 | @@ -1073,6 +1019,7 @@ This is a **highly recommended** but optional Lotus v1.11.1 release that introd This is a **highly recommended** release of Lotus that have many bug fixes, improvements and new features. ## Highlights +- Miner SimultaneousTransfers config ([filecoin-project/lotus#6612](https://github.com/filecoin-project/lotus/pull/6612)) - Miner SimultaneousTransfers config ([filecoin-project/lotus#6612](https://github.com/filecoin-project/lotus/pull/6612)) - Set `SimultaneousTransfers` in lotus miner config to configure the maximum number of parallel online data transfers, including both storage and retrieval deals. - Dynamic Retrieval pricing ([filecoin-project/lotus#6175](https://github.com/filecoin-project/lotus/pull/6175)) @@ -1227,7 +1174,7 @@ This is a **highly recommended** release of Lotus that have many bug fixes, impr | @Stebalien | 106 | +7653/-2718 | 273 | | dirkmc | 11 | +2580/-1371 | 77 | | @dirkmc | 39 | +1865/-1194 | 79 | -| @Kubuxu | 19 | +1973/-485 | 81 | +| | 19 | +1973/-485 | 81 | | @vyzo | 4 | +1748/-330 | 50 | | @aarshkshah1992 | 5 | +1462/-213 | 27 | | @coryschwartz | 35 | +568/-206 | 59 | From 1daaba9224a9ecdb1081d82118c10da25556fc36 Mon Sep 17 00:00:00 2001 From: Jennifer Wang Date: Wed, 9 Mar 2022 18:32:02 -0500 Subject: [PATCH 46/48] bump the version to v1.15.0 --- build/openrpc/full.json.gz | Bin 26594 -> 26589 bytes build/openrpc/miner.json.gz | Bin 12927 -> 12924 bytes build/openrpc/worker.json.gz | Bin 3962 -> 3959 bytes build/version.go | 2 +- documentation/en/cli-lotus-miner.md | 2 +- documentation/en/cli-lotus-worker.md | 2 +- documentation/en/cli-lotus.md | 2 +- 7 files changed, 4 insertions(+), 4 deletions(-) diff --git a/build/openrpc/full.json.gz b/build/openrpc/full.json.gz index 6baa5905bfef54c12e5b734437e0093c5707e9de..301ea5703e3adcb8154349fafca2f576fce63876 100644 GIT binary patch delta 26468 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

|FasKQQqbu%Jv2)#7J1l7BR1ksh7-JcVU|K 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 Bu8IHv delta 26488 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 Kx0~A&c>)0C)KMM) delta 12899 zcmV-pGMvr)WdCH4hkqYAMqhjCXe&gQw&`joU%qJsuGp&|u!Rg8ljFArwVk)7=^)qD zI+}@G!@+AR$o%!!Ukm$|%s0dUuUzocHMJeMK%X!{&NX#527L{p1YWImVAzDBuk`p- z{P#6@1;x!{@1YJrj$=Eo!M9s-OYt1I$LEA1hd?XF4fy$IK!30$9=oLuq8o>Rp9p$P zQheP3?;Ynin_h3$Yulm7WUoB2e|c|ZH1TS!zrH0;x8$$C{?a;{yIHNEv(-*Ct)s1> z16QJx8;1?qY|BykoyC=rq-y7^8Q#+x~ z1~F#V4l*ERSNK~`l4~6eeHBA?W*aVJCf zdGlt$A2~Mc)tk8|Z%1p#W_-P|nC!lpS@!JB3c3_IZ-3w#zgau>*X@56h#W8M|98Ci`ud)$jBu)_K2$dil=j=IQCp+84mc~i6rNbaq@1l6o1n$9dv51 zR+zHkb!;mx+Bvswkh8)BQY5{5hM;x1nOWFf%I{+r&Mfr%BSFpwXjwC8-23|A-TTva z?vpp4ihtB?9l7)^$^JJDQ?%lD6m-^C*{9$FbR4*4zh%8^j<|GazWLA1Y}-PRM4n6z zl-G@`sszC=VY3Lp4W)~8~=lcH z9DlveAzw<#lOw`Lfc2F1igjnV>MkGYo#{+EK1QT} zB?v?yJn}t-qf+{F_9dT_X|UQCWDUf>i+|6K@9#Ci;~>SOGKZYOj)beK#xDnVQe5Ug zt1=_%_WIh1W!I$R3j=S9qD`~IR z8;X1+tzaZ01hQ=8m%G^pTNIPy_g^U@CNjlGJ|}aV8%p-w8K7T5V%jUhgInu9zkhtX zgqXZv+s2aHOE|*>(MQ|4KmJ2R>0X0ZA^nK`&9RyhmUE1zglais86TOw+RD5US2Z`+ zh@-zf*G?uKEvlB<$<)8_E81!&WMf$!{yZ{Ig#mfP_=fXsZ}tx~5bQs?=5n;{!~TfQ z`tChit^d#d`uBRXwO8x^o2}+(JAdyF=D5Gvjy4-K=sgUyr|L#5!n%rGigE5g&IOoI zaBd<(@f=5A^-&@=3e{e%U=tfPX=x87t&D0jt9Oq-|E$H$TLlL!<#Fx8YR7?PXC7o% z@9NzKyvVdkPs8BuIx(!;1DQu40o5GvQgHI)m=(UjFpK~7ZcEu+?SF}-|9|`X-O?cc zTB85{`Dd*cdJGXFa*v^eTM%a`J4zO7)Zjl{Kx`9%nYd;X z6FGn`5pdVYV0Oj?Z1@2i#D8OOvqZNFkn&gfXE|E2p<=r4YzV<*0Uj}3 zvirB>;`f`+*Z+C<_Vm}!m;ZV9_WJ#QF5lk#0uXt?j!jm~zCAz(^T>mXD4;fQ?G*xR zNS7S|iOJi#C9E-aEyCpE5)oiP%VI6Yx`|!R0VbSBrV#wyThfqURDWVV;XMl;ptV6- zMBO|Z)iLn5jb%w-m|u**b^y7S^_?qszb{wrGq`Z6?VyjRl~g-?UB24*<<5WNdI=r# zihqZ^i9tv(cUmB!T54ht<6Ex#5l);9alryQGq^y&uq_K2Y>a>{bmZ*qN5CIFE~O-L z+brps#5&8LQnJt7QGeEEZ~;dM4qOEPM#hT%Gsf_~-#6X4yTqg37|#9~;K67#H0PUt zoc`Z)cQ9K)b7X$)W4ti`);ikt#xR&?>Pz{1_EEJH?RKN9p_+XH)=H~=c3@!YRkepgNpP*IQvS-k%Yk%ak+03^0S*+mTw+kQv z8xmeHfy*8_z9qLLcnxxRFl^#tm%6~7gE^wclG!ruE3h~I%LOK+5WF%Gw7?o}EgPDz z!Q8P|!eVInz;w%*M>KG}){gyv z$>JEC6PF@rdek}b2;p18J*YW$TnZqE9Aq+nunRngZ*H^Ui;jpd81_8q_iTGh#OsU$ zO!?Q0GVLG>LGPwVAG=`VqWQ*RJ$i)B3T)QGVKktzL?HgznfRc;H|*mizCC-;lPDC5 z4RX2Q1b-5-M5{n1tgTEM<`7#h!1GYH8H?ge0IopSjFaEcBXHRt$G7C1f|+F-_b%8F ziml`T%`w65lFMG}b$-X@Xf(<3ZP~AxOh+ON5YhyV}C^Gt%Bc)wFU42VvA29ZNlfa;Y^h2 z^9nlmh`ON_YTU{70^+$YZkeEYa}F*8EA2!JA?&R`R@%Y1yMjlh#j_XY>yF3y;Btiw z`vE!i9o;CQ+FovySW_-;g27_{HpT>`6s^|OWeDMj8vt^n9&>K18GSC%j82B(_Zr-W zCVwBC&m&hk7aisp`B29}j1P0`9em#kJjuw2KSR)RPub+jM9%N?xrGV3@?BScvzj^= zl9hW8B2g^IT_~h0*K_e9%BZ_a2X>M=@1?IiM^4M33hy){AzAj3JZWrJbfZL@6Wl1( z9g1y&`BrH6BD9lkMxt)~6Oo+&u7qk6Vt*?kyA!#Uv)>BtegwCdkvk{(Mh$~)ie_U% zyK|_OvEB;oegw9kkxUW$LZ8V4a`<|DvqCGU+koK83GYI9GrQ0V@O}h%kd-hH{YroA zM0{mb8xUR@**OsRu|KdMpiJ;z~=EOHhErsaerVi zPP2AQFvX&u^}f?=cdyIEDX`MS>^QAcYyyYLmWv4GOT@^UABksXm@LGY6YB5CMJB)j zwPSEj0d~RMc2>v)vn_zY%g^lq2u^Ji8Q|695*tf^iHQxK(+9z7V^M6dyGLti+#@q+ zg{jADzFrE!C-&45y36BuhHf+2_J38QiMhGtZEW*7P-ryFL7@xmrjxpq@rS*gwa)p8 zuhy~03e6%Tle?}N(ki#08R2m!HZRJVWZf`!Q!QiNvDdZ>dGUoyj11J^2AYnb$aj{X zboG9(qxt>;XVDYvQwt+PwG)4DJkMBvVBSRZ+69~;D^O`qP5Bz2L&Y|V6Mw$np`*Pg zX8eLDO_vTf&?R!bo0=YJ>D0D(iV)+9-w;eCE=SiKyi{Yrat#Ew|q(B8!T*59SaBW;{hO*QR?^%NukV-#fDI;Z!1N+6yNcal77#OD^3_`GO`f zDHs2RDfT2QONdGJHKIGpGbo~*6*>^bX!3&vMYJ0UAt-cU=hda2uYYRB4>w<(=H=p~ zWucjXZ$8~-RirrTTU$XA%(v?CV$@@*=VkjuC85#Wi2}k+DTs0kMGXy+v)`)7%TbYD zUT#rJ6q+|6Dv27^)nljTL&kcm8ZSpR`gz$)5kY7=AEc0ULn=}xEu^}dWOkudm6xL` zgS@<{h%hvpc~U^QA%8VdPe7@zBpK|tD)MqvWSEzkb&Y6)(P|mB>Go`_GU6eEsLwfB)|T`sIJ<`s3)W z>wNy#JLAuU_F*`1OD2ymB5~Zu!&JU)me?jWbg5yhO2xa-Lzh zAht`fQEe`fOMfv71w8?N4PN~uc`I-IKestK`VnlES^6*PP_}E8&zoO$$OR^vZ59h& z-Y8YV#Mn3va}i=d=>lG$VBx^^(%llHF*rP2AdzXYOjc4|%6LenkpC4j5Pra9;gj$$ z|GhyjJwMY<1|9#GUneDzmU!--iVt|YgoGf=dpbyY6n|Gm8k?w`MtMP%N@L5Iao4;Y zYjqNgm;O`0T9DQiF^(sFk?yr|wUcf~dk5WSvqjI{$WVxZI(M&;=$H8YhrKbDyqk#u z|Abr@E+k*#cji1?qB=w44*?g{L5~l@!mIS|{q^OW_L~sSMDu5oeDvU^s6A`mVE(4A z>)j*%&wq`spYVVFt#vdnQ7-?X3wt5BxUd)Lb`(fF-96ns@uT5FZAm4?Gi_wwqg9Po zHCok3s7A>nCS^uO_58y`Qg>8iN*}dUoIx9rJV`=!M8C2NaYa+f6G~Kq;fPk1OZ|>% zkL;AoP?uzP0|klc&U;!M1K{hYyx;pB_;h4x>SuZu6`1lF%2xo zuuQ&^r;G~h*>}5HnerP~P3NMfrOfjjhgDt(tc8-&#-K0q`BQ_M9Q{mVFVnM#7opOH zxSOHWk0g6(XQqYV7J^#{ZXvjZ;JrZb3p?jPiK`O*s_r5roDu_22I}Nzq$!4j7{-y(hh0m+R2HBH*|1CCz#m+fv^sd?qeG7&bH$mvFm6gz^!1fR+fMCN7>6!+$~0 zMI7_XA$W?sQsINF=GCeuM0;HpL1P0{5#?S8MD#Ouln5R1YFr^`RW9cxBh*MuFB#!x z(veckw$;7b>RxSiuRSBvAY((1(9sL*#xh^(Bon1*WuI^qKIBC?ianSV^@4+rQcaX9 zB$C~u9aR#MFf2W2NcNOcB6qv`{eJ_kepfD3)-D*d3kL0i!QK`OUTTrDfj-RG92qgJ zmG?m=Xw)k(njp4|GNWmJ+hU__vC+2JXj^QwEjHQ~8$E10KFZj^9on>WBFXK@x@_IOWn{X+Q>Ee84Xpm|LNZC$P>t5TjCaEKiT>SJMa<2^^%zYoqu4MPqEqD z=)N`04;x~-oG95?R!6%ON9jkd_$dz+V=lqRsrbHULij=(6NXDj+1MX*^jb0A-ppOP zT6cSW9zCMagcRmKm2$Q^+6U-{%b31kWyYfTs9hl!IS&l2`3Jv3b1kyTltq8~4+ExkcUyMm9rx_^YY#&b}DW5GYzPO8I9tC;!@2Ta#^m;>7+KVp>#N1k)} zJgkjC!Z{FozO|ESM>{7odqd3Aw^zweRNd>2DN|YhGvlksB4weQo}wbbmcvgLNy=II zcp9`+LpTX7mkn=1waao7l`P2@$_sPGu}k)VpB^QjzGS}F&IjB1;D2Gv2NPaQ$!`*I zP0GIO8Rs%Vl)$#`Sa#wzTImhXi73Zb+%Zwg{f^ts<|ovV0D*e=J?3W|_}-l#AU-h8 zt=7cmybV;C&LWl-9Z04D`Y6j@;v%OOCs3&~?S%;nTdWu`*v~263j9kV2P*HV#Sq}u zvZ2{*4g#CTFbK0ah<`D{SMV`wb{#kh-b5;$3|cnzQuv<3%!FboWO_UoXqXr z1a$-su<2ENzA4NN`#tSwzt86`qJG%t0+9t>ieFE6k%eBpmwg#; z3c#uQv-`|YfVWvIE*BSQ0gdgYV^iC(z1em3ndNu3TQxZ#N`Dix_>h;Lbt(2V`CZCp zqQrr!q+7WEB1&r$E?gW-pY32~ZyUODY?`n8q{{AGlLgA$-&`{UYkCKu5_>m_V zP8Iv}QIa{He1C#&1+P89`%e7z1ed9iPTyDA0u}mY?V{cu7WEi1crmR@_VqQ!{Q#nwr#GDcE}{A=AtTOgVo$@koBOZGUxLJ>#riG4fZ)WlGr4F$EH8 zdpV~-(rztAf;%vrY@j1aK!!g*n;-hg7(;gy?|jiw?N7jqR!T{MbaeH zGDsLFRZsyz0pa5Gnu50!mpeb$sV#f(jAaj65V#n0dl~0W3!S*GTTAactCk*Dcs7pi z@jJXYCx4VXJBbT@0B894bO|xxbG;5&5BQ}^Xqw0j=DHoQ9?Gs4BFS}5HNLX=5p*@` z5iyP#cRNLq=%}gLdtECEK2@7u<~byX$Yt99hzs1#d_Eq|Y{2guNIQ^FgB|vw-)o=~ z!|%2etqHjpbO*Urw5}T~w0B)tXpb8eSvffsLw`_QX|IAsNHDx}hqA4u_tI}z35FWaf#G0wVHxChe<-$l zx6^noPU%z7swWa8`&upgq~uPi>d6n0@6bdh=nGqA?~XI7f&?%eW)Ro1K>?X^Rw#H) z$qofiH*1NaytlUKN47=T%8>Px(k%M`H-F~rF%hxdF7RTLxVn>!O{D@`FR)8bvB^}W zTJ~0&Ox8xyppt%(8Hp0h-6-lCtnwx$!S9YXf`*19x!tqS#KbpsHUh}8Epso>gr&^Q z%i1l{oo4J72_;(mRa1?{UyUfS_-ltM9PrvIaI3(FuE0G#Bc1xvLgoSq|EHSrMt=y% z6&KF%vF~8z>TZNmj^0Mel~dg~r*gHuL8~=@Ys_R0P~=if7NyciWy&07S-P+txv4T^ z@CrzEbzSdhK{>RNPJ38|s?a@FuN?Ej9N1nrBRl+xOV?XdBqLN(oH&WBxCon4;yE>S!xWBEOPT*6S)8 z$9Ib%^$(fLOFoM!k*a`1HoG<-!!MT?Q8^^88g_4B)YHjyGN4jjx3Nvc3xCCA)Nm=g z1j5NF9cP=iHXRvp?iY3?57Gn;M(@bh}sVtUvLHFF6LsuauZ}$vB)IZ5Y0Y}OvSz*3nzh#KfUQ|XpVaCNDwcULU9D;@*h{rwgWSFTAxziF%ZN~^WWj2tU__d4+IY1o7p?I+ zNaNLJS+sWRMSt6^QEuIWYkn#pYG(2k5~^suP*YQ|kW_PqEY`c$mbJF*0Bsp+=VGl* zd-*nPoLjpg2G(__Vv1B2F1&RTdhL#l{WGow zR$T~eR{>kQeTa5@l3RDfJ0rek&VPi;?z1x^jWuJJTYZZ#Vd5ZnYmk+t4<{hPg0Q|o+aK19?CmED@8Hq5Um8+Qs-#NIG5vgnj=BY1$2pk z8(yYMNC9*ZKm^V#);cDDF0l(RaVaDQI<9>PSE9?QkCwi#Qd{8@CQQ?W`|SV4Ff**H z^$9xnh=01tsteB ztJye|;=tUj*33`~V!##m0h1VWV<88)6jIdK*?)ff*^VpIkH{xVaTUL(fT-CRC|IgC zwK-5l>t$?O70AkM-{_3); zOkfk>@@FCrH20ekSUa|XTo>4LFhfimH-dr*s0|?ZTQF@*C6l9?tpQcM-iX#r?<7ue zYk%$(wXmPD&CnAx@BG#q`z_hlQNt*mJU#qO*3dMOc={UugJSE6XOKd^lE`nLA!wbG zx&0cv60Q6`pSy_WTgntSITPY2)l#!zd8dmP8Q+>FSo3fy(?|mBHS*Q@7@W@mu><9P z#B>P|u{Vn)aM#d4T+`VLom+x1T_T6+3x9g_-T;r-vN%pSh{<3F*p8S@GvM&HdKnJjcjnP5UEpYJXuw zsCJ^w^=_{}&^p?sV?SV%&6dJz7jTBGWVE%TT~p}L_iNi&vL?EEx1+r$X8eK&W0wv# z&?R!bo0=YJ>D0C?NRh+1;x`0SiOWx7%&tABm#=9Sw*S=8enn^_p;bnW*2i zqj~Rfur3Kv{;NvgDu}i1?0E76_09(w8;8BrAfCVW!P>ah4#iGUkuNuWxqsu~8xbGo z55I%dSYDyrm8TT(97j95g$izWygzx<=qPh|wL&I_6j@u~B4RQhQrrhCv6L!YZr>w@ zi-m(0OkTj;cDzTAZ^@Onn8h3@fal@M&?Wyx8R>FUY?(%94_8VIavxP#%ktHoyU)FT zr^`L)4-i|(4DNi>y1l-3qJJ5XbrBj|+kk_h3D}H+FGsrz->DSK=c#q@*g{wt*cap^ z#y!R58d4@Hm$CPcf67}UkKjG;LRmK<(t5LN74h{58ScHXb--c94%DbBUm{|P_11b| z=+Vi7!!WdUex?e69?4t~jMA+Pd?D|}(C0JdufRiKVV44X4%Xfs4}SuKkfIG{h=Z6P zR3zvt4Z+Zdy9OXGIv5gIOWan1vW!*A%Fwgh<-C`x%HxbpdE$G1MD+dFH8Lo}ZfKot z9Oy|*Ri)0LC|7TaSLoP(q*%K%Xy@p8tbqz@p52=~h0o%1fvCv5LEc@!_~Ske^h1Z# z<_mbWl{(h*)b~u@-G5CCaHI$Ss~ieEP_>$5>qo zpei9pfqrnc5KC%+phs(a2dxMvZXj?-^uu{y=`UVjqx4}U%R01C#pOWGHM zp`MYW?Mp8;mfpmN2l3q-`}Z{>{!G1&F6UB~TFXN9%_Z5CJ{R#_Td`ZYyci6-nVHON zoP+(yb>q2lLd7B7;Cc0^ZoCP_z;3FY3SL~QZ+U)Pf=gM1H+V!I<=aoHOIe*mq9D&<5()z48)yvF)j%ii>U~7_8Gx63W)m?^MB|T6=q~gG9h)e~s zSB_C_+_jCn7Atl?H{<#Wt?Y+7b6G*4u`Fvrt{E3MV67;#+H2I||M9jYiXiCRu~$JN zDmbUWv=O)V6gewQAmu?Gn;aQSh)D-LF0ru$1|+v+hJS!*6VJC0?cDe;9RuDZQ+Y^C zKU)AgLpIgpUrs@AY`%S?r7a4Pc6Tjpl++37lYw2H+Sp0ndO-4{Nbp5!GK0%3K&pq zM*E@+7O7s?bTHS9O-=ntCwRrCg=E3Z9kl@rXMd75@!~{t?6~xGhrLa13EWV71u15F zybUJ3n8qf%t#bZY$~nzVBMM}(?lM)JkUaGJlY!0SQ*0IoedE*`Du5wnQ%O;?SDeCV zQQ?YHM0@wN=H!oex&mH!qd;Y)i#2g#r`QAz6Me?B%cslM{75`Ab~Z|HwZqlr)=d4SEDryj7>~TF*y%ZiZ7J%Jr9dlBAkh=1EfBLLg!xs58>Z*pH&`iO$E`578*{m24c=;dZzak)4r*E~Q`S0{WrS#!=WcR?tH zqB`2*H?$Y6iS#OaqRKTW5(HX9hhk%6K_>|QG&GBh4WeQ}R$fDaIc#xlNqTb?C4axw z{KM4zer_ImX3cAfm=IFGXZWX=uc;880ubj)& zNM}B#QiEbT(RDpijpF=_d!5mW6obidJkmRwUrvbse&Rx&vkyE-9o%Ut3)R{@s`X`L z+trKH7QbiR9^|Gnxy(3hYH7EiP=8@Vj#oAAoXl+njTg-n)}Z5M?kebc(2M*nIv)`g z@npe`JqHjh@Iz314$QXT{Okt`1Rv;Do=_Mv3i*_%_7)=1lvhKdtO4Iq>S(9-YIWvk zezPA}{tt0x@QL=n#M1wL{cdTHe=X5}|NOHisy8v}!$H4y=hevaYRmC+ZGTR_Y0>I# zO&5^!>PPWGIBDzI9dbQ8Cf+yLxEFTw58j&-aUN$!OT2!KM1igRr-Fp($c}~7g)2lI zZnX!!j&@`F`!~HWaRFWW-brn7=x7)Af=ltQn3(CiH+Y3y3Ri27tOE^{ek$hx7;zjS z*Q!ZJduveqAks;KA^p0>PJjFo`w)L3yjW82i$z5%cH^92ilKFBA(J=HuKi9J(;gR>WuA5vQ%{wid+MuH5-RyYe6>=l2(X)fjsXQz+`R%d*0Y$ zwxkQvpnm!prNalj$kR!;rx(QN8&KVsrZuD7y+&@`v!&By@(xT4&#vdIUf%gFqBezp z*vGpqMd!psU-@w^Stq{?yg)m&t{^e(6+y1s0qY^~^AQWPwtw9Q�D;LiA7<#xY}W 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 N|NnR6)?pWU0ssqiTNeNT diff --git a/build/openrpc/worker.json.gz b/build/openrpc/worker.json.gz index 7c4eac1de0dff757047bd7343ef3cb13bf31401e..ac6a52b566a1e9239537f983748fbc64fe0c7c4f 100644 GIT binary patch delta 3866 zcmV+#59RRs9`_!Qf`5h!2|Ae0Tr+^D-yR`B4lDMXWn;s&Nbj9#URc<`P=Y274Bzr- zT>Sg@@3-zXnTEswZvybk->!d${Y&bH20a4HVsAVd7%rjs2ko83|CfN*2LW|`bc=hJ z*r2Ze6;CDLDd5`;npnLn;vv(-aRrywPb>jX1yx_PRb3wtMSn-&4f|$hOZv zNC5l3>mPx~YjRDkDF}M!gkql{d(}Gd_AMZm9cQ_wKBl2hz%K+p6skLtz^}gl#if^_ z=ea(`CM&aG|0Kmq>VM@Q zddNpk+`XaChJR=>Kla?fiiRWkoEbu|Ul_AOuV-kpAI1zjh{+HBfgI1qagFC6Skh;U zU>~0LWm%Tsm(ZE8U*m-YFMQXX{yFzBJRL1=B#2BiVhh<9zUyJ1TCAQavI8tZFO{^c znWI3$#9F{f%!mYO#K7|RV$I^yc^9h`ck&N5D9kpBqkn>L%NlML67=!Eq2*%}o>D)= zY%n|@8;G)$sBsHvJz7d(v?{cr)|h?k%Zhe$BSDMeL@Wwz$Wn`Y3s?a_AlJ-q%Q81? zbeCz!_tBicooazHXDhd9N2+I{jwxvwXEU@)i}}5ZaX0o$!{o zSf!liGJn*u0B-4$ zl%;35&dD?Z5yzhIGQLi121ZUMwmUg-P(ZPNf`2^g#Pi)B^Z&cWq<8E7$0u#94_KRu zP~=yFCN?%Xkw{Xi1c)4gHxt*jH{pY%a5+4PdyE4OtXU~{{v2MuOz&A^3Z0WAKCRzO zN>X-_mBWZUb5R=V<)ZW(rpAm@kfJhtcy?`Q<8(%!L5c{_u0LKNI!ltZRPs9`>h{mB ziGMj^ZNzF@n0DC@^#H9vuCEZeR>^&PpsoQ#R|KX-4Xq`0Fu=&R$Sq7U6;MA)X$EE% z>_a`i9QPh?&6Gfz0%^W9q&XT^zypgQ+xm&WV$Ze=bmf_d@~(iD*1@|RwoLzu$SpSr zC}W^CP*Bm@B}fq9pc4w*1#pm)>UzsrkALv@=`_HUjgz8DFj^vt{$6BPxj6cKS!10} zkLhjKV_UA735P2j?n`sHO#p|BdIr`L2`fPV)HI%6j-*tzntHGt1<3v6aNz^0u2=D}Nks zrxdvhjyI9&r&qQk1tAoio0w2*YL%>VpIIjG8TkMc%8YY>?dfrxXJV1tSlI{#$TWQ% z1lR=Ds7+ zGVZXsqQW}s2q0nt1U|D|GZf5v*?)!iM|i@d98KrSyPQXc|yrq5NR>U5$8ci8d% zaew^lg>%>O{+T#aJfEuC)KbH_9)?&`?lrg&Ytq7-3vV8Kb44!q=I3PUayo8Sr2O1N z{+J=lxycK&@3kE6x;ieWn{e97v4}F}HW-CWraFebn9T#rKsG$p6p1BV1xzH9AD0iv%lue>J-fIH;=evde|^g` zaFZhyU}T@%%O}V*z352q=_8aAP5q1=m$g%owUGorqaWFXj~7>0)UvIgDDE#g%5#By zWZT%b0tcS<^GP2suA+?ZQGbAQ6c!Tf=LnC~(MXrGv{z{jl27VfNKnaf(3gkmQ0tG_ zOgP0vI=MkU*3~W~sODJFl(9C}hss#bu#!%0ixn+DE`!l{tZIX?k{y~fY@kI2JwWH)~7_N&7XXb;-AFOzZNo(SMj8kd?eKJs>O1 z8BTbKpQG@1v9c-i=E?ge)IxAs-_OcLv^I;qY{&tUcdc*waqhWun4S)5as&8*scNf#0>}n%oTGy`bLrn9A_0VFPx2}g3)0BywMmHZy z>}y}vMuVZAGyX|hgO*<|F|qrkT{N!yqg{li`=edNqWhzrHYB(WdTFVbG5-q zsWDV!WiXaUnlj3DiaONP(RiS0!=_i0R?LWX&O=LP-c}w^G7F~jaFSVSOLv)@moQZU zXZL1IYtwIZcD@TEo7Xzm)0?VkPqVX(jmw=?ldw#BYuq$vR(XZAX}h|GkTx(kZ%jxF zNc5mWnm4eA6o1l;g>~<-AK#t}quX<0PpK;_)M8Ib>?v(&U&Wr%q4$(Z46E2*>dwNw z*k2O+OJaZNZaVp>mLn=-Mbm>&UVt>JTdwqRD_HlW6JGte*D7hoM z%Cn3>zQ|o;<)9p2kganA{bQ1Ib;rKIX#P%o=HhN0605ts9GT<0zBLQf&z$K`4^fJJ za*^q|-Y-vl;uwXTB-I>_jNm?&Gz?T8f=&HLc$=Z{qisf zpWSl;Gdkx}DKDCeJ6=Kz2l^5E$qT zk;`ZSDwbgOld+e)`?huL)m61+bEq|uvahijDolD(Z7BJ=Z0%knxOP>!2Wo|K`>uh5 z;1UNxEX`b6o+(_e?qO(|y{oIu;4@p%24!E>#;4(VKFd`-F37x@kBI3yfDr=j6g)(& z27f_ZUIMpC5Kc46XwSjJ43i|^HSuD4AfU*neD9-{*^pJE3&WHCQsaf4S_q+)S2>^d z`7cAwbgfd&?z69t6z3{W>RP^rtpeOekGrk^*0v0MTf$CT)5h|ai}&3+35vTgjTAv| z4;b`z!^PJ!>2ns&b=fVkHjY{KHY~ z8p}N+tEAi^@;JVP6-K(;*DX&apMc-#4EtQiDK+psoXl2D$9#lnP^^E*uc?Kg}jJ0MYuh@nr)px zt6k9jj-l0z6xT(oOMI#-5{wF;#hu*5g46bhH_ge$rM0_BZc=%2Y`{_Z;I!WPgp${t_Gn(M~c;j{GAssCADEIkdcA&+IeDB!A8ZnALu8{B?TJL;WHfB*3IZ98Yrw>n?GX`ZSk5o-*~3Gfv04X3oQba3sC-?LAfeF10X+r(<U5e04V~bGy_rw6#=|54tJXw`MU6S zlk&B<-)>&MroR_VB4+2EQ`Iiuky2@Xj*vw7KH>Xbn(xyq;@fQ(*ne*Kh<0s-vU@6q z-6!h~=i>57U=mWW3T{V|Bi*TpbxaFPD?k&Q(H7C_UP-jN{;(oi-6f{Kl1Li3^=4VH z3Mfuo*WPfcU|qqk7Yj11Y`9#oCg>plE&z0fms)`Wfa7l`OYP`^FD?aihS)z=00K;@ zMQ*Q&gXVyuI}8w*;(rGaV8bP50H_O?c}KU1V)lcg;0`cxH$%I@s|>7HYbh0z&=hJ| zhFBGM1#0Wes3NXSa!ci%X+}|Lc@-yHx_X-BTjX|={$%UfS&0g4RclgXbE0TfsFsJw z#4TT$)r?LSd)_aU}@oD!WXSt-pJ*~}mY5t;bSihoMUPSv-oRA*UhU!n`m ztSQ~eb8tp9**sB%gzq5Xid=Dll8s4>0JaeDxL{-Q9aqDT3x94)y<$?jRISs;=v3{t@1?!$r6WbDxLOpS5RP^=IkhKMa@)7Ou84%H^+Bv0Ycc()7#4Z%t}qyT)ArLP9MY&>8kIKt2W}-lq$I9}*Jn?(HbC cuWmU?R}bT$dxQiztmto+jSbf#y?3U0VPOM937R-C ze9NP872m&qzjd$4G$aOi6M$d-cKti-Us69b=n+^Jd*jK#a0$gfXzwikzXZHK2&n6$ zTimVNuxC^`af*iUPU4BR_I zwtfCV0@(Lm{|G!@lWS^CLC`xV6#E3(tJZG#tt2%n*A0!k86$Jwu!QFlN|6Oos3e1c5yL1dZ{TgblfT@U-zV)aas9bgH1 zsibAi90d|4)lNgW>tuK$N9Kjax|T(NYSdRiO>F#_U^PRf{NBIL4p7WolxK|fP#nI=> z8tZg=OmDj$+j7lJI9%ayUz)=mk2X8pWGuGxv~l4>xY)SPwtefWeZr}BN=b!N6;4$+ zRpC?*<5UN-JT7;tA2Go`qKV)5Z#@6acb#N+lE=SR*2Cv&4a@AESth58tt8%-w}0K# zTH$y*rN~`yyopply|NuC2%+HI#DrQ?t7Mh?%rb$`$Oo8EW}E|TPmkj~6N}u&%0?(a zrs?A#z$UO(we`R`WhQ;<`VKb1WDXGcD?acg0R+xm6C2>o!^|>fz#^u_n#gE4p-nA= zeLeP&afi(n71mit01*=)@R{YBp?_f3%Pzb>!V@OtXgXIWKaqiv`Vg2ieXb%^rxP`} z!;bfl`{Q3PoV$+q&%~MH`Bc@WmKx6WFvOa2ufc^_lNR1wc=OnsD{{FvKPOX{({ZyR z<>wyq#|&A{O~K~iWx6(kALitO~KA@ ziRsywAn;fYCBm3lDK0&7GMMrv1AEBIR>Sye@teuLijU@OP{m3SKytulemTmn+aev8C zo(tq7+s3vPIPkQePx^Rq6@O)Xj{=;du#jLsM|h-;M!KA(y-I74d{XB^f=Z5qzC2Wi zT7Sf5!YL-w$qn+cu67|oHOGpkjJ2^oRK|LSm2`4jtZ4ah8H~nbRU3?z?9il=+hS#K zDB08xE}O&d$mXa!vN`UGY%ZjgF*RJrvFJ&^Sz}sA+OILKOTKMmT7Q?1jmGqVtmKX9 z0a!UoyfHl(D@9|f>|jg_)_lLnbO-YM##HaidS4l; zB`$XdKGxLa5^Jg|N?%b1+E9@zn33gL>>QW#qZjy5HFYo^sv}h&m6%jr(-dtWk2Ous zONZQ-$C^IS8|FtJ4S)M%ZKw}beS5pQyO{1|R~r%2x^{IRVwyLshZfVkbv>+@rcCTK zy7^FIU;DB)8VvQE@lVnkwES|3iQOmdqH*0H?IJYYAMGL*-5>3|k=!Tkyq(-9?V^R; zAMGO4+#l^Cw%ix(l%?~0+|K0u*{^htyGTtb33B`1V{F-JTPBN?lo@7JEu!Piag0D)y8Py{A-SSjGNQ zcNXr&{*u^V68lRpXMf4Zx0nRcdGR|u7YnalImRcBn6`^xpZ(ISIAYq>Bc>VfDlBSO zq*ho|VNr!eeU=tAB+1`$kIT#3$u0jy z$sO5Mo@E5`MeZ6a2j%#JY@HkEACsJ`JN5-e^LOGi7kBHBSl#92$Q&^|BC zr)f&LPrE>L7I1pAs7!fqpEwpM4tj|zU|Bagrl_h7E~%_OF1NJgwUzKbW!zPSM=fNk z6(coL{h>bXk4K})F`laOv1ShO@kGVO@fhjKaDS>z&;X5~1pmg??Tp4Tc|N%YvLix; zz(8k+Tt*8}u>`Z9jJ@RDx2IFeT~gfVbYUoL&?`=Yxf$#wX4cKP%D(% zcMTi_mpBMwY39=MOyP2M4@1lBU0rPkpV^8wDEq25J`KHKj1X|A z;C~@%H3;JJ61Yu*aGFU*dk!9Em?ZhGi5JrY0YyILdmpvThO8Q07@qW(8ZYeBLI|zA z%K5asSd@vzFVI_^F1S>w1+l^aD9D{%JE;;HEC8lP$t79Iv{k)Z{FMn6O`=41!<<_xOSzg4-MDxPJ29BO8Q`zj+T-rb_a;=NLC4`)hRem*60Xc9L0gL0W`CbKCUIt& zyt~V(X0+w(vppqtlZD&g;P#8!QSWT}`-iu0+c|r_)%o&G+p-%q{h7D6xYa3e+@Ww> zt$oh5rG4F)NWfxS%%tlgPCThSCoV|?1cVy!5hAUl_asYBKF7xND&~V8IUrl2;h}*xZBLg z*M+y6l&`)0cJuNz{k>okF+1;^s&)a7luGk+ge1cE3E%h9e4kzs-+ykqz;?Swv}-Gr z-BU5_K3R7-7ne^0laPW{a66J5=}twgV_INZ0h-v1wun~uN}|>EhZWK4E;0R;MAE>m zH_L)mKyl)__J&IZ>k4+gSdd|5!{vfCK?nJF0iZLy)Cv>;9Dh4mYDW)zaVelP#Qw1Y z5MW9za(hi2GzS#jVSj+Y6hD9f8!j;eKwZGhJGw;_vmX=%cYukz8QKkAWnjHpOR1QI zrclE&#HzR}P+Mn46>)8nTPp8NGm1*ft2o)x)zd8BBDb6LCtJ_XN>pI0T9X=^6Gf{+ zwLC;7ZgG>rw_cr8k1OtN|A~UT53%jzl;~8+N@>Q(W(F~c$bZCdR#ZxMs=i&NI?G!7 z5?yF!P3caagEOMZ=7}OCdaI~w*sXeKZ+rH&> zMLcAh*nB^y_?(#d$LfyJ@=H|xrS%g>cZ*8TgABF|?w;bmtqqrK7l}JXV&|pSyI=*i zXzyt-S(DX~w(SF9PhKD@sBw!eQJQE*@n+DAJD^j%Wq%{$Jc_XBVxLm%Q#J-RwTde< zi7s;j&7@TMByD9Ls)1gTWdq1da&Te0HCL@XsaMri>-3iVsM;Uw00=rNkb{bo?SCVS z{t;T3a*E`tT&Yl2E`P0x?YjDvre7|8Yf=;2HSPis5^C9i&ajUG@-ZOsK3xF(kdSD1 fZ%2uJbr#D}x&jxAo5lYJ00960+wanK2Ic?&3rU>i diff --git a/build/version.go b/build/version.go index 64109f1d8..356e3aa7c 100644 --- a/build/version.go +++ b/build/version.go @@ -37,7 +37,7 @@ func BuildTypeString() string { } // BuildVersion is the local build version -const BuildVersion = "1.15.0-rc3" +const BuildVersion = "1.15.0" func UserVersion() string { if os.Getenv("LOTUS_VERSION_IGNORE_COMMIT") == "1" { diff --git a/documentation/en/cli-lotus-miner.md b/documentation/en/cli-lotus-miner.md index 0bab16abb..6f64ce5e4 100644 --- a/documentation/en/cli-lotus-miner.md +++ b/documentation/en/cli-lotus-miner.md @@ -7,7 +7,7 @@ USAGE: lotus-miner [global options] command [command options] [arguments...] VERSION: - 1.15.0-rc3 + 1.15.0 COMMANDS: init Initialize a lotus miner repo diff --git a/documentation/en/cli-lotus-worker.md b/documentation/en/cli-lotus-worker.md index 7f7cad36a..322b1c3e4 100644 --- a/documentation/en/cli-lotus-worker.md +++ b/documentation/en/cli-lotus-worker.md @@ -7,7 +7,7 @@ USAGE: lotus-worker [global options] command [command options] [arguments...] VERSION: - 1.15.0-rc3 + 1.15.0 COMMANDS: run Start lotus worker diff --git a/documentation/en/cli-lotus.md b/documentation/en/cli-lotus.md index a9c4d142b..59e48aeb5 100644 --- a/documentation/en/cli-lotus.md +++ b/documentation/en/cli-lotus.md @@ -7,7 +7,7 @@ USAGE: lotus [global options] command [command options] [arguments...] VERSION: - 1.15.0-rc3 + 1.15.0 COMMANDS: daemon Start a lotus daemon process From 98642ec4b5c7fdc166b6c625b5250fefed727415 Mon Sep 17 00:00:00 2001 From: Jennifer Wang Date: Thu, 10 Mar 2022 17:28:40 -0500 Subject: [PATCH 47/48] fix the change log --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b50d7cc9e..21b501fa3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,7 +15,6 @@ This is an optional release with retrieval improvements(client side), SP ux with - by setting `MaxConcurrentUnseals` in `DAGStoreConfig` ## New Features -- fix: sealing: Stop recovery attempts after fault ([filecoin-project/lotus#8014](https://github.com/filecoin-project/lotus/pull/8014)) - feat: mpool: Cache state nonces ([filecoin-project/lotus#8005](https://github.com/filecoin-project/lotus/pull/8005)) - chore: build: make the OhSnap epoch configurable by an envvar for devnets ([filecoin-project/lotus#7995](https://github.com/filecoin-project/lotus/pull/7995)) - Shed: Add a util to send a batch of messages ([filecoin-project/lotus#7667](https://github.com/filecoin-project/lotus/pull/7667)) @@ -43,6 +42,7 @@ This is an optional release with retrieval improvements(client side), SP ux with - dagstore pieceReader: Always read full in ReadAt ([filecoin-project/lotus#7737](https://github.com/filecoin-project/lotus/pull/7737)) ## Bug Fixes +- fix: sealing: Stop recovery attempts after fault ([filecoin-project/lotus#8014](https://github.com/filecoin-project/lotus/pull/8014)) - fix:snap: pay for the collateral difference needed if the miner available balance is insufficient ([filecoin-project/lotus#8234](https://github.com/filecoin-project/lotus/pull/8234)) - sealer: fix error message ([filecoin-project/lotus#8136](https://github.com/filecoin-project/lotus/pull/8136)) - typo in variable name ([filecoin-project/lotus#8134](https://github.com/filecoin-project/lotus/pull/8134)) From 2170b4deb5c4ac3a1967d921ce6d922fbb166808 Mon Sep 17 00:00:00 2001 From: Aayush Date: Tue, 15 Mar 2022 18:40:22 -0400 Subject: [PATCH 48/48] Fixup merge --- chain/sync_test.go | 4 ++-- itests/kit/ensemble.go | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/chain/sync_test.go b/chain/sync_test.go index 321696d1b..96ed1440e 100644 --- a/chain/sync_test.go +++ b/chain/sync_test.go @@ -104,7 +104,7 @@ func prepSyncTest(t testing.TB, h int) *syncTestUtil { ctx: ctx, cancel: cancel, - mn: mocknet.New(ctx), + mn: mocknet.New(), g: g, us: filcns.DefaultUpgradeSchedule(), } @@ -158,7 +158,7 @@ func prepSyncTestWithV5Height(t testing.TB, h int, v5height abi.ChainEpoch) *syn ctx: ctx, cancel: cancel, - mn: mocknet.New(ctx), + mn: mocknet.New(), g: g, us: sched, } diff --git a/itests/kit/ensemble.go b/itests/kit/ensemble.go index effb5dc29..7b4a067d9 100644 --- a/itests/kit/ensemble.go +++ b/itests/kit/ensemble.go @@ -284,7 +284,7 @@ func (n *Ensemble) Start() *Ensemble { // We haven't been bootstrapped yet, we need to generate genesis and // create the networking backbone. gtempl = n.generateGenesis() - n.mn = mocknet.New(ctx) + n.mn = mocknet.New() } // ---------------------