flesh out the rest of the changelog
License: MIT Signed-off-by: Steven Allen <steven@stebalien.com>
Steven Allen committed
Oct 28, 2018 at 10:20 UTC
809fc05693482e7f00fe22b1d0f3dab45a6b2c84
1 file changed
+78
-31
CHANGELOG.md
+78
-31
@@ -111,7 +111,8 @@ installing go-ipfs and visiting http://localhost:5001/webui.
111
### Performance
112
113
This release includes some significant performance improvements, both in terms
114
-of resource utilization and speed.
114
+of resource utilization and speed. This section will go into some technical
115
+details so feel free to skip it if you're just looking for shiny new features.
116
117
#### Resource Utilization
118
@@ -119,26 +120,48 @@ In this release, we've (a) fixed a slow memory leak in libp2p and (b)
120
significantly reduced the allocation load. Together, these should improve both
121
memory and CPU usage.
122
122
-... TODO ...
123
+##### Datastructures
124
124
-* CIDs
125
-* Multiaddrs
126
-* Peerstore revert
127
-* Yamux buffering
128
-* ...
125
+We've changed two of our most frequently used datastructures, CIDs and
126
+Multiaddrs, to reduce allocation load.
127
130
-#### Bitswap Performance
128
+First, we now store CIDs *encode* as strings, instead of decoded in structs
129
+(behind pointers). In addition to being more compact, our `Cid` type is now a
130
+valid `map` key so we no longer have to encode CIDs every time we want to use
131
+them in a map/set. Allocations when inserting CIDs into maps/sets was showing up
132
+as a significant source of allocations under heavy load so this change should
133
+improve memory usage.
134
+
135
+Second, we've changed many of our multiaddr parsing/processing/formatting
136
+functions to allocate less. Much of our DHT related-work includes processing
137
+multiaddrs so this should reduce CPU utilization when heavily using the DHT.
138
+
139
+##### Streams and Yamux
140
+
141
+Streams have always plagued us in terms of memory utilization. This was
142
+partially solved by introducing the connection manager, keeping our maximum
143
+connection count to a reasonable number but they're still a major memory sink.
144
+
145
+This release sees two improvements on this front:
146
132
-TODO: Multiple blocks per message. Could someone test this? Basic tests showed
133
-some improvements for small files but I'd like to see some numbers.
147
+1. A memory [leak in identify](https://github.com/libp2p/go-libp2p/issues/419)
148
+ has been fixed. This was slowly causing us to leak connections (locking up
149
+ the memory used by the connections' streams).
150
+2. Yamux streams now use a buffer-pool backed, auto shrinking read buffer.
151
+ Before, this read buffer would grow to its maximum size (a few megabytes) and
152
+ never shrink but these buffers now shrink as they're emptied.
153
135
-#### Async Directory Listing V1
154
+#### Bitswap Performance
155
137
-(v2 will make it into the next release)
156
+Bitswap will now pack *multiple* small blocks into a single message thanks
157
+[ipfs/go-bitswap#5](https://github.com/ipfs/go-bitswap/pull/5). While this won't
158
+help when transferring large files (with large blocks), this should help when
159
+transferring many tiny files.
160
139
-TODO
161
+### Refactors and Endeavors
162
141
-### Efforts
163
+This release saw yet another commands-library refactor, work towards the
164
+CoreAPI, and the first step towards reliable base32 CID support.
165
166
#### Commands Lib
167
@@ -160,25 +183,49 @@ interface using this API, which could help performance in some use cases.
183
184
You can track progress in https://github.com/ipfs/go-ipfs/issues/4498
185
163
-
186
#### CIDv1/Base32 Migration
187
166
-FIXME: Someone in charge of the DWEB effort should review and edit this section.
167
-
168
-In order to support CIDs in dweb links (CID.ipfs.dweb.link) this
169
-release contains two important changes:
170
-
171
-(1) The previous mentioned `ipfs cid base32` command for converting
172
-CID to a case intensive encoding required by domain names. This
173
-command converts a CID to version 1 and encodes it using base32.
174
-
175
-(2) Unfortunately when a CID is converted to base32 the version of the
176
-CID also changes which changes the binary representation of the CID.
177
-This means that up until this release trying to retrieve CID version 0
178
-content using CID version 1 will fail. This release adds a hack so
179
-that so that content is available regardless of the CID version used
180
-making retrieving content via a CIDv1/Base32 link more reliable once
181
-enough nodes are upgraded.
188
+Currently, IPFS is usually used in browsers by browsing to
189
+`https://SOME_GATEWAY/ipfs/CID/...`. There are two significant drawbacks to this
190
+approach:
191
+
192
+1. From a browser security standpoint, all IPFS "sites" will live under the same
193
+ origin (SOME_GATEWAY).
194
+2. From a UX standpoint, this doesn't feel very "native" (even if the gateway is
195
+ a local IPFS node).
196
+
197
+To fix the security issue, we intend to switch IPFS gateway links
198
+`https://ipfs.io/ipfs/CID` to to `https://CID.ipfs.dweb.link`. This way, the CID
199
+will be a part of the
200
+["origin"](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Origin) so
201
+each IPFS website will get a separate security origin.
202
+
203
+To fix the UX issue, we've been working on adding support for `ipfs://CID/...`
204
+to web browsers through our
205
+[ipfs-companion](https://github.com/ipfs/ipfs-companion/) add-on and some new,
206
+experimental extension APIs from Mozilla. This has the same effect of putting
207
+the CID in the URL origin but has the added benefit of looking "native".
208
+
209
+Unfortunately, origins must be *case insensitive*. Currently, most CIDs users
210
+see are *CIDv0* CIDs (those starting with `Qm`) which are *always* base58
211
+encoded and are therefore case-sensitive.
212
+
213
+Fortunately, CIDv1 (the latest CID format) supports arbitrary bases using the
214
+[multibase](https://github.com/multiformats/multibase/) standard. Unfortunately,
215
+IPFS has always treated equivalent CIDv0 and CIDv1 CIDs as distinct. This means
216
+that files added with CIDv0 CIDs (the default) can't be looked up using the
217
+equivalent CIDv1.
218
+
219
+This release makes some significant progress towards solving this issue by
220
+introducing two features:
221
+
222
+(1) The previous mentioned `ipfs cid base32` command for converting CID to a
223
+case intensive encoding required by domain names. This command converts a CID to
224
+version 1 and encodes it using base32.
225
+
226
+(2) A hack to allow locally looking up blocks associated with a CIDv0 CID using
227
+the equivalent CIDv1 CID. This hack will eventually (likely in the next release)
228
+be replaced with a proper CID-version agnostic datastore.
229
230
### go-ipfs changelog
231