Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

Writing from browser to streams opened on webtransport connection sometimes raises StopSending #3038

Closed
zvolin opened this issue Nov 12, 2024 · 35 comments · Fixed by multiformats/go-multistream#115
Assignees

Comments

@zvolin
Copy link

zvolin commented Nov 12, 2024

I have a setup with rust-libp2p node running in a browser and using webtransport-websys. It's connected to a go-libp2p node using webtransport and tries to exchange messages using bitswap. Both bitswap implementations open a fresh new stream per each message that needs to be sent. Writes from a browser to a new stream opened from the go node sometimes return WebTransportStream StopSending error. This happens during the stream upgrade, when sending multistream select header (maybe first message ever sent?), so it's much too early to respect request to stop sending. WT spec suggests it can be because the receiving side of the stream was dropped on the go side. I was debugging it only from rust side so far, so don't have any useful logs from go node yet. Here is rust side:

// OK
2024-11-12T14:52:03.814000128Z  WARN Connection::poll:poll_incoming_bidirectional_streams: libp2p_webtransport_websys::connection: new incoming stream
2024-11-12T14:52:03.814000128Z  INFO Connection::poll: multistream_select::listener_select: recv header
2024-11-12T14:52:03.815000064Z  INFO Connection::poll: multistream_select::listener_select: recv header
2024-11-12T14:52:03.815000064Z  INFO Connection::poll: multistream_select::listener_select: send header
2024-11-12T14:52:03.815000064Z  INFO Connection::poll: multistream_select::listener_select: flushing message
2024-11-12T14:52:03.815000064Z  INFO Connection::poll: multistream_select::listener_select: recv message
2024-11-12T14:52:03.815000064Z  INFO Connection::poll: multistream_select::listener_select: send message
2024-11-12T14:52:03.815000064Z  INFO Connection::poll: multistream_select::listener_select: flushing message
2024-11-12T14:52:03.815000064Z  WARN Connection::poll: beetswap: Incoming stream fully negotiated

// NOK
2024-11-12T14:52:01.824999936Z  WARN Connection::poll:poll_incoming_bidirectional_streams: libp2p_webtransport_websys::connection: new incoming stream
2024-11-12T14:52:01.824999936Z  INFO Connection::poll: multistream_select::listener_select: recv header
2024-11-12T14:52:01.827000064Z  INFO Connection::poll: multistream_select::listener_select: recv header
2024-11-12T14:52:01.828Z  INFO Connection::poll: multistream_select::listener_select: send header
2024-11-12T14:52:01.828Z  INFO Connection::poll: multistream_select::listener_select: flushing message
2024-11-12T14:52:01.828Z DEBUG Connection::poll: libp2p_swarm::connection: failed to upgrade inbound stream: JavaScript error: WebTransportError: WebTransportStream StopSending

Running in firefox results in StopSending, chromium doesn't show any error but there are no further logs after flushing header message so I suspect it hangs instead of erroring here. Also a few times I saw it when writing to streams opened from rust side during ping, but far less than on incoming.

I have a stable way to reproduce it but logs needs some local patches. If you want to run it let me know, I'll push stuff and provide steps.

Version Information
github.com/celestiaorg/celestia-node
cel.dev/expr v0.16.0
cloud.google.com/go v0.112.1
cloud.google.com/go/accessapproval v1.7.5
cloud.google.com/go/accesscontextmanager v1.8.5
cloud.google.com/go/aiplatform v1.60.0
cloud.google.com/go/analytics v0.23.0
cloud.google.com/go/apigateway v1.6.5
cloud.google.com/go/apigeeconnect v1.6.5
cloud.google.com/go/apigeeregistry v0.8.3
cloud.google.com/go/appengine v1.8.5
cloud.google.com/go/area120 v0.8.5
cloud.google.com/go/artifactregistry v1.14.7
cloud.google.com/go/asset v1.17.2
cloud.google.com/go/assuredworkloads v1.11.5
cloud.google.com/go/automl v1.13.5
cloud.google.com/go/baremetalsolution v1.2.4
cloud.google.com/go/batch v1.8.0
cloud.google.com/go/beyondcorp v1.0.4
cloud.google.com/go/bigquery v1.59.1
cloud.google.com/go/bigtable v1.2.0
cloud.google.com/go/billing v1.18.2
cloud.google.com/go/binaryauthorization v1.8.1
cloud.google.com/go/certificatemanager v1.7.5
cloud.google.com/go/channel v1.17.5
cloud.google.com/go/cloudbuild v1.15.1
cloud.google.com/go/clouddms v1.7.4
cloud.google.com/go/cloudtasks v1.12.6
cloud.google.com/go/compute v1.24.0
cloud.google.com/go/compute/metadata v0.5.0
cloud.google.com/go/contactcenterinsights v1.13.0
cloud.google.com/go/container v1.31.0
cloud.google.com/go/containeranalysis v0.11.4
cloud.google.com/go/datacatalog v1.19.3
cloud.google.com/go/dataflow v0.9.5
cloud.google.com/go/dataform v0.9.2
cloud.google.com/go/datafusion v1.7.5
cloud.google.com/go/datalabeling v0.8.5
cloud.google.com/go/dataplex v1.14.2
cloud.google.com/go/dataproc/v2 v2.4.0
cloud.google.com/go/dataqna v0.8.5
cloud.google.com/go/datastore v1.15.0
cloud.google.com/go/datastream v1.10.4
cloud.google.com/go/deploy v1.17.1
cloud.google.com/go/dialogflow v1.49.0
cloud.google.com/go/dlp v1.11.2
cloud.google.com/go/documentai v1.25.0
cloud.google.com/go/domains v0.9.5
cloud.google.com/go/edgecontainer v1.1.5
cloud.google.com/go/errorreporting v0.3.0
cloud.google.com/go/essentialcontacts v1.6.6
cloud.google.com/go/eventarc v1.13.4
cloud.google.com/go/filestore v1.8.1
cloud.google.com/go/firestore v1.14.0
cloud.google.com/go/functions v1.16.0
cloud.google.com/go/gaming v1.6.0
cloud.google.com/go/gkebackup v1.3.5
cloud.google.com/go/gkeconnect v0.8.5
cloud.google.com/go/gkehub v0.14.5
cloud.google.com/go/gkemulticloud v1.1.1
cloud.google.com/go/grafeas v0.2.0
cloud.google.com/go/gsuiteaddons v1.6.5
cloud.google.com/go/iam v1.1.6
cloud.google.com/go/iap v1.9.4
cloud.google.com/go/ids v1.4.5
cloud.google.com/go/iot v1.7.5
cloud.google.com/go/kms v1.15.7
cloud.google.com/go/language v1.12.3
cloud.google.com/go/lifesciences v0.9.5
cloud.google.com/go/logging v1.9.0
cloud.google.com/go/longrunning v0.5.5
cloud.google.com/go/managedidentities v1.6.5
cloud.google.com/go/maps v1.6.4
cloud.google.com/go/mediatranslation v0.8.5
cloud.google.com/go/memcache v1.10.5
cloud.google.com/go/metastore v1.13.4
cloud.google.com/go/monitoring v1.18.0
cloud.google.com/go/networkconnectivity v1.14.4
cloud.google.com/go/networkmanagement v1.9.4
cloud.google.com/go/networksecurity v0.9.5
cloud.google.com/go/notebooks v1.11.3
cloud.google.com/go/optimization v1.6.3
cloud.google.com/go/orchestration v1.8.5
cloud.google.com/go/orgpolicy v1.12.1
cloud.google.com/go/osconfig v1.12.5
cloud.google.com/go/oslogin v1.13.1
cloud.google.com/go/phishingprotection v0.8.5
cloud.google.com/go/policytroubleshooter v1.10.3
cloud.google.com/go/privatecatalog v0.9.5
cloud.google.com/go/pubsub v1.36.1
cloud.google.com/go/pubsublite v1.8.1
cloud.google.com/go/recaptchaenterprise v1.3.1
cloud.google.com/go/recaptchaenterprise/v2 v2.9.2
cloud.google.com/go/recommendationengine v0.8.5
cloud.google.com/go/recommender v1.12.1
cloud.google.com/go/redis v1.14.2
cloud.google.com/go/resourcemanager v1.9.5
cloud.google.com/go/resourcesettings v1.6.5
cloud.google.com/go/retail v1.16.0
cloud.google.com/go/run v1.3.4
cloud.google.com/go/scheduler v1.10.6
cloud.google.com/go/secretmanager v1.11.5
cloud.google.com/go/security v1.15.5
cloud.google.com/go/securitycenter v1.24.4
cloud.google.com/go/servicedirectory v1.11.4
cloud.google.com/go/shell v1.7.5
cloud.google.com/go/spanner v1.57.0
cloud.google.com/go/speech v1.21.1
cloud.google.com/go/storage v1.38.0
cloud.google.com/go/storagetransfer v1.10.4
cloud.google.com/go/talent v1.6.6
cloud.google.com/go/texttospeech v1.7.5
cloud.google.com/go/tpu v1.6.5
cloud.google.com/go/trace v1.10.5
cloud.google.com/go/translate v1.10.1
cloud.google.com/go/video v1.20.4
cloud.google.com/go/videointelligence v1.11.5
cloud.google.com/go/vision v1.2.0
cloud.google.com/go/vision/v2 v2.8.0
cloud.google.com/go/vmmigration v1.7.5
cloud.google.com/go/vmwareengine v1.1.1
cloud.google.com/go/vpcaccess v1.7.5
cloud.google.com/go/webrisk v1.9.5
cloud.google.com/go/websecurityscanner v1.6.5
cloud.google.com/go/workflows v1.12.4
collectd.org v0.3.0
cosmossdk.io/errors v1.0.1
cosmossdk.io/math v1.3.0
dario.cat/mergo v1.0.0
dmitri.shuralyov.com/app/changes v0.0.0-20180602232624-0a106ad413e3
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9
dmitri.shuralyov.com/html/belt v0.0.0-20180602232347-f7d459c86be0
dmitri.shuralyov.com/service/change v0.0.0-20181023043359-a85b471d5412
dmitri.shuralyov.com/state v0.0.0-20180228185332-28bcc343414c
filippo.io/edwards25519 v1.0.0-rc.1
git.apache.org/thrift.git v0.0.0-20180902110319-2566ecd5d999
git.sr.ht/~sbinet/gg v0.5.0
git.sr.ht/~sircmpwn/getopt v0.0.0-20191230200459-23622cc906b3
git.sr.ht/~sircmpwn/go-bare v0.0.0-20210406120253-ab86bc2846d9
github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4
github.com/99designs/keyring v1.2.2
github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.7.0
github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0
github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.2.0
github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161
github.com/BurntSushi/toml v1.4.1-0.20240526193622-a339e1f7089c
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802
github.com/ChainSafe/go-schnorrkel v1.0.0
github.com/CloudyKit/fastprinter v0.0.0-20200109182630-33d98a066a53
github.com/CloudyKit/jet/v6 v6.2.0
github.com/DATA-DOG/go-sqlmock v1.3.3
github.com/DataDog/datadog-go v3.2.0+incompatible
github.com/DataDog/zstd v1.5.0
github.com/HdrHistogram/hdrhistogram-go v1.1.2
github.com/Joker/jade v1.1.3
github.com/Jorropo/jsync v1.0.1
github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible
github.com/Masterminds/glide v0.13.2
github.com/Masterminds/semver v1.4.2
github.com/Masterminds/semver/v3 v3.3.0
github.com/Masterminds/vcs v1.13.0
github.com/Microsoft/go-winio v0.6.2
github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5
github.com/OneOfOne/xxhash v1.2.2
github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371
github.com/PuerkitoBio/purell v1.1.1
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578
github.com/Shopify/goreferrer v0.0.0-20220729165902-8cddb4f5de06
github.com/Shopify/sarama v1.19.0
github.com/Shopify/toxiproxy v2.1.4+incompatible
github.com/StackExchange/wmi v1.2.1
github.com/VictoriaMetrics/fastcache v1.12.2
github.com/VividCortex/gohistogram v1.0.0
github.com/Workiva/go-datastructures v1.0.53
github.com/Zilliqa/gozilliqa-sdk v1.2.1-0.20201201074141-dd0ecada1be6
github.com/aclements/go-moremath v0.0.0-20210112150236-f10218a38794
github.com/adlio/schema v1.3.3
github.com/aead/siphash v1.0.1
github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5
github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b
github.com/alecthomas/jsonschema v0.0.0-20220216202328-9eeeec9d044b
github.com/alecthomas/kingpin/v2 v2.4.0
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751
github.com/alecthomas/units v0.0.0-20231202071711-9a357b53e9c9
github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156
github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883
github.com/andybalholm/brotli v1.0.5
github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239
github.com/antihax/optional v1.0.0
github.com/apache/arrow/go/arrow v0.0.0-20191024131854-af6fa24be0db
github.com/apache/thrift v0.13.0
github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e
github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6
github.com/armon/go-metrics v0.4.1
github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310
github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a
github.com/aws/aws-lambda-go v1.13.3
github.com/aws/aws-sdk-go v1.44.122
github.com/aws/aws-sdk-go-v2 v1.21.2
github.com/aws/aws-sdk-go-v2/config v1.18.45
github.com/aws/aws-sdk-go-v2/credentials v1.13.43
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.13
github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.43
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.37
github.com/aws/aws-sdk-go-v2/internal/ini v1.3.45
github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.8.1
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.37
github.com/aws/aws-sdk-go-v2/service/route53 v1.30.2
github.com/aws/aws-sdk-go-v2/service/sso v1.15.2
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.17.3
github.com/aws/aws-sdk-go-v2/service/sts v1.23.2
github.com/aws/smithy-go v1.15.0
github.com/aymerick/douceur v0.2.0
github.com/benbjohnson/clock v1.3.5
github.com/beorn7/perks v1.0.1
github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d
github.com/bgentry/speakeasy v0.1.0
github.com/bits-and-blooms/bitset v1.13.0
github.com/bmizerany/pat v0.0.0-20170815010413-6226ea591a40
github.com/boltdb/bolt v1.3.1
github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625
github.com/btcsuite/btcd v0.22.1
github.com/btcsuite/btcd/btcec/v2 v2.3.4
github.com/btcsuite/btcd/btcutil v1.1.3
github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1
github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f
github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce
github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd
github.com/btcsuite/goleveldb v1.0.0
github.com/btcsuite/snappy-go v1.0.0
github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792
github.com/btcsuite/winsvc v1.0.0
github.com/bufbuild/protocompile v0.14.1
github.com/buger/jsonparser v0.0.0-20181115193947-bf1c66bbce23
github.com/bwesterb/go-ristretto v1.2.0
github.com/c-bata/go-prompt v0.2.2
github.com/campoy/embedmd v1.0.0
github.com/casbin/casbin/v2 v2.37.0
github.com/celestiaorg/bittwister v0.0.0-20231213180407-65cdbaf5b8c7
github.com/celestiaorg/blobstream-contracts/v3 v3.1.0
github.com/celestiaorg/celestia-app/v3 v3.0.0-mocha
github.com/celestiaorg/go-fraud v0.2.1
github.com/celestiaorg/go-header v0.6.3
github.com/celestiaorg/go-libp2p-messenger v0.2.0
github.com/celestiaorg/go-square v1.1.1
github.com/celestiaorg/go-square/merkle v0.0.0-20240117232118-fd78256df076
github.com/celestiaorg/go-square/v2 v2.1.0-rc0
github.com/celestiaorg/knuu v0.16.1
github.com/celestiaorg/merkletree v0.0.0-20230308153949-c33506a7aa26
github.com/celestiaorg/nmt v0.22.2
github.com/celestiaorg/rsmt2d v0.14.0
github.com/cenkalti/backoff v2.2.1+incompatible
github.com/cenkalti/backoff/v4 v4.3.0
github.com/census-instrumentation/opencensus-proto v0.4.1
github.com/cespare/cp v0.1.0
github.com/cespare/xxhash v1.1.0
github.com/cespare/xxhash/v2 v2.3.0
github.com/cheekybits/genny v1.0.0
github.com/cheggaaa/pb v1.0.27
github.com/chzyer/logex v1.2.1
github.com/chzyer/readline v1.5.1
github.com/chzyer/test v1.0.0
github.com/cilium/ebpf v0.12.3
github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible
github.com/circonus-labs/circonusllhist v0.1.3
github.com/clbanning/mxj v1.8.4
github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec
github.com/client9/misspell v0.3.4
github.com/cloudflare/circl v1.3.7
github.com/cloudflare/cloudflare-go v0.79.0
github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4
github.com/cncf/xds/go v0.0.0-20240723142845-024c85f92f20
github.com/cockroachdb/apd/v2 v2.0.2
github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f
github.com/cockroachdb/errors v1.11.3
github.com/cockroachdb/fifo v0.0.0-20240606204812-0bbfbd93a7ce
github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b
github.com/cockroachdb/pebble v1.1.2
github.com/cockroachdb/redact v1.1.5
github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06
github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd
github.com/codegangsta/cli v1.20.0
github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0
github.com/coinbase/kryptology v1.8.0
github.com/coinbase/rosetta-sdk-go v0.7.9
github.com/cometbft/cometbft-db v1.0.1
github.com/cometbft/cometbft-load-test v0.3.0
github.com/confio/ics23/go v0.9.1
github.com/consensys/bavard v0.1.13
github.com/consensys/gnark-crypto v0.12.1
github.com/containerd/cgroups v1.1.0
github.com/containerd/continuity v0.4.2
github.com/coreos/etcd v3.3.10+incompatible
github.com/coreos/go-etcd v2.0.0+incompatible
github.com/coreos/go-semver v0.3.0
github.com/coreos/go-systemd v0.0.0-20181012123002-c6f51f82210d
github.com/coreos/go-systemd/v22 v22.5.0
github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf
github.com/corpix/uarand v0.1.1
github.com/cosmos/btcutil v1.0.5
github.com/cosmos/cosmos-proto v1.0.0-beta.5
github.com/cosmos/cosmos-sdk v0.46.16 => github.com/celestiaorg/cosmos-sdk v1.25.0-sdk-v0.46.16
github.com/cosmos/cosmos-sdk/db v1.0.0-beta.1
github.com/cosmos/go-bip39 v1.0.0
github.com/cosmos/gogoproto v1.7.0
github.com/cosmos/gorocksdb v1.2.0
github.com/cosmos/iavl v0.19.6
github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v6 v6.1.2
github.com/cosmos/ibc-go/v6 v6.3.0
github.com/cosmos/ledger-cosmos-go v0.13.2
github.com/cpuguy83/go-md2man v1.0.10
github.com/cpuguy83/go-md2man/v2 v2.0.4
github.com/crackcomm/go-gitignore v0.0.0-20231225121904-e25f5bc08668
github.com/crate-crypto/go-ipa v0.0.0-20240223125850-b1e8a79f509c
github.com/crate-crypto/go-kzg-4844 v1.0.0
github.com/creachadair/taskgroup v0.3.2
github.com/creack/pty v1.1.9
github.com/cristalhq/jwt/v5 v5.4.0
github.com/cskr/pubsub v1.0.2
github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c
github.com/cyphar/filepath-securejoin v0.2.4
github.com/danieljoos/wincred v1.1.2
github.com/dave/jennifer v1.2.0
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc
github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c
github.com/deckarep/golang-set v1.8.0
github.com/deckarep/golang-set/v2 v2.6.0
github.com/decred/dcrd/crypto/blake256 v1.0.1
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0
github.com/decred/dcrd/lru v1.0.0
github.com/deepmap/oapi-codegen v1.8.2
github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f
github.com/dgraph-io/badger v1.6.2
github.com/dgraph-io/badger/v2 v2.2007.4
github.com/dgraph-io/badger/v4 v4.3.0
github.com/dgraph-io/ristretto v0.1.2-0.20240116140435-c67e07994f91
github.com/dgrijalva/jwt-go v3.2.0+incompatible
github.com/dgryski/go-bitstream v0.0.0-20180413035011-3522498ce2c8
github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13
github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954
github.com/dlclark/regexp2 v1.7.0
github.com/dnaeon/go-vcr v1.2.0
github.com/docker/cli v23.0.1+incompatible
github.com/docker/docker v23.0.1+incompatible
github.com/docker/go-connections v0.4.1-0.20210727194412-58542c764a11
github.com/docker/go-units v0.5.0
github.com/donovanhide/eventsource v0.0.0-20210830082556-c59027999da0
github.com/dop251/goja v0.0.0-20230605162241-28ee0ee714f3
github.com/dop251/goja_nodejs v0.0.0-20210225215109-d91c329300e7
github.com/dustin/go-humanize v1.0.1
github.com/dvsekhvalnov/jose2go v1.6.0
github.com/eapache/go-resiliency v1.1.0
github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21
github.com/eapache/queue v1.1.0
github.com/eclipse/paho.mqtt.golang v1.2.0
github.com/edsrzf/mmap-go v1.0.0
github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385
github.com/elastic/gosigar v0.14.3
github.com/emicklei/go-restful/v3 v3.11.0
github.com/emirpasic/gods v1.18.1
github.com/envoyproxy/go-control-plane v0.13.0
github.com/envoyproxy/protoc-gen-validate v1.1.0
github.com/etclabscore/go-jsonschema-walk v0.0.6
github.com/etclabscore/go-openrpc-reflect v0.0.37
github.com/ethereum/c-kzg-4844 v1.0.0
github.com/ethereum/go-ethereum v1.14.11
github.com/ethereum/go-verkle v0.1.1-0.20240829091221-dffa7562dbe9
github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c
github.com/facebookgo/stack v0.0.0-20160209184415-751773369052
github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4
github.com/fatih/color v1.16.0
github.com/fatih/structs v1.1.0
github.com/felixge/httpsnoop v1.0.4
github.com/ferranbt/fastssz v0.1.2
github.com/filecoin-project/go-jsonrpc v0.6.0
github.com/fjl/gencodec v0.0.0-20230517082657-f9840df7b83e
github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5
github.com/flosch/pongo2/v4 v4.0.2
github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568
github.com/flynn/noise v1.1.0
github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90
github.com/fortytw2/leaktest v1.3.0
github.com/francoispqt/gojay v1.2.13
github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db
github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8
github.com/frankban/quicktest v1.14.6
github.com/fsnotify/fsnotify v1.7.0
github.com/fxamacker/cbor/v2 v2.7.0
github.com/gabriel-vasile/mimetype v1.4.4
github.com/gammazero/deque v0.2.0
github.com/gammazero/workerpool v1.1.3
github.com/garslo/gogen v0.0.0-20170306192744-1d203ffc1f61
github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff
github.com/getkin/kin-openapi v0.61.0
github.com/getsentry/sentry-go v0.27.0
github.com/ghemawat/stream v0.0.0-20171120220530-696b145b53b9
github.com/ghodss/yaml v1.0.0
github.com/gin-contrib/sse v0.1.0
github.com/gin-gonic/gin v1.8.1
github.com/gliderlabs/ssh v0.1.1
github.com/glycerine/go-unsnap-stream v0.0.0-20180323001048-9f0cb55181dd
github.com/glycerine/goconvey v0.0.0-20190410193231-58a59202ab31
github.com/go-chi/chi/v5 v5.0.0
github.com/go-errors/errors v1.4.2
github.com/go-fonts/liberation v0.3.2
github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376
github.com/go-git/go-billy/v5 v5.5.0
github.com/go-git/go-git/v5 v5.11.0
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4
github.com/go-ini/ini v1.67.0
github.com/go-kit/kit v0.12.0
github.com/go-kit/log v0.2.1
github.com/go-latex/latex v0.0.0-20231108140139-5c1ce85aa4ea
github.com/go-logfmt/logfmt v0.6.0
github.com/go-logr/logr v1.4.2
github.com/go-logr/stdr v1.2.2
github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab
github.com/go-ole/go-ole v1.3.0
github.com/go-openapi/jsonpointer v0.19.6
github.com/go-openapi/jsonreference v0.20.2
github.com/go-openapi/spec v0.19.11
github.com/go-openapi/swag v0.22.4
github.com/go-pdf/fpdf v0.9.0
github.com/go-playground/assert/v2 v2.0.1
github.com/go-playground/locales v0.14.0
github.com/go-playground/universal-translator v0.18.0
github.com/go-playground/validator/v10 v10.11.1
github.com/go-sourcemap/sourcemap v2.1.3+incompatible
github.com/go-sql-driver/mysql v1.7.1
github.com/go-stack/stack v1.8.1
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572
github.com/go-task/slim-sprig/v3 v3.0.0
github.com/go-yaml/yaml v2.1.0+incompatible
github.com/go-zookeeper/zk v1.0.2
github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee
github.com/gobwas/pool v0.2.0
github.com/gobwas/ws v1.0.2
github.com/goccmack/gocc v0.0.0-20230228185258-2292f9e40198
github.com/goccy/go-json v0.10.3
github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2
github.com/godbus/dbus/v5 v5.1.0
github.com/gofrs/flock v0.12.1
github.com/gofrs/uuid v4.4.0+incompatible
github.com/gogo/gateway v1.1.0
github.com/gogo/googleapis v1.4.1
github.com/gogo/protobuf v1.3.3 => github.com/regen-network/protobuf v1.3.3-alpha.regen.1
github.com/gogo/status v1.1.0
github.com/golang-jwt/jwt/v4 v4.5.0
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0
github.com/golang/geo v0.0.0-20190916061304-5b978397cfec
github.com/golang/glog v1.2.2
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da
github.com/golang/lint v0.0.0-20180702182130-06c8688daad7
github.com/golang/mock v1.6.0
github.com/golang/protobuf v1.5.4
github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb
github.com/golangci/lint-1 v0.0.0-20181222135242-d2cdd8c08219
github.com/google/btree v1.1.3
github.com/google/flatbuffers v1.12.1
github.com/google/gnostic-models v0.6.8
github.com/google/go-cmp v0.6.0
github.com/google/go-github v17.0.0+incompatible
github.com/google/go-pkcs11 v0.2.1-0.20230907215043-c6f79328ddf9
github.com/google/go-querystring v1.1.0
github.com/google/gofuzz v1.2.0
github.com/google/gopacket v1.1.19
github.com/google/martian v2.1.0+incompatible
github.com/google/martian/v3 v3.3.2
github.com/google/orderedcode v0.0.1
github.com/google/pprof v0.0.0-20240727154555-813a5fbdbec8
github.com/google/renameio v0.1.0
github.com/google/s2a-go v0.1.7
github.com/google/subcommands v1.2.0
github.com/google/uuid v1.6.0
github.com/googleapis/enterprise-certificate-proxy v0.3.2
github.com/googleapis/gax-go v2.0.0+incompatible
github.com/googleapis/gax-go/v2 v2.12.2
github.com/googleapis/go-type-adapters v1.0.0
github.com/googleapis/google-cloud-go-testing v0.0.0-20210719221736-1c9a4c676720
github.com/gopherjs/gopherjs v0.0.0-20190430165422-3e4dfb77656c
github.com/gorilla/context v1.1.1
github.com/gorilla/css v1.0.0
github.com/gorilla/handlers v1.5.2
github.com/gorilla/mux v1.8.1
github.com/gorilla/websocket v1.5.3
github.com/gotestyourself/gotestyourself v2.2.0+incompatible
github.com/grafana/otel-profiling-go v0.5.1
github.com/grafana/pyroscope-go v1.1.2
github.com/grafana/pyroscope-go/godeltaprof v0.1.8
github.com/graph-gophers/graphql-go v1.3.0
github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7
github.com/grpc-ecosystem/go-grpc-middleware v1.3.0
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0
github.com/grpc-ecosystem/grpc-gateway v1.16.0
github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0
github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c
github.com/gtank/merlin v0.1.1
github.com/gtank/ristretto255 v0.1.2
github.com/guptarohit/asciigraph v0.5.5
github.com/gxed/hashland/keccakpg v0.0.1
github.com/gxed/hashland/murmur3 v0.0.1
github.com/hashicorp/consul/api v1.18.0
github.com/hashicorp/consul/sdk v0.3.0
github.com/hashicorp/errwrap v1.1.0
github.com/hashicorp/go-bexpr v0.1.10
github.com/hashicorp/go-cleanhttp v0.5.2
github.com/hashicorp/go-getter v1.7.5
github.com/hashicorp/go-hclog v1.6.3
github.com/hashicorp/go-immutable-radix v1.3.1
github.com/hashicorp/go-msgpack v0.5.3
github.com/hashicorp/go-multierror v1.1.1
github.com/hashicorp/go-retryablehttp v0.7.7
github.com/hashicorp/go-rootcerts v1.0.2
github.com/hashicorp/go-safetemp v1.0.0
github.com/hashicorp/go-sockaddr v1.0.0
github.com/hashicorp/go-syslog v1.0.0
github.com/hashicorp/go-uuid v1.0.1
github.com/hashicorp/go-version v1.6.0
github.com/hashicorp/go.net v0.0.1
github.com/hashicorp/golang-lru v1.0.2
github.com/hashicorp/golang-lru/arc/v2 v2.0.7
github.com/hashicorp/golang-lru/v2 v2.0.7
github.com/hashicorp/hcl v1.0.0
github.com/hashicorp/logutils v1.0.0
github.com/hashicorp/mdns v1.0.0
github.com/hashicorp/memberlist v0.1.3
github.com/hashicorp/serf v0.10.1
github.com/hdevalence/ed25519consensus v0.0.0-20220222234857-c00d1f31bab3
github.com/holiman/billy v0.0.0-20240216141850-2abb0c79d3c4
github.com/holiman/bloomfilter/v2 v2.0.3
github.com/holiman/uint256 v1.3.1
github.com/hpcloud/tail v1.0.0
github.com/hudl/fargo v1.4.0
github.com/huin/goupnp v1.3.0
github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150
github.com/hydrogen18/memlistener v1.0.0
github.com/iancoleman/orderedmap v0.2.0
github.com/ianlancetaylor/demangle v0.0.0-20240312041847-bd984b5ce465
github.com/icrowley/fake v0.0.0-20180203215853-4178557ae428
github.com/imdario/mergo v0.3.16
github.com/improbable-eng/grpc-web v0.15.0
github.com/inconshreveable/mousetrap v1.1.0
github.com/influxdata/flux v0.65.1
github.com/influxdata/influxdb v1.8.3
github.com/influxdata/influxdb-client-go/v2 v2.4.0
github.com/influxdata/influxdb1-client v0.0.0-20220302092344-a9ab5670611c
github.com/influxdata/influxql v1.1.1-0.20200828144457-65d3ef77d385
github.com/influxdata/line-protocol v0.0.0-20210311194329-9aa0e372d097
github.com/influxdata/promql/v2 v2.12.0
github.com/influxdata/roaring v0.4.13-0.20180809181101-fc520f41fab6
github.com/influxdata/tdigest v0.0.0-20181121200506-bf2b5ad3c0a9
github.com/influxdata/usage-client v0.0.0-20160829180054-6d3895376368
github.com/ipfs/bbloom v0.0.4
github.com/ipfs/boxo v0.24.0
github.com/ipfs/go-bitfield v1.1.0
github.com/ipfs/go-block-format v0.2.0
github.com/ipfs/go-blockservice v0.5.2
github.com/ipfs/go-cid v0.4.1
github.com/ipfs/go-cidutil v0.1.0
github.com/ipfs/go-datastore v0.6.0
github.com/ipfs/go-detect-race v0.0.1
github.com/ipfs/go-ds-badger v0.3.0
github.com/ipfs/go-ds-badger4 v0.1.5
github.com/ipfs/go-ds-leveldb v0.5.0
github.com/ipfs/go-ipfs-blockstore v1.3.1
github.com/ipfs/go-ipfs-delay v0.0.1
github.com/ipfs/go-ipfs-ds-help v1.1.1
github.com/ipfs/go-ipfs-exchange-interface v0.2.1
github.com/ipfs/go-ipfs-pq v0.0.3
github.com/ipfs/go-ipfs-redirects-file v0.1.1
github.com/ipfs/go-ipfs-util v0.0.3
github.com/ipfs/go-ipld-cbor v0.1.0
github.com/ipfs/go-ipld-format v0.6.0
github.com/ipfs/go-ipld-legacy v0.2.1
github.com/ipfs/go-log v1.0.5
github.com/ipfs/go-log/v2 v2.5.1
github.com/ipfs/go-merkledag v0.11.0
github.com/ipfs/go-metrics-interface v0.0.1
github.com/ipfs/go-metrics-prometheus v0.0.2
github.com/ipfs/go-peertaskqueue v0.8.1
github.com/ipfs/go-test v0.0.4
github.com/ipfs/go-unixfs v0.4.5
github.com/ipfs/go-unixfsnode v1.9.0
github.com/ipfs/go-verifcid v0.0.3
github.com/ipld/go-car v0.6.2
github.com/ipld/go-car/v2 v2.13.1
github.com/ipld/go-codec-dagpb v1.6.0
github.com/ipld/go-ipld-prime v0.21.0
github.com/iris-contrib/schema v0.0.6
github.com/jackpal/go-nat-pmp v1.0.2
github.com/jbenet/go-cienv v0.1.0
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99
github.com/jbenet/go-temp-err-catcher v0.1.0
github.com/jbenet/goprocess v0.1.4
github.com/jedisct1/go-minisign v0.0.0-20230811132847-661be99b8267
github.com/jellevandenhooff/dkim v0.0.0-20150330215556-f50fe3d243e1
github.com/jessevdk/go-flags v1.4.0
github.com/jhump/protoreflect v1.15.1
github.com/jmespath/go-jmespath v0.4.0
github.com/jmespath/go-jmespath/internal/testify v1.5.1
github.com/jmhodges/levigo v1.0.0
github.com/jonboulle/clockwork v0.1.0
github.com/josharian/intern v1.0.0
github.com/jpillora/backoff v1.0.0
github.com/jrick/logrotate v1.0.0
github.com/json-iterator/go v1.1.12
github.com/jstemmer/go-junit-report v0.9.1
github.com/jsternberg/zap-logfmt v1.0.0
github.com/jtolds/gls v4.20.0+incompatible
github.com/julienschmidt/httprouter v1.3.0
github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5
github.com/jwilder/encoding v0.0.0-20170811194829-b4e1701a28ef
github.com/kami-zh/go-capturer v0.0.0-20171211120116-e492ea43421d
github.com/karalabe/hid v1.0.1-0.20240306101548-573246063e52
github.com/karalabe/usb v0.0.2
github.com/kataras/blocks v0.0.7
github.com/kataras/golog v0.1.8
github.com/kataras/iris/v12 v12.2.0
github.com/kataras/pio v0.0.11
github.com/kataras/sitemap v0.0.6
github.com/kataras/tunnel v0.0.4
github.com/kevinburke/ssh_config v1.2.0
github.com/kilic/bls12-381 v0.1.0
github.com/kisielk/errcheck v1.5.0
github.com/kisielk/gotool v1.0.0
github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23
github.com/klauspost/compress v1.17.9
github.com/klauspost/cpuid v0.0.0-20170728055534-ae7887de9fa5
github.com/klauspost/cpuid/v2 v2.2.8
github.com/klauspost/crc32 v0.0.0-20161016154125-cb6bfca970f6
github.com/klauspost/pgzip v1.0.2-0.20170402124221-0bf5dcad4ada
github.com/klauspost/reedsolomon v1.12.1
github.com/konsorten/go-windows-terminal-sequences v1.0.3
github.com/koron/go-ssdp v0.0.4
github.com/kr/fs v0.1.0
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515
github.com/kr/pretty v0.3.1
github.com/kr/pty v1.1.3
github.com/kr/text v0.2.0
github.com/kylelemons/godebug v1.1.0
github.com/labstack/echo/v4 v4.10.0
github.com/labstack/gommon v0.4.0
github.com/leanovate/gopter v0.2.9
github.com/leodido/go-urn v1.2.1
github.com/lib/pq v1.10.9
github.com/libp2p/go-addr-util v0.1.0
github.com/libp2p/go-buffer-pool v0.1.0
github.com/libp2p/go-cidranger v1.1.0
github.com/libp2p/go-conn-security-multistream v0.3.0
github.com/libp2p/go-doh-resolver v0.4.0
github.com/libp2p/go-eventbus v0.2.1
github.com/libp2p/go-flow-metrics v0.1.0
github.com/libp2p/go-libp2p v0.36.5
github.com/libp2p/go-libp2p-asn-util v0.4.1
github.com/libp2p/go-libp2p-blankhost v0.3.0
github.com/libp2p/go-libp2p-circuit v0.6.0
github.com/libp2p/go-libp2p-core v0.15.1
github.com/libp2p/go-libp2p-kad-dht v0.26.1
github.com/libp2p/go-libp2p-kbucket v0.6.3
github.com/libp2p/go-libp2p-mplex v0.5.0
github.com/libp2p/go-libp2p-nat v0.1.0
github.com/libp2p/go-libp2p-noise v0.4.0
github.com/libp2p/go-libp2p-peerstore v0.6.0
github.com/libp2p/go-libp2p-pnet v0.2.0
github.com/libp2p/go-libp2p-pubsub v0.12.0
github.com/libp2p/go-libp2p-quic-transport v0.17.0
github.com/libp2p/go-libp2p-record v0.2.0
github.com/libp2p/go-libp2p-resource-manager v0.2.1
github.com/libp2p/go-libp2p-routing-helpers v0.7.4
github.com/libp2p/go-libp2p-swarm v0.10.2
github.com/libp2p/go-libp2p-testing v0.12.0
github.com/libp2p/go-libp2p-tls v0.4.1
github.com/libp2p/go-libp2p-transport-upgrader v0.7.1
github.com/libp2p/go-libp2p-xor v0.1.0
github.com/libp2p/go-libp2p-yamux v0.9.1
github.com/libp2p/go-maddr-filter v0.1.0
github.com/libp2p/go-mplex v0.4.0
github.com/libp2p/go-msgio v0.3.0
github.com/libp2p/go-nat v0.2.0
github.com/libp2p/go-netroute v0.2.1
github.com/libp2p/go-openssl v0.1.0
github.com/libp2p/go-reuseport v0.4.0
github.com/libp2p/go-reuseport-transport v0.1.0
github.com/libp2p/go-sockaddr v0.1.0
github.com/libp2p/go-stream-muxer-multistream v0.4.0
github.com/libp2p/go-tcp-transport v0.5.1
github.com/libp2p/go-ws-transport v0.6.0
github.com/libp2p/go-yamux v1.4.1
github.com/libp2p/go-yamux/v3 v3.1.1
github.com/libp2p/go-yamux/v4 v4.0.1
github.com/libp2p/zeroconf/v2 v2.2.0
github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743
github.com/lightstep/lightstep-tracer-go v0.18.1
github.com/linxGnu/grocksdb v1.9.3
github.com/lucas-clemente/quic-go v0.27.0
github.com/lucasjones/reggen v0.0.0-20180717132126-cdb49ff09d77
github.com/lunixbochs/vtclean v1.0.0
github.com/lyft/protoc-gen-validate v0.0.13
github.com/magiconair/properties v1.8.7
github.com/mailgun/raymond/v2 v2.0.48
github.com/mailru/easyjson v0.7.7
github.com/manifoldco/promptui v0.9.0
github.com/marten-seemann/qpack v0.2.1
github.com/marten-seemann/qtls-go1-15 v0.1.4
github.com/marten-seemann/qtls-go1-16 v0.1.5
github.com/marten-seemann/qtls-go1-17 v0.1.1
github.com/marten-seemann/qtls-go1-18 v0.1.1
github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd
github.com/matryer/moq v0.0.0-20190312154309-6cfb0558e1bd
github.com/mattn/go-colorable v0.1.13
github.com/mattn/go-isatty v0.0.20
github.com/mattn/go-pointer v0.0.1
github.com/mattn/go-runewidth v0.0.13
github.com/mattn/go-sqlite3 v1.11.0
github.com/mattn/go-tty v0.0.0-20180907095812-13ff1204f104
github.com/matttproud/golang_protobuf_extensions v1.0.4
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b
github.com/microcosm-cc/bluemonday v1.0.23
github.com/miekg/dns v1.1.62
github.com/mikioh/tcp v0.0.0-20190314235350-803a9b46060c
github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b
github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc
github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0
github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1
github.com/minio/highwayhash v1.0.3
github.com/minio/md5-simd v1.1.2
github.com/minio/minio-go/v7 v7.0.74
github.com/minio/sha256-simd v1.0.1
github.com/mitchellh/cli v1.0.0
github.com/mitchellh/go-homedir v1.1.0
github.com/mitchellh/go-testing-interface v1.14.1
github.com/mitchellh/gox v0.4.0
github.com/mitchellh/iochan v1.0.0
github.com/mitchellh/mapstructure v1.5.0
github.com/mitchellh/pointerstructure v1.2.0
github.com/mmcloughlin/addchain v0.4.0
github.com/mmcloughlin/profile v0.1.1
github.com/moby/spdystream v0.4.0
github.com/moby/term v0.0.0-20221205130635-1aeaba878587
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd
github.com/modern-go/reflect2 v1.0.2
github.com/modocache/gover v0.0.0-20171022184752-b58185e213c5
github.com/mr-tron/base58 v1.2.0
github.com/mschoch/smat v0.0.0-20160514031455-90eadee771ae
github.com/mtibben/percent v0.2.1
github.com/multiformats/go-base32 v0.1.0
github.com/multiformats/go-base36 v0.2.0
github.com/multiformats/go-multiaddr v0.13.0
github.com/multiformats/go-multiaddr-dns v0.4.0
github.com/multiformats/go-multiaddr-fmt v0.1.0
github.com/multiformats/go-multiaddr-net v0.2.0
github.com/multiformats/go-multibase v0.2.0
github.com/multiformats/go-multicodec v0.9.0
github.com/multiformats/go-multihash v0.2.3
github.com/multiformats/go-multistream v0.5.0
github.com/multiformats/go-varint v0.0.7
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f
github.com/mwitkow/grpc-proxy v0.0.0-20181017164139-0f1106ef9c76
github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f
github.com/naoina/go-stringutil v0.1.0
github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416
github.com/nats-io/jwt v0.3.2
github.com/nats-io/jwt/v2 v2.0.3
github.com/nats-io/nats-server/v2 v2.5.0
github.com/nats-io/nats.go v1.12.1
github.com/nats-io/nkeys v0.3.0
github.com/nats-io/nuid v1.0.1
github.com/neelance/astrewrite v0.0.0-20160511093645-99348263ae86
github.com/neelance/sourcemap v0.0.0-20151028013722-8c68805598ab
github.com/neilotoole/errgroup v0.1.6
github.com/ngdinhtoan/glide-cleanup v0.2.0
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e
github.com/nxadm/tail v1.4.11
github.com/oklog/oklog v0.3.2
github.com/oklog/run v1.0.0
github.com/oklog/ulid v1.3.1
github.com/olekukonko/tablewriter v0.0.5
github.com/onsi/ginkgo v1.16.5
github.com/onsi/ginkgo/v2 v2.20.0
github.com/onsi/gomega v1.34.2
github.com/op/go-logging v0.0.0-20160315200505-970db520ece7
github.com/open-rpc/meta-schema v0.0.0-20201029221707-1b72ef2ea333
github.com/opencontainers/go-digest v1.0.0
github.com/opencontainers/image-spec v1.1.0
github.com/opencontainers/runc v1.1.3
github.com/opencontainers/runtime-spec v1.2.0
github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492
github.com/opentracing/basictracer-go v1.0.0
github.com/opentracing/opentracing-go v1.2.0
github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5
github.com/openzipkin/zipkin-go v0.4.3
github.com/ory/dockertest v3.3.5+incompatible
github.com/pact-foundation/pact-go v1.0.4
github.com/pascaldekloe/goe v0.1.0
github.com/paulbellamy/ratecounter v0.2.0
github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58
github.com/pborman/uuid v1.2.0
github.com/pelletier/go-toml v1.9.5
github.com/pelletier/go-toml/v2 v2.2.3
github.com/performancecopilot/speed v3.0.0+incompatible
github.com/performancecopilot/speed/v4 v4.0.0
github.com/petar/GoLLRB v0.0.0-20210522233825-ae3b015fd3e9
github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7
github.com/petermattis/goid v0.0.0-20230317030725-371a4b8eda08
github.com/philhofer/fwd v1.1.1
github.com/pierrec/lz4 v2.0.5+incompatible
github.com/pingcap/errors v0.11.4
github.com/pion/datachannel v1.5.8
github.com/pion/dtls/v2 v2.2.12
github.com/pion/ice/v2 v2.3.34
github.com/pion/interceptor v0.1.30
github.com/pion/logging v0.2.2
github.com/pion/mdns v0.0.12
github.com/pion/randutil v0.1.0
github.com/pion/rtcp v1.2.14
github.com/pion/rtp v1.8.9
github.com/pion/sctp v1.8.33
github.com/pion/sdp/v3 v3.0.9
github.com/pion/srtp/v2 v2.0.20
github.com/pion/stun v0.6.1
github.com/pion/transport/v2 v2.2.10
github.com/pion/transport/v3 v3.0.7
github.com/pion/turn/v2 v2.1.6
github.com/pion/webrtc/v3 v3.3.0
github.com/pjbgf/sha1cd v0.3.0
github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e
github.com/pkg/errors v0.9.1
github.com/pkg/profile v1.2.1
github.com/pkg/sftp v1.13.6
github.com/pkg/term v0.0.0-20180730021639-bffc007b7fd5
github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2
github.com/polydawn/refmt v0.89.0
github.com/posener/complete v1.1.1
github.com/prometheus/client_golang v1.20.3
github.com/prometheus/client_model v0.6.1
github.com/prometheus/common v0.55.0
github.com/prometheus/procfs v0.15.1
github.com/prometheus/tsdb v0.7.1
github.com/protolambda/bls12-381-util v0.1.0
github.com/protolambda/zrnt v0.32.2
github.com/protolambda/ztyp v0.2.2
github.com/quic-go/qpack v0.4.0
github.com/quic-go/qtls-go1-20 v0.3.2
github.com/quic-go/quic-go v0.46.0
github.com/quic-go/webtransport-go v0.8.0
github.com/rakyll/statik v0.1.7
github.com/raulk/clock v1.1.0
github.com/raulk/go-watchdog v1.3.0
github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475
github.com/regen-network/cosmos-proto v0.3.1
github.com/retailnext/hllpp v1.0.1-0.20180308014038-101a6d2f8b52
github.com/rivo/uniseg v0.4.4
github.com/rjeczalik/notify v0.9.1
github.com/rogpeppe/fastuuid v1.2.0
github.com/rogpeppe/go-internal v1.12.0
github.com/rollkit/go-da v0.8.0
github.com/rs/cors v1.8.3
github.com/rs/xid v1.5.0
github.com/rs/zerolog v1.33.0
github.com/russross/blackfriday v1.5.2
github.com/russross/blackfriday/v2 v2.1.0
github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f
github.com/sagikazarmark/crypt v0.9.0
github.com/samber/lo v1.39.0
github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da
github.com/sasha-s/go-deadlock v0.3.1
github.com/schollz/closestmatch v2.1.0+incompatible
github.com/sclevine/agouti v3.0.0+incompatible
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529
github.com/segmentio/fasthash v1.0.3
github.com/segmentio/kafka-go v0.2.0
github.com/sergi/go-diff v1.2.0
github.com/shirou/gopsutil v3.21.6+incompatible
github.com/shurcooL/component v0.0.0-20170202220835-f88ec8f54cc4
github.com/shurcooL/events v0.0.0-20181021180414-410e4ca65f48
github.com/shurcooL/github_flavored_markdown v0.0.0-20181002035957-2122de532470
github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e
github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041
github.com/shurcooL/gofontwoff v0.0.0-20180329035133-29b52fc0a18d
github.com/shurcooL/gopherjslib v0.0.0-20160914041154-feb6d3990c2c
github.com/shurcooL/highlight_diff v0.0.0-20170515013008-09bb4053de1b
github.com/shurcooL/highlight_go v0.0.0-20181028180052-98c3abbbae20
github.com/shurcooL/home v0.0.0-20181020052607-80b7ffcb30f9
github.com/shurcooL/htmlg v0.0.0-20170918183704-d01228ac9e50
github.com/shurcooL/httperror v0.0.0-20170206035902-86b7830d14cc
github.com/shurcooL/httpfs v0.0.0-20171119174359-809beceb2371
github.com/shurcooL/httpgzip v0.0.0-20180522190206-b1c53ac65af9
github.com/shurcooL/issues v0.0.0-20181008053335-6292fdc1e191
github.com/shurcooL/issuesapp v0.0.0-20180602232740-048589ce2241
github.com/shurcooL/notifications v0.0.0-20181007000457-627ab5aea122
github.com/shurcooL/octicon v0.0.0-20181028054416-fa4f57f9efb2
github.com/shurcooL/reactions v0.0.0-20181006231557-f2e0b4ca5b82
github.com/shurcooL/sanitized_anchor_name v1.0.0
github.com/shurcooL/users v0.0.0-20180125191416-49c67e49c537
github.com/shurcooL/webdavfs v0.0.0-20170829043945-18c3829fa133
github.com/sirupsen/logrus v1.9.3
github.com/skeema/knownhosts v1.2.1
github.com/smartystreets/assertions v1.2.0
github.com/smartystreets/goconvey v1.7.2
github.com/smola/gocompat v0.2.0
github.com/snikch/goodman v0.0.0-20171125024755-10e37e294daa
github.com/soheilhy/cmux v0.1.4
github.com/sony/gobreaker v0.4.1
github.com/sourcegraph/annotate v0.0.0-20160123013949-f4cad6c6324d
github.com/sourcegraph/syntaxhighlight v0.0.0-20170531221838-bd320f5d308e
github.com/spacemonkeygo/openssl v0.0.0-20181017203307-c2dcc5cca94a
github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572
github.com/spaolacci/murmur3 v1.1.0
github.com/spf13/afero v1.11.0
github.com/spf13/cast v1.6.0
github.com/spf13/cobra v1.8.1
github.com/spf13/jwalterweatherman v1.1.0
github.com/spf13/pflag v1.0.5
github.com/spf13/viper v1.15.0
github.com/src-d/envconfig v1.0.0
github.com/status-im/keycard-go v0.2.0
github.com/streadway/amqp v1.0.0
github.com/streadway/handy v0.0.0-20200128134331-0f66f006fb2e
github.com/stretchr/objx v0.5.2
github.com/stretchr/testify v1.9.0
github.com/subosito/gotenv v1.6.0
github.com/supranational/blst v0.3.13
github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d => github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7
github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07
github.com/tdewolff/minify/v2 v2.12.4
github.com/tdewolff/parse/v2 v2.6.4
github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c
github.com/tendermint/go-amino v0.16.0
github.com/tendermint/tendermint v0.34.29 => github.com/celestiaorg/celestia-core v1.43.0-tm-v0.34.35
github.com/tendermint/tm-db v0.6.7
github.com/tidwall/btree v1.5.0
github.com/tidwall/gjson v1.18.0
github.com/tidwall/match v1.1.1
github.com/tidwall/pretty v1.2.1
github.com/tidwall/sjson v1.2.4
github.com/tinylib/msgp v1.1.5
github.com/tklauser/go-sysconf v0.3.12
github.com/tklauser/numcpus v0.6.1
github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8
github.com/ttacon/chalk v0.0.0-20160626202418-22c06c80ed31
github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926
github.com/tyler-smith/go-bip39 v1.1.0
github.com/ucarion/urlpath v0.0.0-20200424170820-7ccc79b76bbb
github.com/ugorji/go v1.1.7
github.com/ugorji/go/codec v1.2.7
github.com/ulikunitz/xz v0.5.10
github.com/urfave/cli v1.22.10
github.com/urfave/cli/v2 v2.25.7
github.com/urfave/negroni v1.0.0
github.com/valyala/bytebufferpool v1.0.0
github.com/valyala/fasthttp v1.40.0
github.com/valyala/fasttemplate v1.2.2
github.com/viant/assertly v0.4.8
github.com/viant/toolbox v0.24.0
github.com/vmihailenco/msgpack/v5 v5.3.5
github.com/vmihailenco/tagparser/v2 v2.0.0
github.com/warpfork/go-testmark v0.12.1
github.com/warpfork/go-wish v0.0.0-20220906213052-39a1cc7a02d0
github.com/whyrusleeping/base32 v0.0.0-20170828182744-c30ac30633cc
github.com/whyrusleeping/cbor v0.0.0-20171005072247-63513f603b11
github.com/whyrusleeping/cbor-gen v0.1.2
github.com/whyrusleeping/chunker v0.0.0-20181014151217-fe64bd25879f
github.com/whyrusleeping/go-keyspace v0.0.0-20160322163242-5b898ac5add1
github.com/whyrusleeping/go-logging v0.0.0-20170515211332-0457bb6b88fc
github.com/whyrusleeping/mdns v0.0.0-20190826153040-b9b60ed33aa9
github.com/whyrusleeping/multiaddr-filter v0.0.0-20160516205228-e903e4adabd7
github.com/willf/bitset v1.1.3
github.com/wlynxg/anet v0.0.4
github.com/x-cray/logrus-prefixed-formatter v0.5.2
github.com/x448/float16 v0.8.4
github.com/xanzy/ssh-agent v0.3.3
github.com/xhit/go-str2duration/v2 v2.1.0
github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2
github.com/xlab/treeprint v0.0.0-20180616005107-d6fb6747feb6
github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77
github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673
github.com/ybbus/jsonrpc v2.1.2+incompatible
github.com/yosssi/ace v0.0.5
github.com/yuin/goldmark v1.4.13
github.com/zondax/hid v0.9.2
github.com/zondax/ledger-go v0.14.3
gitlab.com/NebulousLabs/errors v0.0.0-20200929122200-06c536cf6975
gitlab.com/NebulousLabs/fastrand v0.0.0-20181126182046-603482d69e40
go.etcd.io/bbolt v1.3.11
go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738
go.etcd.io/etcd/api/v3 v3.5.6
go.etcd.io/etcd/client/pkg/v3 v3.5.6
go.etcd.io/etcd/client/v2 v2.305.6
go.etcd.io/etcd/client/v3 v3.5.6
go.etcd.io/gofail v0.1.0
go.opencensus.io v0.24.0
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.52.0
go.opentelemetry.io/contrib/instrumentation/runtime v0.45.0
go.opentelemetry.io/otel v1.30.0
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.27.0
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.27.0
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.0
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.27.0
go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.27.0
go.opentelemetry.io/otel/exporters/zipkin v1.27.0
go.opentelemetry.io/otel/metric v1.30.0
go.opentelemetry.io/otel/sdk v1.30.0
go.opentelemetry.io/otel/sdk/metric v1.27.0
go.opentelemetry.io/otel/trace v1.30.0
go.opentelemetry.io/proto/otlp v1.3.1
go.uber.org/atomic v1.11.0
go.uber.org/automaxprocs v1.5.2
go.uber.org/dig v1.18.0
go.uber.org/fx v1.22.2
go.uber.org/goleak v1.3.0
go.uber.org/mock v0.4.0
go.uber.org/multierr v1.11.0
go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee
go.uber.org/zap v1.27.0
go4.org v0.0.0-20180809161055-417644f6feb5
golang.org/x/build v0.0.0-20190111050920-041ab4dc3f9d
golang.org/x/crypto v0.27.0
golang.org/x/exp v0.0.0-20240904232852-e7e105dedf7e
golang.org/x/image v0.14.0
golang.org/x/lint v0.0.0-20210508222113-6edffad5e616
golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028
golang.org/x/mod v0.21.0
golang.org/x/net v0.29.0
golang.org/x/oauth2 v0.22.0
golang.org/x/perf v0.0.0-20230113213139-801c7ef9e5c5
golang.org/x/sync v0.8.0
golang.org/x/sys v0.25.0
golang.org/x/telemetry v0.0.0-20240521205824-bda55230c457
golang.org/x/term v0.24.0
golang.org/x/text v0.18.0
golang.org/x/time v0.5.0
golang.org/x/tools v0.24.0
golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028
gonum.org/v1/gonum v0.15.0
gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0
gonum.org/v1/plot v0.14.0
google.golang.org/api v0.169.0
google.golang.org/appengine v1.6.8
google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de
google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142
google.golang.org/genproto/googleapis/bytestream v0.0.0-20240304161311-37d4d3c04a78
google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1
google.golang.org/grpc v1.67.1
google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0
google.golang.org/protobuf v1.35.1
gopkg.in/alecthomas/kingpin.v2 v2.2.6
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c
gopkg.in/cheggaaa/pb.v1 v1.0.27
gopkg.in/errgo.v2 v2.1.0
gopkg.in/fsnotify.v1 v1.4.7
gopkg.in/gcfg.v1 v1.2.3
gopkg.in/inf.v0 v0.9.1
gopkg.in/ini.v1 v1.67.0
gopkg.in/natefinch/lumberjack.v2 v2.2.1
gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce
gopkg.in/olebedev/go-duktape.v3 v3.0.0-20200619000410-60c24ae608a6
gopkg.in/resty.v1 v1.12.0
gopkg.in/src-d/go-cli.v0 v0.0.0-20181105080154-d492247bbc0d
gopkg.in/src-d/go-log.v1 v1.0.1
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7
gopkg.in/urfave/cli.v1 v1.20.0
gopkg.in/warnings.v0 v0.1.2
gopkg.in/yaml.v2 v2.4.0
gopkg.in/yaml.v3 v3.0.1
gotest.tools v2.2.0+incompatible
gotest.tools/v3 v3.5.1
grpc.go4.org v0.0.0-20170609214715-11d0a25b4919
honnef.co/go/tools v0.1.3
k8s.io/api v0.30.2
k8s.io/apimachinery v0.31.1
k8s.io/client-go v0.30.2
k8s.io/klog/v2 v2.130.1
k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340
k8s.io/utils v0.0.0-20240711033017-18e509b52bc8
lukechampine.com/blake3 v1.3.0
nhooyr.io/websocket v1.8.17
pgregory.net/rapid v1.1.0
rsc.io/binaryregexp v0.2.0
rsc.io/pdf v0.1.1
rsc.io/quote/v3 v3.1.0
rsc.io/sampler v1.3.0
rsc.io/tmplfunc v0.0.3
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd
sigs.k8s.io/structured-merge-diff/v4 v4.4.1
sigs.k8s.io/yaml v1.4.0
sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0
sourcegraph.com/sourcegraph/go-diff v0.5.0
sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4
@zvolin
Copy link
Author

zvolin commented Nov 12, 2024

I found this repo with some other mention of StopSending error with js-libp2p <-> go-libp2p setup which has some similarities. cc @achingbrain

@MarcoPolo MarcoPolo self-assigned this Nov 12, 2024
@MarcoPolo
Copy link
Collaborator

Hi @zvolin,

Can you share what error code is attached to the STOP_SENDING frame? If you share a repro, I can take a closer look as well. Thanks!

@zvolin
Copy link
Author

zvolin commented Nov 12, 2024

source: Stream, streamErrorCode: Some(0)

@zvolin
Copy link
Author

zvolin commented Nov 12, 2024

I tried summarizing steps to reproduce this here, check readme. If something doesn't work let me know

@zvolin
Copy link
Author

zvolin commented Nov 12, 2024

rust node is patched to make single bitswap request each ~2s, you shouldn't need to wait long until it reproduces

@zvolin
Copy link
Author

zvolin commented Nov 12, 2024

Also this way of reproduction gives less noise and extra logs, there's less messages going around. It also reproduces with regular Celestia node and browser lumina so for go side you could just follow our readme on main, but there's gonna be much more traffic

@zvolin
Copy link
Author

zvolin commented Nov 13, 2024

So I commented out everything regarding preferred protocol in basic_host to force it to always negotiate protocol. This effectively fixes the issue for streams opened by go side, and bitswap runs fine for some time.

After some time go side stops responding and we never even get a new incoming stream in browser, it may be #3025. Go node still thinks everything is working, I see logs from it, writing to those streams we never even saw on rust side.

Occasionally I still see the StopSending popping up on ping where browser initiates stream.

Definitely not a real fix but may help navigating the bug

@zvolin
Copy link
Author

zvolin commented Nov 13, 2024

diff --git a/p2p/host/basic/basic_host.go b/p2p/host/basic/basic_host.go
index 761a39b6..ddae45bc 100644
--- a/p2p/host/basic/basic_host.go
+++ b/p2p/host/basic/basic_host.go
@@ -722,21 +722,22 @@ func (h *BasicHost) NewStream(ctx context.Context, p peer.ID, pids ...protocol.I
                return nil, fmt.Errorf("identify failed to complete: %w", ctx.Err())
        }
 
-       pref, err := h.preferredProtocol(p, pids)
+       _, err = h.preferredProtocol(p, pids)
        if err != nil {
                return nil, err
        }
 
-       if pref != "" {
-               if err := s.SetProtocol(pref); err != nil {
-                       return nil, err
-               }
-               lzcon := msmux.NewMSSelect(s, pref)
-               return &streamWrapper{
-                       Stream: s,
-                       rw:     lzcon,
-               }, nil
-       }
+       // if pref != "" {
+       //      if err := s.SetProtocol(pref); err != nil {
+       //              return nil, err
+       //      }
+       //      log.Warnln("new stream 6")
+       //      lzcon := msmux.NewMSSelect(s, pref)
+       //      return &streamWrapper{
+       //              Stream: s,
+       //              rw:     lzcon,
+       //      }, nil
+       // }
 
        // Negotiate the protocol in the background, obeying the context.
        var selected protocol.ID

@MarcoPolo
Copy link
Collaborator

MarcoPolo commented Nov 14, 2024

Occasionally I still see the StopSending popping up on ping where browser initiates stream.

Stop Sending is sent when we close the read side of a stream. It tells the other end we are not reading anymore. This happens on both stream.Close and stream.Reset (on the Go side). For ping at least, this is a red herring that is due to how Rust expects to reuse the stream indefinitely and Go wants to close it after some time. See:

@MarcoPolo
Copy link
Collaborator

small debugging note: In the browser, the network UI dropdown persists on refresh, but it doesn't seem to update the state in the wasm code. You have to pick another network and then go back.

@MarcoPolo
Copy link
Collaborator

I've found the issue around stop sending and I'll have a fix tomorrow morning. Thanks for the repro ❤️

After some time go side stops responding and we never even get a new incoming stream in browser, it may be #3025. Go node still thinks everything is working, I see logs from it, writing to those streams we never even saw on rust side.

I'm still trying to repro this part. How long do you have wait to hit this state?

@Wondertan
Copy link
Contributor

Wondertan commented Nov 14, 2024

@MarcoPolo, @sukunrt, while investigating #3025, I completely forgot about lazyClientConn wrapping in go-multistream 😑
Yes, the Swarm still calls Close immediately on the underlying QUIC streams, but lazyClientConn.Close happens before that, potentially messing with QUIC's closing lifecycle.

The question is, can this be a reason behind #3025? It could, but @zvolin's diff above avoids any negotiation on the Go side, and it is still getting stuck in the end. @zvolin, did you disable negotiation on the rust side as well?

@zvolin
Copy link
Author

zvolin commented Nov 14, 2024

I'll try to re-reproduce it shortly, my comment above was based on a single run. Just wanted to mention diff above doesn't disable negotiation. It does the opposite, always negotiate instead of choosing protocol right away. I didn't do any patches to rust libp2p except logging

@Wondertan
Copy link
Contributor

Just wanted to mention diff above doesn't disable negotiation. It does the opposite, always negotiate instead of choosing protocol right away.

I mean lazy negotiation. The code you've commented out also negotiates but lazily, avoiding an additional roundtrip.

I didn't do any patches to rust libp2p except logging

Unparity between those may explain things getting stuck.

@zvolin
Copy link
Author

zvolin commented Nov 14, 2024

I'm still trying to repro this part. How long do you have wait to hit this state?

It happens after exactly 20 seconds, so after 10 bitswap requests 🤔 It always reproduces for me, regardless if I use my patch, your multistream fix or both.

Unparity between those may explain things getting stuck.

I don't think there's any unparity. Moreover we just stop getting new streams from incomingBidirectionalStreams, it never even reaches any handshake logic.

Here are logs from go node, no interesting logs on rust side (as it never saw new stream).
There seem to be 3 different cases:

failed to open stream: timed out: context deadline exceeded
failed to negotiate protocol: stream reset, but failed to convert stream error 386759528: error code outside of expected range
failed to negotiate protocol: Application error 0x100 (remote)
2024-11-14T11:44:07.381Z	DEBUG	basichost	basic/basic_host.go:483	negotiated: /celestia/private/shwap/ipfs/bitswap/1.2.0 (took 3.259143ms)
2024-11-14T11:44:07.383Z	DEBUG	bitswap/network	network/ipfs_impl.go:430	bitswap net handleNewStream from 12D3KooWG9yo3RuK2mbLKEeaZAEmzc5yMFK7RD7fpLK22H6Wm4Yu
2024-11-14T11:44:07.383Z	DEBUG	bitswap/server/decision	decision/engine.go:919	Bitswap engine <- msg	{"local": "12D3KooWB3kXpib1beYTjGkpyn1pYuqH6mfbkNj9ssfgx5qb22nN", "from": "12D3KooWG9yo3RuK2mbLKEeaZAEmzc5yMFK7RD7fpLK22H6Wm4Yu", "entryCount": 1}
2024-11-14T11:44:07.383Z	DEBUG	bitswap/server/decision	decision/engine.go:945	Bitswap engine <- want-have	{"local": "12D3KooWB3kXpib1beYTjGkpyn1pYuqH6mfbkNj9ssfgx5qb22nN", "from": "12D3KooWG9yo3RuK2mbLKEeaZAEmzc5yMFK7RD7fpLK22H6Wm4Yu", "cid": "bagipaamr6aaqyaaaaaaaaaaakmaaaaaa"}
2024-11-14T11:44:07.384Z	DEBUG	bitswap/server/decision	decision/engine.go:785	Bitswap engine: block found	{"local": "12D3KooWB3kXpib1beYTjGkpyn1pYuqH6mfbkNj9ssfgx5qb22nN", "from": "12D3KooWG9yo3RuK2mbLKEeaZAEmzc5yMFK7RD7fpLK22H6Wm4Yu", "cid": "bagipaamr6aaqyaaaaaaaaaaakmaaaaaa", "isWantBlock": false}
2024-11-14T11:44:07.385Z	DEBUG	bitswap/server/decision	decision/engine.go:585	Bitswap process tasks	{"local": "12D3KooWB3kXpib1beYTjGkpyn1pYuqH6mfbkNj9ssfgx5qb22nN", "taskCount": 1}
2024-11-14T11:44:07.385Z	DEBUG	bitswap/server/decision	decision/engine.go:638	Bitswap engine -> msg	{"local": "12D3KooWB3kXpib1beYTjGkpyn1pYuqH6mfbkNj9ssfgx5qb22nN", "to": "12D3KooWG9yo3RuK2mbLKEeaZAEmzc5yMFK7RD7fpLK22H6Wm4Yu", "blockCount": 0, "presenceCount": 1, "size": 22}
2024-11-14T11:44:07.386Z	DEBUG	swarm2	swarm/swarm.go:475	[12D3KooWB3kXpib1beYTjGkpyn1pYuqH6mfbkNj9ssfgx5qb22nN] opening stream to peer [12D3KooWG9yo3RuK2mbLKEeaZAEmzc5yMFK7RD7fpLK22H6Wm4Yu]
2024-11-14T11:44:08.360Z	DEBUG	bitswap/server	server/server.go:402	failed to send blocks message	{"peer": "12D3KooWG9yo3RuK2mbLKEeaZAEmzc5yMFK7RD7fpLK22H6Wm4Yu", "error": "failed to open stream: timed out: context deadline exceeded"}
2024-11-14T11:44:08.360Z	DEBUG	bitswap/server	server/server.go:324	Bitswap.TaskWorker.Loop	{"ID": 3}
2024-11-14T11:44:09.373Z	DEBUG	basichost	basic/basic_host.go:483	negotiated: /celestia/private/shwap/ipfs/bitswap/1.2.0 (took 8.101108ms)
2024-11-14T11:44:09.379Z	DEBUG	bitswap/network	network/ipfs_impl.go:430	bitswap net handleNewStream from 12D3KooWG9yo3RuK2mbLKEeaZAEmzc5yMFK7RD7fpLK22H6Wm4Yu
2024-11-14T11:44:09.380Z	DEBUG	bitswap/server/decision	decision/engine.go:919	Bitswap engine <- msg	{"local": "12D3KooWB3kXpib1beYTjGkpyn1pYuqH6mfbkNj9ssfgx5qb22nN", "from": "12D3KooWG9yo3RuK2mbLKEeaZAEmzc5yMFK7RD7fpLK22H6Wm4Yu", "entryCount": 1}
2024-11-14T11:44:09.381Z	DEBUG	bitswap/server/decision	decision/engine.go:733	Bitswap engine <- cancel	{"local": "12D3KooWB3kXpib1beYTjGkpyn1pYuqH6mfbkNj9ssfgx5qb22nN", "from": "12D3KooWG9yo3RuK2mbLKEeaZAEmzc5yMFK7RD7fpLK22H6Wm4Yu", "cid": "bagipaamr6aaqyaaaaaaaaaaakmaaaaaa"}
2024-11-14T11:44:09.384Z	DEBUG	basichost	basic/basic_host.go:483	negotiated: /celestia/private/shwap/ipfs/bitswap/1.2.0 (took 3.609724ms)
2024-11-14T11:44:09.386Z	DEBUG	bitswap/network	network/ipfs_impl.go:430	bitswap net handleNewStream from 12D3KooWG9yo3RuK2mbLKEeaZAEmzc5yMFK7RD7fpLK22H6Wm4Yu
2024-11-14T11:44:09.386Z	DEBUG	bitswap/server/decision	decision/engine.go:919	Bitswap engine <- msg	{"local": "12D3KooWB3kXpib1beYTjGkpyn1pYuqH6mfbkNj9ssfgx5qb22nN", "from": "12D3KooWG9yo3RuK2mbLKEeaZAEmzc5yMFK7RD7fpLK22H6Wm4Yu", "entryCount": 1}
2024-11-14T11:44:09.387Z	DEBUG	bitswap/server/decision	decision/engine.go:945	Bitswap engine <- want-have	{"local": "12D3KooWB3kXpib1beYTjGkpyn1pYuqH6mfbkNj9ssfgx5qb22nN", "from": "12D3KooWG9yo3RuK2mbLKEeaZAEmzc5yMFK7RD7fpLK22H6Wm4Yu", "cid": "bagipaamr6aaqyaaaaaaaaaaakuaaaaaa"}
2024-11-14T11:44:09.387Z	DEBUG	bitswap/server/decision	decision/engine.go:785	Bitswap engine: block found	{"local": "12D3KooWB3kXpib1beYTjGkpyn1pYuqH6mfbkNj9ssfgx5qb22nN", "from": "12D3KooWG9yo3RuK2mbLKEeaZAEmzc5yMFK7RD7fpLK22H6Wm4Yu", "cid": "bagipaamr6aaqyaaaaaaaaaaakuaaaaaa", "isWantBlock": false}
2024-11-14T11:44:09.388Z	DEBUG	bitswap/server/decision	decision/engine.go:585	Bitswap process tasks	{"local": "12D3KooWB3kXpib1beYTjGkpyn1pYuqH6mfbkNj9ssfgx5qb22nN", "taskCount": 1}
2024-11-14T11:44:09.388Z	DEBUG	bitswap/server/decision	decision/engine.go:638	Bitswap engine -> msg	{"local": "12D3KooWB3kXpib1beYTjGkpyn1pYuqH6mfbkNj9ssfgx5qb22nN", "to": "12D3KooWG9yo3RuK2mbLKEeaZAEmzc5yMFK7RD7fpLK22H6Wm4Yu", "blockCount": 0, "presenceCount": 1, "size": 22}
2024-11-14T11:44:09.388Z	DEBUG	swarm2	swarm/swarm.go:475	[12D3KooWB3kXpib1beYTjGkpyn1pYuqH6mfbkNj9ssfgx5qb22nN] opening stream to peer [12D3KooWG9yo3RuK2mbLKEeaZAEmzc5yMFK7RD7fpLK22H6Wm4Yu]
2024-11-14T11:44:09.712Z	DEBUG	basichost	basic/basic_host.go:463	protocol mux failed: stream reset, but failed to convert stream error 268: error code outside of expected range (took 10.236134ms, id:12D3KooWG9-1-92, remote peer:12D3KooWG9yo3RuK2mbLKEeaZAEmzc5yMFK7RD7fpLK22H6Wm4Yu, remote addr:/ip4/172.18.0.1/udp/57998/quic-v1/webtransport)
2024-11-14T11:44:09.713Z	DEBUG	swarm2	swarm/swarm.go:475	[12D3KooWB3kXpib1beYTjGkpyn1pYuqH6mfbkNj9ssfgx5qb22nN] opening stream to peer [12D3KooWG9yo3RuK2mbLKEeaZAEmzc5yMFK7RD7fpLK22H6Wm4Yu]
2024-11-14T11:44:09.720Z	DEBUG	basichost	basic/basic_host.go:380	failed to fetch local IPv6 address	{"error": "no route found for ::"}
2024-11-14T11:44:09.721Z	DEBUG	bitswap/server	server/server.go:402	failed to send blocks message	{"peer": "12D3KooWG9yo3RuK2mbLKEeaZAEmzc5yMFK7RD7fpLK22H6Wm4Yu", "error": "failed to negotiate protocol: stream reset, but failed to convert stream error 386759528: error code outside of expected range"}
2024-11-14T11:44:09.721Z	DEBUG	bitswap/server	server/server.go:324	Bitswap.TaskWorker.Loop	{"ID": 4}
2024-11-14T11:44:09.719Z	DEBUG	bitswap/server	server/server.go:402	failed to send blocks message	{"peer": "12D3KooWG9yo3RuK2mbLKEeaZAEmzc5yMFK7RD7fpLK22H6Wm4Yu", "error": "failed to negotiate protocol: stream reset, but failed to convert stream error 386759528: error code outside of expected range"}
2024-11-14T11:44:09.722Z	DEBUG	bitswap/server	server/server.go:324	Bitswap.TaskWorker.Loop	{"ID": 5}
2024-11-14T11:44:09.723Z	DEBUG	bitswap/server	server/server.go:402	failed to send blocks message	{"peer": "12D3KooWG9yo3RuK2mbLKEeaZAEmzc5yMFK7RD7fpLK22H6Wm4Yu", "error": "failed to negotiate protocol: stream reset, but failed to convert stream error 386759528: error code outside of expected range"}
2024-11-14T11:44:09.725Z	DEBUG	bitswap/server	server/server.go:402	failed to send blocks message	{"peer": "12D3KooWG9yo3RuK2mbLKEeaZAEmzc5yMFK7RD7fpLK22H6Wm4Yu", "error": "failed to negotiate protocol: Application error 0x100 (remote)"}
2024-11-14T11:44:09.725Z	DEBUG	bitswap/server	server/server.go:324	Bitswap.TaskWorker.Loop	{"ID": 6}
2024-11-14T11:44:09.723Z	DEBUG	bitswap/server	server/server.go:324	Bitswap.TaskWorker.Loop	{"ID": 3}
2024-11-14T11:44:09.726Z	DEBUG	bitswap/server	server/server.go:402	failed to send blocks message	{"peer": "12D3KooWG9yo3RuK2mbLKEeaZAEmzc5yMFK7RD7fpLK22H6Wm4Yu", "error": "failed to negotiate protocol: Application error 0x100 (remote)"}
2024-11-14T11:44:09.727Z	DEBUG	bitswap/server	server/server.go:324	Bitswap.TaskWorker.Loop	{"ID": 7}
2024-11-14T11:44:09.727Z	DEBUG	bitswap/server	server/server.go:402	failed to send blocks message	{"peer": "12D3KooWG9yo3RuK2mbLKEeaZAEmzc5yMFK7RD7fpLK22H6Wm4Yu", "error": "failed to negotiate protocol: stream reset, but failed to convert stream error 386759528: error code outside of expected range"}
2024-11-14T11:44:09.727Z	DEBUG	bitswap/server	server/server.go:324	Bitswap.TaskWorker.Loop	{"ID": 2}
2024-11-14T11:44:09.727Z	DEBUG	bitswap/server	server/server.go:402	failed to send blocks message	{"peer": "12D3KooWG9yo3RuK2mbLKEeaZAEmzc5yMFK7RD7fpLK22H6Wm4Yu", "error": "failed to negotiate protocol: Application error 0x100 (remote)"}
2024-11-14T11:44:09.727Z	DEBUG	bitswap/server	server/server.go:324	Bitswap.TaskWorker.Loop	{"ID": 0}
2024-11-14T11:44:09.728Z	DEBUG	bitswap/server	server/server.go:402	failed to send blocks message	{"peer": "12D3KooWG9yo3RuK2mbLKEeaZAEmzc5yMFK7RD7fpLK22H6Wm4Yu", "error": "failed to negotiate protocol: stream reset, but failed to convert stream error 386759528: error code outside of expected range"}
2024-11-14T11:44:09.728Z	DEBUG	bitswap/server	server/server.go:324	Bitswap.TaskWorker.Loop	{"ID": 1}

@zvolin
Copy link
Author

zvolin commented Nov 14, 2024

the strange thing is that errors aren't always shown. Sometimes there's error and sometimes logs in go node look completely normal, bitswap gets the stream, writes to it and closes

@zvolin
Copy link
Author

zvolin commented Nov 14, 2024

I think it can be an issue on Rust side. It always happens right after:

2024-11-14T13:18:54.2Z DEBUG Connection::poll: libp2p_ping::handler: Ping failure: Other { error: Custom { kind: Other, error: JsError("WebTransportError: WebTransportStream StopSending") } }

@Wondertan
Copy link
Contributor

@zvolin, see this comment multiformats/go-multistream#115 (comment)

@zvolin
Copy link
Author

zvolin commented Nov 14, 2024

this doesn't reproduce in chrome based browsers. May indicate some bug in firefox? 🤔

@MarcoPolo
Copy link
Collaborator

The ping errors are red herrings I think.

@MarcoPolo
Copy link
Collaborator

@zvolin do you think you could update the rust code to print out the QUIC Stream ID on errors? That would help debugging as you can then follow the stream data in Wireshark.

@MarcoPolo
Copy link
Collaborator

I'm trying Firefox, and I'm not getting stuck. The height keeps increasing. I'm also not seeing the three other errors you mention. Since you can repro, could you try running the bridge with this go-libp2p patch and sharing the logs:

https://gist.github.com/MarcoPolo/ba1eaeb571795bdfad86ba536c7475a4

That patch does 3 things:

  1. Lets ping streams be open indefinitely, so we should stop seeing the ping error.
  2. Logs a stack trace and stream ID whenever we hit a stream reset, and on some stream closes. The closes are normal, but I just wanted to know where it was happening.
  3. Writes the SSL Keylog file so that the QUIC connection can be inspected with wireshark if an env is set. This is optional. Use SSLKEYLOGFILE=/tmp/sslkeylog

If you can see which stream id hits the issue, you can then use Wireshark to inspect the stream contents with the query:

quic.stream.stream_id eq <STREAM_ID>

I'm running the bridge (using git tag v0.18.3-mocha) with the following params:

SSLKEYLOGFILE=/tmp/sslkeylog ./build/celestia bridge start --rpc.skip-auth=false --rpc.addr 0.0.0.0 \
  --log.level debug \
  --log.level.module "share/discovery:warn,core:error,node:error,badger4:error,header/store:error,header/sync:error,basichost:debug" \
  --core.ip 127.0.0.1 --p2p.network private

If you repro it, could you share logs, pcapng (wireshark capture), and the sslkeylog file? That should make it clear what's going on.

@MarcoPolo
Copy link
Collaborator

MarcoPolo commented Nov 14, 2024

This closed as I merged the multistream fix, but re-opening for the follow up issues.

@MarcoPolo MarcoPolo reopened this Nov 14, 2024
@zvolin
Copy link
Author

zvolin commented Nov 15, 2024

thanks. I just had to confirm it to myself because I couldn't stop thinking it's that, those 20s are so consistent. So I tried to reproduce stop sending on a stream from browser and then accepting a few incoming streams with just pure webtransport-go + javascript, and of course it works perfectly fine and I proved myself wrong 😛 I'll try with wireshark

@zvolin
Copy link
Author

zvolin commented Nov 15, 2024

do you think you could update the rust code to print out the QUIC Stream ID on errors?

I'm afraid there's no API exposed by browser to do that.

If you repro it, could you share logs, pcapng (wireshark capture), and the sslkeylog file? That should make it clear what's going on.

Here are all the logs and the pcapng. I've also added 2 additional patches for rust and go libp2p, to print opening and accepting streams. Wireshark may not help, logs show that indeed no streams are opened on go side.

Here is last stream that rust side saw:

2024-11-15T15:20:05.815000064Z  WARN Connection::poll: libp2p_webtransport_websys::connection: new inbound stream

and corresponding go side log:

bridge-0-1  | Opening stream 69

After that, in go logs you can see no new streams being opened (but no errors) even tho it still receives bitswap requests from lumina. The things stay like that until I stop rust node, after which the call stacks start appearing on go node.

I'm trying Firefox, and I'm not getting stuck. The height keeps increasing.

I was wondering if it can be some issue with my setup, but it seems to constantly reproduce for 2 other guys from my team and one from Prism. Can you share what firefox version and os are you using?
Also the height increment is okay, it's because we still get new gossipsub messages on an established stream, the reproduction is based on Received sample at 74: false logs, after some time you should see only false where previously most (all?) are true. It means we didn't get block from bitswap, and with additional rust libp2p patch you can also see no new incoming streams.

@zvolin
Copy link
Author

zvolin commented Nov 15, 2024

From the first glance that looks very similar to what @Wondertan reported in quic-go, except it happens after 20s instead of minutes if client is firefox. But client can reach server, server can't open a new stream to client.

@MarcoPolo
Copy link
Collaborator

I think I'm reproducing a similar issue where eventually the server stops being able to open new streams to the client, but in my case the Go server keeps trying, it just fails to open a new stream due to the timeout being hit on stream open. The stream fails to open because firefox has not given us any more stream credits (it hasn't sent a new MAX_STREAMS frame). You can see we are blocked when we send a STREAMS_BLOCKED frame.

Sorry for the trouble, but could you do another run and export the qlogs and share these? Do this by setting the env var QLOGDIR=/tmp/qlogs/ on the server. You'll be able to explore it with https://qvis.quictools.info. Please make sure you are using the latest go-libp2p version (v0.37.0) as well.

@MarcoPolo
Copy link
Collaborator

My env:

OS: macOS 15.0.1
FF: 132.0.1 (aarch64)

@zvolin
Copy link
Author

zvolin commented Nov 19, 2024

The stream fails to open because firefox has not given us any more stream credits (it hasn't sent a new MAX_STREAMS frame). You can see we are blocked when we send a STREAMS_BLOCKED frame.

The flow in qlog is exactly like you said.

I've patched rust-libp2p to count and report open inbound and outbound streams and they are quite stable around 2 outbound and 1 inbound. This leads me to thinking it could be some issue with stream closing. Either it's firefox that holds the streams after our calls to close or go / quic doesn't recognize some of them were closed (although it calls close itself 🤔).

@zvolin
Copy link
Author

zvolin commented Nov 19, 2024

Note that these frames (and the corresponding transport parameters) do not describe the number of streams that can be opened concurrently. The limit includes streams that have been closed as well as those that are open.

https://datatracker.ietf.org/doc/html/rfc9000#section-19.11-8

Yeah, so my understanding was wrong.

@zvolin
Copy link
Author

zvolin commented Nov 20, 2024

I'm closing this as original issue was resolved.

I'll investigate the firefox not sending max_streams further, but I'm not sure what is the good place to open the issue about it yet. I've created a minimal reproduction of pure javascript + webtransport-go and here firefox sends max_streams frame every few writes. Thanks for your support!

@zvolin zvolin closed this as completed Nov 20, 2024
@sukunrt
Copy link
Member

sukunrt commented Nov 25, 2024

We can keep this open or if you want you can create another issue with just the specific error where the server is unable to open new streams.

Are you sure you're reading all the data from the stream and Closing it(in the browser)? I ask because that's the only way I can reproduce the scenario with this non libp2p repro: https://github.com/zvolin/webtransport-go-js-interop . I guess you are because it doesn't reproduce in chrome based browsers.

It does look like a firefox bug though. In the qlog you've shared, I see the firefox side resetting its write half of the stream on receiving STOP_SENDING, as it should. And it has also ACKed the FIN for the read end of the stream. After this point, the only reason to not send a MAX_STREAMS frame is if there's unread stream data in the receive buffer.

@zvolin
Copy link
Author

zvolin commented Nov 28, 2024

Thanks for checking.

We can keep this open

I believe the bug is unrelated to go-libp2p. I've set up local devenv for firefox and neqo and will check from this side now.

Are you sure you're reading all the data from the stream and Closing it(in the browser)?

From the side of javascript api, yes. But I'm not sure if everything is read under the hood. Recently I'm thinking the root cause can be related to those logs:

DEBUG Connection::poll: beetswap::incoming_stream: Message decoding failed: JavaScript error: TypeError: Error in input stream

Maybe after it happens, underlying http3 impl get into some invalid state, or the glue between it and js doesn't handle that properly.

I ask because that's the only way I can reproduce the scenario with this non libp2p repro

This isn't a reproduction, rather sanity check for myself. This code didn't reproduce the issue for me too. I have also a similar setup which uses webtransport api from within wasm and I sometimes get STREAMS_BLOCKED frame but it looks differently, browser never sees any incoming stream from the beginning

@zvolin
Copy link
Author

zvolin commented Nov 28, 2024

may also be related to this https://bugzilla.mozilla.org/show_bug.cgi?id=1899812. However in my case amount of data transmitted is nowhere close to the one in the repro there. But it's the only other case where I've seen the TypeError: error in input stream

@zvolin
Copy link
Author

zvolin commented Nov 28, 2024

Just for a note:

I'm trying Firefox, and I'm not getting stuck.

I think the difference is that I used lumina's docker devnet of celestia-nodes, and Marco ran just stock celestia-node. We had devnet configured to produce blocks each second instead of 12s, so reproduction was much quicker

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants