IPFS Cluster v1.0.1 is a maintenance release ironing out some issues and
bringing a couple of improvements around observability of cluster performance:
- We have fixed the
ipfscluster_pins
metric and added a few new ones that
help determine how fast the cluster can pin and add blocks. - We have added a new Informer that broadcasts current pinning-queue size,
which means we can take this information into account when making
allocations, essentially allowing peers with big pinning queues to be
relieved by peers with smaller pinning queues.
Please read below for a list of changes and things to watch out for.
List of changes
Breaking changes
Peers running IPFS Cluster v1.0.0 will not be able to read the pin's user-set
metadata fields for pins submitted by peers in later versions, since metadata
is now stored on a different protobuf field. If this is an issue, all peers in
the cluster should upgrade.
Features
- Pinqueue Informer: let pinning queue size inform allocation selection | ipfs/ipfs-cluster#1649 | ipfs/ipfs-cluster#1657
- Metrics: add additional Prometheus metrics | ipfs/ipfs-cluster#1650 | ipfs/ipfs-cluster#1659
Bug fixes
- Fix: state import can result in different CRDT-heads | ipfs/ipfs-cluster#1547 | ipfs/ipfs-cluster#1664
- Fix:
ipfs-cluster-ctl pin ls
hangs | ipfs/ipfs-cluster#1663 - Fix: restapi client panics on retry | ipfs/ipfs-cluster#1655 | ipfs/ipfs-cluster#1662
- Fix: bad behavior while adding and ipfs is down | ipfs/ipfs-cluster#1646
- Fix:
ipfscluster_pins
metric issues bad values | ipfs/ipfs-cluster#1645
Other changes
- Dependency upgrades (includes go-libp2p v0.19.1) | ipfs/ipfs-cluster#1660
- Build with go1.18 | ipfs/ipfs-cluster#1661
- Do not issue freespace metrics when freespace is 0 | ipfs/ipfs-cluster#1656
- Convert pinning/queued/error metrics go gauges | ipfs/ipfs-cluster#1647 | ipfs/ipfs-cluster#1651
Upgrading notices
Configuration changes
There is a new pinqueue
configuration object inside the informer
section on newly initialized configurations:
"informer": {
...
"pinqueue": {
"metric_ttl": "30s",
"weight_bucket_size": 100000
},
...
This enables the Pinqueue Informer, which broadcasts metrics containing the size of the pinqueue with the metric weight divided by weight_bucket_size
. The new metric is not used for allocations by default, and it needs to be manually added to the allocate_by
option in the allocator, usually like:
"allocator": {
"balanced": {
"allocate_by": [
"tag:group",
"pinqueue",
"freespace"
]
}
REST API
No changes to REST API.
IPFS Proxy API
No changes to IPFS Proxy API.
Go APIs
No relevant changes to Go APIs, other than the PinTracker interface now requiring a PinQueueSize
method.
Other
The following metrics are now available in the Prometheus endpoint when enabled:
ipfscluster_pins_ipfs_pins gauge
ipfscluster_pins_pin_add counter
ipfscluster_pins_pin_add_errors counter
ipfscluster_blocks_put counter
ipfscluster_blocks_added_size counter
ipfscluster_blocks_added counter
ipfscluster_blocks_put_error counter
The following metrics were converted from counter
to gauge
:
ipfscluster_pins_pin_queued
ipfscluster_pins_pinning
ipfscluster_pins_pin_error
Peers that are reporting freespace
as 0 and which use this metric to
allocate pins, will no longer be available for allocations (they stop
broadcasting this metric). This means setting StorageMax
on IPFS to 0
effectively prevents any pins from being explicitly allocated to a peer
(that is, when replication_factor != everywhere).