Go IPFS v0.4.14 Release Notes
Release Date: 2018-03-22 // about 6 years ago-
๐ Ipfs 0.4.14 is a big release with a large number of improvements and bugfixes. ๐ It is also the first release of 2018, and our first release in over three ๐ months. The release took longer than expected due to our refactoring and ๐จ extracting of our commands library. This refactor had two stages. The first ๐จ round of the refactor disentangled the commands code from core ipfs code, ๐ allowing us to move it out into a separate repository. The code was previously very entangled with the go-ipfs codebase and not usable for other projects. ๐จ The second round of the refactor had the goal of fixing several major issues around streaming outputs, progress bars, and error handling. It also paved the way for us to more easily provide an API over other transports, such as websockets and unix domain sockets. It took a while to flush out all the kinks on such a massive change. We're pretty sure we've got most of them, but if you ๐ notice anything weird, please let us know.
Beyond that, we've added a new experimental way to use IPNS. With the new โก๏ธ pubsub IPNS resolver and publisher, you can subscribe to updates of an IPNS entry, and the owner can publish out changes in real time. With this, IPNS can become nearly instantaneous. To make use of this, simply start your ipfs daemon with the
--enable-namesys-pubsub
option, and all IPNS resolution and publishing will use pubsub. Note that resolving an IPNS name via pubsub without someone publishing it via pubsub will result in a fallback to using the DHT. Please give this a try and let us know how it goes!๐ Memory and CPU usage should see a noticeable improvement in this release. We have spent considerable time fixing excess memory usage throughout the codebase ๐ and down into libp2p. Fixes in peer tracking, bitswap allocation, pinning, and many other places have brought down both peak and average memory usage. An โฌ๏ธ upgraded hashing library, base58 encoding library, and improved allocation ๐ patterns all contribute to overall lower CPU usage across the board. See the full changelist below for more memory and CPU usage improvements.
๐ This release also brings the beginning of the ipfs 'Core API'. Once finished, the Core API will be the primary way to interact with go-ipfs using go. Both embedded nodes and nodes accessed over the http API will have the same ๐ interface. Stay tuned for future updates and documentation.
๐ These are only a sampling of the changes that made it into this release, the full list (almost 100 PRs!) is below.
๐ Finally, I'd like to thank everyone who contributed to this release, whether you're just contributing a typo fix or driving new features. We are really grateful to everyone who has spent their their time pushing ipfs forward.
๐ SECURITY NOTE:
๐ This release of ipfs disallows the usage of insecure hash functions and lengths. Ipfs does not create these insecure objects for any purpose, but it did allow manually creating them and fetching them from other peers. If you currently have objects using insecure hashes in your local ipfs repo, please โ remove them before updating.
๐ Changes from rc2 to rc3
- ๐ Fix bug in stdin argument parsing (ipfs/go-ipfs#4827)
- โช Revert commands back to sending a single response (ipfs/go-ipfs#4822)
๐ Changes from rc1 to rc2
๐ Fix issue in ipfs get caused by go1.10 changes (ipfs/go-ipfs#4790)
๐ Features
- Pubsub IPNS Publisher and Resolver (experimental) (ipfs/go-ipfs#4047)
- Implement coreapi Dag interface (ipfs/go-ipfs#4471)
- Add --offset flag to ipfs cat (ipfs/go-ipfs#4538)
- Command to apply config profile after init (ipfs/go-ipfs#4195)
- Implement coreapi Name and Key interfaces (ipfs/go-ipfs#4477)
- Add --length flag to ipfs cat (ipfs/go-ipfs#4553)
- Implement coreapi Object interface (ipfs/go-ipfs#4492)
- Implement coreapi Block interface (ipfs/go-ipfs#4548)
- Implement coreapi Pin interface (ipfs/go-ipfs#4575)
- Add a --with-local flag to ipfs files stat (ipfs/go-ipfs#4638)
- Disallow usage of blocks with insecure hashes (ipfs/go-ipfs#4751)
๐ Improvements
- Add uuid to event logs (ipfs/go-ipfs#4392)
- Add --quiet flag to object put (ipfs/go-ipfs#4411)
- Pinning memory improvements and fixes (ipfs/go-ipfs#4451)
- Update WebUI version (ipfs/go-ipfs#4449)
- Check strong and weak ETag validator (ipfs/go-ipfs#3983)
- Improve and refactor FD limit handling (ipfs/go-ipfs#3801)
- Support linking to non-dagpb objects in ipfs object patch (ipfs/go-ipfs#4460)
- Improve allocation patterns of slices in bitswap (ipfs/go-ipfs#4458)
- Secio handshake now happens synchronously (libp2p/go-libp2p-secio#25)
- Don't block closing connections on pending writes (libp2p/go-msgio#7)
- Improve memory usage of multiaddr parsing (multiformats/go-multiaddr#56)
- Don't lock up 256KiB buffers when adding small files (ipfs/go-ipfs#4508)
- Clear out memory after reads from the dagreader (ipfs/go-ipfs#4525)
- Improve error handling in ipfs ping (ipfs/go-ipfs#4546)
- Allow install.sh to be run without being the script dir (ipfs/go-ipfs#4547)
- Much faster base58 encoding (libp2p/go-libp2p-peer#24)
- Use faster sha256 and blake2b libs (multiformats/go-multihash#63)
- Greatly improve peerstore memory usage (libp2p/go-libp2p-peerstore#22)
- Improve dht memory usage and peer tracking (libp2p/go-libp2p-kad-dht#111)
- New libp2p metrics lib with lower overhead (libp2p/go-libp2p-metrics#8)
- Fix memory leak that occurred when dialing many peers (libp2p/go-libp2p-swarm#51)
- Wire up new dag interfaces to make sessions easier (ipfs/go-ipfs#4641)
๐ Documentation
- Correct StorageMax config description (ipfs/go-ipfs#4388)
- Add how to download IPFS with IPFS doc (ipfs/go-ipfs#4390)
- Document gx release checklist item (ipfs/go-ipfs#4480)
- Add some documentation to CoreAPI (ipfs/go-ipfs#4493)
- Add interop tests to the release checklist (ipfs/go-ipfs#4501)
- Add badgerds to experimental-features ToC (ipfs/go-ipfs#4537)
- Fix typos and inconsistencies in commands documentation (ipfs/go-ipfs#4552)
- Add a document to help troubleshoot data transfers (ipfs/go-ipfs#4332)
- Add a bunch of documentation on public interfaces (ipfs/go-ipfs#4599)
- Expand the issue template and remove the severity field (ipfs/go-ipfs#4624)
- Add godocs for importers module (ipfs/go-ipfs#4640)
- Document make targets (ipfs/go-ipfs#4653)
- Add godocs for merkledag module (ipfs/go-ipfs#4665)
- Add godocs for unixfs module (ipfs/go-ipfs#4664)
- Add sharding to experimental features list (ipfs/go-ipfs#4569)
- Add godocs for routing module (ipfs/go-ipfs#4676)
- Add godocs for path module (ipfs/go-ipfs#4689)
- Add godocs for pin module (ipfs/go-ipfs#4696)
- Update link to filestore experimental status (ipfs/go-ipfs#4557)
๐ Bugfixes
- Remove trailing slash in ipfs get paths, fixes #3729 (ipfs/go-ipfs#4365)
- fix deadlock in bitswap sessions (ipfs/go-ipfs#4407)
- Fix two race conditions (and possibly go routine leaks) in commands (ipfs/go-ipfs#4406)
- Fix output delay in ipfs pubsub sub (ipfs/go-ipfs#4402)
- Use correct context in AddWithContext (ipfs/go-ipfs#4433)
- Fix various IPNS republisher issues (ipfs/go-ipfs#4440)
- Fix error handling in commands add and get (ipfs/go-ipfs#4454)
- Fix hamt (sharding) delete issue (ipfs/go-ipfs#4398)
- More correctly check for reuseport support (libp2p/go-reuseport#40)
- Fix goroutine leak in websockets transport (libp2p/go-ws-transport#21)
- Update badgerds to fix i386 windows build (ipfs/go-ipfs#4464)
- Only construct bitswap event loggable if necessary (ipfs/go-ipfs#4533)
- Ensure that flush on the mfs root flushes its directory (ipfs/go-ipfs#4509)
- Fix deferred unlock of pin lock in AddR (ipfs/go-ipfs#4562)
- Fix iOS builds (ipfs/go-ipfs#4610)
- Calling repo gc now frees up space with badgerds (ipfs/go-ipfs#4578)
- Fix leak in bitswap sessions shutdown (ipfs/go-ipfs#4658)
- Fix make on windows (ipfs/go-ipfs#4682)
- Ignore invalid key files in keystore directory (ipfs/go-ipfs#4700)
๐จ General Changes and Refactorings
- Extract and refactor commands library (ipfs/go-ipfs#3856)
- Remove all instances of
Default(false)
(ipfs/go-ipfs#4042) - Build for all supported platforms when testing (ipfs/go-ipfs#4445)
- Refine gateway and namesys logging (ipfs/go-ipfs#4428)
- Demote bitswap error to an info (ipfs/go-ipfs#4472)
- Extract posinfo package to github.com/ipfs/go-ipfs-posinfo (ipfs/go-ipfs#4669)
- Move signature verification to ipns validator (ipfs/go-ipfs#4628)
- Extract importers/chunk module as go-ipfs-chunker (ipfs/go-ipfs#4661)
- Extract go-detect-race from Godeps (ipfs/go-ipfs#4686)
- Extract flags, delay, ds-help (ipfs/go-ipfs#4685)
- Extract routing package to go-ipfs-routing (ipfs/go-ipfs#4703)
- Extract blocks/blockstore package to go-ipfs-blockstore (ipfs/go-ipfs#4707)
- Add exchange.SessionExchange interface for exchanges that support sessions (ipfs/go-ipfs#4709)
- Extract thirdparty/pq to go-ipfs-pq (ipfs/go-ipfs#4711)
- Separate "path" from "path/resolver" (ipfs/go-ipfs#4713)
โ Testing
- Increase verbosity of t0088-repo-stat-symlink.sh test (ipfs/go-ipfs#4434)
- Make repo size test pass deterministically (ipfs/go-ipfs#4443)
- Always set IPFS_PATH in test-lib.sh (ipfs/go-ipfs#4469)
- Fix sharness docker (ipfs/go-ipfs#4489)
- Fix loops in sharness tests to fail the test if the inner command fails (ipfs/go-ipfs#4482)
- Improve bitswap tests, fix race conditions (ipfs/go-ipfs#4499)
- Fix circleci cache directory list (ipfs/go-ipfs#4564)
- Only run the build test on test_go_expensive (ipfs/go-ipfs#4645)
- Fix go test on Windows (ipfs/go-ipfs#4632)
- Fix some tests on FreeBSD (ipfs/go-ipfs#4662)