Releases: libp2p/go-libp2p-kad-dht
Release list
v0.42.1
Note
This release was brought to you by the Shipyard team.
What's Changed
- fix: validate local records in SearchValue by @guillaumemichel in #1285
Full Changelog: v0.42.0...v0.42.1
v0.42.0
Note
This release was brought to you by the Shipyard team.
Highlights
⚠️ Breaking changes
Constructors no longer take a context.Context (#1282)
The lifecycle context was removed from all constructors. The DHT now runs until Close() is called; cancelling a context no longer tears it down.
| Before | After |
|---|---|
dht.New(ctx, h, opts...) |
dht.New(h, opts...) |
dht.NewDHT(ctx, h, dstore) |
dht.NewDHT(h, dstore) |
dht.NewDHTClient(ctx, h, dstore) |
dht.NewDHTClient(h, dstore) |
dual.New(ctx, h, opts...) |
dual.New(h, opts...) |
records.NewProviderManager(ctx, ...) |
records.NewProviderManager(...) |
rtrefresh.NewRtRefreshManager(ctx, ...) |
rtrefresh.NewRtRefreshManager(...) |
Migration: drop the context argument. If you relied on cancelling the constructor context to shut the DHT down, call Close() instead. Close() blocks until all long-lived components have stopped. Note that in-flight RPC handlers are owned by the libp2p host, so close the host before closing any datastore handed to the DHT.
ProviderStore option removed (#1277 by @guillaumemichel)
Custom ProviderStore implementations can no longer be injected; the DHT always runs the built-in provider manager. The dht.ProviderStore(...) option is replaced by datastore-level configuration:
// Before: inject a custom provider store
d, err := dht.New(ctx, h, dht.ProviderStore(customStore))
// After: configure the built-in provider manager
d, err := dht.New(h,
dht.ProviderDatastore(dstore), // dedicated datastore for provider records
dht.ProviderManagerOpts( // tune the built-in manager
records.ProvideValidity(48*time.Hour),
records.Cache(myLRU),
),
)New options: ValueDatastore and ProviderDatastore give value and provider records their own physical datastores (both default to the datastore set with Datastore). The dht.ProviderStore() getter on IpfsDHT remains available.
Value records are stored under namespaced datastore keys (#1277)
Value records used to be stored at the datastore root as /<base32(key)>; they are now namespaced by record type: /<namespace>/<base32(key)> (e.g. /pk/..., /ipns/...). This keeps a shared datastore collision-free and enables per-namespace garbage collection.
Migration: there is no automatic key migration. On upgrade, value records persisted by earlier versions are simply not found under the new layout — nodes will re-store them as the network republishes (records expire after MaxRecordAge, 48h by default, anyway). If you persist the DHT datastore and want to reclaim space, you can delete leftover root-level base32 keys. Provider records are unaffected (already namespaced under /providers/).
What's Changed
- fix: cap closer peers accepted per response by @lidel in #1270
- fix: correct delete-error check in provider gc by @lidel in #1271
- chore(deps): bump golang.org/x/net from 0.53.0 to 0.55.0 by @dependabot[bot] in #1272
- Update dependencies by @gammazero in #1273
- chore(deps): bump golang.org/x/crypto from 0.51.0 to 0.52.0 by @dependabot[bot] in #1274
- test: fix flaky TestOptimisticProvide timeout and peerIDs seeding by @guillaumemichel in #1276
- upgrade go-test to v0.4.0 by @gammazero in #1275
- test: fix flaky TestProvidesMany by @guillaumemichel in #1278
- chore: bump go-libp2p-kbucket by @guillaumemichel in #1279
- chore: migrate from math/rand to math/rand/v2 by @guillaumemichel in #1280
- refactor(pb): bound the serialized size of a peer record by @guillaumemichel in #1281
- update dependencies by @gammazero in #1283
- refactor(records): consolidate records persistence by @guillaumemichel in #1277
- refactor: remove lifecycle context from constructors by @guillaumemichel in #1282
Full Changelog: v0.41.0...v0.42.0
v0.41.0
Note
This release was brought to you by the Shipyard team.
What's Changed
- chore(deps): bump github.com/quic-go/quic-go from 0.59.0 to 0.59.1 by @dependabot[bot] in #1258
- fix(keystore): non-colliding reset slot prefixes by @lidel in #1262
- tests: fix flaky
TestBootStrapWhenRTIsEmptyby @guillaumemichel in #1264 - fix: cut reprovide peak memory with key count by @lidel in #1259
- fix(provider): reprovide all regions when resume is disabled by @guillaumemichel in #1267
- fix(provider): cover full keyspace when peers cluster under one prefix by @guillaumemichel in #1265
Full Changelog: v0.40.0...v0.41.0
v0.40.0
Note
This release was brought to you by the Shipyard team.
Highlights
⚠️ Breaking change
SweepingProvider.Stats()now takes acontext.Contextand returns(stats.Stats, error). Callers must pass a ctx with a deadline — the key count is fetched through the keystore worker and can stall behind a slow datastore op. (#1251 by @guillaumemichel)
Fixes
- Per-peer timeout on
ADD_PROVIDERsends so a single slow peer can't stall a reprovide cycle. (#1252 by @guillaumemichel) batchReprovidenow holdscycleStatsLkfor the full defer, fixing a stats race. (#1255 by @guillaumemichel)ResettableKeystorereset is faster and no longer blocks the worker. (#1256 by @guillaumemichel)
Other
- Dependency updates. (#1250 by @gammazero)
Full Changelog: v0.39.2...v0.40.0
v0.39.2
Note
This release was brought to you by the Shipyard team.
What's Changed
- feat(provider): allow WithReprovideInterval(0) for burst-only mode by @lidel in #1246
- test: fix flaky TestStartProvidingSingle by @guillaumemichel in #1247
- chore: bump boxo to v0.39.0 by @lidel in #1248
Full Changelog: v0.39.1...v0.39.2
v0.39.1
Note
This release was brought to you by the Shipyard team.
What's Changed
- tests: fix flaky TestStartProvidingSingle by @guillaumemichel in #1242
- fix(provider): reduce provide log verbosity by @lidel in #1243
- fix: data race on AddrInfo.Addrs in queryPeer by @lidel in #1244
Full Changelog: v0.39.0...v0.39.1
v0.39.0
Note
This release was brought to you by the Shipyard team.
Breaking changes
keystore.NewResettableKeystore()now takeskeystore.ResettableKeystoreOptioninstead ofkeystore.Option. Wrap existing options withKeystoreOption()to migrate.
What's Changed
- Expose provider record TTL as options by @phillebaba in #1237
- feat(provider/keystore): alt datastore wipe by @guillaumemichel in #1233
- chore: bump deps by @guillaumemichel in #1239
New Contributors
- @phillebaba made their first contribution in #1237
Full Changelog: v0.38.0...v0.39.0
v0.38.0
What's Changed
- fix(provider): close datastore results by @guillaumemichel in #1226
- chore: go-libdht org transfer by @guillaumemichel in #1229
- refactor: apply go fix modernizers from Go 1.26 by @gammazero in #1231
- update dependencies and minimum go version by @gammazero in #1230
- fix(provider/keystore): protect keystore size during reset by @guillaumemichel in #1227
- chore(deps): bump github.com/pion/dtls/v3 from 3.0.6 to 3.1.0 by @dependabot[bot] in #1232
- chore(deps): bump github.com/pion/dtls/v3 from 3.1.0 to 3.1.1 by @dependabot[bot] in #1234
- update go-datastore to v0.9.1 by @gammazero in #1235
Full Changelog: v0.37.1...v0.38.0
v0.37.1
What's Changed
- fix(routing): add per-peer timeouts for PutValue and Provide by @lidel in #1222
- Update dependencies by @gammazero in #1223
- replace multierr with errors.Join by @gammazero in #1224
Full Changelog: v0.37.0...v0.37.1
v0.37.0
Note
This release was brought to you by the Shipyard team.
Overview
This is a minor release focused on dependency updates and bug fixes. The most significant changes are:
- Breaking change: The deprecated
providers/package has been removed. Users still importing fromproviders/must migrate torecords/. - Dependency update: Upgraded to go-libp2p v0.46.
- Provider bug fixes: Several fixes to improve provider system stability, including proper handling of peers during keyspace exploration.
This release contains no major feature additions but improves overall reliability of the DHT implementation.
What's Changed
- chore: bump go-libp2p to v0.46 by @guillaumemichel in #1209
- tests: fix flaky TestHandleRemotePeerProtocolChanges by @guillaumemichel in #1212
- tests: fix flaky TestOptimisticProvide by @guillaumemichel in #1213
- fix(records): clone addresses received from peerstore by @guillaumemichel in #1210
- fix(provider): don't discard peers if they all share CPL during exploration by @guillaumemichel in #1216
- chore: remove deprecated providers pkg by @guillaumemichel in #1211
- fix(provider): close worker pool before wg.Wait() by @lidel in #1218
- fix(provider): hold scheduleLk when reading schedule.Size() in test by @lidel in #1219
- fix(provider): keyspace exploration should succeed with a single peer by @guillaumemichel in #1220
Full Changelog: v0.36.0...v0.37.0
