summarylogtreecommitdiffstats
path: root/changelog
blob: 0fcfe8a7ed2220d1168f4a97d322f4729c52a996 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
# Version 1.1.1

IPFS Cluster v1.1.1 is a maintenance release mostly due to a libp2p-pubsub bug
that may impair the correct distribution of broadcasted metrics in large
clusters.

Along with other dependency upgrades and small fixes, we have also added a new
endpoint to retrieve peer-bandwidth statistics by libp2p protocol.

## List of changes

### Breaking changes

- There are no breaking changes on this release.

### Features

- Libp2p metrics and bandwidth stats for libp2p protocols | ipfs/ipfs-cluster#2056
- ctl: dedicated return value for timeouts | ipfs/ipfs-cluster#1675 | ipfs/ipfs-cluster#2057

### Bug fixes

- Fix: freebsd and windows builds | ipfs/ipfs-cluster#2055
- Fix: defer close() file in ipfs-cluster-follow | ipfs/ipfs-cluster#2058
- Fix: pubsub propagation issues | ipfs/ipfs-cluster#2061 | ipfs/ipfs-cluster#2062

### Other changes

- Dependency upgrades | ipfs/ipfs-cluster#2062

# Version 1.1.0


IPFS Cluster v1.1.0 is a maintenance release that comes with a number of
improvements in libp2p connection and resource management. We are bumping the
minor release version to bring the attention to the slight behavioral changes
included in this release.

In order to improve how clusters with a very large number of peers behave, we
have changed the previous logic which made every peer reconnect constantly to
3 specific peers (usually the "trusted peers" in collaborative clusters). For
obvious reasons, this caused bottlenecks when the clusters grew into the
thousands of peers. Swarm connections should now grow more organically and we
only re-bootstrap when they fall below expectable levels.

Anothe relevant change is the exposure of the libp2p Resource Manager
settings, and the new defaults, which limit libp2p usages to 25% of the
system's total memory and 50% of the process' available file descriptors. The
limits can be adjusted as explained below. The new defaults, along with other
internal details controlling the initialization of the resource manager are
likely more restrictive than the defaults used in previous versions. That
means that memory-constrained systems may start seeing resource-manager errors
where there were none before. The solution is to increase the limits. The
limits are conservative as Kubo is the major resource user at the end of the
day.

We have also updated to the latest Pebble release. This should not cause any
problems for users that already bumped major_format_version when upgrading
to v1.0.8, otherwise we recommend setting it to 16 per the warning printed
on daemon's start.
## List of changes

### Breaking changes

- There are no breaking changes on this release.

### Features

- cluster: expose and customize libp2p's Resource Manager | ipfs/ipfs-cluster#2039 | ipfs/ipfs-cluster#2049
- ipfsproxy: support talking to Kubo over unix sockets | ipfs/ipfs-cluster#2027
- pebble: enable in all archs as default datastore | ipfs/ipfs-cluster#2005 | ipfs/ipfs-cluster#2007
- pebble: set default MajorVersionFormat to newest | ipfs/ipfs-cluster#2019
- cluster: Announce and NoAnnounce options | ipfs/ipfs-cluster#952 | ipfs/ipfs-cluster#2010

### Bug fixes

- go-dot: missing dependency, cannot compile | ipfs/ipfs-cluster#2052 | ipfs/ipfs-cluster#2053
- pebble: fix debug logging not happening. Harden settings against footguns | ipfs/ipfs-cluster#2047
- config: default empty multiaddresses should be [] instead of null | ipfs/ipfs-cluster#2051

### Other changes

- syntax improvement | ipfs/ipfs-cluster#2042
- Dependency upgrades (including Pebble and Raft) | ipfs/ipfs-cluster#2044 | ipfs/ipfs-cluster#2048 | ipfs/ipfs-cluster#2050

## Upgrading notices

### Configuration changes

A resource_manager setting has been added to the main cluster configuration section:

cluster: {
  ...
  "resource_manager": {
    "enabled": true,
    "memory_limit_bytes": 0,
    "file_descriptors_limit": 0
  },

when not present, the defaults will be as shown above. Using negative values will error.

The new setting controls the working limits for the libp2p Resource
Manager. 0 means "based on system's resources":

- memory_limit_bytes defaults to 25% of the system's total memory when set
- to 0, with a minimum of 1GiB.
- file_descriptors_limit defaults to 50% of the process' file descriptor limit when set to 0.

These limits can be set manually, or the resource manager can be fully
disabled by toggling the enabled setting.

When the limits are reached, libp2p will print warnings and errors as
connections and libp2p streams are dropped. Note that the limits only affect
libp2p resources and not the total memory usage of the IPFS Cluster daemon.

### REST API

- No changes.

### Pinning Service API

- No changes.

### IPFS Proxy API

- No changes.

### Go APIs

- No relevant changes.

### Other

- Nothing.

# Version 1.0.8

IPFS Cluster v1.0.8 is a maintenance release.

This release updates dependencies (latest boxo and libp2p) and should bring a couple of Pebble-related improvements:

- We have upgraded Pebble's version. Some users have reported deadlocks in writes to Pebble (ipfs/ipfs-cluster#2009) and this seems to have helped.
- Pebble now supports 32-bit so it can be the default for all archs.
- We added a warning when Pebble's newest MajorFormatVersion is higher than
- what is used in the configuration. Users should increase their major_format_version
- to maintain forward-compatibility with future versions of Pebble.

Additionally, some bugs have been fixed and a couple of useful features added, as mentioned below.

## List of changes

### Breaking changes

- There are no breaking changes on this release.

### Features

- ipfshttp: support talking to Kubo over unix sockets | ipfs/ipfs-cluster#1999
- ipfsproxy: support talking to Kubo over unix sockets | ipfs/ipfs-cluster#2027
- pebble: enable in all archs as default datastore | ipfs/ipfs-cluster#2005 | ipfs/ipfs-cluster#2007
- pebble: set default MajorVersionFormat to newest | ipfs/ipfs-cluster#2019
- cluster: Announce and NoAnnounce options | ipfs/ipfs-cluster#952 | ipfs/ipfs-cluster#2010

### Bug fixes

- ipfs-cluster-follow: issue numpin and pinqueue metrics to other peers | ipfs/ipfs-cluster#2011 | ipfs/ipfs-cluster#2016
- ipfshttp: do no pre-resolve node_multiaddresses | ipfs/ipfs-cluster#2004 | ipfs/ipfs-cluster#2017
- ipfsproxy: do no pre-resolve node_multiaddresses | ipfs/ipfs-cluster#2027
- pebble: deadlock | ipfs/ipfs-cluster#2009

### Other changes

- The Dockerfile-bundle file has been removed (unmaintained) | ipfs/ipfs-cluster#1986
- Dependency upgrades | ipfs/ipfs-cluster#2007 | ipfs/ipfs-cluster#2018 | ipfs/ipfs-cluster#2026

## Upgrading notices

### Configuration changes

Two new options have been added to forcefully control the cluster peer libp2p host address announcements: cluster.announce_multiaddress and cluster.no_announce_multiaddress. Both take a slice of multiaddresses.

### REST API

No changes.

### Pinning Service API

No changes.

### IPFS Proxy API

No changes.

### Go APIs

No relevant changes.

### Other

Nothing.

# Version 1.0.7

IPFS Cluster v1.0.7 is a maintenance release.

This release updates dependencies and switches to the Boxo library suite with
the latest libp2p release.

See the notes below for a list of changes and bug fixes.
## List of changes

### Breaking changes

- There are no breaking changes on this release.

## Features

- API: Add a /health endpoint that bypasses authorization | ipfs/ipfs-cluster#1884 | ipfs/ipfs-cluster#1919
- Systemd notify support | ipfs/ipfs-cluster#1144 | ipfs/ipfs-cluster#1894
- Add support for pinning only on "untrusted" peers | ipfs/ipfs-cluster#1976 | ipfs/ipfs-cluster#1977
- Docker image with multiarch support | ipfs/ipfs-cluster#1085 | ipfs/ipfs-cluster#1984 | ipfs/ipfs-cluster#1368

### Bug fixes

- MaxConcurrentCompactions missing from Pebble configuration | ipfs/ipfs-cluster#1895 | ipfs/ipfs-cluster#1900
- Missing newline in JSON stream from proxy API when doing pin/ls | ipfs/ipfs-cluster#1885 | ipfs/ipfs-cluster#1893

### Other changes

- Dependency updates and upgrade to Boxo | ipfs/ipfs-cluster#1901 | ipfs/ipfs-cluster#1980

## Upgrading notices

### Configuration changes

A new option cluster.pin_only_on_untrusted_peers has been added, opposite to the pin_only_on_trusted_peers that already existed. Defaults to false. Both options cannot be true. When enabled, only "untrusted" peers are considered for pin allocations.

### REST API

A new /health endpoint has been added, returns 204 (No Content) and no
body. It can be used to monitor that the service is running.

### Pinning Service API

A new /health endpoint has been added, returns 204 (No Content) and no
body. It can be used to monitor that the service is running.

### IPFS Proxy API

Calling /api/v0/pin/ls on the proxy api now adds a final new line at the end
of the response. This should align with what Kubo does.

### Go APIs

No relevant changes.

### Other

ipfs-cluster-service now sends a notification to systemd when it becomes
"ready" (that is, after all initialization is completed). This means systemd
service files for ipfs-cluster-service can use Type=notify.

The official docker images are now built with support for linux/amd64,
linux/arm/v7 and linux/arm64/v8 architectures. We have also switched to Alpine
Linux as base image (instead of Busybox). Binaries are now built with
CGO_ENABLED=0.