paragraphs
License: MIT Signed-off-by: Steven Allen <steven@stebalien.com>
Steven Allen committed
Jul 6, 2018 at 12:29 UTC
8f51d011a3889fe9739c39ea6d9a9b06b8efeab9
1 file changed
+79
-48
CHANGELOG.md
+79
-48
@@ -3,60 +3,91 @@
3
## 0.4.16
4
5
Ipfs 0.4.16 is a fairly small release in terms of changes to the ipfs codebase,
6
-but it contains a huge amount of changes and improvements from libraries we
7
-depend on, notably libp2p. This version of ipfs contains the changes for libp2p
8
-v6.0.5, In that release, we made significant changes to the codebase to allow
9
-for more easy integration of future transports and modules. We also improved
10
-some of our dialing logic, fixed a couple issues in the DHT, and added
11
-support for a new way to write ipfs multiaddrs. The transport refactor now
12
-allows us to much more easily add in support for running libp2p (and by
13
-extension, ipfs) over QUIC, or using TLS instead of secio for encrypting
14
-connections. Our [QUIC
15
-transport](https://github.com/libp2p/go-libp2p-quic-transport) currently
16
-works, and can be plugged into libp2p manually (though note that it is
17
-still experimental, as the upstream spec is still in flux). Further work is
18
-needed to make enabling this inside ipfs easy and not require
19
-recompilation. For more information on the refactor and libp2p v6.0.0, see
20
-the [release blog post](https://ipfs.io/blog/39-go-libp2p-6-0-0/). Between
21
-libp2p v6.0.0 and v6.0.5, there have been some changes worth pointing out
22
-as well. The swarm dialer has been improved to have shortened timeouts when
23
-dialing peers in 'local' subnets. This prevents large dial timeouts from
24
-wasting dial time when the subnet you are dialing is not accessible. The
25
-TCP handshake timeout has also been dropped to 5 seconds, improving the
26
-performance of dials to non-existent addresses. In the DHT, we have fixed
27
-the query code to put records to the K closest peers we can actually
28
-connect to, which is a strict superset of the peers we previously put
29
-records to: The peers we could connect to out of the K closest we learned
30
-about. Finally, we are changing the way that people write 'ipfs'
31
-multiaddrs. Currently, ipfs multiaddrs look something like
6
+but it contains a huge amount of changes and improvements from the libraries we
7
+depend on, notably libp2p.
8
+
9
+### Libp2p
10
+
11
+This version of ipfs contains the changes made in libp2p from v5.0.14 through
12
+v6.0.5. In that time, we have made significant changes to the codebase to allow
13
+for easier integration of future transports and modules along with the usual
14
+performance and reliability improvements. You can find many of these
15
+improvements in the libp2p 6.0 [release blog
16
+post](https://ipfs.io/blog/39-go-libp2p-6-0-0/).
17
+
18
+The primary motivation for this refactor was adding support for network
19
+transports like QUIC that have built-in support for encryption, authentication,
20
+and stream multiplexing. It will also allow us to plug-in new security
21
+transports (like TLS) without hard-coding them.
22
+
23
+For example, our [QUIC
24
+transport](https://github.com/libp2p/go-libp2p-quic-transport) currently works,
25
+and can be plugged into libp2p manually (though note that it is still
26
+experimental, as the upstream spec is still in flux). Further work is needed to
27
+make enabling this inside ipfs easy and not require recompilation.
28
+
29
+On the user-visible side of things, we've improved our dialing logic and
30
+timeouts. We now abort dials to local subnets after 5 seconds and abort all
31
+dials if the TCP handshake takes longer than 5 seconds. This should
32
+significantly improve performance in some cases as we limit the number of
33
+concurrent dials and slow dials to non-responsive peers have been known to clog
34
+the dialer, blocking dials to reachable peers. Importantly, this should improve
35
+DHT performance as it tends to spend a disproportional amount of time connecting
36
+to peers.
37
+
38
+We have also made a few noticeable changes to the DHT: significantly improved
39
+the chances of finding a value on the DHT, we've tightened up some of our
40
+validation logic, and fixed some issues that should reduce traffic to nodes
41
+running in dhtclient mode over time.
42
+
43
+Of these, the first one will likely see the most impact. In the past, when
44
+putting a value (e.g., an IPNS entry) into the DHT, we'd try to put the value to
45
+K peers (where K for us is 20). However, we'd often fail to connect to many of
46
+these peers so we'd end up putting the value to significantly fewer than K
47
+peers. We now try to put the value to the K peers we can actually connect to.
48
+
49
+### Multiformats
50
+
51
+Finally, we are changing the way that people write 'ipfs' multiaddrs. Currently,
52
+ipfs multiaddrs look something like
53
`/ip4/104.131.131.82/tcp/4001/ipfs/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ`.
33
-But caling them 'ipfs' multiaddrs is a bit misleading, as this is actually
34
-the multiaddr of a libp2p peer that runs ipfs. Other protocols using libp2p
35
-right now still have to use multiaddrs that say 'ipfs', without actually
36
-having anything to do with ipfs. Towards that, we are renaming them to
54
+However, calling them 'ipfs' multiaddrs is a bit misleading as this is actually
55
+the multiaddr of a libp2p peer that happens to run ipfs. Other protocols built
56
+on libp2p right now still have to use multiaddrs that say 'ipfs', without
57
+actually having anything to do with ipfs. Therefore, we are renaming them to
58
'p2p' multiaddrs. Moving forward these addresses will be written as:
59
`/ip4/104.131.131.82/tcp/4001/p2p/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ`.
39
-This release adds support for *parsing* both types of addresses into the
40
-same binary format, and the binary format is remaining exactly the same. A
41
-future release will have the ipfs daemon switch to *printing* out addresses
42
-this way, once a large enough portion of the network has upgraded.
43
-
44
-On the ipfs side of things, we've added a few small features. The first of
45
-which is moving to embedding public keys inside IPNS records. This allows
46
-lookups to be faster, as we only need to fetch the record itself (and not the
47
-public key separately), and also fixes an issue where DHT peers wouldnt store a
48
-record for a peer if they didn't have their public key already. Combined with
49
-some of the DHT and dialing fixes, this should improve the performance of IPNS
50
-(once a majority of the network updates).
60
+
61
+This release adds support for *parsing* both types of addresses (`.../ipfs/...`
62
+and `.../p2p/...`) into the same network format, and the network format is
63
+remaining exactly the same. A future release will have the ipfs daemon switch to
64
+*printing* out addresses this way, once a large enough portion of the network
65
+has upgraded.
66
+
67
+N.B., these addresses are *not* related to IPFS *file* names (`/ipfs/Qm...`).
68
+Disambiguating the two was yet another motivation to switch the protocol name to
69
+`/p2p/`.
70
+
71
+### IPFS
72
+
73
+On the ipfs side of things, we've started embedding public keys inside IPNS
74
+records and have enabled the git plugin by default.
75
+
76
+Embedding public keys inside IPNS records allows lookups to be faster as we only
77
+need to fetch the record itself (and not the public key separately). It also
78
+fixes an issue where DHT peers wouldn't store a record for a peer if they didn't
79
+have their public key already. Combined with some of the DHT and dialing fixes,
80
+this should improve the performance of IPNS (once a majority of the network
81
+updates).
82
83
The second feature added is the automatic inclusion of the git plugin in the
53
-default build. With this, ipfs can ingest git repositories and other data
54
-directly, and operate over it. For more information on this, see [the
55
-go-ipld-git repo](https://github.com/ipfs/go-ipld-git).
84
+default build. With this, ipfs can ingest and operate over git repositories
85
+and commit graphs directly. For more information on this, see [the go-ipld-git
86
+repo](https://github.com/ipfs/go-ipld-git).
87
57
-Various other changes were merged in this release, including great
58
-documentation, a good number of smaller bugfixes, refactoring and a good bit
59
-more. For the details, see the changelog below.
88
+Various other changes were merged in this release including great documentation,
89
+a good number of smaller bugfixes, refactoring, and a good bit more. For the
90
+full details, see the changelog below.
91
92
## 0.4.16-rc3 2018-07-09
93
- Bugfixes