Skip to content

Releases: ipfs/boxo

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.

v0.24.2

25 Oct 14:57
814ad5d
Compare
Choose a tag to compare

Changed

Fixed

  • bitswap/client: fix panic if current live count is greater than broadcast limit #702

Full Changelog: v0.24.1...v0.24.2

This release was brought to you by the Shipyard team.

v0.24.1

22 Oct 22:21
392493d
Compare
Choose a tag to compare

Changed

  • routing/http/client: creating delegated routing client with New now defaults to querying delegated routing server with DefaultProtocolFilter (IPIP-484) #689
  • updated go-libp2p to v0.36.5
  • updated dependencies #693
  • update go-libp2p-kad-dht to v0.27.0

Fixed

  • routing/http/client: optional address and protocol filter parameters from IPIP-484 use human-readable , instead of %2C. #688
  • bitswap/client Cleanup live wants when wants are canceled. This prevents live wants from continuing to get rebroadcasted even after the wants are canceled. #690
  • Fix problem adding invalid CID to exhausted wants list resulting in possible performance issue. #692

Full Changelog: v0.24.0...v0.24.1

This release was brought to you by the Shipyard team.

v0.24.0

03 Oct 19:09
2fdde02
Compare
Choose a tag to compare

Added

  • boxo/bitswap/server:
    • A new WithWantHaveReplaceSize(n) option can be used with bitswap.New to fine-tune cost-vs-performance. It sets the maximum size of a block in bytes up to which the bitswap server will replace a WantHave with a WantBlock response. Setting this to 0 disables this WantHave replacement and means that block sizes are not read when processing WantHave requests. #672
  • routing/http:
    • added support for address and protocol filtering to the delegated routing server (IPIP-484) #671 #678
    • added support for address and protocol filtering to the delegated routing client (IPIP-484) #678. To add filtering to the client, use the WithFilterAddrs and WithFilterProtocols options when creating the client.Client-side filtering for servers that don't support filtering is enabled by default. To disable it, use the disableLocalFiltering option when creating the client.

Fixed

  • unixfs/hamt Log error instead of panic if both link and shard are nil #393

Full Changelog: v0.23.0...v0.24.0

This release was brought to you by the Shipyard team.

v0.23.0

05 Sep 21:34
41b8882
Compare
Choose a tag to compare

Added

  • files, ipld/unixfs, mfs and tar now support optional UnixFS 1.5 mode and modification time metadata #653
  • gateway deserialized responses will have Last-Modified set to value from optional UnixFS 1.5 modification time field (if present in DAG) and a matching If-Modified-Since will return 304 Not Modified (UnixFS 1.5 files only) #659

Changed

  • updated Go in go.mod to 1.22 #661
  • updated go-libp2p to v0.36.3
  • chunker refactored to reduce overall memory use by reducing heap fragmentation #649
  • bitswap/server minor performance improvements in concurrent operations #666
  • removed dependency on go-ipfs-blocksutil #656

Full Changelog: v0.22.0...v0.23.0

This release was brought to you by the Shipyard team.

v0.22.0

06 Aug 22:52
f0cf57d
Compare
Choose a tag to compare

What's Changed

Changed

  • go-libp2p dependency updated to v0.36 (release notes)
  • bitswap/server minor memory use and performance improvements #634
  • bitswap/server PeerLedger.Wants now returns bool (interface change from Wants(p peer.ID, e wl.Entry) to Wants(p peer.ID, e wl.Entry) bool) #629
  • bitswap unify logger names to use uniform format bitswap/path/pkgname #637
  • gateway now always returns meaningful cache-control headers for generated HTML listings of UnixFS directories #643
  • util generate random test data using ipfs/go-test instead of internal util code #638

Fixed

  • boxo/gateway now correctly returns 404 Status Not Found instead of 500 when the requested content cannot be found due to offline exchange, gateway running in no-fetch (non-recursive) mode, or a similar restriction that only serves a specific set of CIDs. #630
  • bitswap/client fix memory leak in BlockPresenceManager due to unlimited map growth. #636
  • bitswap/network fixed race condition when a timeout occurred before hole punching completed while establishing a first-time stream to a peer behind a NAT #651
  • bitswap: wantlist overflow handling now cancels existing entries to make room for newer entries. This fix prevents the wantlist from filling up with CIDs that the server does not have. #629

New Contributors

Full Changelog: v0.21.0...v0.22.0

This release was brought to you by the Shipyard team.

v0.21.0

21 Jun 00:13
9555624
Compare
Choose a tag to compare

Changed

Removed

Fixed

  • routing/http: the FindPeer now returns routing.ErrNotFound when no addresses are found
  • routing/http: the FindProvidersAsync no longer causes a goroutine buildup

Full Changelog: v0.20.0...v0.21.0

This release was brought to you by the Shipyard team.

v0.20.0

27 May 10:30
980447e
Compare
Choose a tag to compare

Added

  • gateway has new backend possibilities:
    • NewRemoteBlocksBackend allows you to create a gateway backend that uses one or multiple other gateways as backend. These gateways must support RAW block requests (application/vnd.ipld.raw), as well as IPNS Record requests (application/vnd.ipfs.ipns-record). With this, we also introduced NewCacheBlockStore, NewRemoteBlockstore and NewRemoteValueStore.
    • NewRemoteCarBackend allows you to create a gateway backend that uses one or multiple Trustless Gateways as backend. These gateways must support CAR requests (application/vnd.ipld.car), as well as the extensions describe in IPIP-402. With this, we also introduced NewCarBackend, NewRemoteCarFetcher and NewRetryCarFetcher.
  • gateway now sets the Content-Location header for requests with non-default content format, as a result of content negotiation. This allows generic and misconfigured HTTP caches to store Deserialized, CAR and Block responses separately, under distinct cache keys.
  • gateway now supports car-dups, car-order and car-version as query parameters in addition to the application/vnd.ipld.car parameters sent via Accept header. The parameters in the Accept header have always priority, but including them in URL simplifies HTTP caching and allows use in Content-Location header on CAR responses to maximize interoperability with wide array of HTTP caches.
  • bitswap/server now allows to override the default peer ledger with WithPeerLedger.

Fixed

  • routing/http/server now returns 404 Status Not Found when no records can be found.
  • routing/http/server now supports legacy RSA PeerIDs encoded as Base58 Multihash

What's Changed

Full Changelog: v0.18.0...v0.20.0

This release was brought to you by the Shipyard team.