CHANGELOG: 0.4.20
License: MIT Signed-off-by: Steven Allen <steven@stebalien.com>
Steven Allen committed
Apr 15, 2019 at 21:45 UTC
a22b6228220f6da7c89c05ecd1601afcb70232c8
1 file changed
+481
-2
CHANGELOG.md
+481
-2
@@ -1,8 +1,487 @@
1
# go-ipfs changelog
2
3
-## 0.4.20-rc2 2019-04-11
3
+## 0.4.20 2019-04-16
4
5
-TODO
5
+We're happy to release go-ipfs 0.4.20. This release includes some critical
6
+performance and stability fixes so all users should upgrade ASAP.
7
+
8
+This is also the first release to use go modules instead of GX. While GX has
9
+been a great way to dogfood an IPFS-based package manager, building and
10
+maintaining a custom package manager is a _lot_ of work and we haven't been able
11
+to dedicate enough time to bring the user experience of gx to an acceptable
12
+level. You can read [#5850](https://github.com/ipfs/go-ipfs/issues/5850) for
13
+some discussion on this matter.
14
+
15
+### Docker
16
+
17
+As of this release, it's now much easier to run arbitrary IPFS commands within
18
+the docker container:
19
+
20
+```bash
21
+> docker run ipfs/go-ipfs config profile apply server # apply the server profile
22
+> docker run ipfs/go-ipfs # start the daemon
23
+```
24
+
25
+This release also [reverts](https://github.com/ipfs/go-ipfs/pull/6040) a change that
26
+caused some significant trouble in 0.4.19. If you've been running into Docker
27
+permission errors in 0.4.19, please upgrade.
28
+
29
+### WebUI
30
+
31
+This release contains a major
32
+[WebUI](https://github.com/ipfs-shipyard/ipfs-webui) release with some
33
+significant improvements to the file browser and new opt-in, privately hosted,
34
+anonymous usage analytics.
35
+
36
+### Commands
37
+
38
+As usual, we've made several changes and improvements to our commands. The most
39
+notable changes are listed in this section.
40
+
41
+#### New: `ipfs version deps`
42
+
43
+This release includes a new command, `ipfs version deps`, to list all
44
+dependencies (with versions) of the current go-ipfs build. This should make it
45
+easy to tell exactly how go-ipfs was built when tracking down issues.
46
+
47
+#### New: `ipfs add URL`
48
+
49
+The `ipfs add` command has gained support for URLs. This means you can:
50
+
51
+1. Add files with `ipfs add URL` instead of downloading the file first.
52
+2. Replace all uses of the `ipfs urlstore` command with a call to `ipfs add
53
+ --nocopy`. The `ipfs urlstore` command will be deprecated in a future
54
+ release.
55
+
56
+
57
+#### Changed: `ipfs swarm connect`
58
+
59
+The `ipfs swarm connect` command has a few new features:
60
+
61
+It now marks the newly created connection as "important". This should ensure
62
+that the connection manager won't come along later and close the connection if
63
+it doesn't think it's being used.
64
+
65
+It can now resolve `/dnsaddr` addresses that _don't_ end in a peer ID. For
66
+example, you can now run `ipfs swarm connect /dnsaddr/bootstrap.libp2p.io` to
67
+connect to one of the bootstrap peers at random. NOTE: This is could connect you
68
+to an _arbitrary_ peer as DNS is not secure (by default). Please do not rely on
69
+this except for testing or unless you know what you're doing.
70
+
71
+Finally, `ipfs swarm connect` now returns _all_ errors on failure. This should
72
+make it much easier to debug connectivity issues. For example, one might see an
73
+error like:
74
+
75
+```
76
+Error: connect QmYou failure: dial attempt failed: 6 errors occurred:
77
+ * <peer.ID Qm*Me> --> <peer.ID Qm*You> (/ip4/127.0.0.1/tcp/4001) dial attempt failed: dial tcp4 127.0.0.1:4001: connect: connection refused
78
+ * <peer.ID Qm*Me> --> <peer.ID Qm*You> (/ip6/::1/tcp/4001) dial attempt failed: dial tcp6 [::1]:4001: connect: connection refused
79
+ * <peer.ID Qm*Me> --> <peer.ID Qm*You> (/ip6/2604::1/tcp/4001) dial attempt failed: dial tcp6 [2604::1]:4001: connect: network is unreachable
80
+ * <peer.ID Qm*Me> --> <peer.ID Qm*You> (/ip6/2602::1/tcp/4001) dial attempt failed: dial tcp6 [2602::1]:4001: connect: network is unreachable
81
+ * <peer.ID Qm*Me> --> <peer.ID Qm*You> (/ip4/150.0.1.2/tcp/4001) dial attempt failed: dial tcp4 0.0.0.0:4001->150.0.1.2:4001: i/o timeout
82
+ * <peer.ID Qm*Me> --> <peer.ID Qm*You> (/ip4/200.0.1.2/tcp/4001) dial attempt failed: dial tcp4 0.0.0.0:4001->200.0.1.2:4001: i/o timeout
83
+```
84
+
85
+#### Changed: `ipfs bitswap stat`
86
+
87
+`ipfs bitswap stat` no longer lists bitswap partners unless the `-v` flag is
88
+passed. That is, it will now return:
89
+
90
+```
91
+> ipfs bitswap stat
92
+bitswap status
93
+ provides buffer: 0 / 256
94
+ blocks received: 0
95
+ blocks sent: 79
96
+ data received: 0
97
+ data sent: 672706
98
+ dup blocks received: 0
99
+ dup data received: 0 B
100
+ wantlist [0 keys]
101
+ partners [197]
102
+```
103
+
104
+Instead of:
105
+
106
+```
107
+> ipfs bitswap stat -v
108
+bitswap status
109
+ provides buffer: 0 / 256
110
+ blocks received: 0
111
+ blocks sent: 79
112
+ data received: 0
113
+ data sent: 672706
114
+ dup blocks received: 0
115
+ dup data received: 0 B
116
+ wantlist [0 keys]
117
+ partners [203]
118
+ QmNQTTTRCDpCYCiiu6TYWCqEa7ShAUo9jrZJvWngfSu1mL
119
+ QmNWaxbqERvdcgoWpqAhDMrbK2gKi3SMGk3LUEvfcqZcf4
120
+ QmNgSVpgZVEd41pBX6DyCaHRof8UmUJLqQ3XH2qNL9xLvN
121
+ ... omitting 200 lines ...
122
+```
123
+
124
+#### Changed: `ipfs repo stat --human`
125
+
126
+The `--human` flag in the `ipfs repo stat` command now intelligently picks a
127
+size unit instead of always using MiB.
128
+
129
+#### Changed: `ipfs resolve` (`ipfs dns`, `ipfs name resolve`)
130
+
131
+All of the resolve commands now:
132
+
133
+1. Resolve _recursively_ (up to 32 steps) by default to better match user
134
+ expectations (these commands used to be non-recursive by default). To turn
135
+ recursion off, pass `-r false`.
136
+2. When resolving non-recursively, these commands no longer fail when partially
137
+ resolving a name. Instead, they simply return the intermediate result.
138
+
139
+#### Changed: `ipfs files flush`
140
+
141
+The `ipfs files flush` command now returns the CID of the flushed file.
142
+
143
+### Performance And Reliability
144
+
145
+This release has the usual collection of performance and reliability
146
+improvements.
147
+
148
+#### Badger Memory Usage
149
+
150
+Those of you using the badger datastore should notice reduced memory usage in
151
+this release due to some upstream changes. Badger still uses significantly more
152
+memory than the default datastore configuration but this will hopefully continue
153
+to improve.
154
+
155
+#### Bitswap
156
+
157
+We fixed some critical CPU utilization regressions in bitswap for this release.
158
+If you've been noticing CPU _regressions_ in go-ipfs 0.4.19, especially when
159
+running a public gateway, upgrading to 0.4.20 will likely fix them.
160
+
161
+#### Relays
162
+
163
+After AutoRelay was introduced in go-ipfs 0.4.19, the number of peers connecting
164
+through relays ski-rocketed to over 120K concurrent peers. This highlighted some
165
+performance issues that we've now fixed in this release. Specifically:
166
+
167
+* We've significantly reduced the amount of memory allocated per-peer.
168
+* We've fixed a bug where relays might, in rare cases, try to actively dial a
169
+ peer to relay traffic. By default, relays only forward traffic between peers
170
+ already connected to the relay.
171
+* We've fixed quite a number of performance issues that only show up when
172
+ rapidly forming new connections. This will actually help _all_ nodes but will
173
+ especially help relays.
174
+
175
+If you've enabled relays in go-ipfs 0.4.19 and it hasn't burned down your
176
+machine yet, this release should improve things significantly. However, relays
177
+are still under heavy load so running an open relay will continue to be resource
178
+intensive.
179
+
180
+We're continuing to investigate this issue and have a few more patches on the
181
+way that, unfortunately, won't make it into this release.
182
+
183
+#### Panics
184
+
185
+We've fixed two notable panics in this release:
186
+
187
+* We've fixed a frequent panic in the DHT.
188
+* We've fixed an occasional panic in the experimental QUIC transport.
189
+
190
+### Content Routing
191
+
192
+IPFS announces and finds content by sending and retrieving content routing
193
+("provider") records to and from the DHT. Unfortunately, sending out these
194
+records can be quite resource intensive.
195
+
196
+This release has two changes to alleviate this: a reduced number of initial
197
+provide workers and a persistent provider queue.
198
+
199
+We've reduced the number of parallel initial provide workers (workers that send
200
+out provider records when content is initially added to go-ipfs) from 512 to 6.
201
+Each provide request (currently, due to some issues in our DHT) tries to
202
+establish hundreds of connections, significantly impacting the performance of
203
+go-ipfs and [crashing some
204
+routers](https://github.com/ipfs/go-ipfs/issues/3320).
205
+
206
+We've introduced a new persistent provider queue for files added via `ipfs add`
207
+and `ipfs pin add`. When new directory trees are added to go-ipfs, go-ipfs will
208
+add the root/final CID to this queue. Then, in the background, go-ipfs will walk
209
+the queue, sequentially sending out provider records for each CID.
210
+
211
+This ensures that root CIDs are sent out as soon as possible and are sent even
212
+when files are added when the go-ipfs daemon isn't running.
213
+
214
+By example, let's add a directory tree to go-ipfs:
215
+
216
+```bash
217
+> # We're going to do this in "online" mode first so let's start the daemon.
218
+> ipfs daemon &
219
+...
220
+Daemon is ready
221
+> # Now, we're going to create a directory to add.
222
+> mkdir foo
223
+> for i in {0..1000}; do echo do echo $i > foo/$i; done
224
+> # finally, we're going to add it.
225
+> ipfs add -r foo
226
+added QmUQcSjQx2bg4cSe2rUZyQi6F8QtJFJb74fWL7D784UWf9 foo/0
227
+...
228
+added QmQac2chFyJ24yfG2Dfuqg1P5gipLcgUDuiuYkQ5ExwGap foo/990
229
+added QmQWwz9haeQ5T2QmQeXzqspKdowzYELShBCLzLJjVa2DuV foo/991
230
+added QmQ5D4MtHUN4LTS4n7mgyHyaUukieMMyCfvnzXQAAbgTJm foo/992
231
+added QmZq4n4KRNq3k1ovzxJ4qdQXZSrarfJjnoLYPR3ztHd7EY foo/993
232
+added QmdtrsuVf8Nf1s1MaSjLAd54iNqrn1KN9VoFNgKGnLgjbt foo/994
233
+added QmbstvU9mnW2hsE94WFmw5WbrXdLTu2Sf9kWWSozrSDscL foo/995
234
+added QmXFd7f35gAnmisjfFmfYKkjA3F3TSpvUYB9SXr6tLsdg8 foo/996
235
+added QmV5BxS1YQ9V227Np2Cq124cRrFDAyBXNMqHHa6kpJ9cr6 foo/997
236
+added QmcXsccUtwKeQ1SuYC3YgyFUeYmAR9CXwGGnT3LPeCg5Tx foo/998
237
+added Qmc4mcQcpaNzyDQxQj5SyxwFg9ZYz5XBEeEZAuH4cQirj9 foo/999
238
+added QmXpXzUhcS9edmFBuVafV5wFXKjfXkCQcjAUZsTs7qFf3G foo
239
+```
240
+
241
+In 0.4.19, we would have sent out provider records for files `foo/{0..1000}`
242
+_before_ sending out a provider record for `foo`. If you were ask a friend to
243
+download /ipfs/QmUQcSjQx2bg4cSe2rUZyQi6F8QtJFJb74fWL7D784UWf9, they would
244
+(baring other issues) be able to find it pretty quickly as this is the first CID
245
+you'll have announced to the network. However, if you ask your friend to
246
+download /ipfs/QmXpXzUhcS9edmFBuVafV5wFXKjfXkCQcjAUZsTs7qFf3G/0, they'll have to
247
+wait for you to finish telling the network about every file in `foo` first.
248
+
249
+In 0.4.20, we _immediately_ tell the network about
250
+`QmXpXzUhcS9edmFBuVafV5wFXKjfXkCQcjAUZsTs7qFf3G` (the `foo` directory) as soon
251
+as we finish adding the directory to go-ipfs _without_ waiting to finish
252
+announcing `foo/{0..1000}`. This is especially important in this release
253
+because we've drastically reduced the number of provide workers.
254
+
255
+The second benefit is that this queue is persistent. That means go-ipfs won't
256
+forget to send out this record, even if it was offline when the content was
257
+initially added. NOTE: go-ipfs _does_ continuously _re_-send provider records in
258
+the background twice a day, it just might be a while before it gets around to
259
+sending one out any specific one.
260
+
261
+### Bitswap
262
+
263
+Bitswap now periodically re-sends its wantlist to connected peers. This should
264
+help work around some race conditions we've seen in bitswap where one node wants
265
+a block but the other doesn't know for some reason.
266
+
267
+You can track this issue here: https://github.com/ipfs/go-ipfs/issues/5183.
268
+
269
+### Improved NAT Traversal
270
+
271
+While NATs are still p2p enemy #1, this release includes slightly improved
272
+support for traversing them.
273
+
274
+Specifically, this release now:
275
+
276
+1. Better detects the "gateway" NAT, even when multiple devices on the network
277
+ _claim_ to be NATs.
278
+2. Better guesses the external IP address when port mapping, even when the
279
+ gateway lies.
280
+
281
+### Reduced AutoRelay Boot Time
282
+
283
+The experimental AutoRelay feature can now detect NATs _much_ faster as we've
284
+reduced initial NAT detection delay to 15 seconds. There's still room for
285
+improvement but this should make nodes that have enabled this feature dialable
286
+earlier on start.
287
+
288
+### Changelogs
289
+
290
+- github.com/ipfs/go-ipfs:
291
+ - gitattributes: avoid normalizing known binary files ([ipfs/go-ipfs#6209](https://github.com/ipfs/go-ipfs/pull/6209))
292
+ - gitattributes: default to LF ([ipfs/go-ipfs#6198](https://github.com/ipfs/go-ipfs/pull/6198))
293
+ - Fix level db panic ([ipfs/go-ipfs#6186](https://github.com/ipfs/go-ipfs/pull/6186))
294
+ - Dockerfile: Remove 2 year old deprecation warning ([ipfs/go-ipfs#6188](https://github.com/ipfs/go-ipfs/pull/6188))
295
+ - align output for the command ipfs object stat ([ipfs/go-ipfs#6189](https://github.com/ipfs/go-ipfs/pull/6189))
296
+ - provider queue: don't repeatedly retry the same item if we fail ([ipfs/go-ipfs#6187](https://github.com/ipfs/go-ipfs/pull/6187))
297
+ - test: remove version/deps from ro commands test ([ipfs/go-ipfs#6185](https://github.com/ipfs/go-ipfs/pull/6185))
298
+ - feat: add version deps command [modversion] ([ipfs/go-ipfs#6115](https://github.com/ipfs/go-ipfs/pull/6115))
299
+ - readme: update for go modules ([ipfs/go-ipfs#6180](https://github.com/ipfs/go-ipfs/pull/6180))
300
+ - Switch to Go 1.12 ([ipfs/go-ipfs#6144](https://github.com/ipfs/go-ipfs/pull/6144))
301
+ - ci: avoid interleaving output from different sharness tests ([ipfs/go-ipfs#6175](https://github.com/ipfs/go-ipfs/pull/6175))
302
+ - fix two bugs where the repo may not properly be closed ([ipfs/go-ipfs#6176](https://github.com/ipfs/go-ipfs/pull/6176))
303
+ - fix error check in swarm connect ([ipfs/go-ipfs#6174](https://github.com/ipfs/go-ipfs/pull/6174))
304
+ - feat(coreapi): tag all explicit connect requests in the connection manager ([ipfs/go-ipfs#6171](https://github.com/ipfs/go-ipfs/pull/6171))
305
+ - chore: remove CODEOWNERS ([ipfs/go-ipfs#6172](https://github.com/ipfs/go-ipfs/pull/6172))
306
+ - feat: update to IPFS Web UI 2.4.4 ([ipfs/go-ipfs#6169](https://github.com/ipfs/go-ipfs/pull/6169))
307
+ - fix add error handling ([ipfs/go-ipfs#6156](https://github.com/ipfs/go-ipfs/pull/6156))
308
+ - chore: remove waffle ([ipfs/go-ipfs#6157](https://github.com/ipfs/go-ipfs/pull/6157))
309
+ - chore: fix a bunch of issues caught by golangci-lint ([ipfs/go-ipfs#6140](https://github.com/ipfs/go-ipfs/pull/6140))
310
+ - docs/experimental-features.md: link to ipfs-ds-convert ([ipfs/go-ipfs#6154](https://github.com/ipfs/go-ipfs/pull/6154))
311
+ - interrupt: fix send on closed ([ipfs/go-ipfs#6147](https://github.com/ipfs/go-ipfs/pull/6147))
312
+ - docs: document Gateway.Writable not Gateway.Writeable ([ipfs/go-ipfs#6151](https://github.com/ipfs/go-ipfs/pull/6151))
313
+ - Fuse fixes ([ipfs/go-ipfs#6135](https://github.com/ipfs/go-ipfs/pull/6135))
314
+ - Remove duplicate blockstore from the package list ([ipfs/go-ipfs#6138](https://github.com/ipfs/go-ipfs/pull/6138))
315
+ - Query for provider head/tail ([ipfs/go-ipfs#6125](https://github.com/ipfs/go-ipfs/pull/6125))
316
+ - Remove dead link from ISSUE_TEMPLATE.md ([ipfs/go-ipfs#6128](https://github.com/ipfs/go-ipfs/pull/6128))
317
+ - coreapi: remove Unixfs.Wrap ([ipfs/go-ipfs#6123](https://github.com/ipfs/go-ipfs/pull/6123))
318
+ - coreapi unixfs: change Wrap logic to make more sense ([ipfs/go-ipfs#6019](https://github.com/ipfs/go-ipfs/pull/6019))
319
+ - deps: switch back to jbenet go-is-domain ([ipfs/go-ipfs#6119](https://github.com/ipfs/go-ipfs/pull/6119))
320
+ - command repo stat: add human flag tests to t0080-repo.sh ([ipfs/go-ipfs#6116](https://github.com/ipfs/go-ipfs/pull/6116))
321
+ - gc: fix a potential deadlock ([ipfs/go-ipfs#6112](https://github.com/ipfs/go-ipfs/pull/6112))
322
+ - fix config options in osxfuse error messages ([ipfs/go-ipfs#6105](https://github.com/ipfs/go-ipfs/pull/6105))
323
+ - Command repo stat: improve human flag behavior ([ipfs/go-ipfs#6106](https://github.com/ipfs/go-ipfs/pull/6106))
324
+ - Provide root node immediately on add and pin add ([ipfs/go-ipfs#6068](https://github.com/ipfs/go-ipfs/pull/6068))
325
+ - gomod: Update Dockerfile, remove Dockerfile.fast ([ipfs/go-ipfs#6100](https://github.com/ipfs/go-ipfs/pull/6100))
326
+ - Return CID from 'ipfs files flush' ([ipfs/go-ipfs#6102](https://github.com/ipfs/go-ipfs/pull/6102))
327
+ - resolve: fix recursion ([ipfs/go-ipfs#6087](https://github.com/ipfs/go-ipfs/pull/6087))
328
+ - fix(swarm): add dnsaddr support in swarm connect ([ipfs/go-ipfs#5535](https://github.com/ipfs/go-ipfs/pull/5535))
329
+ - make in-memory datastore thread-safe ([ipfs/go-ipfs#6085](https://github.com/ipfs/go-ipfs/pull/6085))
330
+ - Update package table to remove broken jenkins links ([ipfs/go-ipfs#6084](https://github.com/ipfs/go-ipfs/pull/6084))
331
+ - mk: fix maketarball to work with gomod ([ipfs/go-ipfs#6078](https://github.com/ipfs/go-ipfs/pull/6078))
332
+ - fix ls command to use the new coreinterface types ([ipfs/go-ipfs#6051](https://github.com/ipfs/go-ipfs/pull/6051))
333
+ - mk: remove install_unsupported, leave a note ([ipfs/go-ipfs#6063](https://github.com/ipfs/go-ipfs/pull/6063))
334
+ - mk: change git-hash command to include information about modifications ([ipfs/go-ipfs#6060](https://github.com/ipfs/go-ipfs/pull/6060))
335
+ - mk: fix make install by not setting GOBIN ([ipfs/go-ipfs#6059](https://github.com/ipfs/go-ipfs/pull/6059))
336
+ - go: require Golang 1.11.4 ([ipfs/go-ipfs#6057](https://github.com/ipfs/go-ipfs/pull/6057))
337
+ - yamux: increase yamux window size to 8MiB. ([ipfs/go-ipfs#6049](https://github.com/ipfs/go-ipfs/pull/6049))
338
+ - Introduce go modules [yey] ([ipfs/go-ipfs#6038](https://github.com/ipfs/go-ipfs/pull/6038))
339
+ - cleanup daemon online logic ([ipfs/go-ipfs#6050](https://github.com/ipfs/go-ipfs/pull/6050))
340
+ - ci: test on 32bit os ([ipfs/go-ipfs#5429](https://github.com/ipfs/go-ipfs/pull/5429))
341
+ - feat/cmds: hide peers info default in bitswap stat ([ipfs/go-ipfs#5820](https://github.com/ipfs/go-ipfs/pull/5820))
342
+ - Improve CLI help pages ([ipfs/go-ipfs#6013](https://github.com/ipfs/go-ipfs/pull/6013))
343
+ - Close #6044 ([ipfs/go-ipfs#6045](https://github.com/ipfs/go-ipfs/pull/6045))
344
+ - commands(dht): return final error ([ipfs/go-ipfs#6034](https://github.com/ipfs/go-ipfs/pull/6034))
345
+ - Revert "Really run as non-root user in docker container" ([ipfs/go-ipfs#6040](https://github.com/ipfs/go-ipfs/pull/6040))
346
+- github.com/ipfs/go-bitswap:
347
+ - feat(messagequeue): rebroadcast wantlist ([ipfs/go-bitswap#106](https://github.com/ipfs/go-bitswap/pull/106))
348
+ - reduce provide workers to 6 ([ipfs/go-bitswap#93](https://github.com/ipfs/go-bitswap/pull/93))
349
+ - Reduce memory allocation ([ipfs/go-bitswap#103](https://github.com/ipfs/go-bitswap/pull/103))
350
+ - refactor(messagequeue): remove dead code ([ipfs/go-bitswap#98](https://github.com/ipfs/go-bitswap/pull/98))
351
+ - fix: limit use of custom context type ([ipfs/go-bitswap#89](https://github.com/ipfs/go-bitswap/pull/89))
352
+ - fix: remove non-error log message ([ipfs/go-bitswap#91](https://github.com/ipfs/go-bitswap/pull/91))
353
+ - fix(messagequeue): Remove second run loop ([ipfs/go-bitswap#94](https://github.com/ipfs/go-bitswap/pull/94))
354
+- github.com/ipfs/go-blockservice:
355
+ - Revert "Remove verifcid as it is handled in go-cid" ([ipfs/go-blockservice#25](https://github.com/ipfs/go-blockservice/pull/25))
356
+ - Remove verifcid as it is handled in go-cid ([ipfs/go-blockservice#23](https://github.com/ipfs/go-blockservice/pull/23))
357
+- github.com/ipfs/go-datastore:
358
+ - cleanup and optimize naive query filters ([ipfs/go-datastore#125](https://github.com/ipfs/go-datastore/pull/125))
359
+ - Fix – sorted limited offset mount queries ([ipfs/go-datastore#124](https://github.com/ipfs/go-datastore/pull/124))
360
+ - Fix function comments based on best practices from Effective Go ([ipfs/go-datastore#122](https://github.com/ipfs/go-datastore/pull/122))
361
+ - remove ThreadSafeDatastore ([ipfs/go-datastore#120](https://github.com/ipfs/go-datastore/pull/120))
362
+ - Splinter TTLDatastore interface into TTL + Datastore ([ipfs/go-datastore#118](https://github.com/ipfs/go-datastore/pull/118))
363
+- github.com/ipfs/go-ds-badger:
364
+ - tweak the default options ([ipfs/go-ds-badger#52](https://github.com/ipfs/go-ds-badger/pull/52))
365
+ - remove thread-safe assertion ([ipfs/go-ds-badger#55](https://github.com/ipfs/go-ds-badger/pull/55))
366
+ - make memory-safe against concurrent closure/operations ([ipfs/go-ds-badger#53](https://github.com/ipfs/go-ds-badger/pull/53))
367
+ - make badger use our logging framework ([ipfs/go-ds-badger#50](https://github.com/ipfs/go-ds-badger/pull/50))
368
+- github.com/ipfs/go-ds-flatfs:
369
+ - remove thread-safe assertion ([ipfs/go-ds-flatfs#53](https://github.com/ipfs/go-ds-flatfs/pull/53))
370
+- github.com/ipfs/go-ds-leveldb:
371
+ - Fast reverse query ([ipfs/go-ds-leveldb#28](https://github.com/ipfs/go-ds-leveldb/pull/28))
372
+ - remove thread-safe assertion ([ipfs/go-ds-leveldb#27](https://github.com/ipfs/go-ds-leveldb/pull/27))
373
+- github.com/ipfs/go-ipfs-cmdkit:
374
+ - Extract files package ([ipfs/go-ipfs-cmdkit#31](https://github.com/ipfs/go-ipfs-cmdkit/pull/31))
375
+- github.com/ipfs/go-ipfs-cmds:
376
+ - sync: add yet another sync error ([ipfs/go-ipfs-cmds#161](https://github.com/ipfs/go-ipfs-cmds/pull/161))
377
+ - Removed broken link from readme ([ipfs/go-ipfs-cmds#159](https://github.com/ipfs/go-ipfs-cmds/pull/159))
378
+ - Fix broken link in readme ([ipfs/go-ipfs-cmds#160](https://github.com/ipfs/go-ipfs-cmds/pull/160))
379
+ - set WebFile fpath to URL base ([ipfs/go-ipfs-cmds#158](https://github.com/ipfs/go-ipfs-cmds/pull/158))
380
+ - Handle stdin name in cli/parse ([ipfs/go-ipfs-cmds#157](https://github.com/ipfs/go-ipfs-cmds/pull/157))
381
+ - support url paths as files.WebFile ([ipfs/go-ipfs-cmds#154](https://github.com/ipfs/go-ipfs-cmds/pull/154))
382
+ - typed encoder: improve pointer reflection ([ipfs/go-ipfs-cmds#155](https://github.com/ipfs/go-ipfs-cmds/pull/155))
383
+ - cli: don't sync output to NUL on Windows ([ipfs/go-ipfs-cmds#153](https://github.com/ipfs/go-ipfs-cmds/pull/153))
384
+- github.com/ipfs/go-ipfs-files:
385
+ - return url as AbsPath from WebFile to implement FileInfo ([ipfs/go-ipfs-files#13](https://github.com/ipfs/go-ipfs-files/pull/13))
386
+ - fix the content disposition header ([ipfs/go-ipfs-files#14](https://github.com/ipfs/go-ipfs-files/pull/14))
387
+ - go format ([ipfs/go-ipfs-files#15](https://github.com/ipfs/go-ipfs-files/pull/15))
388
+ - simplify content type checking ([ipfs/go-ipfs-files#9](https://github.com/ipfs/go-ipfs-files/pull/9))
389
+ - remove extra webfile test code ([ipfs/go-ipfs-files#12](https://github.com/ipfs/go-ipfs-files/pull/12))
390
+- github.com/ipfs/go-merkledag:
391
+ - add function to marshal raw nodes to json ([ipfs/go-merkledag#36](https://github.com/ipfs/go-merkledag/pull/36))
392
+ - fix some performance regressions when reading protobuf nodes ([ipfs/go-merkledag#34](https://github.com/ipfs/go-merkledag/pull/34))
393
+- github.com/ipfs/go-metrics-interface:
394
+ - update the counter interface to match prometheus ([ipfs/go-metrics-interface#2](https://github.com/ipfs/go-metrics-interface/pull/2))
395
+- github.com/ipfs/go-mfs:
396
+ - Return node from FlushPath ([ipfs/go-mfs#72](https://github.com/ipfs/go-mfs/pull/72))
397
+ - Wire up context to FlushPath ([ipfs/go-mfs#70](https://github.com/ipfs/go-mfs/pull/70))
398
+- github.com/ipfs/interface-go-ipfs-core:
399
+ - don't close the top-level addr ([ipfs/interface-go-ipfs-core#25](https://github.com/ipfs/interface-go-ipfs-core/pull/25))
400
+ - fix a bunch of small test "bugs" ([ipfs/interface-go-ipfs-core#24](https://github.com/ipfs/interface-go-ipfs-core/pull/24))
401
+ - remove Wrap ([ipfs/interface-go-ipfs-core#21](https://github.com/ipfs/interface-go-ipfs-core/pull/21))
402
+ - Unixfs.Wrap Fixes ([ipfs/interface-go-ipfs-core#10](https://github.com/ipfs/interface-go-ipfs-core/pull/10))
403
+ - tweak the Ls interface ([ipfs/interface-go-ipfs-core#14](https://github.com/ipfs/interface-go-ipfs-core/pull/14))
404
+- github.com/libp2p/go-buffer-pool:
405
+ - Enable tests ([libp2p/go-buffer-pool#6](https://github.com/libp2p/go-buffer-pool/pull/6))
406
+- github.com/libp2p/go-flow-metrics:
407
+ - Just repair spelling mistake ([libp2p/go-flow-metrics#3](https://github.com/libp2p/go-flow-metrics/pull/3))
408
+- github.com/libp2p/go-libp2p:
409
+ - Deprecate gx in readme & link to workspace repo ([libp2p/go-libp2p#591](https://github.com/libp2p/go-libp2p/pull/591))
410
+ - Respect nodial option in routed host ([libp2p/go-libp2p#590](https://github.com/libp2p/go-libp2p/pull/590))
411
+ - fix panic in observed address activation check ([libp2p/go-libp2p#586](https://github.com/libp2p/go-libp2p/pull/586))
412
+ - Improve observed address handling ([libp2p/go-libp2p#585](https://github.com/libp2p/go-libp2p/pull/585))
413
+ - identify: avoid parsing/printing multiaddrs ([libp2p/go-libp2p#583](https://github.com/libp2p/go-libp2p/pull/583))
414
+ - move things outside of the lock in obsaddr ([libp2p/go-libp2p#582](https://github.com/libp2p/go-libp2p/pull/582))
415
+ - identify: be more careful about the addresses we store ([libp2p/go-libp2p#577](https://github.com/libp2p/go-libp2p/pull/577))
416
+ - relay: turn autorelay into a service and always filter out relay addresses ([libp2p/go-libp2p#578](https://github.com/libp2p/go-libp2p/pull/578))
417
+ - chore: fail in the libp2p constructor if we fail to store the key ([libp2p/go-libp2p#576](https://github.com/libp2p/go-libp2p/pull/576))
418
+ - Fix broken link in README.md ([libp2p/go-libp2p#580](https://github.com/libp2p/go-libp2p/pull/580))
419
+ - Link to docs & discuss in readme ([libp2p/go-libp2p#571](https://github.com/libp2p/go-libp2p/pull/571))
420
+ - Reduce autorelay boot delay and correctly handle private->public transition ([libp2p/go-libp2p#570](https://github.com/libp2p/go-libp2p/pull/570))
421
+ - reduce nat error level ([libp2p/go-libp2p#568](https://github.com/libp2p/go-libp2p/pull/568))
422
+ - relay: simplify declaration of multiaddr var ([libp2p/go-libp2p#563](https://github.com/libp2p/go-libp2p/pull/563))
423
+ - Fix UDP listen on a Unspecified Address and Dial from the Unspecified Address ([libp2p/go-libp2p#561](https://github.com/libp2p/go-libp2p/pull/561))
424
+ - Remove jenkins column from package table ([libp2p/go-libp2p#562](https://github.com/libp2p/go-libp2p/pull/562))
425
+ - Fix typos in p2p/net/README.md ([libp2p/go-libp2p#555](https://github.com/libp2p/go-libp2p/pull/555))
426
+ - better nat mapping ([libp2p/go-libp2p#549](https://github.com/libp2p/go-libp2p/pull/549))
427
+- github.com/libp2p/go-libp2p-autonat:
428
+ - fully close the autonat client stream ([libp2p/go-libp2p-autonat#21](https://github.com/libp2p/go-libp2p-autonat/pull/21))
429
+ - parallelize dialbacks ([libp2p/go-libp2p-autonat#20](https://github.com/libp2p/go-libp2p-autonat/pull/20))
430
+ - Pacify the race detector ([libp2p/go-libp2p-autonat#17](https://github.com/libp2p/go-libp2p-autonat/pull/17))
431
+- github.com/libp2p/go-libp2p-autonat-svc:
432
+ - full close the autonat stream ([libp2p/go-libp2p-autonat-svc#20](https://github.com/libp2p/go-libp2p-autonat-svc/pull/20))
433
+ - reduce dialback timeout to 15s ([libp2p/go-libp2p-autonat-svc#17](https://github.com/libp2p/go-libp2p-autonat-svc/pull/17))
434
+- github.com/libp2p/go-libp2p-circuit:
435
+ - use buffer pool in newDelimitedReader ([libp2p/go-libp2p-circuit#71](https://github.com/libp2p/go-libp2p-circuit/pull/71))
436
+ - Use NoDial option when opening hop streams for non-active relays ([libp2p/go-libp2p-circuit#70](https://github.com/libp2p/go-libp2p-circuit/pull/70))
437
+ - use io.CopyBuffer with explicitly allocated buffers ([libp2p/go-libp2p-circuit#69](https://github.com/libp2p/go-libp2p-circuit/pull/69))
438
+ - docs and nits ([libp2p/go-libp2p-circuit#66](https://github.com/libp2p/go-libp2p-circuit/pull/66))
439
+- github.com/libp2p/go-libp2p-kad-dht:
440
+ - dialQueue: start the control loop later ([libp2p/go-libp2p-kad-dht#312](https://github.com/libp2p/go-libp2p-kad-dht/pull/312))
441
+ - make it work in wasm ([libp2p/go-libp2p-kad-dht#310](https://github.com/libp2p/go-libp2p-kad-dht/pull/310))
442
+ - Revert "GoModules: Checksum mismatch:" ([libp2p/go-libp2p-kad-dht#309](https://github.com/libp2p/go-libp2p-kad-dht/pull/309))
443
+ - defer dialqueue action until initial peers have been added ([libp2p/go-libp2p-kad-dht#301](https://github.com/libp2p/go-libp2p-kad-dht/pull/301))
444
+- github.com/libp2p/go-libp2p-nat:
445
+ - switch to libp2p's go-nat fork ([libp2p/go-libp2p-nat#16](https://github.com/libp2p/go-libp2p-nat/pull/16))
446
+ - remove all uses of multiaddrs ([libp2p/go-libp2p-nat#14](https://github.com/libp2p/go-libp2p-nat/pull/14))
447
+- github.com/libp2p/go-libp2p-net:
448
+ - fix WithNoDial to return the context ([libp2p/go-libp2p-net#43](https://github.com/libp2p/go-libp2p-net/pull/43))
449
+ - NoDial context option ([libp2p/go-libp2p-net#42](https://github.com/libp2p/go-libp2p-net/pull/42))
450
+- github.com/libp2p/go-libp2p-peer:
451
+ - Let ID implement encoding.Binary[Un]Marshaler and encoding.Text[Un]Marshaler ([libp2p/go-libp2p-peer#44](https://github.com/libp2p/go-libp2p-peer/pull/44))
452
+- github.com/libp2p/go-libp2p-peerstore:
453
+ - keep temp addresses for 2 minutes ([libp2p/go-libp2p-peerstore#67](https://github.com/libp2p/go-libp2p-peerstore/pull/67))
454
+ - migrate to multiformats/go-base32 ([libp2p/go-libp2p-peerstore#61](https://github.com/libp2p/go-libp2p-peerstore/pull/61))
455
+- github.com/libp2p/go-libp2p-protocol:
456
+ - update readme ([libp2p/go-libp2p-protocol#6](https://github.com/libp2p/go-libp2p-protocol/pull/6))
457
+ - Enable standard Travis CI tests. ([libp2p/go-libp2p-protocol#5](https://github.com/libp2p/go-libp2p-protocol/pull/5))
458
+ - Fix go get address. ([libp2p/go-libp2p-protocol#4](https://github.com/libp2p/go-libp2p-protocol/pull/4))
459
+ - Add MIT license ([libp2p/go-libp2p-protocol#3](https://github.com/libp2p/go-libp2p-protocol/pull/3))
460
+ - Standardized Readme ([libp2p/go-libp2p-protocol#2](https://github.com/libp2p/go-libp2p-protocol/pull/2))
461
+- github.com/libp2p/go-libp2p-pubsub-router:
462
+ - gx publish 0.5.17 ([libp2p/go-libp2p-pubsub-router#26](https://github.com/libp2p/go-libp2p-pubsub-router/pull/26))
463
+- github.com/libp2p/go-libp2p-quic-transport:
464
+ - update quic-go to v0.11.0 ([libp2p/go-libp2p-quic-transport#54](https://github.com/libp2p/go-libp2p-quic-transport/pull/54))
465
+- github.com/libp2p/go-libp2p-routing-helpers:
466
+ - fix(put): fail if any router fails ([libp2p/go-libp2p-routing-helpers#19](https://github.com/libp2p/go-libp2p-routing-helpers/pull/19))
467
+- github.com/libp2p/go-libp2p-swarm:
468
+ - Add context option to disable dialing when opening a new stream ([libp2p/go-libp2p-swarm#116](https://github.com/libp2p/go-libp2p-swarm/pull/116))
469
+ - return all dial errors if dial has failed ([libp2p/go-libp2p-swarm#115](https://github.com/libp2p/go-libp2p-swarm/pull/115))
470
+ - Differentiate no addresses error from no good addresses ([libp2p/go-libp2p-swarm#113](https://github.com/libp2p/go-libp2p-swarm/pull/113))
471
+- github.com/libp2p/go-libp2p-transport:
472
+ - tests: constrain concurrency with race detector. ([libp2p/go-libp2p-transport#47](https://github.com/libp2p/go-libp2p-transport/pull/47))
473
+ - pick test timeout from env var if available. ([libp2p/go-libp2p-transport#46](https://github.com/libp2p/go-libp2p-transport/pull/46))
474
+ - increase test timeout. ([libp2p/go-libp2p-transport#45](https://github.com/libp2p/go-libp2p-transport/pull/45))
475
+- github.com/libp2p/go-msgio:
476
+ - Improve test coverage ([libp2p/go-msgio#10](https://github.com/libp2p/go-msgio/pull/10))
477
+- github.com/libp2p/go-reuseport:
478
+ - fix: add wasm build tag to wasm module ([libp2p/go-reuseport#70](https://github.com/libp2p/go-reuseport/pull/70))
479
+- github.com/libp2p/go-reuseport-transport:
480
+ - don't set linger to 0 ([libp2p/go-reuseport-transport#14](https://github.com/libp2p/go-reuseport-transport/pull/14))
481
+- github.com/libp2p/go-tcp-transport:
482
+ - set linger to 0 for both inbound and outbound connections ([libp2p/go-tcp-transport#36](https://github.com/libp2p/go-tcp-transport/pull/36))
483
+- github.com/libp2p/go-ws-transport:
484
+ - modernize request handling ([libp2p/go-ws-transport#41](https://github.com/libp2p/go-ws-transport/pull/41))
485
486
## 0.4.19 2019-03-01
487