From fadc94f2538258233269cdf9aebbd75676fcee58 Mon Sep 17 00:00:00 2001 From: Shrenuj Bansal Date: Wed, 3 May 2023 17:20:57 -0400 Subject: [PATCH 01/28] Update build version for release/v1.23.1 --- build/openrpc/full.json.gz | Bin 33882 -> 33878 bytes build/openrpc/gateway.json.gz | Bin 9539 -> 9535 bytes build/openrpc/miner.json.gz | Bin 15944 -> 15941 bytes build/openrpc/worker.json.gz | Bin 5245 -> 5242 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, 4 insertions(+), 4 deletions(-) diff --git a/build/openrpc/full.json.gz b/build/openrpc/full.json.gz index c5dde5e213b798f5cecb634f3faa9654f5e99421..cb20e40cdc0013936788641a16f75cefa4d8de98 100644 GIT binary patch literal 33878 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 literal 33882 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 diff --git a/build/openrpc/gateway.json.gz b/build/openrpc/gateway.json.gz index 7accc2e6727e972e67645c15a060f16fc974d179..938060588cfaa440fb62dfbe68f4afd35cc344f4 100644 GIT binary patch delta 9447 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 P=VunL*w{G*6vY1lLDrTf diff --git a/build/openrpc/miner.json.gz b/build/openrpc/miner.json.gz index d253366ce093ce6bea888fbabb523274d0f51db3..dfbcc7890a79f59b858ab5aa015caad12ea5e246 100644 GIT binary patch delta 15940 zcmV-KKD)ule8qf_gnz(z>=|psR@Cy0qtD+A0@wVr_t-`z#bp1D$*B9rvRveOM$fR2 zXS˺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 delta 15943 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 diff --git a/build/openrpc/worker.json.gz b/build/openrpc/worker.json.gz index f18be8337a5bbb775079f4bc768368a9099acb03..182c07d52edea771cb27000b3f6c6c396e54c0ef 100644 GIT binary patch delta 5158 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ℑ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 Date: Wed, 3 May 2023 18:32:10 -0400 Subject: [PATCH 02/28] Update changelog.md for release/v1.23.1 --- CHANGELOG.md | 110 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 500f41619..071ee34b4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,115 @@ # Lotus changelog +# v1.23.1 / 2023-05-03 + + - Update build version for release/v1.23.1 + - Disable lotus markets by default (#10809) ([filecoin-project/lotus#10809](https://github.com/filecoin-project/lotus/pull/10809)) + - perf: mempool: lower priority optimizations (#10693) ([filecoin-project/lotus#10693](https://github.com/filecoin-project/lotus/pull/10693)) + - Change args check ([filecoin-project/lotus#10812](https://github.com/filecoin-project/lotus/pull/10812)) + - chore: drop flaky TestBatchDealInput subcase ([filecoin-project/lotus#10810](https://github.com/filecoin-project/lotus/pull/10810)) + - fix: sealing: Make lotus-worker report GPU usage to miner during ReplicaUpdate task (#10806) ([filecoin-project/lotus#10806](https://github.com/filecoin-project/lotus/pull/10806)) + - fix:splitstore:Don't block when potentially holding txnLk as writer ([filecoin-project/lotus#10811](https://github.com/filecoin-project/lotus/pull/10811)) + - feat: worker: Ensure tempdir exists (#10433) ([filecoin-project/lotus#10433](https://github.com/filecoin-project/lotus/pull/10433)) + - feat: chainstore: batch writes of tipsets ([filecoin-project/lotus#10800](https://github.com/filecoin-project/lotus/pull/10800)) + - chore: changelog clean up ([filecoin-project/lotus#10744](https://github.com/filecoin-project/lotus/pull/10744)) + - chore: refactor: drop unused IsTicketWinner (#10801) ([filecoin-project/lotus#10801](https://github.com/filecoin-project/lotus/pull/10801)) + - Revert #9858 (consistent broadcast changes) ([filecoin-project/lotus#10777](https://github.com/filecoin-project/lotus/pull/10777)) + - chore: deps: update to FVM 3.3.1 ([filecoin-project/lotus#10786](https://github.com/filecoin-project/lotus/pull/10786)) + - Set default for MaxSectorProveCommitsSubmittedPerEpoch ([filecoin-project/lotus#10728](https://github.com/filecoin-project/lotus/pull/10728)) + - fix: deflake: use 2 miners for flaky tests ([filecoin-project/lotus#10764](https://github.com/filecoin-project/lotus/pull/10764)) + - fix: prover: Propagate skipped sectors in local PoSt + - test: eth: deflake multiblock lookup test (#10769) ([filecoin-project/lotus#10769](https://github.com/filecoin-project/lotus/pull/10769)) + - feat: sync: harden chain sync (#10756) ([filecoin-project/lotus#10756](https://github.com/filecoin-project/lotus/pull/10756)) + - fix: tvx: make extract-multiple support the FVM ([filecoin-project/lotus#10714](https://github.com/filecoin-project/lotus/pull/10714)) + - feat: badger: add a has check before writing to reduce duplicates ([filecoin-project/lotus#10680](https://github.com/filecoin-project/lotus/pull/10680)) + - fix: events: don't set GC confidence to 1 ([filecoin-project/lotus#10713](https://github.com/filecoin-project/lotus/pull/10713)) + - fix: sync: reduce log from error to info ([filecoin-project/lotus#10759](https://github.com/filecoin-project/lotus/pull/10759)) + - shed: migrations: add reminder about continuity testing tool ([filecoin-project/lotus#10762](https://github.com/filecoin-project/lotus/pull/10762)) + - fix: chain: record heaviest tipset before notifying (#10694) ([filecoin-project/lotus#10694](https://github.com/filecoin-project/lotus/pull/10694)) + - fix: sealing pipeline: Allow nil message in TerminateWait ([filecoin-project/lotus#10696](https://github.com/filecoin-project/lotus/pull/10696)) + - fix: storage: Remove temp fetching files after failed fetch ([filecoin-project/lotus#10661](https://github.com/filecoin-project/lotus/pull/10661)) + - feat: daemon: Auto-resume interrupted snapshot imports ([filecoin-project/lotus#10636](https://github.com/filecoin-project/lotus/pull/10636)) + - feat: shed: refactor market cron-state command ([filecoin-project/lotus#10746](https://github.com/filecoin-project/lotus/pull/10746)) + - fix: Eth JSON-RPC api: handle messages with gasFeeCap less than baseFee (#10614) ([filecoin-project/lotus#10614](https://github.com/filecoin-project/lotus/pull/10614)) + - chore: merge releases into master ([filecoin-project/lotus#10742](https://github.com/filecoin-project/lotus/pull/10742)) + - feat: sync: validate (early) that blocks fall within range (#10691) ([filecoin-project/lotus#10691](https://github.com/filecoin-project/lotus/pull/10691)) + - chainstore: Fix raw blocks getting scanned for links during snapshots (#10684) ([filecoin-project/lotus#10684](https://github.com/filecoin-project/lotus/pull/10684)) + - perf: Address performance of EthGetTransactionCount ([filecoin-project/lotus#10700](https://github.com/filecoin-project/lotus/pull/10700)) + - feat: sealing: Split PCA/PCB batches if gas used exceeds block limit ([filecoin-project/lotus#10647](https://github.com/filecoin-project/lotus/pull/10647)) + - fix: remove pointless panic ([filecoin-project/lotus#10690](https://github.com/filecoin-project/lotus/pull/10690)) + - chore: build: bump matser version to v1.23.1-dev ([filecoin-project/lotus#10709](https://github.com/filecoin-project/lotus/pull/10709)) + - chore: boxo: migrate from go-libipfs to boxo ([filecoin-project/lotus#10562](https://github.com/filecoin-project/lotus/pull/10562)) + - fix: unseal: check if sealed/update sector exists ([filecoin-project/lotus#10639](https://github.com/filecoin-project/lotus/pull/10639)) + - fix: check for nil bcastDict (#10646) ([filecoin-project/lotus#10646](https://github.com/filecoin-project/lotus/pull/10646)) + - Add API and CLI to unseal sector (#10626) ([filecoin-project/lotus#10626](https://github.com/filecoin-project/lotus/pull/10626)) + - test: events: fix race when recording tipsets (#10665) ([filecoin-project/lotus#10665](https://github.com/filecoin-project/lotus/pull/10665)) + - fix:mpool: prune excess messages before selection ([filecoin-project/lotus#10648](https://github.com/filecoin-project/lotus/pull/10648)) + - Update config default value (#10605) ([filecoin-project/lotus#10605](https://github.com/filecoin-project/lotus/pull/10605)) + - fix: cap the message gas limit at the block gas limit (#10637) ([filecoin-project/lotus#10637](https://github.com/filecoin-project/lotus/pull/10637)) + - fix: build: add CBDeliveryDelay to testground ([filecoin-project/lotus#10613](https://github.com/filecoin-project/lotus/pull/10613)) + - feat:splitstore:limit moving gc threads ([filecoin-project/lotus#10621](https://github.com/filecoin-project/lotus/pull/10621)) + - feat: chainstore: optimize BlockMsgsForTipset ([filecoin-project/lotus#10552](https://github.com/filecoin-project/lotus/pull/10552)) + - fix: make state compute --html work with unknown methods ([filecoin-project/lotus#10619](https://github.com/filecoin-project/lotus/pull/10619)) + - fix: cli: Check if the sectorID exists before removing ([filecoin-project/lotus#10611](https://github.com/filecoin-project/lotus/pull/10611)) + - Fixed incorrect words that could not be compiled ([filecoin-project/lotus#10610](https://github.com/filecoin-project/lotus/pull/10610)) + - Add feature to stagger sector prove commit submission (#10543) ([filecoin-project/lotus#10543](https://github.com/filecoin-project/lotus/pull/10543)) + - shed: get balances of evm accounts ([filecoin-project/lotus#10489](https://github.com/filecoin-project/lotus/pull/10489)) + - chore: deps: update to go-state-types v0.11.0-alpha-3 ([filecoin-project/lotus#10606](https://github.com/filecoin-project/lotus/pull/10606)) + - fix: cli: Make `net connect` to miner address work ([filecoin-project/lotus#10599](https://github.com/filecoin-project/lotus/pull/10599)) + - feat: VM Execution Lanes ([filecoin-project/lotus#10551](https://github.com/filecoin-project/lotus/pull/10551)) + - fix: log: Stop logging `file does not exists` ([filecoin-project/lotus#10588](https://github.com/filecoin-project/lotus/pull/10588)) + - perf: message pool: change locks to RWMutexes for performance ([filecoin-project/lotus#10561](https://github.com/filecoin-project/lotus/pull/10561)) + - fix: miner: correctly count sector extensions ([filecoin-project/lotus#10544](https://github.com/filecoin-project/lotus/pull/10544)) + - feat:networking: (Synchronous) Consistent Broadcast for Filecoin EC ([filecoin-project/lotus#9858](https://github.com/filecoin-project/lotus/pull/9858)) + - refactor: stop using deprecated io/ioutil ([filecoin-project/lotus#10596](https://github.com/filecoin-project/lotus/pull/10596)) + - feat: Use MessageIndex in WaitForMessage ([filecoin-project/lotus#10587](https://github.com/filecoin-project/lotus/pull/10587)) + - fix: searchForIndexedMsg always returns an error ([filecoin-project/lotus#10586](https://github.com/filecoin-project/lotus/pull/10586)) + - build: docker: Update GO-version ([filecoin-project/lotus#10581](https://github.com/filecoin-project/lotus/pull/10581)) + - fix: itests: Don't call t.Error in MineBlocks goroutine ([filecoin-project/lotus#10572](https://github.com/filecoin-project/lotus/pull/10572)) + - Fix: export-range: Ignore ipld Blocks not found in Receipts. ([filecoin-project/lotus#10535](https://github.com/filecoin-project/lotus/pull/10535)) + - feat: populate the index on snapshot import ([filecoin-project/lotus#10556](https://github.com/filecoin-project/lotus/pull/10556)) + - feat: Add small cache to execution traces ([filecoin-project/lotus#10517](https://github.com/filecoin-project/lotus/pull/10517)) + - docs: api: clarify MpoolClear params ([filecoin-project/lotus#10550](https://github.com/filecoin-project/lotus/pull/10550)) + - fix: proving: Initialize slice with with same length as partition ([filecoin-project/lotus#10569](https://github.com/filecoin-project/lotus/pull/10569)) + - perf: eth: gas estimate set applyTsMessages false (#10546) ([filecoin-project/lotus#10546](https://github.com/filecoin-project/lotus/pull/10546)) + - feat: shed: incoming block-sub chainwatch tool ([filecoin-project/lotus#10513](https://github.com/filecoin-project/lotus/pull/10513)) + - feat: stmgr: speed up calculation of genesis circ supply ([filecoin-project/lotus#10553](https://github.com/filecoin-project/lotus/pull/10553)) + - fix: gas estimation: don't special case paych collects ([filecoin-project/lotus#10549](https://github.com/filecoin-project/lotus/pull/10549)) + - fix: tracer: emit raw peer ids for compatibility with libp2p tracer ([filecoin-project/lotus#10271](https://github.com/filecoin-project/lotus/pull/10271)) + - fix: state: lotus-miner info should show deals info without admin permission ([filecoin-project/lotus#10323](https://github.com/filecoin-project/lotus/pull/10323)) + - Merge branch 'feat/new-gw-methods' + - chore: bump go-libipfs ([filecoin-project/lotus#10531](https://github.com/filecoin-project/lotus/pull/10531)) + - feat:chain: Message Index ([filecoin-project/lotus#10452](https://github.com/filecoin-project/lotus/pull/10452)) + +Contributors + +| Contributor | Commits | Lines ± | Files Changed | +|-------------|---------|---------|---------------| +| vyzo | 70 | +1990/-429 | 135 | +| Alfonso de la Rocha | 25 | +814/-299 | 56 | +| Steven Allen | 14 | +125/-539 | 28 | +| Shrenuj Bansal | 13 | +482/-138 | 52 | +| Aayush | 17 | +317/-301 | 90 | +| Łukasz Magiera | 13 | +564/-26 | 16 | +| Jennifer Wang | 7 | +401/-140 | 10 | +| Fridrik Asmundsson | 14 | +315/-84 | 20 | +| Jorropo | 2 | +139/-137 | 74 | +| Mikers | 6 | +114/-43 | 14 | +| Hector Sanjuan | 5 | +92/-44 | 5 | +| Ales Dumikau | 1 | +117/-0 | 10 | +| Mike Seiler | 4 | +51/-51 | 6 | +| zenground0 | 6 | +33/-25 | 8 | +| Phi | 8 | +32/-10 | 10 | +| Aayush Rajasekaran | 1 | +1/-32 | 2 | +| Ian Davis | 2 | +7/-10 | 3 | +| Marcel Telka | 1 | +5/-7 | 1 | +| ychiao | 1 | +8/-3 | 2 | +| jennijuju | 1 | +4/-4 | 8 | +| adlrocha | 2 | +2/-2 | 2 | +| Jiaying Wang | 1 | +0/-4 | 1 | +| ZenGround0 | 1 | +2/-1 | 2 | +| Zeng Li | 1 | +1/-1 | 1 | + # v1.23.0 / 2023-04-21 This is the stable feature release for the upcoming MANDATORY network upgrade at `2023-04-27T13:00:00Z`, epoch `2809800`. This feature release delivers the nv19 Lighting and nv20 Thunder network upgrade for mainnet, and includes numerous improvements and enhancements for node operators, ETH RPC-providers and storage providers. From e8dcf9f838d4417d27be6cb65599ab91acc79d55 Mon Sep 17 00:00:00 2001 From: Shrenuj Bansal <108157875+shrenujbansal@users.noreply.github.com> Date: Wed, 3 May 2023 19:07:15 -0400 Subject: [PATCH 03/28] update cl (#10819) --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 071ee34b4..4657fcd8c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ # v1.23.1 / 2023-05-03 +# What's changed - Update build version for release/v1.23.1 - Disable lotus markets by default (#10809) ([filecoin-project/lotus#10809](https://github.com/filecoin-project/lotus/pull/10809)) - perf: mempool: lower priority optimizations (#10693) ([filecoin-project/lotus#10693](https://github.com/filecoin-project/lotus/pull/10693)) From 779975c3a93ddb43ab0f10fc556d5e696310df3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Magiera?= Date: Tue, 25 Apr 2023 09:54:26 +0200 Subject: [PATCH 04/28] ci: Debugging m1 build --- .circleci/config.yml | 13 +++++++------ .circleci/template.yml | 13 +++++++------ 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index e3eb1c089..0efc8490c 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -63,7 +63,7 @@ commands: name: Install Rust command: | curl https://sh.rustup.rs -sSf | sh -s -- -y - - run: make deps lotus + - run: make deps download-params: steps: - restore_cache: @@ -304,9 +304,7 @@ jobs: darwin: true darwin-architecture: arm64 - run: | - export CPATH=$(brew --prefix)/include - export LIBRARY_PATH=$(brew --prefix)/lib - make lotus lotus-miner lotus-worker + export CPATH=$(brew --prefix)/include && export LIBRARY_PATH=$(brew --prefix)/lib && make lotus lotus-miner lotus-worker - run: otool -hv lotus - run: name: check tag and version output match @@ -1069,6 +1067,7 @@ workflows: branches: only: - /^release\/v\d+\.\d+\.\d+(-rc\d+)?$/ + - /^ci\/.*$/ tags: only: - /^v\d+\.\d+\.\d+(-rc\d+)?$/ @@ -1078,6 +1077,7 @@ workflows: branches: only: - /^release\/v\d+\.\d+\.\d+(-rc\d+)?$/ + - /^ci\/.*$/ tags: only: - /^v\d+\.\d+\.\d+(-rc\d+)?$/ @@ -1087,6 +1087,7 @@ workflows: branches: only: - /^release\/v\d+\.\d+\.\d+(-rc\d+)?$/ + - /^ci\/.*$/ tags: only: - /^v\d+\.\d+\.\d+(-rc\d+)?$/ @@ -1098,8 +1099,8 @@ workflows: - "Build ( darwin / arm64 )" filters: branches: - ignore: - - /.*/ + only: + - /^ci\/.*$/ tags: only: - /^v\d+\.\d+\.\d+(-rc\d+)?$/ diff --git a/.circleci/template.yml b/.circleci/template.yml index 382965615..8393eec5b 100644 --- a/.circleci/template.yml +++ b/.circleci/template.yml @@ -63,7 +63,7 @@ commands: name: Install Rust command: | curl https://sh.rustup.rs -sSf | sh -s -- -y - - run: make deps lotus + - run: make deps download-params: steps: - restore_cache: @@ -304,9 +304,7 @@ jobs: darwin: true darwin-architecture: arm64 - run: | - export CPATH=$(brew --prefix)/include - export LIBRARY_PATH=$(brew --prefix)/lib - make lotus lotus-miner lotus-worker + export CPATH=$(brew --prefix)/include && export LIBRARY_PATH=$(brew --prefix)/lib && make lotus lotus-miner lotus-worker - run: otool -hv lotus - run: name: check tag and version output match @@ -583,6 +581,7 @@ workflows: branches: only: - /^release\/v\d+\.\d+\.\d+(-rc\d+)?$/ + - /^ci\/.*$/ tags: only: - /^v\d+\.\d+\.\d+(-rc\d+)?$/ @@ -592,6 +591,7 @@ workflows: branches: only: - /^release\/v\d+\.\d+\.\d+(-rc\d+)?$/ + - /^ci\/.*$/ tags: only: - /^v\d+\.\d+\.\d+(-rc\d+)?$/ @@ -601,6 +601,7 @@ workflows: branches: only: - /^release\/v\d+\.\d+\.\d+(-rc\d+)?$/ + - /^ci\/.*$/ tags: only: - /^v\d+\.\d+\.\d+(-rc\d+)?$/ @@ -612,8 +613,8 @@ workflows: - "Build ( darwin / arm64 )" filters: branches: - ignore: - - /.*/ + only: + - /^ci\/.*$/ tags: only: - /^v\d+\.\d+\.\d+(-rc\d+)?$/ From 9558df7cdaafaab0779a71f55d9b0a4352429b42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Magiera?= Date: Tue, 25 Apr 2023 10:24:18 +0200 Subject: [PATCH 05/28] temp drop m1 from releases --- .circleci/config.yml | 1 - .circleci/template.yml | 1 - 2 files changed, 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 0efc8490c..a94329d81 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1096,7 +1096,6 @@ workflows: requires: - "Build ( darwin / amd64 )" - "Build ( linux / amd64 )" - - "Build ( darwin / arm64 )" filters: branches: only: diff --git a/.circleci/template.yml b/.circleci/template.yml index 8393eec5b..ed5ba4850 100644 --- a/.circleci/template.yml +++ b/.circleci/template.yml @@ -610,7 +610,6 @@ workflows: requires: - "Build ( darwin / amd64 )" - "Build ( linux / amd64 )" - - "Build ( darwin / arm64 )" filters: branches: only: From 0cfb69b95a583138328d18b917acf1de713b2b0c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Magiera?= Date: Tue, 25 Apr 2023 10:25:40 +0200 Subject: [PATCH 06/28] ci: run release on ci/ branches, include m1 --- .circleci/config.yml | 6 ++++-- .circleci/template.yml | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index a94329d81..9038fdb8f 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1096,10 +1096,11 @@ workflows: requires: - "Build ( darwin / amd64 )" - "Build ( linux / amd64 )" + - "Build ( darwin / arm64 )" filters: branches: - only: - - /^ci\/.*$/ + ignore: + - /^.*$/ tags: only: - /^v\d+\.\d+\.\d+(-rc\d+)?$/ @@ -1114,6 +1115,7 @@ workflows: branches: only: - /^release\/v\d+\.\d+\.\d+(-rc\d+)?$/ + - /^ci\/.*$/ - build-docker: name: "Docker push (lotus-all-in-one / stable / mainnet)" image: lotus-all-in-one diff --git a/.circleci/template.yml b/.circleci/template.yml index ed5ba4850..cd8aeb663 100644 --- a/.circleci/template.yml +++ b/.circleci/template.yml @@ -610,10 +610,11 @@ workflows: requires: - "Build ( darwin / amd64 )" - "Build ( linux / amd64 )" + - "Build ( darwin / arm64 )" filters: branches: - only: - - /^ci\/.*$/ + ignore: + - /^.*$/ tags: only: - /^v\d+\.\d+\.\d+(-rc\d+)?$/ @@ -628,6 +629,7 @@ workflows: branches: only: - /^release\/v\d+\.\d+\.\d+(-rc\d+)?$/ + - /^ci\/.*$/ [[- range .Networks]] - build-docker: name: "Docker push (lotus-all-in-one / stable / [[.]])" From 4e49b8b671a16112a6bc1346a1588c62c209a9d2 Mon Sep 17 00:00:00 2001 From: Phi Date: Mon, 8 May 2023 13:13:18 +0200 Subject: [PATCH 07/28] Hide lotus-miner legacy markets cmds Hide lotus-miner legacy markets cmds --- cmd/lotus-miner/main.go | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/cmd/lotus-miner/main.go b/cmd/lotus-miner/main.go index 3cc796168..911e98e26 100644 --- a/cmd/lotus-miner/main.go +++ b/cmd/lotus-miner/main.go @@ -43,16 +43,16 @@ func main() { backupCmd, lcli.WithCategory("chain", actorCmd), lcli.WithCategory("chain", infoCmd), - lcli.WithCategory("market", storageDealsCmd), - lcli.WithCategory("market", retrievalDealsCmd), - lcli.WithCategory("market", dataTransfersCmd), - lcli.WithCategory("market", dagstoreCmd), - lcli.WithCategory("market", indexProvCmd), + lcli.WithCategory("market", setHidden(storageDealsCmd)), + lcli.WithCategory("market", setHidden(retrievalDealsCmd)), + lcli.WithCategory("market", setHidden(dataTransfersCmd)), + lcli.WithCategory("market", setHidden(dagstoreCmd)), + lcli.WithCategory("market", setHidden(indexProvCmd)), lcli.WithCategory("storage", sectorsCmd), lcli.WithCategory("storage", provingCmd), lcli.WithCategory("storage", storageCmd), lcli.WithCategory("storage", sealingCmd), - lcli.WithCategory("retrieval", piecesCmd), + lcli.WithCategory("retrieval", setHidden(piecesCmd)), } jaeger := tracing.SetupJaegerTracing("lotus") @@ -86,6 +86,7 @@ func main() { // adapt the Net* commands to always hit the node running the markets // subsystem, as that is the only one that runs a libp2p node. netCmd := *lcli.NetCmd // make a copy. + netCmd.Hidden = true prev := netCmd.Before netCmd.Before = func(c *cli.Context) error { if prev != nil { @@ -137,11 +138,12 @@ func main() { &cli.StringFlag{ Name: FlagMarketsRepo, EnvVars: []string{"LOTUS_MARKETS_PATH"}, - Usage: fmt.Sprintf("Markets repo path"), + Hidden: true, }, &cli.BoolFlag{ - Name: "call-on-markets", - Usage: "(experimental; may be removed) call this command against a markets node; use only with common commands like net, auth, pprof, etc. whose target may be ambiguous", + Name: "call-on-markets", + Usage: "(experimental; may be removed) call this command against a markets node; use only with common commands like net, auth, pprof, etc. whose target may be ambiguous", + Hidden: true, }, cliutil.FlagVeryVerbose, }, @@ -190,3 +192,8 @@ func getActorAddress(ctx context.Context, cctx *cli.Context) (maddr address.Addr return maddr, nil } + +func setHidden(cmd *cli.Command) *cli.Command { + cmd.Hidden = true + return cmd +} From f03c06964f8381fd6c3356182fc59c1dcfe7338a Mon Sep 17 00:00:00 2001 From: Phi Date: Mon, 8 May 2023 13:42:53 +0200 Subject: [PATCH 08/28] Make docsgen-cli Make docsgen-cli --- documentation/en/cli-lotus-miner.md | 1047 --------------------------- 1 file changed, 1047 deletions(-) diff --git a/documentation/en/cli-lotus-miner.md b/documentation/en/cli-lotus-miner.md index cc1943065..c728c684a 100644 --- a/documentation/en/cli-lotus-miner.md +++ b/documentation/en/cli-lotus-miner.md @@ -25,16 +25,6 @@ COMMANDS: log Manage logging wait-api Wait for lotus api to come online fetch-params Fetch proving parameters - MARKET: - storage-deals Manage storage deals and related configuration - retrieval-deals Manage retrieval deals and related configuration - data-transfers Manage data transfers - dagstore Manage the dagstore on the markets subsystem - index Manage the index provider on the markets subsystem - NETWORK: - net Manage P2P Network - RETRIEVAL: - pieces interact with the piecestore STORAGE: sectors interact with sector store proving View proving information @@ -43,10 +33,8 @@ COMMANDS: GLOBAL OPTIONS: --actor value, -a value specify other actor to query / manipulate - --call-on-markets (experimental; may be removed) call this command against a markets node; use only with common commands like net, auth, pprof, etc. whose target may be ambiguous (default: false) --color use color in display output (default: depends on output being a TTY) --help, -h show help (default: false) - --markets-repo value Markets repo path [$LOTUS_MARKETS_PATH] --miner-repo value, --storagerepo value Specify miner repo path. flag(storagerepo) and env(LOTUS_STORAGE_PATH) are DEPRECATION, will REMOVE SOON (default: "~/.lotusminer") [$LOTUS_MINER_PATH, $LOTUS_STORAGE_PATH] --version, -v print the version (default: false) --vv enables very verbose mode, useful for debugging the CLI (default: false) @@ -607,1041 +595,6 @@ OPTIONS: ``` -## lotus-miner storage-deals -``` -NAME: - lotus-miner storage-deals - Manage storage deals and related configuration - -USAGE: - lotus-miner storage-deals command [command options] [arguments...] - -COMMANDS: - import-data Manually import data for a deal - list List all deals for this miner - selection Configure acceptance criteria for storage deal proposals - set-ask Configure the miner's ask - get-ask Print the miner's ask - set-blocklist Set the miner's list of blocklisted piece CIDs - get-blocklist List the contents of the miner's piece CID blocklist - reset-blocklist Remove all entries from the miner's piece CID blocklist - set-seal-duration Set the expected time, in minutes, that you expect sealing sectors to take. Deals that start before this duration will be rejected. - pending-publish list deals waiting in publish queue - retry-publish retry publishing a deal - help, h Shows a list of commands or help for one command - -OPTIONS: - --help, -h show help (default: false) - -``` - -### lotus-miner storage-deals import-data -``` -NAME: - lotus-miner storage-deals import-data - Manually import data for a deal - -USAGE: - lotus-miner storage-deals import-data [command options] - -OPTIONS: - --help, -h show help (default: false) - -``` - -### lotus-miner storage-deals list -``` -NAME: - lotus-miner storage-deals list - List all deals for this miner - -USAGE: - lotus-miner storage-deals list [command options] [arguments...] - -OPTIONS: - --format value output format of data, supported: table, json (default: "table") - --verbose, -v (default: false) - --watch watch deal updates in real-time, rather than a one time list (default: false) - -``` - -### lotus-miner storage-deals selection -``` -NAME: - lotus-miner storage-deals selection - Configure acceptance criteria for storage deal proposals - -USAGE: - lotus-miner storage-deals selection command [command options] [arguments...] - -COMMANDS: - list List storage deal proposal selection criteria - reset Reset storage deal proposal selection criteria to default values - reject Configure criteria which necessitate automatic rejection - help, h Shows a list of commands or help for one command - -OPTIONS: - --help, -h show help (default: false) - -``` - -#### lotus-miner storage-deals selection list -``` -NAME: - lotus-miner storage-deals selection list - List storage deal proposal selection criteria - -USAGE: - lotus-miner storage-deals selection list [command options] [arguments...] - -OPTIONS: - --help, -h show help (default: false) - -``` - -#### lotus-miner storage-deals selection reset -``` -NAME: - lotus-miner storage-deals selection reset - Reset storage deal proposal selection criteria to default values - -USAGE: - lotus-miner storage-deals selection reset [command options] [arguments...] - -OPTIONS: - --help, -h show help (default: false) - -``` - -#### lotus-miner storage-deals selection reject -``` -NAME: - lotus-miner storage-deals selection reject - Configure criteria which necessitate automatic rejection - -USAGE: - lotus-miner storage-deals selection reject [command options] [arguments...] - -OPTIONS: - --offline (default: false) - --online (default: false) - --unverified (default: false) - --verified (default: false) - -``` - -### lotus-miner storage-deals set-ask -``` -NAME: - lotus-miner storage-deals set-ask - Configure the miner's ask - -USAGE: - lotus-miner storage-deals set-ask [command options] [arguments...] - -OPTIONS: - --max-piece-size SIZE Set maximum piece size (w/bit-padding, in bytes) in ask to SIZE (default: miner sector size) - --min-piece-size SIZE Set minimum piece size (w/bit-padding, in bytes) in ask to SIZE (default: 256B) - --price PRICE Set the price of the ask for unverified deals (specified as FIL / GiB / Epoch) to PRICE. - --verified-price PRICE Set the price of the ask for verified deals (specified as FIL / GiB / Epoch) to PRICE - -``` - -### lotus-miner storage-deals get-ask -``` -NAME: - lotus-miner storage-deals get-ask - Print the miner's ask - -USAGE: - lotus-miner storage-deals get-ask [command options] [arguments...] - -OPTIONS: - --help, -h show help (default: false) - -``` - -### lotus-miner storage-deals set-blocklist -``` -NAME: - lotus-miner storage-deals set-blocklist - Set the miner's list of blocklisted piece CIDs - -USAGE: - lotus-miner storage-deals set-blocklist [command options] [ (optional, will read from stdin if omitted)] - -OPTIONS: - --help, -h show help (default: false) - -``` - -### lotus-miner storage-deals get-blocklist -``` -NAME: - lotus-miner storage-deals get-blocklist - List the contents of the miner's piece CID blocklist - -USAGE: - lotus-miner storage-deals get-blocklist [command options] [arguments...] - -OPTIONS: - -``` - -### lotus-miner storage-deals reset-blocklist -``` -NAME: - lotus-miner storage-deals reset-blocklist - Remove all entries from the miner's piece CID blocklist - -USAGE: - lotus-miner storage-deals reset-blocklist [command options] [arguments...] - -OPTIONS: - --help, -h show help (default: false) - -``` - -### lotus-miner storage-deals set-seal-duration -``` -NAME: - lotus-miner storage-deals set-seal-duration - Set the expected time, in minutes, that you expect sealing sectors to take. Deals that start before this duration will be rejected. - -USAGE: - lotus-miner storage-deals set-seal-duration [command options] - -OPTIONS: - --help, -h show help (default: false) - -``` - -### lotus-miner storage-deals pending-publish -``` -NAME: - lotus-miner storage-deals pending-publish - list deals waiting in publish queue - -USAGE: - lotus-miner storage-deals pending-publish [command options] [arguments...] - -OPTIONS: - --publish-now send a publish message now (default: false) - -``` - -### lotus-miner storage-deals retry-publish -``` -NAME: - lotus-miner storage-deals retry-publish - retry publishing a deal - -USAGE: - lotus-miner storage-deals retry-publish [command options] - -OPTIONS: - --help, -h show help (default: false) - -``` - -## lotus-miner retrieval-deals -``` -NAME: - lotus-miner retrieval-deals - Manage retrieval deals and related configuration - -USAGE: - lotus-miner retrieval-deals command [command options] [arguments...] - -COMMANDS: - selection Configure acceptance criteria for retrieval deal proposals - set-ask Configure the provider's retrieval ask - get-ask Get the provider's current retrieval ask configured by the provider in the ask-store using the set-ask CLI command - help, h Shows a list of commands or help for one command - -OPTIONS: - --help, -h show help (default: false) - -``` - -### lotus-miner retrieval-deals selection -``` -NAME: - lotus-miner retrieval-deals selection - Configure acceptance criteria for retrieval deal proposals - -USAGE: - lotus-miner retrieval-deals selection command [command options] [arguments...] - -COMMANDS: - list List retrieval deal proposal selection criteria - reset Reset retrieval deal proposal selection criteria to default values - reject Configure criteria which necessitate automatic rejection - help, h Shows a list of commands or help for one command - -OPTIONS: - --help, -h show help (default: false) - -``` - -#### lotus-miner retrieval-deals selection list -``` -NAME: - lotus-miner retrieval-deals selection list - List retrieval deal proposal selection criteria - -USAGE: - lotus-miner retrieval-deals selection list [command options] [arguments...] - -OPTIONS: - --help, -h show help (default: false) - -``` - -#### lotus-miner retrieval-deals selection reset -``` -NAME: - lotus-miner retrieval-deals selection reset - Reset retrieval deal proposal selection criteria to default values - -USAGE: - lotus-miner retrieval-deals selection reset [command options] [arguments...] - -OPTIONS: - --help, -h show help (default: false) - -``` - -#### lotus-miner retrieval-deals selection reject -``` -NAME: - lotus-miner retrieval-deals selection reject - Configure criteria which necessitate automatic rejection - -USAGE: - lotus-miner retrieval-deals selection reject [command options] [arguments...] - -OPTIONS: - --offline (default: false) - --online (default: false) - -``` - -### lotus-miner retrieval-deals set-ask -``` -NAME: - lotus-miner retrieval-deals set-ask - Configure the provider's retrieval ask - -USAGE: - lotus-miner retrieval-deals set-ask [command options] [arguments...] - -OPTIONS: - --payment-interval value Set the payment interval (in bytes) for retrieval (default: 1MiB) - --payment-interval-increase value Set the payment interval increase (in bytes) for retrieval (default: 1MiB) - --price value Set the price of the ask for retrievals (FIL/GiB) - --unseal-price value Set the price to unseal - -``` - -### lotus-miner retrieval-deals get-ask -``` -NAME: - lotus-miner retrieval-deals get-ask - Get the provider's current retrieval ask configured by the provider in the ask-store using the set-ask CLI command - -USAGE: - lotus-miner retrieval-deals get-ask [command options] [arguments...] - -OPTIONS: - --help, -h show help (default: false) - -``` - -## lotus-miner data-transfers -``` -NAME: - lotus-miner data-transfers - Manage data transfers - -USAGE: - lotus-miner data-transfers command [command options] [arguments...] - -COMMANDS: - list List ongoing data transfers for this miner - restart Force restart a stalled data transfer - cancel Force cancel a data transfer - diagnostics Get detailed diagnostics on active transfers with a specific peer - help, h Shows a list of commands or help for one command - -OPTIONS: - --help, -h show help (default: false) - -``` - -### lotus-miner data-transfers list -``` -NAME: - lotus-miner data-transfers list - List ongoing data transfers for this miner - -USAGE: - lotus-miner data-transfers list [command options] [arguments...] - -OPTIONS: - --completed show completed data transfers (default: false) - --show-failed show failed/cancelled transfers (default: false) - --verbose, -v print verbose transfer details (default: false) - --watch watch deal updates in real-time, rather than a one time list (default: false) - -``` - -### lotus-miner data-transfers restart -``` -NAME: - lotus-miner data-transfers restart - Force restart a stalled data transfer - -USAGE: - lotus-miner data-transfers restart [command options] [arguments...] - -OPTIONS: - --initiator specify only transfers where peer is/is not initiator (default: false) - --peerid value narrow to transfer with specific peer - -``` - -### lotus-miner data-transfers cancel -``` -NAME: - lotus-miner data-transfers cancel - Force cancel a data transfer - -USAGE: - lotus-miner data-transfers cancel [command options] [arguments...] - -OPTIONS: - --cancel-timeout value time to wait for cancel to be sent to client (default: 5s) - --initiator specify only transfers where peer is/is not initiator (default: false) - --peerid value narrow to transfer with specific peer - -``` - -### lotus-miner data-transfers diagnostics -``` -NAME: - lotus-miner data-transfers diagnostics - Get detailed diagnostics on active transfers with a specific peer - -USAGE: - lotus-miner data-transfers diagnostics [command options] [arguments...] - -OPTIONS: - --help, -h show help (default: false) - -``` - -## lotus-miner dagstore -``` -NAME: - lotus-miner dagstore - Manage the dagstore on the markets subsystem - -USAGE: - lotus-miner dagstore command [command options] [arguments...] - -COMMANDS: - list-shards List all shards known to the dagstore, with their current status - register-shard Register a shard - initialize-shard Initialize the specified shard - recover-shard Attempt to recover a shard in errored state - initialize-all Initialize all uninitialized shards, streaming results as they're produced; only shards for unsealed pieces are initialized by default - gc Garbage collect the dagstore - lookup-pieces Lookup pieces that a given CID belongs to - help, h Shows a list of commands or help for one command - -OPTIONS: - --help, -h show help (default: false) - -``` - -### lotus-miner dagstore list-shards -``` -NAME: - lotus-miner dagstore list-shards - List all shards known to the dagstore, with their current status - -USAGE: - lotus-miner dagstore list-shards [command options] [arguments...] - -OPTIONS: - --help, -h show help (default: false) - -``` - -### lotus-miner dagstore register-shard -``` -NAME: - lotus-miner dagstore register-shard - Register a shard - -USAGE: - lotus-miner dagstore register-shard [command options] [key] - -OPTIONS: - --help, -h show help (default: false) - -``` - -### lotus-miner dagstore initialize-shard -``` -NAME: - lotus-miner dagstore initialize-shard - Initialize the specified shard - -USAGE: - lotus-miner dagstore initialize-shard [command options] [key] - -OPTIONS: - --help, -h show help (default: false) - -``` - -### lotus-miner dagstore recover-shard -``` -NAME: - lotus-miner dagstore recover-shard - Attempt to recover a shard in errored state - -USAGE: - lotus-miner dagstore recover-shard [command options] [key] - -OPTIONS: - --help, -h show help (default: false) - -``` - -### lotus-miner dagstore initialize-all -``` -NAME: - lotus-miner dagstore initialize-all - Initialize all uninitialized shards, streaming results as they're produced; only shards for unsealed pieces are initialized by default - -USAGE: - lotus-miner dagstore initialize-all [command options] [arguments...] - -OPTIONS: - --concurrency value maximum shards to initialize concurrently at a time; use 0 for unlimited (default: 0) - --include-sealed initialize sealed pieces as well (default: false) - -``` - -### lotus-miner dagstore gc -``` -NAME: - lotus-miner dagstore gc - Garbage collect the dagstore - -USAGE: - lotus-miner dagstore gc [command options] [arguments...] - -OPTIONS: - --help, -h show help (default: false) - -``` - -### lotus-miner dagstore lookup-pieces -``` -NAME: - lotus-miner dagstore lookup-pieces - Lookup pieces that a given CID belongs to - -USAGE: - lotus-miner dagstore lookup-pieces [command options] - -OPTIONS: - --help, -h show help (default: false) - -``` - -## lotus-miner index -``` -NAME: - lotus-miner index - Manage the index provider on the markets subsystem - -USAGE: - lotus-miner index command [command options] [arguments...] - -COMMANDS: - announce Announce a deal to indexers so they can download its index - announce-all Announce all active deals to indexers so they can download the indices - help, h Shows a list of commands or help for one command - -OPTIONS: - --help, -h show help (default: false) - -``` - -### lotus-miner index announce -``` -NAME: - lotus-miner index announce - Announce a deal to indexers so they can download its index - -USAGE: - lotus-miner index announce [command options] - -OPTIONS: - --help, -h show help (default: false) - -``` - -### lotus-miner index announce-all -``` -NAME: - lotus-miner index announce-all - Announce all active deals to indexers so they can download the indices - -USAGE: - lotus-miner index announce-all [command options] [arguments...] - -OPTIONS: - --help, -h show help (default: false) - -``` - -## lotus-miner net -``` -NAME: - lotus-miner net - Manage P2P Network - -USAGE: - lotus-miner net command [command options] [arguments...] - -COMMANDS: - peers Print peers - ping Ping peers - connect Connect to a peer - disconnect Disconnect from a peer - listen List listen addresses - id Get node identity - find-peer, findpeer Find the addresses of a given peerID - scores Print peers' pubsub scores - 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 - protect Add one or more peer IDs to the list of protected peer connections - unprotect Remove one or more peer IDs from the list of protected peer connections. - list-protected List the peer IDs with protected connection. - help, h Shows a list of commands or help for one command - -OPTIONS: - --help, -h show help (default: false) - -``` - -### lotus-miner net peers -``` -NAME: - lotus-miner net peers - Print peers - -USAGE: - lotus-miner net peers [command options] [arguments...] - -OPTIONS: - --agent, -a Print agent name (default: false) - --extended, -x Print extended peer information in json (default: false) - -``` - -### lotus-miner net ping -``` -NAME: - lotus-miner net ping - Ping peers - -USAGE: - lotus-miner net ping [command options] [peerMultiaddr] - -OPTIONS: - --count value, -c value specify the number of times it should ping (default: 10) - --interval value, -i value minimum time between pings (default: 1s) - -``` - -### lotus-miner net connect -``` -NAME: - lotus-miner net connect - Connect to a peer - -USAGE: - lotus-miner net connect [command options] [peerMultiaddr|minerActorAddress] - -OPTIONS: - --help, -h show help (default: false) - -``` - -### lotus-miner net disconnect -``` -NAME: - lotus-miner net disconnect - Disconnect from a peer - -USAGE: - lotus-miner net disconnect [command options] [peerID] - -OPTIONS: - --help, -h show help (default: false) - -``` - -### lotus-miner net listen -``` -NAME: - lotus-miner net listen - List listen addresses - -USAGE: - lotus-miner net listen [command options] [arguments...] - -OPTIONS: - --help, -h show help (default: false) - -``` - -### lotus-miner net id -``` -NAME: - lotus-miner net id - Get node identity - -USAGE: - lotus-miner net id [command options] [arguments...] - -OPTIONS: - --help, -h show help (default: false) - -``` - -#### lotus-miner net find-peer, findpeer -``` -``` - -### lotus-miner net scores -``` -NAME: - lotus-miner net scores - Print peers' pubsub scores - -USAGE: - lotus-miner net scores [command options] [arguments...] - -OPTIONS: - --extended, -x print extended peer scores in json (default: false) - -``` - -### lotus-miner net reachability -``` -NAME: - lotus-miner net reachability - Print information about reachability from the internet - -USAGE: - lotus-miner net reachability [command options] [arguments...] - -OPTIONS: - --help, -h show help (default: false) - -``` - -### lotus-miner net bandwidth -``` -NAME: - lotus-miner net bandwidth - Print bandwidth usage information - -USAGE: - lotus-miner net bandwidth [command options] [arguments...] - -OPTIONS: - --by-peer list bandwidth usage by peer (default: false) - --by-protocol list bandwidth usage by protocol (default: false) - -``` - -### lotus-miner net block -``` -NAME: - lotus-miner net block - Manage network connection gating rules - -USAGE: - lotus-miner net block command [command options] [arguments...] - -COMMANDS: - add Add connection gating rules - remove Remove connection gating rules - list list connection gating rules - help, h Shows a list of commands or help for one command - -OPTIONS: - --help, -h show help (default: false) - -``` - -#### lotus-miner net block add -``` -NAME: - lotus-miner net block add - Add connection gating rules - -USAGE: - lotus-miner net block add command [command options] [arguments...] - -COMMANDS: - peer Block a peer - ip Block an IP address - subnet Block an IP subnet - help, h Shows a list of commands or help for one command - -OPTIONS: - --help, -h show help (default: false) - -``` - -##### lotus-miner net block add peer -``` -NAME: - lotus-miner net block add peer - Block a peer - -USAGE: - lotus-miner net block add peer [command options] ... - -OPTIONS: - --help, -h show help (default: false) - -``` - -##### lotus-miner net block add ip -``` -NAME: - lotus-miner net block add ip - Block an IP address - -USAGE: - lotus-miner net block add ip [command options] ... - -OPTIONS: - --help, -h show help (default: false) - -``` - -##### lotus-miner net block add subnet -``` -NAME: - lotus-miner net block add subnet - Block an IP subnet - -USAGE: - lotus-miner net block add subnet [command options] ... - -OPTIONS: - --help, -h show help (default: false) - -``` - -#### lotus-miner net block remove -``` -NAME: - lotus-miner net block remove - Remove connection gating rules - -USAGE: - lotus-miner net block remove command [command options] [arguments...] - -COMMANDS: - peer Unblock a peer - ip Unblock an IP address - subnet Unblock an IP subnet - help, h Shows a list of commands or help for one command - -OPTIONS: - --help, -h show help (default: false) - -``` - -##### lotus-miner net block remove peer -``` -NAME: - lotus-miner net block remove peer - Unblock a peer - -USAGE: - lotus-miner net block remove peer [command options] ... - -OPTIONS: - --help, -h show help (default: false) - -``` - -##### lotus-miner net block remove ip -``` -NAME: - lotus-miner net block remove ip - Unblock an IP address - -USAGE: - lotus-miner net block remove ip [command options] ... - -OPTIONS: - --help, -h show help (default: false) - -``` - -##### lotus-miner net block remove subnet -``` -NAME: - lotus-miner net block remove subnet - Unblock an IP subnet - -USAGE: - lotus-miner net block remove subnet [command options] ... - -OPTIONS: - --help, -h show help (default: false) - -``` - -#### lotus-miner net block list -``` -NAME: - lotus-miner net block list - list connection gating rules - -USAGE: - lotus-miner net block list [command options] [arguments...] - -OPTIONS: - --help, -h show help (default: false) - -``` - -### 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: - --json (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) - -``` - -### lotus-miner net protect -``` -NAME: - lotus-miner net protect - Add one or more peer IDs to the list of protected peer connections - -USAGE: - lotus-miner net protect [command options] [...] - -OPTIONS: - --help, -h show help (default: false) - -``` - -### lotus-miner net unprotect -``` -NAME: - lotus-miner net unprotect - Remove one or more peer IDs from the list of protected peer connections. - -USAGE: - lotus-miner net unprotect [command options] [...] - -OPTIONS: - --help, -h show help (default: false) - -``` - -### lotus-miner net list-protected -``` -NAME: - lotus-miner net list-protected - List the peer IDs with protected connection. - -USAGE: - lotus-miner net list-protected [command options] [arguments...] - -OPTIONS: - --help, -h show help (default: false) - -``` - -## lotus-miner pieces -``` -NAME: - lotus-miner pieces - interact with the piecestore - -USAGE: - lotus-miner pieces command [command options] [arguments...] - -DESCRIPTION: - The piecestore is a database that tracks and manages data that is made available to the retrieval market - -COMMANDS: - list-pieces list registered pieces - list-cids list registered payload CIDs - piece-info get registered information for a given piece CID - cid-info get registered information for a given payload CID - help, h Shows a list of commands or help for one command - -OPTIONS: - --help, -h show help (default: false) - -``` - -### lotus-miner pieces list-pieces -``` -NAME: - lotus-miner pieces list-pieces - list registered pieces - -USAGE: - lotus-miner pieces list-pieces [command options] [arguments...] - -OPTIONS: - --help, -h show help (default: false) - -``` - -### lotus-miner pieces list-cids -``` -NAME: - lotus-miner pieces list-cids - list registered payload CIDs - -USAGE: - lotus-miner pieces list-cids [command options] [arguments...] - -OPTIONS: - --verbose, -v (default: false) - -``` - -### lotus-miner pieces piece-info -``` -NAME: - lotus-miner pieces piece-info - get registered information for a given piece CID - -USAGE: - lotus-miner pieces piece-info [command options] [arguments...] - -OPTIONS: - --help, -h show help (default: false) - -``` - -### lotus-miner pieces cid-info -``` -NAME: - lotus-miner pieces cid-info - get registered information for a given payload CID - -USAGE: - lotus-miner pieces cid-info [command options] [arguments...] - -OPTIONS: - --help, -h show help (default: false) - -``` - ## lotus-miner sectors ``` NAME: From 60d576241c7efa28f83c67cf5b96d6753ed5ea3b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Magiera?= Date: Wed, 10 May 2023 21:43:42 +0200 Subject: [PATCH 09/28] fix: sched: Address GET_32G_MAX_CONCURRENT regression (#10850) * Fix 1.21 regression: GET_32G_MAX_CONCURRENT + mixed prepared/executing leads to stuck scheduler If you have 12 GET tasks and GET_32G_MAX_CONCURRENT=1, sealing jobs will only show assigned tasks for GET of the miner and is stuck. I believe this to be a regression of 1.21 unifying the counters, in the case of GETs where PrepType and TaskType both being seal/v0/fetch leading to a state where tasks are blocked since already counted towards the limit. * itests: Repro issue from PR #10633 * make counters int (non-working) * fix: worker sched: Send taskDone notifs after tasks are done * itests: Make TestPledgeMaxConcurrentGet actually reproduce the issue * make the linter happy --------- Co-authored-by: Steffen Butzer --- .circleci/config.yml | 6 ++ itests/sealing_resources_test.go | 64 +++++++++++++++++++ storage/sealer/sched_assigner_common.go | 2 +- storage/sealer/sched_assigner_darts.go | 4 +- storage/sealer/sched_assigner_spread.go | 4 +- storage/sealer/sched_assigner_spread_tasks.go | 4 +- storage/sealer/sched_assigner_utilization.go | 4 +- storage/sealer/sched_post.go | 5 +- storage/sealer/sched_resources.go | 63 +++++++++++------- storage/sealer/sched_test.go | 4 +- storage/sealer/sched_worker.go | 29 +++++---- 11 files changed, 142 insertions(+), 47 deletions(-) create mode 100644 itests/sealing_resources_test.go diff --git a/.circleci/config.yml b/.circleci/config.yml index 9038fdb8f..5fcb83145 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -882,6 +882,12 @@ workflows: - build suite: itest-sdr_upgrade target: "./itests/sdr_upgrade_test.go" + - test: + name: test-itest-sealing_resources + requires: + - build + suite: itest-sealing_resources + target: "./itests/sealing_resources_test.go" - test: name: test-itest-sector_finalize_early requires: diff --git a/itests/sealing_resources_test.go b/itests/sealing_resources_test.go new file mode 100644 index 000000000..85779fd88 --- /dev/null +++ b/itests/sealing_resources_test.go @@ -0,0 +1,64 @@ +package itests + +import ( + "context" + "os" + "testing" + "time" + + "github.com/stretchr/testify/require" + + "github.com/filecoin-project/lotus/itests/kit" + "github.com/filecoin-project/lotus/storage/sealer/storiface" +) + +// Regression check for a fix introduced in https://github.com/filecoin-project/lotus/pull/10633 +func TestPledgeMaxConcurrentGet(t *testing.T) { + require.NoError(t, os.Setenv("GET_2K_MAX_CONCURRENT", "1")) + t.Cleanup(func() { + require.NoError(t, os.Unsetenv("GET_2K_MAX_CONCURRENT")) + }) + + kit.QuietMiningLogs() + + blockTime := 50 * time.Millisecond + + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + _, miner, ens := kit.EnsembleMinimal(t, kit.NoStorage()) // no mock proofs + ens.InterconnectAll().BeginMiningMustPost(blockTime) + + // separate sealed and storage paths so that finalize move needs to happen + miner.AddStorage(ctx, t, func(meta *storiface.LocalStorageMeta) { + meta.CanSeal = true + }) + miner.AddStorage(ctx, t, func(meta *storiface.LocalStorageMeta) { + meta.CanStore = true + }) + + // NOTE: This test only repros the issue when Fetch tasks take ~10s, there's + // no great way to do that in a non-horribly-hacky way + + /* The horribly hacky way: + + diff --git a/storage/sealer/sched_worker.go b/storage/sealer/sched_worker.go + index 35acd755d..76faec859 100644 + --- a/storage/sealer/sched_worker.go + +++ b/storage/sealer/sched_worker.go + @@ -513,6 +513,10 @@ func (sw *schedWorker) startProcessingTask(req *WorkerRequest) error { + tw.start() + err = <-werr + + + if req.TaskType == sealtasks.TTFetch { + + time.Sleep(10 * time.Second) + + } + + + select { + case req.ret <- workerResponse{err: err}: + case <-req.Ctx.Done(): + + */ + + miner.PledgeSectors(ctx, 3, 0, nil) +} diff --git a/storage/sealer/sched_assigner_common.go b/storage/sealer/sched_assigner_common.go index d676d410d..ffc21b0dd 100644 --- a/storage/sealer/sched_assigner_common.go +++ b/storage/sealer/sched_assigner_common.go @@ -103,7 +103,7 @@ func (a *AssignerCommon) TrySched(sh *Scheduler) { needRes := worker.Info.Resources.ResourceSpec(task.Sector.ProofType, task.TaskType) // TODO: allow bigger windows - if !windows[wnd].Allocated.CanHandleRequest(task.SealTask(), needRes, windowRequest.Worker, "schedAcceptable", worker.Info) { + if !windows[wnd].Allocated.CanHandleRequest(task.SchedId, task.SealTask(), needRes, windowRequest.Worker, "schedAcceptable", worker.Info) { continue } diff --git a/storage/sealer/sched_assigner_darts.go b/storage/sealer/sched_assigner_darts.go index e28b70e78..134698fbf 100644 --- a/storage/sealer/sched_assigner_darts.go +++ b/storage/sealer/sched_assigner_darts.go @@ -37,7 +37,7 @@ func RandomWS(sh *Scheduler, queueLen int, acceptableWindows [][]int, windows [] log.Debugf("SCHED try assign sqi:%d sector %d to window %d (awi:%d)", sqi, task.Sector.ID.Number, wnd, i) - if !windows[wnd].Allocated.CanHandleRequest(task.SealTask(), res, wid, "schedAssign", w.Info) { + if !windows[wnd].Allocated.CanHandleRequest(task.SchedId, task.SealTask(), res, wid, "schedAssign", w.Info) { continue } @@ -71,7 +71,7 @@ func RandomWS(sh *Scheduler, queueLen int, acceptableWindows [][]int, windows [] "worker", bestWid, "choices", len(choices)) - windows[selectedWindow].Allocated.Add(task.SealTask(), info.Resources, needRes) + windows[selectedWindow].Allocated.Add(task.SchedId, task.SealTask(), info.Resources, needRes) windows[selectedWindow].Todo = append(windows[selectedWindow].Todo, task) rmQueue = append(rmQueue, sqi) diff --git a/storage/sealer/sched_assigner_spread.go b/storage/sealer/sched_assigner_spread.go index 0a62b7406..b1ac4c8e9 100644 --- a/storage/sealer/sched_assigner_spread.go +++ b/storage/sealer/sched_assigner_spread.go @@ -35,7 +35,7 @@ func SpreadWS(queued bool) func(sh *Scheduler, queueLen int, acceptableWindows [ log.Debugf("SCHED try assign sqi:%d sector %d to window %d (awi:%d)", sqi, task.Sector.ID.Number, wnd, i) - if !windows[wnd].Allocated.CanHandleRequest(task.SealTask(), res, wid, "schedAssign", w.Info) { + if !windows[wnd].Allocated.CanHandleRequest(task.SchedId, task.SealTask(), res, wid, "schedAssign", w.Info) { continue } @@ -71,7 +71,7 @@ func SpreadWS(queued bool) func(sh *Scheduler, queueLen int, acceptableWindows [ "assigned", bestAssigned) workerAssigned[bestWid]++ - windows[selectedWindow].Allocated.Add(task.SealTask(), info.Resources, needRes) + windows[selectedWindow].Allocated.Add(task.SchedId, task.SealTask(), info.Resources, needRes) windows[selectedWindow].Todo = append(windows[selectedWindow].Todo, task) rmQueue = append(rmQueue, sqi) diff --git a/storage/sealer/sched_assigner_spread_tasks.go b/storage/sealer/sched_assigner_spread_tasks.go index 09cf98046..f98e7b745 100644 --- a/storage/sealer/sched_assigner_spread_tasks.go +++ b/storage/sealer/sched_assigner_spread_tasks.go @@ -41,7 +41,7 @@ func SpreadTasksWS(queued bool) func(sh *Scheduler, queueLen int, acceptableWind log.Debugf("SCHED try assign sqi:%d sector %d to window %d (awi:%d)", sqi, task.Sector.ID.Number, wnd, i) - if !windows[wnd].Allocated.CanHandleRequest(task.SealTask(), res, wid, "schedAssign", w.Info) { + if !windows[wnd].Allocated.CanHandleRequest(task.SchedId, task.SealTask(), res, wid, "schedAssign", w.Info) { continue } @@ -80,7 +80,7 @@ func SpreadTasksWS(queued bool) func(sh *Scheduler, queueLen int, acceptableWind "assigned", bestAssigned) workerAssigned[bestWid]++ - windows[selectedWindow].Allocated.Add(task.SealTask(), info.Resources, needRes) + windows[selectedWindow].Allocated.Add(task.SchedId, task.SealTask(), info.Resources, needRes) windows[selectedWindow].Todo = append(windows[selectedWindow].Todo, task) rmQueue = append(rmQueue, sqi) diff --git a/storage/sealer/sched_assigner_utilization.go b/storage/sealer/sched_assigner_utilization.go index 1e75d904a..c81c9f187 100644 --- a/storage/sealer/sched_assigner_utilization.go +++ b/storage/sealer/sched_assigner_utilization.go @@ -35,7 +35,7 @@ func LowestUtilizationWS(sh *Scheduler, queueLen int, acceptableWindows [][]int, log.Debugf("SCHED try assign sqi:%d sector %d to window %d (awi:%d)", sqi, task.Sector.ID.Number, wnd, i) // TODO: allow bigger windows - if !windows[wnd].Allocated.CanHandleRequest(task.SealTask(), res, wid, "schedAssign", w.Info) { + if !windows[wnd].Allocated.CanHandleRequest(task.SchedId, task.SealTask(), res, wid, "schedAssign", w.Info) { continue } @@ -82,7 +82,7 @@ func LowestUtilizationWS(sh *Scheduler, queueLen int, acceptableWindows [][]int, "worker", bestWid, "utilization", bestUtilization) - workerUtil[bestWid] += windows[selectedWindow].Allocated.Add(task.SealTask(), info.Resources, needRes) + workerUtil[bestWid] += windows[selectedWindow].Allocated.Add(task.SchedId, task.SealTask(), info.Resources, needRes) windows[selectedWindow].Todo = append(windows[selectedWindow].Todo, task) rmQueue = append(rmQueue, sqi) diff --git a/storage/sealer/sched_post.go b/storage/sealer/sched_post.go index 0e0c39768..c6bd81829 100644 --- a/storage/sealer/sched_post.go +++ b/storage/sealer/sched_post.go @@ -7,6 +7,7 @@ import ( "sync" "time" + "github.com/google/uuid" "github.com/hashicorp/go-multierror" "golang.org/x/xerrors" @@ -110,7 +111,7 @@ func (ps *poStScheduler) Schedule(ctx context.Context, primary bool, spt abi.Reg for i, selected := range candidates { worker := ps.workers[selected.id] - err := worker.active.withResources(selected.id, worker.Info, ps.postType.SealTask(spt), selected.res, &ps.lk, func() error { + err := worker.active.withResources(uuid.UUID{}, selected.id, worker.Info, ps.postType.SealTask(spt), selected.res, &ps.lk, func() error { ps.lk.Unlock() defer ps.lk.Lock() @@ -148,7 +149,7 @@ func (ps *poStScheduler) readyWorkers(spt abi.RegisteredSealProof) (bool, []cand continue } - if !wr.active.CanHandleRequest(ps.postType.SealTask(spt), needRes, wid, "post-readyWorkers", wr.Info) { + if !wr.active.CanHandleRequest(uuid.UUID{}, ps.postType.SealTask(spt), needRes, wid, "post-readyWorkers", wr.Info) { continue } diff --git a/storage/sealer/sched_resources.go b/storage/sealer/sched_resources.go index 597f36dbe..a423def9f 100644 --- a/storage/sealer/sched_resources.go +++ b/storage/sealer/sched_resources.go @@ -3,6 +3,8 @@ package sealer import ( "sync" + "github.com/google/uuid" + "github.com/filecoin-project/lotus/storage/sealer/sealtasks" "github.com/filecoin-project/lotus/storage/sealer/storiface" ) @@ -20,7 +22,7 @@ type ActiveResources struct { } type taskCounter struct { - taskCounters map[sealtasks.SealTaskType]int + taskCounters map[sealtasks.SealTaskType]map[uuid.UUID]int // this lock is technically redundant, as ActiveResources is always accessed // with the worker lock, but let's not panic if we ever change that @@ -29,34 +31,48 @@ type taskCounter struct { func newTaskCounter() *taskCounter { return &taskCounter{ - taskCounters: map[sealtasks.SealTaskType]int{}, + taskCounters: make(map[sealtasks.SealTaskType]map[uuid.UUID]int), } } -func (tc *taskCounter) Add(tt sealtasks.SealTaskType) { +func (tc *taskCounter) Add(tt sealtasks.SealTaskType, schedID uuid.UUID) { tc.lk.Lock() defer tc.lk.Unlock() - tc.taskCounters[tt]++ + tc.getUnlocked(tt)[schedID]++ } -func (tc *taskCounter) Free(tt sealtasks.SealTaskType) { +func (tc *taskCounter) Free(tt sealtasks.SealTaskType, schedID uuid.UUID) { tc.lk.Lock() defer tc.lk.Unlock() - tc.taskCounters[tt]-- + m := tc.getUnlocked(tt) + if m[schedID] <= 1 { + delete(m, schedID) + } else { + m[schedID]-- + } } -func (tc *taskCounter) Get(tt sealtasks.SealTaskType) int { - tc.lk.Lock() - defer tc.lk.Unlock() +func (tc *taskCounter) getUnlocked(tt sealtasks.SealTaskType) map[uuid.UUID]int { + if tc.taskCounters[tt] == nil { + tc.taskCounters[tt] = make(map[uuid.UUID]int) + } + return tc.taskCounters[tt] } +func (tc *taskCounter) Get(tt sealtasks.SealTaskType) map[uuid.UUID]int { + tc.lk.Lock() + defer tc.lk.Unlock() + + return tc.getUnlocked(tt) +} + func (tc *taskCounter) Sum() int { tc.lk.Lock() defer tc.lk.Unlock() sum := 0 for _, v := range tc.taskCounters { - sum += v + sum += len(v) } return sum } @@ -64,8 +80,8 @@ func (tc *taskCounter) Sum() int { func (tc *taskCounter) ForEach(cb func(tt sealtasks.SealTaskType, count int)) { tc.lk.Lock() defer tc.lk.Unlock() - for tt, count := range tc.taskCounters { - cb(tt, count) + for tt, v := range tc.taskCounters { + cb(tt, len(v)) } } @@ -75,8 +91,8 @@ func NewActiveResources(tc *taskCounter) *ActiveResources { } } -func (a *ActiveResources) withResources(id storiface.WorkerID, wr storiface.WorkerInfo, tt sealtasks.SealTaskType, r storiface.Resources, locker sync.Locker, cb func() error) error { - for !a.CanHandleRequest(tt, r, id, "withResources", wr) { +func (a *ActiveResources) withResources(schedID uuid.UUID, id storiface.WorkerID, wr storiface.WorkerInfo, tt sealtasks.SealTaskType, r storiface.Resources, locker sync.Locker, cb func() error) error { + for !a.CanHandleRequest(schedID, tt, r, id, "withResources", wr) { if a.cond == nil { a.cond = sync.NewCond(locker) } @@ -85,11 +101,11 @@ func (a *ActiveResources) withResources(id storiface.WorkerID, wr storiface.Work a.waiting-- } - a.Add(tt, wr.Resources, r) + a.Add(schedID, tt, wr.Resources, r) err := cb() - a.Free(tt, wr.Resources, r) + a.Free(schedID, tt, wr.Resources, r) return err } @@ -100,7 +116,7 @@ func (a *ActiveResources) hasWorkWaiting() bool { } // add task resources to ActiveResources and return utilization difference -func (a *ActiveResources) Add(tt sealtasks.SealTaskType, wr storiface.WorkerResources, r storiface.Resources) float64 { +func (a *ActiveResources) Add(schedID uuid.UUID, tt sealtasks.SealTaskType, wr storiface.WorkerResources, r storiface.Resources) float64 { startUtil := a.utilization(wr) if r.GPUUtilization > 0 { @@ -109,19 +125,19 @@ func (a *ActiveResources) Add(tt sealtasks.SealTaskType, wr storiface.WorkerReso a.cpuUse += r.Threads(wr.CPUs, len(wr.GPUs)) a.memUsedMin += r.MinMemory a.memUsedMax += r.MaxMemory - a.taskCounters.Add(tt) + a.taskCounters.Add(tt, schedID) return a.utilization(wr) - startUtil } -func (a *ActiveResources) Free(tt sealtasks.SealTaskType, wr storiface.WorkerResources, r storiface.Resources) { +func (a *ActiveResources) Free(schedID uuid.UUID, tt sealtasks.SealTaskType, wr storiface.WorkerResources, r storiface.Resources) { if r.GPUUtilization > 0 { a.gpuUsed -= r.GPUUtilization } a.cpuUse -= r.Threads(wr.CPUs, len(wr.GPUs)) a.memUsedMin -= r.MinMemory a.memUsedMax -= r.MaxMemory - a.taskCounters.Free(tt) + a.taskCounters.Free(tt, schedID) if a.cond != nil { a.cond.Broadcast() @@ -130,9 +146,10 @@ func (a *ActiveResources) Free(tt sealtasks.SealTaskType, wr storiface.WorkerRes // CanHandleRequest evaluates if the worker has enough available resources to // handle the request. -func (a *ActiveResources) CanHandleRequest(tt sealtasks.SealTaskType, needRes storiface.Resources, wid storiface.WorkerID, caller string, info storiface.WorkerInfo) bool { +func (a *ActiveResources) CanHandleRequest(schedID uuid.UUID, tt sealtasks.SealTaskType, needRes storiface.Resources, wid storiface.WorkerID, caller string, info storiface.WorkerInfo) bool { if needRes.MaxConcurrent > 0 { - if a.taskCounters.Get(tt) >= needRes.MaxConcurrent { + tasks := a.taskCounters.Get(tt) + if len(tasks) >= needRes.MaxConcurrent && (schedID == uuid.UUID{} || tasks[schedID] == 0) { log.Debugf("sched: not scheduling on worker %s for %s; at task limit tt=%s, curcount=%d", wid, caller, tt, a.taskCounters.Get(tt)) return false } @@ -226,7 +243,7 @@ func (a *ActiveResources) taskCount(tt *sealtasks.SealTaskType) int { return a.taskCounters.Sum() } - return a.taskCounters.Get(*tt) + return len(a.taskCounters.Get(*tt)) } func (wh *WorkerHandle) Utilization() float64 { diff --git a/storage/sealer/sched_test.go b/storage/sealer/sched_test.go index 07731e934..2e2b05ab2 100644 --- a/storage/sealer/sched_test.go +++ b/storage/sealer/sched_test.go @@ -698,7 +698,7 @@ func TestWindowCompact(t *testing.T) { TaskType: task, Sector: storiface.SectorRef{ProofType: spt}, }) - window.Allocated.Add(task.SealTask(spt), wh.Info.Resources, storiface.ResourceTable[task][spt]) + window.Allocated.Add(uuid.UUID{}, task.SealTask(spt), wh.Info.Resources, storiface.ResourceTable[task][spt]) } wh.activeWindows = append(wh.activeWindows, window) @@ -717,7 +717,7 @@ func TestWindowCompact(t *testing.T) { for ti, task := range tasks { require.Equal(t, task, wh.activeWindows[wi].Todo[ti].TaskType, "%d, %d", wi, ti) - expectRes.Add(task.SealTask(spt), wh.Info.Resources, storiface.ResourceTable[task][spt]) + expectRes.Add(uuid.UUID{}, task.SealTask(spt), wh.Info.Resources, storiface.ResourceTable[task][spt]) } require.Equal(t, expectRes.cpuUse, wh.activeWindows[wi].Allocated.cpuUse, "%d", wi) diff --git a/storage/sealer/sched_worker.go b/storage/sealer/sched_worker.go index b6efc851a..35acd755d 100644 --- a/storage/sealer/sched_worker.go +++ b/storage/sealer/sched_worker.go @@ -294,14 +294,14 @@ func (sw *schedWorker) workerCompactWindows() { for ti, todo := range window.Todo { needRes := worker.Info.Resources.ResourceSpec(todo.Sector.ProofType, todo.TaskType) - if !lower.Allocated.CanHandleRequest(todo.SealTask(), needRes, sw.wid, "compactWindows", worker.Info) { + if !lower.Allocated.CanHandleRequest(todo.SchedId, todo.SealTask(), needRes, sw.wid, "compactWindows", worker.Info) { continue } moved = append(moved, ti) lower.Todo = append(lower.Todo, todo) - lower.Allocated.Add(todo.SealTask(), worker.Info.Resources, needRes) - window.Allocated.Free(todo.SealTask(), worker.Info.Resources, needRes) + lower.Allocated.Add(todo.SchedId, todo.SealTask(), worker.Info.Resources, needRes) + window.Allocated.Free(todo.SchedId, todo.SealTask(), worker.Info.Resources, needRes) } if len(moved) > 0 { @@ -355,7 +355,7 @@ assignLoop: worker.lk.Lock() for t, todo := range firstWindow.Todo { needResPrep := worker.Info.Resources.PrepResourceSpec(todo.Sector.ProofType, todo.TaskType, todo.prepare.PrepType) - if worker.preparing.CanHandleRequest(todo.PrepSealTask(), needResPrep, sw.wid, "startPreparing", worker.Info) { + if worker.preparing.CanHandleRequest(todo.SchedId, todo.PrepSealTask(), needResPrep, sw.wid, "startPreparing", worker.Info) { tidx = t break } @@ -416,7 +416,7 @@ assignLoop: } needRes := worker.Info.Resources.ResourceSpec(todo.Sector.ProofType, todo.TaskType) - if worker.active.CanHandleRequest(todo.SealTask(), needRes, sw.wid, "startPreparing", worker.Info) { + if worker.active.CanHandleRequest(todo.SchedId, todo.SealTask(), needRes, sw.wid, "startPreparing", worker.Info) { tidx = t break } @@ -457,7 +457,7 @@ func (sw *schedWorker) startProcessingTask(req *WorkerRequest) error { needResPrep := w.Info.Resources.PrepResourceSpec(req.Sector.ProofType, req.TaskType, req.prepare.PrepType) w.lk.Lock() - w.preparing.Add(req.PrepSealTask(), w.Info.Resources, needResPrep) + w.preparing.Add(req.SchedId, req.PrepSealTask(), w.Info.Resources, needResPrep) w.lk.Unlock() go func() { @@ -468,7 +468,7 @@ func (sw *schedWorker) startProcessingTask(req *WorkerRequest) error { w.lk.Lock() if err != nil { - w.preparing.Free(req.PrepSealTask(), w.Info.Resources, needResPrep) + w.preparing.Free(req.SchedId, req.PrepSealTask(), w.Info.Resources, needResPrep) w.lk.Unlock() select { @@ -497,11 +497,12 @@ func (sw *schedWorker) startProcessingTask(req *WorkerRequest) error { }() // wait (if needed) for resources in the 'active' window - err = w.active.withResources(sw.wid, w.Info, req.SealTask(), needRes, &w.lk, func() error { - w.preparing.Free(req.PrepSealTask(), w.Info.Resources, needResPrep) + err = w.active.withResources(req.SchedId, sw.wid, w.Info, req.SealTask(), needRes, &w.lk, func() error { + w.preparing.Free(req.SchedId, req.PrepSealTask(), w.Info.Resources, needResPrep) w.lk.Unlock() defer w.lk.Lock() // we MUST return locked from this function + // make sure the worker loop sees that the prepare task has finished select { case sw.taskDone <- struct{}{}: case <-sh.closing: @@ -525,6 +526,12 @@ func (sw *schedWorker) startProcessingTask(req *WorkerRequest) error { w.lk.Unlock() + // make sure the worker loop sees that the task has finished + select { + case sw.taskDone <- struct{}{}: + default: // there is a notification pending already + } + // This error should always be nil, since nothing is setting it, but just to be safe: if err != nil { log.Errorf("error executing worker (withResources): %+v", err) @@ -539,7 +546,7 @@ func (sw *schedWorker) startProcessingReadyTask(req *WorkerRequest) error { needRes := w.Info.Resources.ResourceSpec(req.Sector.ProofType, req.TaskType) - w.active.Add(req.SealTask(), w.Info.Resources, needRes) + w.active.Add(req.SchedId, req.SealTask(), w.Info.Resources, needRes) go func() { // Do the work! @@ -557,7 +564,7 @@ func (sw *schedWorker) startProcessingReadyTask(req *WorkerRequest) error { w.lk.Lock() - w.active.Free(req.SealTask(), w.Info.Resources, needRes) + w.active.Free(req.SchedId, req.SealTask(), w.Info.Resources, needRes) select { case sw.taskDone <- struct{}{}: From 67df60f26f68fe6274a801b08b303e7b98620a16 Mon Sep 17 00:00:00 2001 From: Shrenuj Bansal Date: Wed, 10 May 2023 16:14:42 -0400 Subject: [PATCH 10/28] Changelog and build version for 1.23.1-rc2 --- CHANGELOG.md | 3 +++ build/openrpc/full.json.gz | Bin 33878 -> 33882 bytes build/openrpc/gateway.json.gz | Bin 9535 -> 9539 bytes build/openrpc/miner.json.gz | Bin 15941 -> 15944 bytes build/openrpc/worker.json.gz | Bin 5242 -> 5245 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 +- 9 files changed, 7 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4657fcd8c..6f383f1c8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,9 @@ # v1.23.1 / 2023-05-03 # What's changed + - fix: sched: Address GET_32G_MAX_CONCURRENT regression + - fix: cli: Hide legacy markets cmds + - fix: ci: Debugging m1 build - Update build version for release/v1.23.1 - Disable lotus markets by default (#10809) ([filecoin-project/lotus#10809](https://github.com/filecoin-project/lotus/pull/10809)) - perf: mempool: lower priority optimizations (#10693) ([filecoin-project/lotus#10693](https://github.com/filecoin-project/lotus/pull/10693)) diff --git a/build/openrpc/full.json.gz b/build/openrpc/full.json.gz index cb20e40cdc0013936788641a16f75cefa4d8de98..98df5d36bd3f8a3053a10576f9d0431e85f97ebc 100644 GIT binary patch literal 33882 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 literal 33878 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 diff --git a/build/openrpc/gateway.json.gz b/build/openrpc/gateway.json.gz index 938060588cfaa440fb62dfbe68f4afd35cc344f4..1857fae869bcadfe7a1fc01359a4d7474412d355 100644 GIT binary patch delta 9473 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 P=jRRC7{)mT6vY1lK+l#X delta 9447 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 delta 15940 zcmV-KKD)ule8qf_gnz(z>=|psR@Cy0qtD+A0@wVr_t-`z#bp1D$*B9rvRveOM$fR2 zXS˺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 diff --git a/build/openrpc/worker.json.gz b/build/openrpc/worker.json.gz index 182c07d52edea771cb27000b3f6c6c396e54c0ef..dcc7a526669f009c673bb7f29b2a0bea32b096f6 100644 GIT binary patch delta 5161 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 delta 5158 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 UzFq%+00030|4-66SE()m0D&F Date: Wed, 10 May 2023 16:25:05 -0400 Subject: [PATCH 11/28] update changelog --- CHANGELOG.md | 179 +++++++++++++++++++++++++++------------------------ 1 file changed, 96 insertions(+), 83 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6f383f1c8..146b7cb62 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,89 +1,102 @@ # Lotus changelog -# v1.23.1 / 2023-05-03 +# v1.23.1-rc2 / 2023-05-10 -# What's changed - - fix: sched: Address GET_32G_MAX_CONCURRENT regression - - fix: cli: Hide legacy markets cmds - - fix: ci: Debugging m1 build - - Update build version for release/v1.23.1 - - Disable lotus markets by default (#10809) ([filecoin-project/lotus#10809](https://github.com/filecoin-project/lotus/pull/10809)) - - perf: mempool: lower priority optimizations (#10693) ([filecoin-project/lotus#10693](https://github.com/filecoin-project/lotus/pull/10693)) - - Change args check ([filecoin-project/lotus#10812](https://github.com/filecoin-project/lotus/pull/10812)) - - chore: drop flaky TestBatchDealInput subcase ([filecoin-project/lotus#10810](https://github.com/filecoin-project/lotus/pull/10810)) - - fix: sealing: Make lotus-worker report GPU usage to miner during ReplicaUpdate task (#10806) ([filecoin-project/lotus#10806](https://github.com/filecoin-project/lotus/pull/10806)) - - fix:splitstore:Don't block when potentially holding txnLk as writer ([filecoin-project/lotus#10811](https://github.com/filecoin-project/lotus/pull/10811)) - - feat: worker: Ensure tempdir exists (#10433) ([filecoin-project/lotus#10433](https://github.com/filecoin-project/lotus/pull/10433)) - - feat: chainstore: batch writes of tipsets ([filecoin-project/lotus#10800](https://github.com/filecoin-project/lotus/pull/10800)) - - chore: changelog clean up ([filecoin-project/lotus#10744](https://github.com/filecoin-project/lotus/pull/10744)) - - chore: refactor: drop unused IsTicketWinner (#10801) ([filecoin-project/lotus#10801](https://github.com/filecoin-project/lotus/pull/10801)) - - Revert #9858 (consistent broadcast changes) ([filecoin-project/lotus#10777](https://github.com/filecoin-project/lotus/pull/10777)) - - chore: deps: update to FVM 3.3.1 ([filecoin-project/lotus#10786](https://github.com/filecoin-project/lotus/pull/10786)) - - Set default for MaxSectorProveCommitsSubmittedPerEpoch ([filecoin-project/lotus#10728](https://github.com/filecoin-project/lotus/pull/10728)) - - fix: deflake: use 2 miners for flaky tests ([filecoin-project/lotus#10764](https://github.com/filecoin-project/lotus/pull/10764)) - - fix: prover: Propagate skipped sectors in local PoSt - - test: eth: deflake multiblock lookup test (#10769) ([filecoin-project/lotus#10769](https://github.com/filecoin-project/lotus/pull/10769)) - - feat: sync: harden chain sync (#10756) ([filecoin-project/lotus#10756](https://github.com/filecoin-project/lotus/pull/10756)) - - fix: tvx: make extract-multiple support the FVM ([filecoin-project/lotus#10714](https://github.com/filecoin-project/lotus/pull/10714)) - - feat: badger: add a has check before writing to reduce duplicates ([filecoin-project/lotus#10680](https://github.com/filecoin-project/lotus/pull/10680)) - - fix: events: don't set GC confidence to 1 ([filecoin-project/lotus#10713](https://github.com/filecoin-project/lotus/pull/10713)) - - fix: sync: reduce log from error to info ([filecoin-project/lotus#10759](https://github.com/filecoin-project/lotus/pull/10759)) - - shed: migrations: add reminder about continuity testing tool ([filecoin-project/lotus#10762](https://github.com/filecoin-project/lotus/pull/10762)) - - fix: chain: record heaviest tipset before notifying (#10694) ([filecoin-project/lotus#10694](https://github.com/filecoin-project/lotus/pull/10694)) - - fix: sealing pipeline: Allow nil message in TerminateWait ([filecoin-project/lotus#10696](https://github.com/filecoin-project/lotus/pull/10696)) - - fix: storage: Remove temp fetching files after failed fetch ([filecoin-project/lotus#10661](https://github.com/filecoin-project/lotus/pull/10661)) - - feat: daemon: Auto-resume interrupted snapshot imports ([filecoin-project/lotus#10636](https://github.com/filecoin-project/lotus/pull/10636)) - - feat: shed: refactor market cron-state command ([filecoin-project/lotus#10746](https://github.com/filecoin-project/lotus/pull/10746)) - - fix: Eth JSON-RPC api: handle messages with gasFeeCap less than baseFee (#10614) ([filecoin-project/lotus#10614](https://github.com/filecoin-project/lotus/pull/10614)) - - chore: merge releases into master ([filecoin-project/lotus#10742](https://github.com/filecoin-project/lotus/pull/10742)) - - feat: sync: validate (early) that blocks fall within range (#10691) ([filecoin-project/lotus#10691](https://github.com/filecoin-project/lotus/pull/10691)) - - chainstore: Fix raw blocks getting scanned for links during snapshots (#10684) ([filecoin-project/lotus#10684](https://github.com/filecoin-project/lotus/pull/10684)) - - perf: Address performance of EthGetTransactionCount ([filecoin-project/lotus#10700](https://github.com/filecoin-project/lotus/pull/10700)) - - feat: sealing: Split PCA/PCB batches if gas used exceeds block limit ([filecoin-project/lotus#10647](https://github.com/filecoin-project/lotus/pull/10647)) - - fix: remove pointless panic ([filecoin-project/lotus#10690](https://github.com/filecoin-project/lotus/pull/10690)) - - chore: build: bump matser version to v1.23.1-dev ([filecoin-project/lotus#10709](https://github.com/filecoin-project/lotus/pull/10709)) - - chore: boxo: migrate from go-libipfs to boxo ([filecoin-project/lotus#10562](https://github.com/filecoin-project/lotus/pull/10562)) - - fix: unseal: check if sealed/update sector exists ([filecoin-project/lotus#10639](https://github.com/filecoin-project/lotus/pull/10639)) - - fix: check for nil bcastDict (#10646) ([filecoin-project/lotus#10646](https://github.com/filecoin-project/lotus/pull/10646)) - - Add API and CLI to unseal sector (#10626) ([filecoin-project/lotus#10626](https://github.com/filecoin-project/lotus/pull/10626)) - - test: events: fix race when recording tipsets (#10665) ([filecoin-project/lotus#10665](https://github.com/filecoin-project/lotus/pull/10665)) - - fix:mpool: prune excess messages before selection ([filecoin-project/lotus#10648](https://github.com/filecoin-project/lotus/pull/10648)) - - Update config default value (#10605) ([filecoin-project/lotus#10605](https://github.com/filecoin-project/lotus/pull/10605)) - - fix: cap the message gas limit at the block gas limit (#10637) ([filecoin-project/lotus#10637](https://github.com/filecoin-project/lotus/pull/10637)) - - fix: build: add CBDeliveryDelay to testground ([filecoin-project/lotus#10613](https://github.com/filecoin-project/lotus/pull/10613)) - - feat:splitstore:limit moving gc threads ([filecoin-project/lotus#10621](https://github.com/filecoin-project/lotus/pull/10621)) - - feat: chainstore: optimize BlockMsgsForTipset ([filecoin-project/lotus#10552](https://github.com/filecoin-project/lotus/pull/10552)) - - fix: make state compute --html work with unknown methods ([filecoin-project/lotus#10619](https://github.com/filecoin-project/lotus/pull/10619)) - - fix: cli: Check if the sectorID exists before removing ([filecoin-project/lotus#10611](https://github.com/filecoin-project/lotus/pull/10611)) - - Fixed incorrect words that could not be compiled ([filecoin-project/lotus#10610](https://github.com/filecoin-project/lotus/pull/10610)) - - Add feature to stagger sector prove commit submission (#10543) ([filecoin-project/lotus#10543](https://github.com/filecoin-project/lotus/pull/10543)) - - shed: get balances of evm accounts ([filecoin-project/lotus#10489](https://github.com/filecoin-project/lotus/pull/10489)) - - chore: deps: update to go-state-types v0.11.0-alpha-3 ([filecoin-project/lotus#10606](https://github.com/filecoin-project/lotus/pull/10606)) - - fix: cli: Make `net connect` to miner address work ([filecoin-project/lotus#10599](https://github.com/filecoin-project/lotus/pull/10599)) - - feat: VM Execution Lanes ([filecoin-project/lotus#10551](https://github.com/filecoin-project/lotus/pull/10551)) - - fix: log: Stop logging `file does not exists` ([filecoin-project/lotus#10588](https://github.com/filecoin-project/lotus/pull/10588)) - - perf: message pool: change locks to RWMutexes for performance ([filecoin-project/lotus#10561](https://github.com/filecoin-project/lotus/pull/10561)) - - fix: miner: correctly count sector extensions ([filecoin-project/lotus#10544](https://github.com/filecoin-project/lotus/pull/10544)) - - feat:networking: (Synchronous) Consistent Broadcast for Filecoin EC ([filecoin-project/lotus#9858](https://github.com/filecoin-project/lotus/pull/9858)) - - refactor: stop using deprecated io/ioutil ([filecoin-project/lotus#10596](https://github.com/filecoin-project/lotus/pull/10596)) - - feat: Use MessageIndex in WaitForMessage ([filecoin-project/lotus#10587](https://github.com/filecoin-project/lotus/pull/10587)) - - fix: searchForIndexedMsg always returns an error ([filecoin-project/lotus#10586](https://github.com/filecoin-project/lotus/pull/10586)) - - build: docker: Update GO-version ([filecoin-project/lotus#10581](https://github.com/filecoin-project/lotus/pull/10581)) - - fix: itests: Don't call t.Error in MineBlocks goroutine ([filecoin-project/lotus#10572](https://github.com/filecoin-project/lotus/pull/10572)) - - Fix: export-range: Ignore ipld Blocks not found in Receipts. ([filecoin-project/lotus#10535](https://github.com/filecoin-project/lotus/pull/10535)) - - feat: populate the index on snapshot import ([filecoin-project/lotus#10556](https://github.com/filecoin-project/lotus/pull/10556)) - - feat: Add small cache to execution traces ([filecoin-project/lotus#10517](https://github.com/filecoin-project/lotus/pull/10517)) - - docs: api: clarify MpoolClear params ([filecoin-project/lotus#10550](https://github.com/filecoin-project/lotus/pull/10550)) - - fix: proving: Initialize slice with with same length as partition ([filecoin-project/lotus#10569](https://github.com/filecoin-project/lotus/pull/10569)) - - perf: eth: gas estimate set applyTsMessages false (#10546) ([filecoin-project/lotus#10546](https://github.com/filecoin-project/lotus/pull/10546)) - - feat: shed: incoming block-sub chainwatch tool ([filecoin-project/lotus#10513](https://github.com/filecoin-project/lotus/pull/10513)) - - feat: stmgr: speed up calculation of genesis circ supply ([filecoin-project/lotus#10553](https://github.com/filecoin-project/lotus/pull/10553)) - - fix: gas estimation: don't special case paych collects ([filecoin-project/lotus#10549](https://github.com/filecoin-project/lotus/pull/10549)) - - fix: tracer: emit raw peer ids for compatibility with libp2p tracer ([filecoin-project/lotus#10271](https://github.com/filecoin-project/lotus/pull/10271)) - - fix: state: lotus-miner info should show deals info without admin permission ([filecoin-project/lotus#10323](https://github.com/filecoin-project/lotus/pull/10323)) - - Merge branch 'feat/new-gw-methods' - - chore: bump go-libipfs ([filecoin-project/lotus#10531](https://github.com/filecoin-project/lotus/pull/10531)) - - feat:chain: Message Index ([filecoin-project/lotus#10452](https://github.com/filecoin-project/lotus/pull/10452)) +This is the first release candidate of the upcoming optional feature release of Lotus v1.23.1. + +**☢️ Upgrade Warnings ☢️** + +- If you are upgrading to this release candidate from Lotus v1.22.1, please make sure to read the upgrade warnings section in the [v1.23.0 release first.](https://github.com/filecoin-project/lotus/releases/tag/v1.23.0) + +## New features + +- feat: daemon: Auto-resume interrupted snapshot imports ([filecoin-project/lotus#10636](https://github.com/filecoin-project/lotus/pull/10636)) +- feat: VM Execution Lanes ([filecoin-project/lotus#10551](https://github.com/filecoin-project/lotus/pull/10551)) +- feat: chainstore: batch writes of tipsets ([filecoin-project/lotus#10800](https://github.com/filecoin-project/lotus/pull/10800)) +- Add API and CLI to unseal sector (#10626) ([filecoin-project/lotus#10626](https://github.com/filecoin-project/lotus/pull/10626)) +- feat: sealing: Split PCA/PCB batches if gas used exceeds block limit ([filecoin-project/lotus#10647](https://github.com/filecoin-project/lotus/pull/10647)) +- Add feature to stagger sector prove commit submission (#10543) ([filecoin-project/lotus#10543](https://github.com/filecoin-project/lotus/pull/10543)) +- Set default for MaxSectorProveCommitsSubmittedPerEpoch ([filecoin-project/lotus#10728](https://github.com/filecoin-project/lotus/pull/10728)) +- fix: storage: Remove temp fetching files after failed fetch ([filecoin-project/lotus#10661](https://github.com/filecoin-project/lotus/pull/10661)) +- feat: worker: Ensure tempdir exists (#10433) ([filecoin-project/lotus#10433](https://github.com/filecoin-project/lotus/pull/10433)) +- feat: sync: harden chain sync (#10756) ([filecoin-project/lotus#10756](https://github.com/filecoin-project/lotus/pull/10756)) +- feat: populate the index on snapshot import ([filecoin-project/lotus#10556](https://github.com/filecoin-project/lotus/pull/10556)) +- feat:chain: Message Index ([filecoin-project/lotus#10452](https://github.com/filecoin-project/lotus/pull/10452)) +- feat: Add small cache to execution traces ([filecoin-project/lotus#10517](https://github.com/filecoin-project/lotus/pull/10517)) +- feat: shed: incoming block-sub chainwatch tool ([filecoin-project/lotus#10513](https://github.com/filecoin-project/lotus/pull/10513)) + +## Improvements +- fix: sched: Address GET_32G_MAX_CONCURRENT regression +- fix: cli: Hide legacy markets cmds +- fix: ci: Debugging m1 build +- Disable lotus markets by default (#10809) ([filecoin-project/lotus#10809](https://github.com/filecoin-project/lotus/pull/10809)) +- perf: mempool: lower priority optimizations (#10693) ([filecoin-project/lotus#10693](https://github.com/filecoin-project/lotus/pull/10693)) +- perf: message pool: change locks to RWMutexes for performance ([filecoin-project/lotus#10561](https://github.com/filecoin-project/lotus/pull/10561)) +- perf: eth: gas estimate set applyTsMessages false (#10546) ([filecoin-project/lotus#10546](https://github.com/filecoin-project/lotus/pull/10546)) +- Change args check ([filecoin-project/lotus#10812](https://github.com/filecoin-project/lotus/pull/10812)) +- fix: sealing: Make lotus-worker report GPU usage to miner during ReplicaUpdate task (#10806) ([filecoin-project/lotus#10806](https://github.com/filecoin-project/lotus/pull/10806)) +- fix:splitstore:Don't block when potentially holding txnLk as writer ([filecoin-project/lotus#10811](https://github.com/filecoin-project/lotus/pull/10811)) +- fix: prover: Propagate skipped sectors in local PoSt +- fix: unseal: check if sealed/update sector exists ([filecoin-project/lotus#10639](https://github.com/filecoin-project/lotus/pull/10639)) +- fix: sealing pipeline: Allow nil message in TerminateWait ([filecoin-project/lotus#10696](https://github.com/filecoin-project/lotus/pull/10696)) +- fix: cli: Check if the sectorID exists before removing ([filecoin-project/lotus#10611](https://github.com/filecoin-project/lotus/pull/10611)) +- feat:splitstore:limit moving gc threads ([filecoin-project/lotus#10621](https://github.com/filecoin-project/lotus/pull/10621)) +- fix: cli: Make `net connect` to miner address work ([filecoin-project/lotus#10599](https://github.com/filecoin-project/lotus/pull/10599)) +- fix: log: Stop logging `file does not exists` ([filecoin-project/lotus#10588](https://github.com/filecoin-project/lotus/pull/10588)) +- Update config default value (#10605) ([filecoin-project/lotus#10605](https://github.com/filecoin-project/lotus/pull/10605)) +- fix: cap the message gas limit at the block gas limit (#10637) ([filecoin-project/lotus#10637](https://github.com/filecoin-project/lotus/pull/10637)) +- fix: miner: correctly count sector extensions ([filecoin-project/lotus#10544](https://github.com/filecoin-project/lotus/pull/10544)) +- fix:mpool: prune excess messages before selection ([filecoin-project/lotus#10648](https://github.com/filecoin-project/lotus/pull/10648)) +- fix: proving: Initialize slice with with same length as partition ([filecoin-project/lotus#10569](https://github.com/filecoin-project/lotus/pull/10569)) +- perf: Address performance of EthGetTransactionCount ([filecoin-project/lotus#10700](https://github.com/filecoin-project/lotus/pull/10700)) +- fix: sync: reduce log from error to info ([filecoin-project/lotus#10759](https://github.com/filecoin-project/lotus/pull/10759)) +- fix: state: lotus-miner info should show deals info without admin permission ([filecoin-project/lotus#10323](https://github.com/filecoin-project/lotus/pull/10323)) +- fix: tvx: make extract-multiple support the FVM ([filecoin-project/lotus#10714](https://github.com/filecoin-project/lotus/pull/10714)) +- feat: badger: add a has check before writing to reduce duplicates ([filecoin-project/lotus#10680](https://github.com/filecoin-project/lotus/pull/10680)) +- fix: chain: record heaviest tipset before notifying (#10694) ([filecoin-project/lotus#10694](https://github.com/filecoin-project/lotus/pull/10694)) +- fix: Eth JSON-RPC api: handle messages with gasFeeCap less than baseFee (#10614) ([filecoin-project/lotus#10614](https://github.com/filecoin-project/lotus/pull/10614)) +- feat: chainstore: optimize BlockMsgsForTipset ([filecoin-project/lotus#10552](https://github.com/filecoin-project/lotus/pull/10552)) +- refactor: stop using deprecated io/ioutil ([filecoin-project/lotus#10596](https://github.com/filecoin-project/lotus/pull/10596)) +- feat: shed: refactor market cron-state command ([filecoin-project/lotus#10746](https://github.com/filecoin-project/lotus/pull/10746)) +- fix: events: don't set GC confidence to 1 ([filecoin-project/lotus#10713](https://github.com/filecoin-project/lotus/pull/10713)) +- feat: sync: validate (early) that blocks fall within range (#10691) ([filecoin-project/lotus#10691](https://github.com/filecoin-project/lotus/pull/10691)) +- chainstore: Fix raw blocks getting scanned for links during snapshots (#10684) ([filecoin-project/lotus#10684](https://github.com/filecoin-project/lotus/pull/10684)) +- fix: remove pointless panic ([filecoin-project/lotus#10690](https://github.com/filecoin-project/lotus/pull/10690)) +- fix: check for nil bcastDict (#10646) ([filecoin-project/lotus#10646](https://github.com/filecoin-project/lotus/pull/10646)) +- fix: make state compute --html work with unknown methods ([filecoin-project/lotus#10619](https://github.com/filecoin-project/lotus/pull/10619)) +- shed: get balances of evm accounts ([filecoin-project/lotus#10489](https://github.com/filecoin-project/lotus/pull/10489)) +- feat: Use MessageIndex in WaitForMessage ([filecoin-project/lotus#10587](https://github.com/filecoin-project/lotus/pull/10587)) +- fix: searchForIndexedMsg always returns an error ([filecoin-project/lotus#10586](https://github.com/filecoin-project/lotus/pull/10586)) +- Fix: export-range: Ignore ipld Blocks not found in Receipts. ([filecoin-project/lotus#10535](https://github.com/filecoin-project/lotus/pull/10535)) +- feat: stmgr: speed up calculation of genesis circ supply ([filecoin-project/lotus#10553](https://github.com/filecoin-project/lotus/pull/10553)) +- fix: gas estimation: don't special case paych collects ([filecoin-project/lotus#10549](https://github.com/filecoin-project/lotus/pull/10549)) +- fix: tracer: emit raw peer ids for compatibility with libp2p tracer ([filecoin-project/lotus#10271](https://github.com/filecoin-project/lotus/pull/10271)) +- Merge branch 'feat/new-gw-methods' + +## Dependencies +- chore: deps: update to FVM 3.3.1 ([filecoin-project/lotus#10786](https://github.com/filecoin-project/lotus/pull/10786)) +- chore: boxo: migrate from go-libipfs to boxo ([filecoin-project/lotus#10562](https://github.com/filecoin-project/lotus/pull/10562)) +- chore: deps: update to go-state-types v0.11.0-alpha-3 ([filecoin-project/lotus#10606](https://github.com/filecoin-project/lotus/pull/10606)) +- chore: bump go-libipfs ([filecoin-project/lotus#10531](https://github.com/filecoin-project/lotus/pull/10531)) + +## Others +- feat:networking: (Synchronous) Consistent Broadcast for Filecoin EC ([filecoin-project/lotus#9858](https://github.com/filecoin-project/lotus/pull/9858)) +- Revert #9858 (consistent broadcast changes) ([filecoin-project/lotus#10777](https://github.com/filecoin-project/lotus/pull/10777)) +- Update build version for release/v1.23.1 +- chore: drop flaky TestBatchDealInput subcase ([filecoin-project/lotus#10810](https://github.com/filecoin-project/lotus/pull/10810)) +- chore: changelog clean up ([filecoin-project/lotus#10744](https://github.com/filecoin-project/lotus/pull/10744)) +- chore: refactor: drop unused IsTicketWinner (#10801) ([filecoin-project/lotus#10801](https://github.com/filecoin-project/lotus/pull/10801)) +- chore: build: bump matser version to v1.23.1-dev ([filecoin-project/lotus#10709](https://github.com/filecoin-project/lotus/pull/10709)) +- fix: deflake: use 2 miners for flaky tests ([filecoin-project/lotus#10764](https://github.com/filecoin-project/lotus/pull/10764)) +- test: eth: deflake multiblock lookup test (#10769) ([filecoin-project/lotus#10769](https://github.com/filecoin-project/lotus/pull/10769)) +- shed: migrations: add reminder about continuity testing tool ([filecoin-project/lotus#10762](https://github.com/filecoin-project/lotus/pull/10762)) +- chore: merge releases into master ([filecoin-project/lotus#10742](https://github.com/filecoin-project/lotus/pull/10742)) +- test: events: fix race when recording tipsets (#10665) ([filecoin-project/lotus#10665](https://github.com/filecoin-project/lotus/pull/10665)) +- fix: build: add CBDeliveryDelay to testground ([filecoin-project/lotus#10613](https://github.com/filecoin-project/lotus/pull/10613)) +- fix: build: Fixed incorrect words that could not be compiled ([filecoin-project/lotus#10610](https://github.com/filecoin-project/lotus/pull/10610)) +- build: docker: Update GO-version ([filecoin-project/lotus#10581](https://github.com/filecoin-project/lotus/pull/10581)) +- fix: itests: Don't call t.Error in MineBlocks goroutine ([filecoin-project/lotus#10572](https://github.com/filecoin-project/lotus/pull/10572)) +- docs: api: clarify MpoolClear params ([filecoin-project/lotus#10550](https://github.com/filecoin-project/lotus/pull/10550)) Contributors From a509ca23ecd1e6141e7e0685171c9f12d3ebf4bc Mon Sep 17 00:00:00 2001 From: Shrenuj Bansal Date: Tue, 16 May 2023 21:19:03 -0400 Subject: [PATCH 12/28] Check if epoch is negative in GetTipsetByHeight --- chain/store/store.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/chain/store/store.go b/chain/store/store.go index d7188a7bf..eba212198 100644 --- a/chain/store/store.go +++ b/chain/store/store.go @@ -1149,6 +1149,10 @@ func (cs *ChainStore) TryFillTipSet(ctx context.Context, ts *types.TipSet) (*Ful // selects the tipset before the null round if true, and the tipset following // the null round if false. func (cs *ChainStore) GetTipsetByHeight(ctx context.Context, h abi.ChainEpoch, ts *types.TipSet, prev bool) (*types.TipSet, error) { + if h < 0 { + return nil, xerrors.Errorf("height %d is negative", h) + } + if ts == nil { ts = cs.GetHeaviestTipSet() } From b65c93b2b465e1c96ffd6a4554996acccf468ce1 Mon Sep 17 00:00:00 2001 From: Jakub Sztandera Date: Fri, 19 May 2023 19:43:56 +0200 Subject: [PATCH 13/28] feat: chainstore: sharded mutex for filling chain height index This PR introduces as sharded mutex within the ChainIndex#GetTipsetByHeight. It also replaces a go map with xsync.Map which doesn't require locking. The lock is taken when it appears that ChainIndex filling work should be started. After claiming the lock, the status of the cache is rechecked, if the entry is still missing, the fillCache is started. Thanks to @snissn and @arajasek for debugging and taking initial stabs at this. Supersedes #10866 and 10885 Signed-off-by: Jakub Sztandera --- chain/store/index.go | 44 ++++--- go.mod | 1 + go.sum | 2 + lib/shardedmutex/shardedmutex.go | 75 ++++++++++++ lib/shardedmutex/shardedmutex_test.go | 159 ++++++++++++++++++++++++++ 5 files changed, 266 insertions(+), 15 deletions(-) create mode 100644 lib/shardedmutex/shardedmutex.go create mode 100644 lib/shardedmutex/shardedmutex_test.go diff --git a/chain/store/index.go b/chain/store/index.go index 620cb2dee..5807a2705 100644 --- a/chain/store/index.go +++ b/chain/store/index.go @@ -2,18 +2,21 @@ package store import ( "context" + "hash/maphash" "os" "strconv" - "sync" + "github.com/puzpuzpuz/xsync/v2" "golang.org/x/xerrors" "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/lotus/chain/types" + "github.com/filecoin-project/lotus/lib/shardedmutex" ) -var DefaultChainIndexCacheSize = 32 << 15 +// DefaultChainIndexCacheSize no longer sets the maximum size, just the inital size of the map. +var DefaultChainIndexCacheSize = 1 << 15 func init() { if s := os.Getenv("LOTUS_CHAIN_INDEX_CACHE"); s != "" { @@ -27,8 +30,9 @@ func init() { } type ChainIndex struct { - indexCacheLk sync.Mutex - indexCache map[types.TipSetKey]*lbEntry + indexCache *xsync.MapOf[types.TipSetKey, *lbEntry] + + fillCacheLock shardedmutex.ShardedMutexFor[types.TipSetKey] loadTipSet loadTipSetFunc @@ -36,11 +40,16 @@ type ChainIndex struct { } type loadTipSetFunc func(context.Context, types.TipSetKey) (*types.TipSet, error) +func maphashTSK(s maphash.Seed, tsk types.TipSetKey) uint64 { + return maphash.Bytes(s, tsk.Bytes()) +} + func NewChainIndex(lts loadTipSetFunc) *ChainIndex { return &ChainIndex{ - indexCache: make(map[types.TipSetKey]*lbEntry, DefaultChainIndexCacheSize), - loadTipSet: lts, - skipLength: 20, + indexCache: xsync.NewTypedMapOfPresized[types.TipSetKey, *lbEntry](maphashTSK, DefaultChainIndexCacheSize), + fillCacheLock: shardedmutex.NewFor(maphashTSK, 32), + loadTipSet: lts, + skipLength: 20, } } @@ -59,17 +68,23 @@ func (ci *ChainIndex) GetTipsetByHeight(ctx context.Context, from *types.TipSet, return nil, xerrors.Errorf("failed to round down: %w", err) } - ci.indexCacheLk.Lock() - defer ci.indexCacheLk.Unlock() cur := rounded.Key() for { - lbe, ok := ci.indexCache[cur] + lbe, ok := ci.indexCache.Load(cur) // check the cache if !ok { - fc, err := ci.fillCache(ctx, cur) - if err != nil { - return nil, xerrors.Errorf("failed to fill cache: %w", err) + lk := ci.fillCacheLock.GetLock(cur) + lk.Lock() // if entry is missing, take the lock + lbe, ok = ci.indexCache.Load(cur) // check if someone else added it while we waited for lock + if !ok { + fc, err := ci.fillCache(ctx, cur) + if err != nil { + lk.Unlock() + return nil, xerrors.Errorf("failed to fill cache: %w", err) + } + lbe = fc + ci.indexCache.Store(cur, lbe) } - lbe = fc + lk.Unlock() } if to == lbe.targetHeight { @@ -137,7 +152,6 @@ func (ci *ChainIndex) fillCache(ctx context.Context, tsk types.TipSetKey) (*lbEn targetHeight: skipTarget.Height(), target: skipTarget.Key(), } - ci.indexCache[tsk] = lbe return lbe, nil } diff --git a/go.mod b/go.mod index d190323f2..f19c6d3ca 100644 --- a/go.mod +++ b/go.mod @@ -139,6 +139,7 @@ require ( github.com/open-rpc/meta-schema v0.0.0-20201029221707-1b72ef2ea333 github.com/polydawn/refmt v0.89.0 github.com/prometheus/client_golang v1.14.0 + github.com/puzpuzpuz/xsync/v2 v2.4.0 github.com/raulk/clock v1.1.0 github.com/raulk/go-watchdog v1.3.0 github.com/stretchr/testify v1.8.2 diff --git a/go.sum b/go.sum index 80dcf1433..0a423f8a9 100644 --- a/go.sum +++ b/go.sum @@ -1484,6 +1484,8 @@ github.com/prometheus/procfs v0.8.0 h1:ODq8ZFEaYeCaZOJlZZdJA2AbQR98dSHSM1KW/You5 github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4= github.com/prometheus/statsd_exporter v0.21.0 h1:hA05Q5RFeIjgwKIYEdFd59xu5Wwaznf33yKI+pyX6T8= github.com/prometheus/statsd_exporter v0.21.0/go.mod h1:rbT83sZq2V+p73lHhPZfMc3MLCHmSHelCh9hSGYNLTQ= +github.com/puzpuzpuz/xsync/v2 v2.4.0 h1:5sXAMHrtx1bg9nbRZTOn8T4MkWe5V+o8yKRH02Eznag= +github.com/puzpuzpuz/xsync/v2 v2.4.0/go.mod h1:gD2H2krq/w52MfPLE+Uy64TzJDVY7lP2znR9qmR35kU= github.com/quic-go/qpack v0.4.0 h1:Cr9BXA1sQS2SmDUWjSofMPNKmvF6IiIfDRmgU0w1ZCo= github.com/quic-go/qpack v0.4.0/go.mod h1:UZVnYIfi5GRk+zI9UMaCPsmZ2xKJP7XBUvVyT1Knj9A= github.com/quic-go/qtls-go1-19 v0.2.1 h1:aJcKNMkH5ASEJB9FXNeZCyTEIHU1J7MmHyz1Q1TSG1A= diff --git a/lib/shardedmutex/shardedmutex.go b/lib/shardedmutex/shardedmutex.go new file mode 100644 index 000000000..47b677f51 --- /dev/null +++ b/lib/shardedmutex/shardedmutex.go @@ -0,0 +1,75 @@ +package shardedmutex + +import ( + "hash/maphash" + "sync" +) + +const cacheline = 64 + +// padding a mutex to a cacheline improves performance as the cachelines are not contested +// name old time/op new time/op delta +// Locks-8 74.6ns ± 7% 12.3ns ± 2% -83.54% (p=0.000 n=20+18) +type paddedMutex struct { + mt sync.Mutex + pad [cacheline - 8]uint8 +} + +type ShardedMutex struct { + shards []paddedMutex +} + +// New creates a new ShardedMutex with N shards +func New(n_shards int) ShardedMutex { + if n_shards < 1 { + panic("n_shards cannot be less than 1") + } + return ShardedMutex{ + shards: make([]paddedMutex, n_shards), + } +} + +func (sm ShardedMutex) Shards() int { + return len(sm.shards) +} + +func (sm ShardedMutex) Lock(shard int) { + sm.shards[shard].mt.Lock() +} + +func (sm ShardedMutex) Unlock(shard int) { + sm.shards[shard].mt.Unlock() +} + +func (sm ShardedMutex) GetLock(shard int) sync.Locker { + return &sm.shards[shard].mt +} + +type ShardedMutexFor[K any] struct { + inner ShardedMutex + + hasher func(maphash.Seed, K) uint64 + seed maphash.Seed +} + +func NewFor[K any](hasher func(maphash.Seed, K) uint64, n_shards int) ShardedMutexFor[K] { + return ShardedMutexFor[K]{ + inner: New(n_shards), + hasher: hasher, + seed: maphash.MakeSeed(), + } +} + +func (sm ShardedMutexFor[K]) shardFor(key K) int { + return int(sm.hasher(sm.seed, key) % uint64(len(sm.inner.shards))) +} + +func (sm ShardedMutexFor[K]) Lock(key K) { + sm.inner.Lock(sm.shardFor(key)) +} +func (sm ShardedMutexFor[K]) Unlock(key K) { + sm.inner.Unlock(sm.shardFor(key)) +} +func (sm ShardedMutexFor[K]) GetLock(key K) sync.Locker { + return sm.inner.GetLock(sm.shardFor(key)) +} diff --git a/lib/shardedmutex/shardedmutex_test.go b/lib/shardedmutex/shardedmutex_test.go new file mode 100644 index 000000000..a7d5f7d1d --- /dev/null +++ b/lib/shardedmutex/shardedmutex_test.go @@ -0,0 +1,159 @@ +package shardedmutex + +import ( + "fmt" + "hash/maphash" + "runtime" + "sync" + "sync/atomic" + "testing" + "time" +) + +func TestLockingDifferentShardsDoesNotBlock(t *testing.T) { + shards := 16 + sm := New(shards) + done := make(chan struct{}) + go func() { + select { + case <-done: + return + case <-time.After(5 * time.Second): + panic("test locked up") + } + }() + for i := 0; i < shards; i++ { + sm.Lock(i) + } + + close(done) +} +func TestLockingSameShardsBlocks(t *testing.T) { + shards := 16 + sm := New(shards) + wg := sync.WaitGroup{} + wg.Add(shards) + ch := make(chan int, shards) + + for i := 0; i < shards; i++ { + go func(i int) { + if i != 15 { + sm.Lock(i) + } + wg.Done() + wg.Wait() + sm.Lock((15 + i) % shards) + ch <- i + sm.Unlock(i) + }(i) + } + + wg.Wait() + for i := 0; i < 2*shards; i++ { + runtime.Gosched() + } + for i := 0; i < shards; i++ { + if a := <-ch; a != i { + t.Errorf("got %d instead of %d", a, i) + } + } +} + +func TestShardedByString(t *testing.T) { + shards := 16 + sm := NewFor(maphash.String, shards) + + wg1 := sync.WaitGroup{} + wg1.Add(shards * 20) + wg2 := sync.WaitGroup{} + wg2.Add(shards * 20) + + active := atomic.Int32{} + max := atomic.Int32{} + + for i := 0; i < shards*20; i++ { + go func(i int) { + wg1.Done() + wg1.Wait() + sm.Lock(fmt.Sprintf("goroutine %d", i)) + activeNew := active.Add(1) + for { + curMax := max.Load() + if curMax >= activeNew { + break + } + if max.CompareAndSwap(curMax, activeNew) { + break + } + } + for j := 0; j < 100; j++ { + runtime.Gosched() + } + active.Add(-1) + sm.Unlock(fmt.Sprintf("goroutine %d", i)) + wg2.Done() + }(i) + } + + wg2.Wait() + + if max.Load() != 16 { + t.Fatal("max load not achieved", max.Load()) + } + +} + +func BenchmarkShardedMutex(b *testing.B) { + shards := 16 + sm := New(shards) + + done := atomic.Int32{} + go func() { + for { + sm.Lock(0) + sm.Unlock(0) + if done.Load() != 0 { + return + } + } + }() + for i := 0; i < 100; i++ { + runtime.Gosched() + } + + b.ResetTimer() + for i := 0; i < b.N; i++ { + sm.Lock(1) + sm.Unlock(1) + } + done.Add(1) +} + +func BenchmarkShardedMutexOf(b *testing.B) { + shards := 16 + sm := NewFor(maphash.String, shards) + + str1 := "string1" + str2 := "string2" + + done := atomic.Int32{} + go func() { + for { + sm.Lock(str1) + sm.Unlock(str1) + if done.Load() != 0 { + return + } + } + }() + for i := 0; i < 100; i++ { + runtime.Gosched() + } + + b.ResetTimer() + for i := 0; i < b.N; i++ { + sm.Lock(str2) + sm.Unlock(str2) + } + done.Add(1) +} From 80aa96ec25ef59a0cbd045e6be055a8598fd38e1 Mon Sep 17 00:00:00 2001 From: Jakub Sztandera Date: Fri, 19 May 2023 20:02:47 +0200 Subject: [PATCH 14/28] Appease the linter Signed-off-by: Jakub Sztandera --- chain/store/index.go | 2 +- lib/shardedmutex/shardedmutex.go | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/chain/store/index.go b/chain/store/index.go index 5807a2705..8361f4db9 100644 --- a/chain/store/index.go +++ b/chain/store/index.go @@ -15,7 +15,7 @@ import ( "github.com/filecoin-project/lotus/lib/shardedmutex" ) -// DefaultChainIndexCacheSize no longer sets the maximum size, just the inital size of the map. +// DefaultChainIndexCacheSize no longer sets the maximum size, just the initial size of the map. var DefaultChainIndexCacheSize = 1 << 15 func init() { diff --git a/lib/shardedmutex/shardedmutex.go b/lib/shardedmutex/shardedmutex.go index 47b677f51..922ac3994 100644 --- a/lib/shardedmutex/shardedmutex.go +++ b/lib/shardedmutex/shardedmutex.go @@ -20,12 +20,12 @@ type ShardedMutex struct { } // New creates a new ShardedMutex with N shards -func New(n_shards int) ShardedMutex { - if n_shards < 1 { +func New(nShards int) ShardedMutex { + if nShards < 1 { panic("n_shards cannot be less than 1") } return ShardedMutex{ - shards: make([]paddedMutex, n_shards), + shards: make([]paddedMutex, nShards), } } @@ -52,9 +52,9 @@ type ShardedMutexFor[K any] struct { seed maphash.Seed } -func NewFor[K any](hasher func(maphash.Seed, K) uint64, n_shards int) ShardedMutexFor[K] { +func NewFor[K any](hasher func(maphash.Seed, K) uint64, nShards int) ShardedMutexFor[K] { return ShardedMutexFor[K]{ - inner: New(n_shards), + inner: New(nShards), hasher: hasher, seed: maphash.MakeSeed(), } From 80d39f66163241ed457aadb25aa4cf01cdf9de24 Mon Sep 17 00:00:00 2001 From: Marten Seemann Date: Fri, 14 Apr 2023 14:57:21 +0200 Subject: [PATCH 15/28] chore: update go-libp2p to v0.27.1 --- api/api_net.go | 1 - cli/net.go | 3 - documentation/en/api-v0-methods-miner.md | 3 +- documentation/en/api-v0-methods.md | 3 +- documentation/en/api-v1-unstable-methods.md | 3 +- go.mod | 68 ++++----- go.sum | 157 +++++++++----------- node/impl/net/net.go | 14 +- 8 files changed, 111 insertions(+), 141 deletions(-) diff --git a/api/api_net.go b/api/api_net.go index 404c707b4..c1a8f8514 100644 --- a/api/api_net.go +++ b/api/api_net.go @@ -73,5 +73,4 @@ type CommonNet interface { type NatInfo struct { Reachability network.Reachability - PublicAddr string } diff --git a/cli/net.go b/cli/net.go index 2649791e7..1266bb923 100644 --- a/cli/net.go +++ b/cli/net.go @@ -445,9 +445,6 @@ var NetReachability = &cli.Command{ } fmt.Println("AutoNAT status: ", i.Reachability.String()) - if i.PublicAddr != "" { - fmt.Println("Public address: ", i.PublicAddr) - } return nil }, } diff --git a/documentation/en/api-v0-methods-miner.md b/documentation/en/api-v0-methods-miner.md index 4761a3eed..2be9e5891 100644 --- a/documentation/en/api-v0-methods-miner.md +++ b/documentation/en/api-v0-methods-miner.md @@ -1701,8 +1701,7 @@ Inputs: `null` Response: ```json { - "Reachability": 1, - "PublicAddr": "string value" + "Reachability": 1 } ``` diff --git a/documentation/en/api-v0-methods.md b/documentation/en/api-v0-methods.md index 95678782a..8c4db7f8f 100644 --- a/documentation/en/api-v0-methods.md +++ b/documentation/en/api-v0-methods.md @@ -3709,8 +3709,7 @@ Inputs: `null` Response: ```json { - "Reachability": 1, - "PublicAddr": "string value" + "Reachability": 1 } ``` diff --git a/documentation/en/api-v1-unstable-methods.md b/documentation/en/api-v1-unstable-methods.md index 73871ce50..bc158ea11 100644 --- a/documentation/en/api-v1-unstable-methods.md +++ b/documentation/en/api-v1-unstable-methods.md @@ -5021,8 +5021,7 @@ Inputs: `null` Response: ```json { - "Reachability": 1, - "PublicAddr": "string value" + "Reachability": 1 } ``` diff --git a/go.mod b/go.mod index f19c6d3ca..c84c6b70e 100644 --- a/go.mod +++ b/go.mod @@ -16,8 +16,8 @@ require ( github.com/acarl005/stripansi v0.0.0-20180116102854-5a71ef0e047d github.com/alecthomas/jsonschema v0.0.0-20200530073317-71f438968921 github.com/buger/goterm v1.0.3 - github.com/chzyer/readline v1.5.0 - github.com/containerd/cgroups v1.0.4 + github.com/chzyer/readline v1.5.1 + github.com/containerd/cgroups v1.1.0 github.com/coreos/go-systemd/v22 v22.5.0 github.com/detailyang/go-fallocate v0.0.0-20180908115635-432fa640bd2e github.com/dgraph-io/badger/v2 v2.2007.4 @@ -116,7 +116,7 @@ require ( github.com/kelseyhightower/envconfig v1.4.0 github.com/koalacxr/quantile v0.0.1 github.com/libp2p/go-buffer-pool v0.1.0 - github.com/libp2p/go-libp2p v0.26.3 + github.com/libp2p/go-libp2p v0.27.1 github.com/libp2p/go-libp2p-consensus v0.0.1 github.com/libp2p/go-libp2p-gorpc v0.5.0 github.com/libp2p/go-libp2p-kad-dht v0.21.1 @@ -126,14 +126,14 @@ require ( github.com/libp2p/go-libp2p-routing-helpers v0.4.0 github.com/libp2p/go-maddr-filter v0.1.0 github.com/libp2p/go-msgio v0.3.0 - github.com/mattn/go-isatty v0.0.17 + github.com/mattn/go-isatty v0.0.18 github.com/mattn/go-sqlite3 v1.14.16 github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 github.com/mitchellh/go-homedir v1.1.0 github.com/multiformats/go-base32 v0.1.0 - github.com/multiformats/go-multiaddr v0.8.0 + github.com/multiformats/go-multiaddr v0.9.0 github.com/multiformats/go-multiaddr-dns v0.3.1 - github.com/multiformats/go-multibase v0.1.1 + github.com/multiformats/go-multibase v0.2.0 github.com/multiformats/go-multihash v0.2.1 github.com/multiformats/go-varint v0.0.7 github.com/open-rpc/meta-schema v0.0.0-20201029221707-1b72ef2ea333 @@ -158,16 +158,16 @@ require ( go.opentelemetry.io/otel/exporters/jaeger v1.2.0 go.opentelemetry.io/otel/sdk v1.11.1 go.uber.org/atomic v1.10.0 - go.uber.org/fx v1.18.2 - go.uber.org/multierr v1.9.0 + go.uber.org/fx v1.19.2 + go.uber.org/multierr v1.11.0 go.uber.org/zap v1.24.0 - golang.org/x/crypto v0.6.0 - golang.org/x/exp v0.0.0-20230213192124-5e25df0256eb - golang.org/x/net v0.7.0 + golang.org/x/crypto v0.7.0 + golang.org/x/exp v0.0.0-20230321023759-10a507213a29 + golang.org/x/net v0.8.0 golang.org/x/sync v0.1.0 - golang.org/x/sys v0.6.0 + golang.org/x/sys v0.7.0 golang.org/x/time v0.0.0-20220722155302-e5dcc9cfc0b9 - golang.org/x/tools v0.3.0 + golang.org/x/tools v0.7.0 golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 gopkg.in/cheggaaa/pb.v1 v1.0.28 gotest.tools v2.2.0+incompatible @@ -179,7 +179,7 @@ require ( github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect github.com/StackExchange/wmi v1.2.1 // indirect github.com/akavel/rsrc v0.8.0 // indirect - github.com/alecthomas/units v0.0.0-20210927113745-59d0afb8317a // indirect + github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137 // indirect github.com/armon/go-metrics v0.3.9 // indirect github.com/benbjohnson/clock v1.3.0 // indirect github.com/beorn7/perks v1.0.1 // indirect @@ -187,7 +187,7 @@ require ( github.com/boltdb/bolt v1.3.1 // indirect github.com/cespare/xxhash v1.1.0 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect - github.com/cilium/ebpf v0.4.0 // indirect + github.com/cilium/ebpf v0.9.1 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect github.com/crackcomm/go-gitignore v0.0.0-20170627025303-887ab5e44cc3 // indirect github.com/cskr/pubsub v1.0.2 // indirect @@ -218,22 +218,22 @@ require ( github.com/go-openapi/jsonpointer v0.19.3 // indirect github.com/go-openapi/jsonreference v0.19.4 // indirect github.com/go-openapi/swag v0.19.11 // indirect - github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 // indirect + github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect github.com/godbus/dbus/v5 v5.1.0 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/golang/glog v1.0.0 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect - github.com/golang/protobuf v1.5.2 // indirect + github.com/golang/protobuf v1.5.3 // indirect github.com/golang/snappy v0.0.4 // indirect github.com/google/go-cmp v0.5.9 // indirect github.com/google/gopacket v1.1.19 // indirect - github.com/google/pprof v0.0.0-20221203041831-ce31453925ec // indirect + github.com/google/pprof v0.0.0-20230405160723-4a4c7d95572b // indirect github.com/hannahhoward/cbor-gen-for v0.0.0-20230214144701-5d17c9d5243c // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-immutable-radix v1.3.1 // indirect github.com/hashicorp/go-msgpack v0.5.5 // indirect github.com/hashicorp/golang-lru v0.6.0 // indirect - github.com/huin/goupnp v1.0.3 // indirect + github.com/huin/goupnp v1.1.0 // indirect github.com/iancoleman/orderedmap v0.1.0 // indirect github.com/ipfs/go-bitfield v1.1.0 // indirect github.com/ipfs/go-filestore v1.2.0 // indirect @@ -260,12 +260,12 @@ require ( github.com/josharian/intern v1.0.0 // indirect github.com/jpillora/backoff v1.0.0 // indirect github.com/kilic/bls12-381 v0.1.0 // indirect - github.com/klauspost/compress v1.15.12 // indirect - github.com/klauspost/cpuid/v2 v2.2.3 // indirect - github.com/koron/go-ssdp v0.0.3 // indirect + github.com/klauspost/compress v1.16.4 // indirect + github.com/klauspost/cpuid/v2 v2.2.4 // indirect + github.com/koron/go-ssdp v0.0.4 // indirect github.com/libp2p/go-cidranger v1.1.0 // indirect github.com/libp2p/go-flow-metrics v0.1.0 // indirect - github.com/libp2p/go-libp2p-asn-util v0.2.0 // indirect + github.com/libp2p/go-libp2p-asn-util v0.3.0 // indirect github.com/libp2p/go-libp2p-gostream v0.6.0 // indirect github.com/libp2p/go-libp2p-kbucket v0.5.0 // indirect github.com/libp2p/go-nat v0.1.0 // indirect @@ -279,7 +279,7 @@ require ( github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-runewidth v0.0.10 // indirect github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect - github.com/miekg/dns v1.1.50 // indirect + github.com/miekg/dns v1.1.53 // indirect github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b // indirect github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc // indirect github.com/minio/sha256-simd v1.0.0 // indirect @@ -290,7 +290,7 @@ require ( github.com/multiformats/go-multistream v0.4.1 // indirect github.com/nikkolasg/hexjson v0.1.0 // indirect github.com/nkovacs/streamquote v1.0.0 // indirect - github.com/onsi/ginkgo/v2 v2.5.1 // indirect + github.com/onsi/ginkgo/v2 v2.9.2 // indirect github.com/opencontainers/runtime-spec v1.0.2 // indirect github.com/opentracing/opentracing-go v1.2.0 // indirect github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 // indirect @@ -298,12 +298,12 @@ require ( github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/prometheus/client_model v0.3.0 // indirect - github.com/prometheus/common v0.37.0 // indirect - github.com/prometheus/procfs v0.8.0 // indirect + github.com/prometheus/common v0.42.0 // indirect + github.com/prometheus/procfs v0.9.0 // indirect github.com/prometheus/statsd_exporter v0.21.0 // indirect github.com/quic-go/qpack v0.4.0 // indirect - github.com/quic-go/qtls-go1-19 v0.2.1 // indirect - github.com/quic-go/qtls-go1-20 v0.1.1 // indirect + github.com/quic-go/qtls-go1-19 v0.3.2 // indirect + github.com/quic-go/qtls-go1-20 v0.2.2 // indirect github.com/quic-go/quic-go v0.33.0 // indirect github.com/quic-go/webtransport-go v0.5.2 // indirect github.com/rivo/uniseg v0.1.0 // indirect @@ -327,14 +327,14 @@ require ( go.opentelemetry.io/otel/metric v0.33.0 // indirect go.opentelemetry.io/otel/sdk/metric v0.33.0 // indirect go.opentelemetry.io/otel/trace v1.14.0 // indirect - go.uber.org/dig v1.15.0 // indirect + go.uber.org/dig v1.16.1 // indirect go4.org v0.0.0-20200411211856-f5505b9728dd // indirect - golang.org/x/mod v0.7.0 // indirect - golang.org/x/term v0.5.0 // indirect - golang.org/x/text v0.7.0 // indirect + golang.org/x/mod v0.10.0 // indirect + golang.org/x/term v0.6.0 // indirect + golang.org/x/text v0.8.0 // indirect google.golang.org/genproto v0.0.0-20210917145530-b395a37504d4 // indirect google.golang.org/grpc v1.45.0 // indirect - google.golang.org/protobuf v1.28.1 // indirect + google.golang.org/protobuf v1.30.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect howett.net/plist v0.0.0-20181124034731-591f970eefbb // indirect diff --git a/go.sum b/go.sum index 0a423f8a9..078aed73a 100644 --- a/go.sum +++ b/go.sum @@ -91,8 +91,8 @@ github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuy github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= -github.com/alecthomas/units v0.0.0-20210927113745-59d0afb8317a h1:E/8AP5dFtMhl5KPJz66Kt9G0n+7Sn41Fy1wv9/jHOrc= -github.com/alecthomas/units v0.0.0-20210927113745-59d0afb8317a/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE= +github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137 h1:s6gZFSlWYmbqAuRjVTiNNhvNRfY2Wxp9nhfyel4rklc= +github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE= github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= @@ -148,22 +148,21 @@ github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cheekybits/genny v1.0.0/go.mod h1:+tQajlRqAUrPI7DOSpB0XAqZYtQakVtB7wXkRAgjxjQ= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/logex v1.2.0 h1:+eqR0HfOetur4tgnC8ftU5imRnhi4te+BadWS95c5AM= -github.com/chzyer/logex v1.2.0/go.mod h1:9+9sk7u7pGNWYMkh0hdiL++6OeibzJccyQU4p4MedaY= +github.com/chzyer/logex v1.2.1 h1:XHDu3E6q+gdHgsdTPH6ImJMIp436vR6MPtH8gP05QzM= +github.com/chzyer/logex v1.2.1/go.mod h1:JLbx6lG2kDbNRFnfkgvh4eRJRPX1QCoOIWomwysCBrQ= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= -github.com/chzyer/readline v1.5.0 h1:lSwwFrbNviGePhkewF1az4oLmcwqCZijQ2/Wi3BGHAI= -github.com/chzyer/readline v1.5.0/go.mod h1:x22KAscuvRqlLoK9CsoYsmxoXZMMFVyOl86cAH8qUic= +github.com/chzyer/readline v1.5.1 h1:upd/6fQk4src78LMRzh5vItIt361/o4uq553V8B5sGI= +github.com/chzyer/readline v1.5.1/go.mod h1:Eh+b79XXUwfKfcPLepksvw2tcLE/Ct21YObkaSkeBlk= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/chzyer/test v0.0.0-20210722231415-061457976a23 h1:dZ0/VyGgQdVGAss6Ju0dt5P0QltE0SFY5Woh6hbIfiQ= -github.com/chzyer/test v0.0.0-20210722231415-061457976a23/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/chzyer/test v1.0.0 h1:p3BQDXSxOhOG0P9z6/hGnII4LGiEPOYBhs8asl/fC04= +github.com/chzyer/test v1.0.0/go.mod h1:2JlltgoNkt4TW/z9V/IzDdFaMTM2JPIi26O1pF38GC8= github.com/cilium/ebpf v0.2.0/go.mod h1:To2CFviqOWL/M0gIMsvSMlqe7em/l1ALkX1PyjrX2Qs= -github.com/cilium/ebpf v0.4.0 h1:QlHdikaxALkqWasW8hAC1mfR0jdmvbfaBdBPFmRSglA= -github.com/cilium/ebpf v0.4.0/go.mod h1:4tRaxcgiL706VnOzHOdBlY8IEAIdxINsQBcU4xJJXRs= +github.com/cilium/ebpf v0.9.1 h1:64sn2K3UKw8NbP/blsixRpF3nXuyhz/VjRlRzvlBRu4= +github.com/cilium/ebpf v0.9.1/go.mod h1:+OhNOIXx/Fnu1IE8bJz2dzOA+VSfyTfdNUVdlQnxUFY= github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= @@ -179,8 +178,8 @@ github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:z github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= github.com/codegangsta/cli v1.20.0/go.mod h1:/qJNoX69yVSKu5o4jLyXAENLRyk1uhi7zkbQ3slBdOA= github.com/containerd/cgroups v0.0.0-20201119153540-4cbc285b3327/go.mod h1:ZJeTFisyysqgcCdecO57Dj79RfL0LNeGiFUqLYQRYLE= -github.com/containerd/cgroups v1.0.4 h1:jN/mbWBEaz+T1pi5OFtnkQ+8qnmEbAr1Oo1FRm5B0dA= -github.com/containerd/cgroups v1.0.4/go.mod h1:nLNQtsF7Sl2HxNebu77i1R0oDlhiTG+kO4JTrUzo6IA= +github.com/containerd/cgroups v1.1.0 h1:v8rEWFl6EoqHB+swVNjVoCJE8o3jX7e8nqBGPLaDFBM= +github.com/containerd/cgroups v1.1.0/go.mod h1:6ppBcbh/NOOUU+dMKrykgaBnK9lCIBxHqJDGwsa1mIw= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= @@ -413,7 +412,6 @@ github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2 github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= -github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU= github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= @@ -454,8 +452,8 @@ github.com/go-playground/validator/v10 v10.2.0 h1:KgJ0snyC2R9VXYN2rneOtQcw5aHQB1 github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 h1:p104kn46Q8WdvHunIJ9dAyjPVtrBPhSr3KT2yUst43I= -github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= +github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= +github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls= github.com/go-yaml/yaml v2.1.0+incompatible/go.mod h1:w2MrLa16VYP0jy6N7M5kHaCkaLENm+P+Tv+MfurjSw0= github.com/gobuffalo/envy v1.7.0/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI= github.com/gobuffalo/logger v1.0.0/go.mod h1:2zbswyIUa45I+c+FLXuWl9zSWEiVuthsk8ze5s8JvPs= @@ -517,8 +515,9 @@ github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QD github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= +github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= @@ -556,8 +555,8 @@ github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hf github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20221203041831-ce31453925ec h1:fR20TYVVwhK4O7r7y+McjRYyaTH6/vjwJOajE+XhlzM= -github.com/google/pprof v0.0.0-20221203041831-ce31453925ec/go.mod h1:dDKJzRmX4S37WGHujM7tX//fmj1uioxKzKxz3lo4HJo= +github.com/google/pprof v0.0.0-20230405160723-4a4c7d95572b h1:Qcx5LM0fSiks9uCyFZwDBUasd3lxd1RM0GYpL+Li5o4= +github.com/google/pprof v0.0.0-20230405160723-4a4c7d95572b/go.mod h1:79YE0hCXdHag9sBkw2o+N/YnZtTkXi0UT9Nnixa5eYk= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -650,8 +649,8 @@ github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/J github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= github.com/huin/goupnp v1.0.0/go.mod h1:n9v9KO1tAxYH82qOn+UTIFQDmx5n1Zxd/ClZDMX7Bnc= -github.com/huin/goupnp v1.0.3 h1:N8No57ls+MnjlB+JPiCVSOyy/ot7MJTqlo7rn+NYSqQ= -github.com/huin/goupnp v1.0.3/go.mod h1:ZxNlw5WqJj6wSsRK5+YfflQGXYfccj5VgQsMNixHM7Y= +github.com/huin/goupnp v1.1.0 h1:gEe0Dp/lZmPZiDFzJJaOfUpOvv2MKUkoBX8lDrn9vKU= +github.com/huin/goupnp v1.1.0/go.mod h1:gnGPsThkYa7bFi/KWmEysQRf48l2dvR5bxr2OFckNX8= github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3iZrZfqZzyLl6l7F3c6L1oWn7OICBi6o= github.com/iancoleman/orderedmap v0.0.0-20190318233801-ac98e3ecb4b0/go.mod h1:N0Wam8K1arqPXNWjMo21EXnBPOPp36vB07FNRdD2geA= github.com/iancoleman/orderedmap v0.1.0 h1:2orAxZBJsvimgEBmMWfXaFlzSG2fbQil5qzP3F6cCkg= @@ -929,7 +928,6 @@ github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/u github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= -github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/jtolds/gls v4.2.1+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= @@ -953,13 +951,13 @@ github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+o github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= -github.com/klauspost/compress v1.15.12 h1:YClS/PImqYbn+UILDnqxQCZ3RehC9N318SU3kElDUEM= -github.com/klauspost/compress v1.15.12/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= +github.com/klauspost/compress v1.16.4 h1:91KN02FnsOYhuunwU4ssRe8lc2JosWmizWa91B5v1PU= +github.com/klauspost/compress v1.16.4/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.0.6/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= -github.com/klauspost/cpuid/v2 v2.2.3 h1:sxCkb+qR91z4vsqw4vGGZlDgPz3G7gjaLyK3V8y70BU= -github.com/klauspost/cpuid/v2 v2.2.3/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= +github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZXnvk= +github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= github.com/koalacxr/quantile v0.0.1 h1:wAW+SQ286Erny9wOjVww96t8ws+x5Zj6AKHDULUK+o0= github.com/koalacxr/quantile v0.0.1/go.mod h1:bGN/mCZLZ4lrSDHRQ6Lglj9chowGux8sGUIND+DQeD0= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= @@ -967,8 +965,8 @@ github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxv github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/koron/go-ssdp v0.0.0-20180514024734-4a0ed625a78b/go.mod h1:5Ky9EC2xfoUKUor0Hjgi2BJhCSXJfMOFlmyYrVKGQMk= github.com/koron/go-ssdp v0.0.0-20191105050749-2e1c40ed0b5d/go.mod h1:5Ky9EC2xfoUKUor0Hjgi2BJhCSXJfMOFlmyYrVKGQMk= -github.com/koron/go-ssdp v0.0.3 h1:JivLMY45N76b4p/vsWGOKewBQu6uf39y8l+AQ7sDKx8= -github.com/koron/go-ssdp v0.0.3/go.mod h1:b2MxI6yh02pKrsyNoQUsk4+YNikaGhe4894J+Q5lDvA= +github.com/koron/go-ssdp v0.0.4 h1:1IDwrghSKYM7yLf7XCzbByg2sJ/JcNOZRXS2jczTwz0= +github.com/koron/go-ssdp v0.0.4/go.mod h1:oDXq+E5IL5q0U8uSBcoAXzTzInwy5lEgC91HoKtbmZk= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= @@ -1007,10 +1005,10 @@ github.com/libp2p/go-libp2p v0.7.0/go.mod h1:hZJf8txWeCduQRDC/WSqBGMxaTHCOYHt2xS github.com/libp2p/go-libp2p v0.7.4/go.mod h1:oXsBlTLF1q7pxr+9w6lqzS1ILpyHsaBPniVO7zIHGMw= github.com/libp2p/go-libp2p v0.8.1/go.mod h1:QRNH9pwdbEBpx5DTJYg+qxcVaDMAz3Ee/qDKwXujH5o= github.com/libp2p/go-libp2p v0.14.3/go.mod h1:d12V4PdKbpL0T1/gsUNN8DfgMuRPDX8bS2QxCZlwRH0= -github.com/libp2p/go-libp2p v0.26.3 h1:6g/psubqwdaBqNNoidbRKSTBEYgaOuKBhHl8Q5tO+PM= -github.com/libp2p/go-libp2p v0.26.3/go.mod h1:x75BN32YbwuY0Awm2Uix4d4KOz+/4piInkp4Wr3yOo8= -github.com/libp2p/go-libp2p-asn-util v0.2.0 h1:rg3+Os8jbnO5DxkC7K/Utdi+DkY3q/d1/1q+8WeNAsw= -github.com/libp2p/go-libp2p-asn-util v0.2.0/go.mod h1:WoaWxbHKBymSN41hWSq/lGKJEca7TNm58+gGJi2WsLI= +github.com/libp2p/go-libp2p v0.27.1 h1:k1u6RHsX3hqKnslDjsSgLNURxJ3O1atIZCY4gpMbbus= +github.com/libp2p/go-libp2p v0.27.1/go.mod h1:FAvvfQa/YOShUYdiSS03IR9OXzkcJXwcNA2FUCh9ImE= +github.com/libp2p/go-libp2p-asn-util v0.3.0 h1:gMDcMyYiZKkocGXDQ5nsUQyquC9+H+iLEQHwOCZ7s8s= +github.com/libp2p/go-libp2p-asn-util v0.3.0/go.mod h1:B1mcOrKUE35Xq/ASTmQ4tN3LNzVVaMNmq2NACuqyB9w= github.com/libp2p/go-libp2p-autonat v0.1.0/go.mod h1:1tLf2yXxiE/oKGtDwPYWTSYG3PtvYlJmg7NeVtPRqH8= github.com/libp2p/go-libp2p-autonat v0.1.1/go.mod h1:OXqkeGOY2xJVWKAGV2inNF5aKN/djNA3fdpCWloIudE= github.com/libp2p/go-libp2p-autonat v0.2.0/go.mod h1:DX+9teU4pEEoZUqR1PiMlqliONQdNbfzE1C718tcViI= @@ -1229,8 +1227,8 @@ github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Ky github.com/mattn/go-isatty v0.0.13/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= -github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng= -github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.18 h1:DOKFKCQ7FNG2L1rbrmstDN4QVRdS89Nkh85u68Uwp98= +github.com/mattn/go-isatty v0.0.18/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.10 h1:CoZ3S2P7pvtP45xOtBw+/mDL2z0RKI576gSkzRRpdGg= @@ -1246,8 +1244,8 @@ github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3N github.com/miekg/dns v1.1.12/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/miekg/dns v1.1.28/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM= github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= -github.com/miekg/dns v1.1.50 h1:DQUfb9uc6smULcREF09Uc+/Gd46YWqJd5DbpPE9xkcA= -github.com/miekg/dns v1.1.50/go.mod h1:e3IlAVfNqAllflbibAZEWOXOQ+Ynzk/dDozDxY7XnME= +github.com/miekg/dns v1.1.53 h1:ZBkuHr5dxHtB1caEOlZTLPo7D3L3TWckgUUs/RHfDxw= +github.com/miekg/dns v1.1.53/go.mod h1:uInx36IzPl7FYnDcMeVWxj9byh7DutNykX4G9Sj60FY= github.com/mikioh/tcp v0.0.0-20190314235350-803a9b46060c h1:bzE/A84HN25pxAuk9Eej1Kz9OUelF97nAc82bDquQI8= github.com/mikioh/tcp v0.0.0-20190314235350-803a9b46060c/go.mod h1:0SQS9kMwD2VsyFEB++InYyBJroV/FRmBgcydeSUcJms= github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b h1:z78hV3sbSMAUoyUMM0I83AUIT6Hu17AWfgjzIbtrYFc= @@ -1278,7 +1276,6 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= -github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/mr-tron/base58 v1.1.0/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8= github.com/mr-tron/base58 v1.1.1/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8= github.com/mr-tron/base58 v1.1.2/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= @@ -1303,8 +1300,8 @@ github.com/multiformats/go-multiaddr v0.2.2/go.mod h1:NtfXiOtHvghW9KojvtySjH5y0u github.com/multiformats/go-multiaddr v0.3.0/go.mod h1:dF9kph9wfJ+3VLAaeBqo9Of8x4fJxp6ggJGteB8HQTI= 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.8.0 h1:aqjksEcqK+iD/Foe1RRFsGZh8+XFiGo7FgUCZlpv3LU= -github.com/multiformats/go-multiaddr v0.8.0/go.mod h1:Fs50eBDWvZu+l3/9S6xAE7ZYj6yhxlvaVZjakWN7xRs= +github.com/multiformats/go-multiaddr v0.9.0 h1:3h4V1LHIk5w4hJHekMKWALPXErDfz/sggzwC/NcqbDQ= +github.com/multiformats/go-multiaddr v0.9.0/go.mod h1:mI67Lb1EeTOYb8GQfL/7wpIZwc46ElrvzhYnoJOmTT0= 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.2.0/go.mod h1:TJ5pr5bBO7Y1B18djPuRsVkduhQH2YqYSbxWJzYGdK0= @@ -1323,8 +1320,8 @@ github.com/multiformats/go-multiaddr-net v0.1.5/go.mod h1:ilNnaM9HbmVFqsb/qcNysj github.com/multiformats/go-multiaddr-net v0.2.0/go.mod h1:gGdH3UXny6U3cKKYCvpXI5rnK7YaOIEOPVDI9tsJbEA= github.com/multiformats/go-multibase v0.0.1/go.mod h1:bja2MqRZ3ggyXtZSEDKpl0uO/gviWFaSteVbWT51qgs= github.com/multiformats/go-multibase v0.0.3/go.mod h1:5+1R4eQrT3PkYZ24C3W2Ue2tPwIdYQD509ZjSb5y9Oc= -github.com/multiformats/go-multibase v0.1.1 h1:3ASCDsuLX8+j4kx58qnJ4YFq/JWTJpCyDW27ztsVTOI= -github.com/multiformats/go-multibase v0.1.1/go.mod h1:ZEjHE+IsUrgp5mhlEAYjMtZwK1k4haNkcaPg9aoe1a8= +github.com/multiformats/go-multibase v0.2.0 h1:isdYCVLvksgWlMW9OZRYJEa9pZETFivncJHmHnnd87g= +github.com/multiformats/go-multibase v0.2.0/go.mod h1:bFBZX4lKCA/2lyOFSAoKH5SS6oPyjtnzK/XTFDPkNuk= github.com/multiformats/go-multicodec v0.3.0/go.mod h1:qGGaQmioCDh+TeFOnxrbU0DaIPw8yFgAZgFG0V7p1qQ= github.com/multiformats/go-multicodec v0.3.1-0.20210902112759-1539a079fd61/go.mod h1:1Hj/eHRaVWSXiSNNfcEPcwZleTmdNP81xlxDLnWU9GQ= github.com/multiformats/go-multicodec v0.6.0/go.mod h1:GUC8upxSBE4oG+q3kWZRw/+6yC1BqO550bjhWsJbZlw= @@ -1381,15 +1378,15 @@ github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0 github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= -github.com/onsi/ginkgo/v2 v2.5.1 h1:auzK7OI497k6x4OvWq+TKAcpcSAlod0doAH72oIN0Jw= -github.com/onsi/ginkgo/v2 v2.5.1/go.mod h1:63DOGlLAH8+REH8jUGdL3YpCpu7JODesutUjdENfUAc= +github.com/onsi/ginkgo/v2 v2.9.2 h1:BA2GMJOtfGAfagzYtrAlufIP0lq6QERkFmHLMLPwFSU= +github.com/onsi/ginkgo/v2 v2.9.2/go.mod h1:WHcJJG2dIlcCqVfBAwUCrJxSPFb6v4azBwgxeMeDuts= github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.9.0/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.24.0 h1:+0glovB9Jd6z3VR+ScSwQqXVTIfJcGA9UBM8yzQxhqg= +github.com/onsi/gomega v1.27.4 h1:Z2AnStgsdSayCMDiCU42qIz+HLqEPcgiOCXjAU/w+8E= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= github.com/open-rpc/meta-schema v0.0.0-20201029221707-1b72ef2ea333 h1:CznVS40zms0Dj5he4ERo+fRPtO0qxUk8lA8Xu3ddet0= github.com/open-rpc/meta-schema v0.0.0-20201029221707-1b72ef2ea333/go.mod h1:Ag6rSXkHIckQmjFBCweJEEt1mrTPBv8b9W4aU/NQWfI= @@ -1446,7 +1443,6 @@ github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3O github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= github.com/prometheus/client_golang v1.10.0/go.mod h1:WJM3cc3yu7XKBKa/I8WeZm+V3eltZnBwfENSU7mdogU= github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= -github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= github.com/prometheus/client_golang v1.14.0 h1:nJdhIvne2eSX/XRAFV9PcvFFRbrjbcTUj0VP62TMhnw= github.com/prometheus/client_golang v1.14.0/go.mod h1:8vpkKitgIVNcqrRBWh1C4TIUQgYNtG/XQE4E/Zae36Y= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= @@ -1467,9 +1463,8 @@ github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB8 github.com/prometheus/common v0.18.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= github.com/prometheus/common v0.28.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= -github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= -github.com/prometheus/common v0.37.0 h1:ccBbHCgIiT9uSoFY0vX8H3zsNR5eLt17/RQLUvn8pXE= -github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= +github.com/prometheus/common v0.42.0 h1:EKsfXEYo4JpWMHH5cg+KOUWeuJSov1Id8zGR8eeI1YM= +github.com/prometheus/common v0.42.0/go.mod h1:xBwqVerjNdUDjgODMpudtOMwlOwf2SaTr1yjz4b7Zbc= github.com/prometheus/procfs v0.0.0-20180725123919-05ee40e3a273/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20181204211112-1dc9a6cbc91a/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= @@ -1479,19 +1474,18 @@ github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsT github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.8.0 h1:ODq8ZFEaYeCaZOJlZZdJA2AbQR98dSHSM1KW/You5mo= -github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4= +github.com/prometheus/procfs v0.9.0 h1:wzCHvIvM5SxWqYvwgVL7yJY8Lz3PKn49KQtpgMYJfhI= +github.com/prometheus/procfs v0.9.0/go.mod h1:+pB4zwohETzFnmlpe6yd2lSc+0/46IYZRB/chUwxUZY= github.com/prometheus/statsd_exporter v0.21.0 h1:hA05Q5RFeIjgwKIYEdFd59xu5Wwaznf33yKI+pyX6T8= github.com/prometheus/statsd_exporter v0.21.0/go.mod h1:rbT83sZq2V+p73lHhPZfMc3MLCHmSHelCh9hSGYNLTQ= github.com/puzpuzpuz/xsync/v2 v2.4.0 h1:5sXAMHrtx1bg9nbRZTOn8T4MkWe5V+o8yKRH02Eznag= github.com/puzpuzpuz/xsync/v2 v2.4.0/go.mod h1:gD2H2krq/w52MfPLE+Uy64TzJDVY7lP2znR9qmR35kU= github.com/quic-go/qpack v0.4.0 h1:Cr9BXA1sQS2SmDUWjSofMPNKmvF6IiIfDRmgU0w1ZCo= github.com/quic-go/qpack v0.4.0/go.mod h1:UZVnYIfi5GRk+zI9UMaCPsmZ2xKJP7XBUvVyT1Knj9A= -github.com/quic-go/qtls-go1-19 v0.2.1 h1:aJcKNMkH5ASEJB9FXNeZCyTEIHU1J7MmHyz1Q1TSG1A= -github.com/quic-go/qtls-go1-19 v0.2.1/go.mod h1:ySOI96ew8lnoKPtSqx2BlI5wCpUVPT05RMAlajtnyOI= -github.com/quic-go/qtls-go1-20 v0.1.1 h1:KbChDlg82d3IHqaj2bn6GfKRj84Per2VGf5XV3wSwQk= -github.com/quic-go/qtls-go1-20 v0.1.1/go.mod h1:JKtK6mjbAVcUTN/9jZpvLbGxvdWIKS8uT7EiStoU1SM= +github.com/quic-go/qtls-go1-19 v0.3.2 h1:tFxjCFcTQzK+oMxG6Zcvp4Dq8dx4yD3dDiIiyc86Z5U= +github.com/quic-go/qtls-go1-19 v0.3.2/go.mod h1:ySOI96ew8lnoKPtSqx2BlI5wCpUVPT05RMAlajtnyOI= +github.com/quic-go/qtls-go1-20 v0.2.2 h1:WLOPx6OY/hxtTxKV1Zrq20FtXtDEkeY00CGQm8GEa3E= +github.com/quic-go/qtls-go1-20 v0.2.2/go.mod h1:JKtK6mjbAVcUTN/9jZpvLbGxvdWIKS8uT7EiStoU1SM= github.com/quic-go/quic-go v0.33.0 h1:ItNoTDN/Fm/zBlq769lLJc8ECe9gYaW40veHCCco7y0= github.com/quic-go/quic-go v0.33.0/go.mod h1:YMuhaAV9/jIu0XclDXwZPAsP/2Kgr5yMYhe9oxhhOFA= github.com/quic-go/webtransport-go v0.5.2 h1:GA6Bl6oZY+g/flt00Pnu0XtivSD8vukOu3lYhJjnGEk= @@ -1768,10 +1762,10 @@ go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= -go.uber.org/dig v1.15.0 h1:vq3YWr8zRj1eFGC7Gvf907hE0eRjPTZ1d3xHadD6liE= -go.uber.org/dig v1.15.0/go.mod h1:pKHs0wMynzL6brANhB2hLMro+zalv1osARTviTcqHLM= -go.uber.org/fx v1.18.2 h1:bUNI6oShr+OVFQeU8cDNbnN7VFsu+SsjHzUF51V/GAU= -go.uber.org/fx v1.18.2/go.mod h1:g0V1KMQ66zIRk8bLu3Ea5Jt2w/cHlOIp4wdRsgh0JaY= +go.uber.org/dig v1.16.1 h1:+alNIBsl0qfY0j6epRubp/9obgtrObRAc5aD+6jbWY8= +go.uber.org/dig v1.16.1/go.mod h1:557JTAUZT5bUK0SvCwikmLPPtdQhfvLYtO5tJgQSbnk= +go.uber.org/fx v1.19.2 h1:SyFgYQFr1Wl0AYstE8vyYIzP4bFz2URrScjwC4cwUvY= +go.uber.org/fx v1.19.2/go.mod h1:43G1VcqSzbIv77y00p1DRAsyZS8WdzuYdhZXmEUkMyQ= go.uber.org/goleak v1.0.0/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/goleak v1.1.12 h1:gZAh5/EyT/HQwlpkCy6wTpqfH9H8Lz8zbm3dZh+OyzA= @@ -1781,8 +1775,8 @@ go.uber.org/multierr v1.4.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+ go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= go.uber.org/multierr v1.7.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= -go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI= -go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ= +go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= +go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= @@ -1835,8 +1829,8 @@ golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= -golang.org/x/crypto v0.6.0 h1:qfktjS5LUO+fFKeJXZ+ikTRijMmljikvG68fpMMruSc= -golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= +golang.org/x/crypto v0.7.0 h1:AvwMYaRytfdeVt3u6mLaxYtErKYjxA2OXjJ1HHq6t3A= +golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -1850,8 +1844,8 @@ golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EH golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= golang.org/x/exp v0.0.0-20210615023648-acb5c1269671/go.mod h1:DVyR6MI7P4kEQgvZJSj1fQGrWIi2RzIrfYWycwheUAc= golang.org/x/exp v0.0.0-20210714144626-1041f73d31d8/go.mod h1:DVyR6MI7P4kEQgvZJSj1fQGrWIi2RzIrfYWycwheUAc= -golang.org/x/exp v0.0.0-20230213192124-5e25df0256eb h1:PaBZQdo+iSDyHT053FjUCgZQ/9uqVwPOcl7KSWhKn6w= -golang.org/x/exp v0.0.0-20230213192124-5e25df0256eb/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= +golang.org/x/exp v0.0.0-20230321023759-10a507213a29 h1:ooxPy7fPvB4kwsA2h+iBNHkAbp/4JxTSwCmvdjEYmug= +golang.org/x/exp v0.0.0-20230321023759-10a507213a29/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -1878,8 +1872,8 @@ golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.7.0 h1:LapD9S96VoQRhi/GrNTqeBJFrUjs5UHCAtTlgwA5oZA= -golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.10.0 h1:lFO9qtOdlre5W1jxS3r/4szv2/6iXxScdzjoBMXNhYk= +golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1935,14 +1929,11 @@ golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLd golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210423184538-5f58ad60dda6/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210726213435-c6fcb2dbf985/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= -golang.org/x/net v0.7.0 h1:rJrUqqhjsgNp7KqAIc25s9pZnjU7TUcSY7HcVZjdn1g= -golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ= +golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -1951,7 +1942,6 @@ golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4Iltr golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= golang.org/x/perf v0.0.0-20180704124530-6e6d33e29852/go.mod h1:JLpeXjPJfIyPr5TlbXLkXWLhP8nz10XfvxElABhCtcw= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -2058,7 +2048,6 @@ golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220310020820-b874c991c1a5/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -2068,15 +2057,16 @@ golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.7.0 h1:3jlCCIQZPdOYu1h8BkNvLz8Kgwtae2cagcG/VamtZRU= +golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.5.0 h1:n2a8QNdAb0sZNpU9R1ALUXBbY+w51fCQDN+7EdxNBsY= -golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/term v0.6.0 h1:clScbb1cHjoCkyRbWwBEUZ5H/tIFu5TAXIqaZD0Gcjw= +golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -2086,8 +2076,8 @@ golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo= -golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.8.0 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68= +golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -2153,10 +2143,9 @@ golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4f golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.3.0 h1:SrNbZl6ECOS1qFzgTdQfWXZM9XBkiA6tkFrH9YSTPHM= -golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k= +golang.org/x/tools v0.7.0 h1:W4OVu8VVOaIO0yzWMNdepAulS7YfoS3Zabrm8DOXXU4= +golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -2268,8 +2257,8 @@ google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlba google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= -google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng= +google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/node/impl/net/net.go b/node/impl/net/net.go index 271c56ea5..5a7382ecc 100644 --- a/node/impl/net/net.go +++ b/node/impl/net/net.go @@ -143,19 +143,7 @@ func (a *NetAPI) NetAutoNatStatus(ctx context.Context) (i api.NatInfo, err error }, nil } - var maddr string - if autonat.Status() == network.ReachabilityPublic { - pa, err := autonat.PublicAddr() - if err != nil { - return api.NatInfo{}, err - } - maddr = pa.String() - } - - return api.NatInfo{ - Reachability: autonat.Status(), - PublicAddr: maddr, - }, nil + return api.NatInfo{Reachability: autonat.Status()}, nil } func (a *NetAPI) NetAgentVersion(ctx context.Context, p peer.ID) (string, error) { From 48365f4f08b3f4126ec40cdfa8a83073cc16d0bc Mon Sep 17 00:00:00 2001 From: Marten Seemann Date: Wed, 10 May 2023 11:52:55 +0300 Subject: [PATCH 16/28] return all the public addresses in NatInfo --- api/api_net.go | 1 + cli/net.go | 3 +++ documentation/en/api-v0-methods-miner.md | 5 ++++- documentation/en/api-v0-methods.md | 5 ++++- documentation/en/api-v1-unstable-methods.md | 5 ++++- node/impl/net/net.go | 17 +++++++++++++++-- 6 files changed, 31 insertions(+), 5 deletions(-) diff --git a/api/api_net.go b/api/api_net.go index c1a8f8514..cfcd8d87e 100644 --- a/api/api_net.go +++ b/api/api_net.go @@ -73,4 +73,5 @@ type CommonNet interface { type NatInfo struct { Reachability network.Reachability + PublicAddrs []string } diff --git a/cli/net.go b/cli/net.go index 1266bb923..516b44b7f 100644 --- a/cli/net.go +++ b/cli/net.go @@ -445,6 +445,9 @@ var NetReachability = &cli.Command{ } fmt.Println("AutoNAT status: ", i.Reachability.String()) + if len(i.PublicAddrs) > 0 { + fmt.Println("Public address:", i.PublicAddrs) + } return nil }, } diff --git a/documentation/en/api-v0-methods-miner.md b/documentation/en/api-v0-methods-miner.md index 2be9e5891..997778069 100644 --- a/documentation/en/api-v0-methods-miner.md +++ b/documentation/en/api-v0-methods-miner.md @@ -1701,7 +1701,10 @@ Inputs: `null` Response: ```json { - "Reachability": 1 + "Reachability": 1, + "PublicAddrs": [ + "string value" + ] } ``` diff --git a/documentation/en/api-v0-methods.md b/documentation/en/api-v0-methods.md index 8c4db7f8f..522e1a6de 100644 --- a/documentation/en/api-v0-methods.md +++ b/documentation/en/api-v0-methods.md @@ -3709,7 +3709,10 @@ Inputs: `null` Response: ```json { - "Reachability": 1 + "Reachability": 1, + "PublicAddrs": [ + "string value" + ] } ``` diff --git a/documentation/en/api-v1-unstable-methods.md b/documentation/en/api-v1-unstable-methods.md index bc158ea11..305592c6e 100644 --- a/documentation/en/api-v1-unstable-methods.md +++ b/documentation/en/api-v1-unstable-methods.md @@ -5021,7 +5021,10 @@ Inputs: `null` Response: ```json { - "Reachability": 1 + "Reachability": 1, + "PublicAddrs": [ + "string value" + ] } ``` diff --git a/node/impl/net/net.go b/node/impl/net/net.go index 5a7382ecc..5341092ce 100644 --- a/node/impl/net/net.go +++ b/node/impl/net/net.go @@ -16,6 +16,7 @@ import ( "github.com/libp2p/go-libp2p/p2p/net/swarm" "github.com/libp2p/go-libp2p/p2p/protocol/ping" ma "github.com/multiformats/go-multiaddr" + manet "github.com/multiformats/go-multiaddr/net" "go.uber.org/fx" "golang.org/x/xerrors" @@ -134,7 +135,7 @@ func (a *NetAPI) NetFindPeer(ctx context.Context, p peer.ID) (peer.AddrInfo, err return a.Router.FindPeer(ctx, p) } -func (a *NetAPI) NetAutoNatStatus(ctx context.Context) (i api.NatInfo, err error) { +func (a *NetAPI) NetAutoNatStatus(context.Context) (i api.NatInfo, err error) { autonat := a.RawHost.(*basichost.BasicHost).GetAutoNat() if autonat == nil { @@ -143,7 +144,19 @@ func (a *NetAPI) NetAutoNatStatus(ctx context.Context) (i api.NatInfo, err error }, nil } - return api.NatInfo{Reachability: autonat.Status()}, nil + var addrs []string + if autonat.Status() == network.ReachabilityPublic { + for _, addr := range a.Host.Addrs() { + if manet.IsPublicAddr(addr) { + addrs = append(addrs, addr.String()) + } + } + } + + return api.NatInfo{ + Reachability: autonat.Status(), + PublicAddrs: addrs, + }, nil } func (a *NetAPI) NetAgentVersion(ctx context.Context, p peer.ID) (string, error) { From 3a7b52a66f2924f456144f15081dd0705c171065 Mon Sep 17 00:00:00 2001 From: Marten Seemann Date: Wed, 10 May 2023 11:53:30 +0300 Subject: [PATCH 17/28] update go-libp2p to v0.27.3 --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index c84c6b70e..c842cb3d6 100644 --- a/go.mod +++ b/go.mod @@ -116,7 +116,7 @@ require ( github.com/kelseyhightower/envconfig v1.4.0 github.com/koalacxr/quantile v0.0.1 github.com/libp2p/go-buffer-pool v0.1.0 - github.com/libp2p/go-libp2p v0.27.1 + github.com/libp2p/go-libp2p v0.27.3 github.com/libp2p/go-libp2p-consensus v0.0.1 github.com/libp2p/go-libp2p-gorpc v0.5.0 github.com/libp2p/go-libp2p-kad-dht v0.21.1 diff --git a/go.sum b/go.sum index 078aed73a..e3aa2e68c 100644 --- a/go.sum +++ b/go.sum @@ -1005,8 +1005,8 @@ github.com/libp2p/go-libp2p v0.7.0/go.mod h1:hZJf8txWeCduQRDC/WSqBGMxaTHCOYHt2xS github.com/libp2p/go-libp2p v0.7.4/go.mod h1:oXsBlTLF1q7pxr+9w6lqzS1ILpyHsaBPniVO7zIHGMw= github.com/libp2p/go-libp2p v0.8.1/go.mod h1:QRNH9pwdbEBpx5DTJYg+qxcVaDMAz3Ee/qDKwXujH5o= github.com/libp2p/go-libp2p v0.14.3/go.mod h1:d12V4PdKbpL0T1/gsUNN8DfgMuRPDX8bS2QxCZlwRH0= -github.com/libp2p/go-libp2p v0.27.1 h1:k1u6RHsX3hqKnslDjsSgLNURxJ3O1atIZCY4gpMbbus= -github.com/libp2p/go-libp2p v0.27.1/go.mod h1:FAvvfQa/YOShUYdiSS03IR9OXzkcJXwcNA2FUCh9ImE= +github.com/libp2p/go-libp2p v0.27.3 h1:tkV/zm3KCZ4R5er9Xcs2pt0YNB4JH0iBfGAtHJdLHRs= +github.com/libp2p/go-libp2p v0.27.3/go.mod h1:FAvvfQa/YOShUYdiSS03IR9OXzkcJXwcNA2FUCh9ImE= github.com/libp2p/go-libp2p-asn-util v0.3.0 h1:gMDcMyYiZKkocGXDQ5nsUQyquC9+H+iLEQHwOCZ7s8s= github.com/libp2p/go-libp2p-asn-util v0.3.0/go.mod h1:B1mcOrKUE35Xq/ASTmQ4tN3LNzVVaMNmq2NACuqyB9w= github.com/libp2p/go-libp2p-autonat v0.1.0/go.mod h1:1tLf2yXxiE/oKGtDwPYWTSYG3PtvYlJmg7NeVtPRqH8= From 7831ec64d78eca0ba4a0ab4fb8a5274e33486aff Mon Sep 17 00:00:00 2001 From: jennijuju Date: Wed, 31 May 2023 14:31:02 -0400 Subject: [PATCH 18/28] update libp2p --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index c842cb3d6..f741698ab 100644 --- a/go.mod +++ b/go.mod @@ -116,7 +116,7 @@ require ( github.com/kelseyhightower/envconfig v1.4.0 github.com/koalacxr/quantile v0.0.1 github.com/libp2p/go-buffer-pool v0.1.0 - github.com/libp2p/go-libp2p v0.27.3 + github.com/libp2p/go-libp2p v0.27.4 github.com/libp2p/go-libp2p-consensus v0.0.1 github.com/libp2p/go-libp2p-gorpc v0.5.0 github.com/libp2p/go-libp2p-kad-dht v0.21.1 diff --git a/go.sum b/go.sum index e3aa2e68c..438f74e48 100644 --- a/go.sum +++ b/go.sum @@ -1005,8 +1005,8 @@ github.com/libp2p/go-libp2p v0.7.0/go.mod h1:hZJf8txWeCduQRDC/WSqBGMxaTHCOYHt2xS github.com/libp2p/go-libp2p v0.7.4/go.mod h1:oXsBlTLF1q7pxr+9w6lqzS1ILpyHsaBPniVO7zIHGMw= github.com/libp2p/go-libp2p v0.8.1/go.mod h1:QRNH9pwdbEBpx5DTJYg+qxcVaDMAz3Ee/qDKwXujH5o= github.com/libp2p/go-libp2p v0.14.3/go.mod h1:d12V4PdKbpL0T1/gsUNN8DfgMuRPDX8bS2QxCZlwRH0= -github.com/libp2p/go-libp2p v0.27.3 h1:tkV/zm3KCZ4R5er9Xcs2pt0YNB4JH0iBfGAtHJdLHRs= -github.com/libp2p/go-libp2p v0.27.3/go.mod h1:FAvvfQa/YOShUYdiSS03IR9OXzkcJXwcNA2FUCh9ImE= +github.com/libp2p/go-libp2p v0.27.4 h1:zliwN9xuzCBqCtWe0XjLKJGK6EIZTkp9L1e15wBpiOU= +github.com/libp2p/go-libp2p v0.27.4/go.mod h1:oMfQGTb9CHnrOuSM6yMmyK2lXz3qIhnkn2+oK3B1Y2g= github.com/libp2p/go-libp2p-asn-util v0.3.0 h1:gMDcMyYiZKkocGXDQ5nsUQyquC9+H+iLEQHwOCZ7s8s= github.com/libp2p/go-libp2p-asn-util v0.3.0/go.mod h1:B1mcOrKUE35Xq/ASTmQ4tN3LNzVVaMNmq2NACuqyB9w= github.com/libp2p/go-libp2p-autonat v0.1.0/go.mod h1:1tLf2yXxiE/oKGtDwPYWTSYG3PtvYlJmg7NeVtPRqH8= From a750f29a301bbca14857c43c598960fcf293e989 Mon Sep 17 00:00:00 2001 From: Shrenuj Bansal Date: Wed, 31 May 2023 16:23:48 -0400 Subject: [PATCH 19/28] Update changelog and build version --- CHANGELOG.md | 7 +++++-- build/openrpc/full.json.gz | Bin 33882 -> 33882 bytes build/openrpc/gateway.json.gz | Bin 9539 -> 9539 bytes build/openrpc/miner.json.gz | Bin 15944 -> 15944 bytes build/openrpc/worker.json.gz | Bin 5245 -> 5245 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 +- 9 files changed, 9 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 146b7cb62..5133d8807 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,8 @@ # Lotus changelog -# v1.23.1-rc2 / 2023-05-10 +# v1.23.1-rc3 / 2023-05-31 -This is the first release candidate of the upcoming optional feature release of Lotus v1.23.1. +This is the 3rd release candidate of the upcoming optional feature release of Lotus v1.23.1. **☢️ Upgrade Warnings ☢️** @@ -26,6 +26,8 @@ This is the first release candidate of the upcoming optional feature release of - feat: shed: incoming block-sub chainwatch tool ([filecoin-project/lotus#10513](https://github.com/filecoin-project/lotus/pull/10513)) ## Improvements +- feat: chainstore: sharded mutex for filling chain height index +- Check if epoch is negative in GetTipsetByHeight - fix: sched: Address GET_32G_MAX_CONCURRENT regression - fix: cli: Hide legacy markets cmds - fix: ci: Debugging m1 build @@ -74,6 +76,7 @@ This is the first release candidate of the upcoming optional feature release of - Merge branch 'feat/new-gw-methods' ## Dependencies +- devs: update libp2p #10937 - chore: deps: update to FVM 3.3.1 ([filecoin-project/lotus#10786](https://github.com/filecoin-project/lotus/pull/10786)) - chore: boxo: migrate from go-libipfs to boxo ([filecoin-project/lotus#10562](https://github.com/filecoin-project/lotus/pull/10562)) - chore: deps: update to go-state-types v0.11.0-alpha-3 ([filecoin-project/lotus#10606](https://github.com/filecoin-project/lotus/pull/10606)) diff --git a/build/openrpc/full.json.gz b/build/openrpc/full.json.gz index 98df5d36bd3f8a3053a10576f9d0431e85f97ebc..cea86aa2e113b2164cba60ebe09e89e111599397 100644 GIT binary patch delta 23 fcmccB!E~#GX+jUn0{W_$}d&Bg!#g&7Ki delta 23 fcmccB!E~#GX+jUPn>juS0041<2^# Date: Sat, 3 Jun 2023 10:09:17 -0400 Subject: [PATCH 20/28] chore: deps: update to go-libp2p 0.27.5 --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index f741698ab..9a42946df 100644 --- a/go.mod +++ b/go.mod @@ -116,7 +116,7 @@ require ( github.com/kelseyhightower/envconfig v1.4.0 github.com/koalacxr/quantile v0.0.1 github.com/libp2p/go-buffer-pool v0.1.0 - github.com/libp2p/go-libp2p v0.27.4 + github.com/libp2p/go-libp2p v0.27.5 github.com/libp2p/go-libp2p-consensus v0.0.1 github.com/libp2p/go-libp2p-gorpc v0.5.0 github.com/libp2p/go-libp2p-kad-dht v0.21.1 diff --git a/go.sum b/go.sum index 438f74e48..f794dab7f 100644 --- a/go.sum +++ b/go.sum @@ -1005,8 +1005,8 @@ github.com/libp2p/go-libp2p v0.7.0/go.mod h1:hZJf8txWeCduQRDC/WSqBGMxaTHCOYHt2xS github.com/libp2p/go-libp2p v0.7.4/go.mod h1:oXsBlTLF1q7pxr+9w6lqzS1ILpyHsaBPniVO7zIHGMw= github.com/libp2p/go-libp2p v0.8.1/go.mod h1:QRNH9pwdbEBpx5DTJYg+qxcVaDMAz3Ee/qDKwXujH5o= github.com/libp2p/go-libp2p v0.14.3/go.mod h1:d12V4PdKbpL0T1/gsUNN8DfgMuRPDX8bS2QxCZlwRH0= -github.com/libp2p/go-libp2p v0.27.4 h1:zliwN9xuzCBqCtWe0XjLKJGK6EIZTkp9L1e15wBpiOU= -github.com/libp2p/go-libp2p v0.27.4/go.mod h1:oMfQGTb9CHnrOuSM6yMmyK2lXz3qIhnkn2+oK3B1Y2g= +github.com/libp2p/go-libp2p v0.27.5 h1:KwA7pXKXpz8hG6Cr1fMA7UkgleogcwQj0sxl5qquWRg= +github.com/libp2p/go-libp2p v0.27.5/go.mod h1:oMfQGTb9CHnrOuSM6yMmyK2lXz3qIhnkn2+oK3B1Y2g= github.com/libp2p/go-libp2p-asn-util v0.3.0 h1:gMDcMyYiZKkocGXDQ5nsUQyquC9+H+iLEQHwOCZ7s8s= github.com/libp2p/go-libp2p-asn-util v0.3.0/go.mod h1:B1mcOrKUE35Xq/ASTmQ4tN3LNzVVaMNmq2NACuqyB9w= github.com/libp2p/go-libp2p-autonat v0.1.0/go.mod h1:1tLf2yXxiE/oKGtDwPYWTSYG3PtvYlJmg7NeVtPRqH8= From aa0237949e6914bbe5eae933d17644749e5c41af Mon Sep 17 00:00:00 2001 From: Shrenuj Bansal Date: Mon, 5 Jun 2023 16:18:23 -0500 Subject: [PATCH 21/28] chore: update build version and changelog for 1.23.1-rc4 --- CHANGELOG.md | 5 +++-- build/openrpc/full.json.gz | Bin 33882 -> 33882 bytes build/openrpc/gateway.json.gz | Bin 9539 -> 9538 bytes build/openrpc/miner.json.gz | Bin 15944 -> 15944 bytes build/openrpc/worker.json.gz | Bin 5245 -> 5245 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 +- 9 files changed, 7 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5133d8807..3105756a7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -76,11 +76,12 @@ This is the 3rd release candidate of the upcoming optional feature release of Lo - Merge branch 'feat/new-gw-methods' ## Dependencies +- chore: deps: update to go-libp2p 0.27.5 - devs: update libp2p #10937 - chore: deps: update to FVM 3.3.1 ([filecoin-project/lotus#10786](https://github.com/filecoin-project/lotus/pull/10786)) -- chore: boxo: migrate from go-libipfs to boxo ([filecoin-project/lotus#10562](https://github.com/filecoin-project/lotus/pull/10562)) +- chore: boxo: migrate from go-libipfs to boxo ([filecoin-project/lotus#10562](https://github.com/filecoin-project/lotus/pull/10562)) - chore: deps: update to go-state-types v0.11.0-alpha-3 ([filecoin-project/lotus#10606](https://github.com/filecoin-project/lotus/pull/10606)) -- chore: bump go-libipfs ([filecoin-project/lotus#10531](https://github.com/filecoin-project/lotus/pull/10531)) +- chore: bump go-libipfs ([filecoin-project/lotus#10531](https://github.com/filecoin-project/lotus/pull/10531)) ## Others - feat:networking: (Synchronous) Consistent Broadcast for Filecoin EC ([filecoin-project/lotus#9858](https://github.com/filecoin-project/lotus/pull/9858)) diff --git a/build/openrpc/full.json.gz b/build/openrpc/full.json.gz index cea86aa2e113b2164cba60ebe09e89e111599397..bc5faec9254b3eec98e6aefcf7a2c7620c2d20c7 100644 GIT binary patch literal 33882 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

9pYMvypNTO11jxj;} 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%0A!ZR!V5 zbG!9KHrH1**(=rZ_yF6gn;)PnfS-fuC?(mE#mHuHorDmrR@;a2=Ry3uSD4Fo!-xg$iY2DzvHku$!ez zS4uC#6VdPOTk`e};z$BWi}SJ^l|wL!*bp!jEOuX$I};aCpXaJEXTgtYFX}upf+n2_ z>|vIe`AYx5wAgC#oW{kUvlk|&Uta(CcKBb#yW1o;W|qG^c;S7k?8(NvQuDP;udlyc z-8k)$g7Sr_M=ciL=)G!j{Nb*x`KIe+)@tclKK(DG8#jH)lEYU@`}2~%w>|m%ckW)P z|4O#mA6mA=+E+N$Y_j_Ev2@F$q~gD(9pT)5+t(YnJSe@rTI1G2$H>k1=IlC{HS;0o zM)4^xIG8zuHyAx#!s}n^XsYyW)%(}SQeKAKdCC?uEB>i*oh#?}8~5V=0{In6SwM}%QSy{;sOZ7{qGt9U#*h`T;yxz_tCMZOVHAtG4bp zPmfESEi}5$ua{EB*?H@8V11L;hgYXm{*W?IApPg@><3}rZkZchdQ}d*FZqwm#u=9x zzviCo+3RinE7|(!kC*Rnl*uprXM6GU`Q5W-zTw}VZF;Bdxk};PSGr=KT4vX?ovySv zaYfCYqyN3S?;8Khrx(PrZJpv+ma^IQyZqW!|6LA#`CcApwkvG5!-BIltGPp7@iD&o zyk)13hRKHo;_Oe)tua;++i9FQW9DuilkaR?3j>{3w`wd{_~~Fr&z z>O6O~W4YjWM(y#cmol2o%f4+~`K8YrcvIix+uNTU<2t~hnPjx_k;uK74DX&la{T_| z%%Wb;Q&q3i-;3Uy`lT*Zd|88A^>IPB7U|mC(JkVdA=Ub8{c}Td sBfabf>(JEX?Mv(={XT!GsWtfVeE$0XfBrKtF#P{NG4#aekkf1o08A`BxBvhE literal 33882 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 diff --git a/build/openrpc/gateway.json.gz b/build/openrpc/gateway.json.gz index c384524ade906144bcbf6ea841dd434e462b4517..f407b1f0ae00e817ee989bc7d2f5cd99fece7a04 100644 GIT binary patch delta 8647 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