Skip to content

Releases: ipfs/boxo

v0.29.0

05 Mar 04:59
c4b514e
Compare
Choose a tag to compare

What's Changed

Added

  • feat(bitswap/client): MinTimeout for DontHaveTimeoutConfig #865
  • httpnet: Transparent HTTP-block retrieval support over Trustless Gateways [#747]((#747):
    • Complements Bitswap as a block-retrieval mechanism, implementing bitswap/network.
    • Understands peers found in provider records with /.../http endpoints (trustless gateway).
    • Treats them as "Bitswap" peers, except instead of using Bitswap it makes HTTP/2 requests to discover (HEAD) and retrieve (GET) individual blocks (?format=raw).
    • A bitswap/network proxy implementation allows co-existance with standard bitswap/network/bsnet.
    • httpnet is not enabled by default. Upstream implementations may use it by modifying how they create the Bitswap network and initialize bitswap.

Changed

  • ipns: The DefaultRecordTTL changed from 1h to 5m #859
  • upgrade to go-libp2p v0.41.0
  • upgrade to go-libp2p-kad-dht [v0.30.2](github.com/libp2p/go-libp2p-kad-dht v0.30.2)
  • upgrade to go-datastore v0.8.2 - includes API updates and removes go-process
  • bitswap/client reduce lock scope of PeerManageer to help performance #860

Removed

  • Removed dependency on github.com/hashicorp/go-multierror so that boxo only depends on one multi-error package, go.uber.org/multierr. #867

Full Changelog: v0.28.0...v0.29.0

v0.28.0

24 Feb 23:46
fd5e082
Compare
Choose a tag to compare

What's Changed

Added

  • bitswap/client: Add DontHaveTimeoutConfig type alias and func DontHaveTimeoutConfig() to expose config defined in internal package.

Changed

  • move ipld/unixfs from gogo protobuf #841
  • provider: Prevent multiple instances of reprovider.Reprovide() from running at the same time. #834
  • upgrade to go-libp2p v0.40.0
  • upgrade to go-libp2p-kad-dht [v0.29.0](github.com/libp2p/go-libp2p-kad-dht v0.29.0)
  • move bitswap and filestore away from gogo protobuf #839
  • updated Go in go.mod to 1.23 #848

Note: This release contains changes to protocol buffer library code. If you depend on deterministic CIDs then please double-check,, before upgrading, that this release does not generate different CIDs.

Full Changelog: v0.27.4...v0.28.0

v0.27.4

04 Feb 17:16
7c1f0a3
Compare
Choose a tag to compare

What's Changed

Fixed

  • Fix memory leaks due to not cleaning up wantlists #829, #833
  • ipns: Improved interop with legacy clients by restoring support for []byte CID in Value field. Value() will convert it to a valid path.Path. Empty Value() will produce NoopPath (/ipfs/bafkqaaa) to avoid breaking existing code that expects a valid record to always produce a valid content path. #830

Full Changelog: v0.27.3...v0.27.4

v0.27.3

01 Feb 07:18
49f6c15
Compare
Choose a tag to compare

What's Changed

Added

  • provider: Added ReprovideInterval and LastRun stats to the Reprovider #815

Removed

  • bitswap/cllient: Remove unused tracking of CID for interested sessions. #821

Fixed

  • bitswap/client: Fix runaway goroutine creation under high load. Under high load conditions, goroutines are created faster than they can complete and the more goroutines creates the slower them complete. This creates a positive feedback cycle that ends in OOM. The fix dynamically adjusts message send scheduling to avoid the runaway condition. #817
  • bitswap/cllient: Fix resource leak caused by recording the presence of blocks that no session cares about. #822

Full Changelog: v0.27.2...v0.27.3

v0.27.2

23 Jan 02:05
8910c2c
Compare
Choose a tag to compare

What's Changed

Fixed

  • bitswap/client: Reverted attempt to send cancels with excluded peer due to additional issues with wantlist accounting #809

Full Changelog: v0.27.1...v0.27.2

v0.27.1

22 Jan 21:20
13fd890
Compare
Choose a tag to compare

What's Changed

Fixed

  • bitswap/client: Fixed fix sending cancels when excluding peer #805

Full Changelog: v0.27.0...v0.27.1

v0.27.0

21 Jan 20:39
9d04741
Compare
Choose a tag to compare

What's Changed

Added

  • gateway Support for custom DNSLink / DoH resolvers on localhost to simplify integration with non-ICANN DNS systems #645

Changed

  • bitswap/client: Do not send CANCEL to peer that block was received from, as this is redundant. #784
  • gateway: The default DNSLink resolver for .eth TLD changed to https://dns.eth.limo/dns-query #781
  • gateway: The default DNSLink resolver for .crypto TLD changed to https://resolver.unstoppable.io/dns-query #782
  • upgrade to go-libp2p-kad-dht v0.28.2
  • bitswap/client: reduce lock scope in messagequeue: lock only needed sections #787

Fixed

  • gateway Fix redirect URLs for subdirectories with characters that need escaping. #779
  • ipns Fix ipns protobuf namespace conflicts by using full package name github.com/ipfs/boxo/ipns/pb/record.proto instead of the generic record.proto #794

Full Changelog: v0.26.0...v0.27.0

v0.26.0

19 Dec 21:32
17db35a
Compare
Choose a tag to compare

What's Changed

Added

  • bitswap/client: Improved timeout configuration for block requests
    • Exposed DontHaveTimeoutConfig to hold configuration values for dontHaveTimeoutMgr which controls how long to wait for requested block before emitting a synthetic DontHave response
    • Added DefaultDontHaveTimeoutConfig() to return a DontHaveTimeoutConfig populated with default values
    • Added optional WithDontHaveTimeoutConfig to allow passing a custom DontHaveTimeoutConfig
    • Setting SetSendDontHaves(false) works the same as before. Behind the scenes, it will disable dontHaveTimeoutMgr by passing a nil onDontHaveTimeout to newDontHaveTimeoutMgr.

Changed

  • 🛠 blockstore and blockservice's WriteThrough() option now takes an "enabled" parameter: WriteThrough(enabled bool).
  • Replaced unmaintained mock time implementation uses in tests: from => to
  • bitswap/client: if a libp2p connection has a context, use context.AfterFunc to cleanup the connection.
  • upgrade to go-libp2p-kad-dht v0.28.1
  • upgrade to go-libp2p v0.38.1
  • blockstore/blockservice: change option to WriteThrough(enabled bool) #749
  • mfs: improve mfs republisher #754

Fixed

  • mfs: directory cache is now cleared on Flush(), liberating the memory used by the otherwise ever-growing cache. References to directories and sub-directories should be renewed after flushing.
  • bitswap/client: Fix leak due to cid queue never getting cleaned up #756
  • bitswap: Drop stream references on Close/Reset 760

Full Changelog: v0.25.0...v0.26.0

v0.25.0

09 Dec 21:48
03edbcd
Compare
Choose a tag to compare

Added

  • routing/http/server: added built-in Prometheus instrumentation to http delegated /routing/v1/ endpoints, with custom buckets for response size and duration to match real world data observed at the delegated-ipfs.dev instance. #718 #724
  • routing/http/server: added configurable routing timeout (DefaultRoutingTimeout being 30s) to prevent indefinite hangs during content/peer routing. Set custom duration via WithRoutingTimeout. #720
  • routing/http/server: exposes Prometheus metrics on prometheus.DefaultRegisterer and a custom one can be provided via WithPrometheusRegistry #722
  • gateway: NewCacheBlockStore and NewCarBackend will use prometheus.DefaultRegisterer when a custom one is not specified via WithPrometheusRegistry #722
  • filestore: added opt-in WithMMapReader option to FileManager to enable memory-mapped file reads #665
  • bitswap/routing ProviderQueryManager does not require calling Startup separate from New. #741
  • bitswap/routing ProviderQueryManager does not use liftcycle context.

Changed

  • bitswap, routing, exchange (#641):
    • ✨ Bitswap is no longer in charge of providing blocks to the newtork: providing functionality is now handled by a exchange/providing.Exchange, meant to be used with provider.System so that all provides follow the same rules (multiple parts of the code where handling provides) before.

    • 🛠 bitswap/client/internal/providerquerymanager has been moved to routing/providerquerymanager where it belongs. In order to keep compatibility, Bitswap now receives a routing.ContentDiscovery parameter which implements FindProvidersAsync(...) and uses it to create a providerquerymanager with the default settings as before. Custom settings can be used by using a custom providerquerymanager to manually wrap a ContentDiscovery object and pass that in as ContentDiscovery on initialization while setting bitswap.WithDefaultProviderQueryManager(false) (to avoid re-wrapping it again).

    • The renovated providedQueryManager will trigger lookups until it manages to connect to MaxProviders. Before it would lookup at most MaxInProcessRequests*MaxProviders and connection failures may have limited the actual number of providers found.

    • 🛠 We have aligned our routing-related interfaces with the libp2p routing ones, including in the reprovider.System.

    • In order to obtain exactly the same behaviour as before (i.e. particularly ensuring that new blocks are still provided), what was done like:

      	bswapnet := network.NewFromIpfsHost(host, contentRouter)
      	bswap := bitswap.New(p.ctx, bswapnet, blockstore)
      	bserv = blockservice.New(blockstore, bswap)
    • becomes:

      	// Create network: no contentRouter anymore
      	bswapnet := network.NewFromIpfsHost(host)
      	// Create Bitswap: a new "discovery" parameter, usually the "contentRouter"
      	// which does both discovery and providing.
      	bswap := bitswap.New(p.ctx, bswapnet, discovery, blockstore)
      	// A provider system that handles concurrent provides etc. "contentProvider"
      	// is usually the "contentRouter" which does both discovery and providing.
      	// "contentProvider" could be used directly without wrapping, but it is recommended
      	// to do so to provide more efficiently.
      	provider := provider.New(datastore, provider.Online(contentProvider)
      	// A wrapped providing exchange using the previous exchange and the provider.
      	exch := providing.New(bswap, provider)
      
      	// Finally the blockservice
      	bserv := blockservice.New(blockstore, exch)
      	...
    • The above is only necessary if content routing is needed. Otherwise:

      	// Create network: no contentRouter anymore
      	bswapnet := network.NewFromIpfsHost(host)
      	// Create Bitswap: a new "discovery" parameter set to nil (disable content discovery)
      	bswap := bitswap.New(p.ctx, bswapnet, nil, blockstore)
      	// Finally the blockservice
      	bserv := blockservice.New(blockstore, exch)
  • routing/http/client: creating delegated routing client with New now defaults to querying delegated routing server with DefaultProtocolFilter (IPIP-484) #689
  • bitswap/client: Wait at lease one broadcast interval before resending wants to a peer. Check for peers to rebroadcast to more often than one broadcast interval.
  • No longer using github.com/jbenet/goprocess to avoid requiring in dependents. #710
  • pinning/remote/client: Refactor remote pinning Ls to take results channel instead of returning one. The previous Ls behavior is implemented by the GoLs function, which creates the channels, starts the goroutine that calls Ls, and returns the channels to the caller #738
  • updated to go-libp2p to v0.37.2

Fixed

  • Do not erroneously update the state of sent wants when a send a peer disconnected and the send did not happen. #452

Full Changelog: v0.24.3...v0.25.0

This release was brought to you by the Shipyard team.

v0.24.3

07 Nov 01:46
980b669
Compare
Choose a tag to compare
  • bitswap/client no longer logs "Received provider X for cid Y not requested to ERROR level, moved to DEBUG #771
  • go.mod updates

Full Changelog: v0.24.2...v0.24.3

This release was brought to you by the Shipyard team.