Changelog History
Page 4
-
v0.4.23-rc1
January 18, 2020 -
v0.4.22 Changes
July 22, 2019π We're releasing a PATCH release of go-ipfs based on 0.4.21 containing some critical fixes.
The IPFS network has scaled to the point where small changes can have a wide-reaching impact on the entire network. To keep this situation from escalating, we've put a hold on releasing new features until we can improve our π release process π (which we've trialed in this release) and testing procedures.
π This release includes fixes for the following regressions:
- A major bitswap throughput regression introduced in 0.4.21 (ipfs/go-ipfs#6442). π 2. High bitswap CPU usage when connected to many (e.g. 10,000) peers. See ipfs/go-bitswap#154.
- The local network discovery service sometimes initializes before the networking module, causing it to announce the wrong addresses and sometimes complain about not being able to determine the IP address (ipfs/go-ipfs#6415).
π It also includes fixes for:
π 1. Pins not being persisted after
ipfs block add --pin
(ipfs/go-ipfs#6441).- Panic due to concurrent map access when adding and listing pins at the same
time (ipfs/go-ipfs#6419).
π 3. Potential pin-set corruption given a concurrent
ipfs repo gc
andipfs pin rm
(ipfs/go-ipfs#6444). π 4. Build failure due to a deleted git tag in one of our dependencies (ipfs/go-ds-badger#64).
Thanks to:
- @hannahhoward for fixing both bitswap issues.
- @sanderpick for catching and fixing the local discovery bug.
- π @campoy for fixing the build issue.
-
v0.4.22-rc1 Changes
July 22, 2019Track progress on #6506.
-
v0.4.21 Changes
May 30, 2019π We're happy to announce go-ipfs 0.4.21. This release has some critical bug fixes β¬οΈ and a handful of new features so every user should upgrade.
π Key bug fixes:
- Too many open file descriptors/too many peers (#6237).
- β Adding multiple files at the same time doesn't work (#6254).
- CPU utilization spikes and then holds at 100% (#5613).
Key features:
- π Experimental TLS1.3 support (to eventually replace secio).
- π OpenSSL support for SECIO handshakes (performance improvement).
IMPORTANT: This release fixes a bug in our security transport that could potentially drop data from the channel. Note: This issue affects neither the privacy nor the integrity of the data with respect to a third-party attacker. Only the peer sending us data could trigger this bug.
β¬οΈ ALL USERS MUST UPGRADE. We intended to introduce a feature this release that, unfortunately, reliably triggered this bug. To avoid partitioning π the network, we've decided to postpone this feature for a release or two.
Specifically, we're going to provide a minimum one month upgrade period. After π that, we'll start testing the impact of deploying the proposed changes.
β¬οΈ If you're running the mainline go-ipfs, please upgrade ASAP. If you're building β¬οΈ a separate app or working on a forked go-ipfs, make sure to upgrade github.com/libp2p/go-libp2p-secio to at least v0.0.3.
Contributors
First off, we'd like to give a shout-out to all contributors that participated π in this release (including contributions to ipld, libp2p, and multiformats):
Contributor Commits Lines Β± Files Changed Steven Allen 220 +6078/-4211 520 Εukasz Magiera 53 +5039/-4557 274 vyzo 179 +2929/-1704 238 RaΓΊl Kripalani 44 +757/-1895 134 hannahhoward 11 +755/-1005 49 π Marten Seemann 16 +862/-203 keks 10 +359/-110 12 Jan Winkelmann 8 +368/-26 16 Jakub Sztandera 4 +361/-8 7 Adrian Lanzafame 1 +287/-18 5 Erik Ingenito 4 +247/-28 8 Reid 'arrdem' McKenzie 1 +220/-20 3 Yusef Napora 26 +98/-130 26 Michael Avila 3 +116/-59 8 Raghav Gulati 13 +145/-26 13 tg 1 +41/-33 1 Matt Joiner 6 +41/-30 7 Cole Brown 1 +37/-25 1 Dominic Della Valle 2 +12/-40 4 Overbool 1 +50/-0 2 Christopher Buesser 3 +29/-16 10 myself659 1 +38/-5 2 Alex Browne 3 +30/-8 3 jmank88 1 +27/-4 2 Vikram 1 +25/-1 2 MollyM 7 +17/-9 7 Marcin Rataj 1 +17/-1 1 requilence 1 +11/-4 1 Teran McKinney 1 +8/-2 1 Oli Evans 1 +5/-5 1 Masashi Salvador Mitsuzawa 1 +5/-1 1 chenminjian 1 +4/-0 1 Edgar Lee 1 +3/-1 1 Dirk McCormick 1 +2/-2 2 ia 1 +1/-1 1 Alan Shaw 1 +1/-1 1 π Bug Fixes And Enhancements
π This release includes quite a number of critical bug fixes and π performance/reliability enhancements.
Error when adding multiple files
π The last release broke the simple command
ipfs add file1 file2
. It turns out β we simply lacked a test case for this. Both of these issues (the bug and the β lack of a test case) have now been fixed.SECIO
π As noted above, we've fixed a bug that could cause data to be dropped from a SECIO connection on read. Specifically, this happens when:
- The capacity of the read buffer is greater than the length.
- The remote peer sent more than the length but less than the capacity in a single secio "frame".
In this case, we'd fill the read buffer to it's capacity instead of its length.
Too many open files, too many peers, etc.
Go-ipfs automatically closes the least useful connections when it accumulates too many connections. Unfortunately, some relayed connections were blocking in
Close()
, halting the entire process.Out of control CPU usage
π Many users noted out of control CPU usage this release. This turned out to be a long-standing issue with how the DHT handled provider records (records recording which peers have what content):
- It wasn't removing provider records for content until the set of providers completely emptied. β‘οΈ 2. It was loading every provider record into memory whenever we updated the set of providers.
Combined, these two issues were trashing the provider record cache, forcing the DHT to repeatedly load and discard provider records.
More Reliable Connection Management
Go-ipfs has a subsystem called the "connection manager" to close the least-useful connections when go-ipfs runs low on resources.
Unfortunately, other IPFS subsystems may learn about connections before the connection manager. Previously, if some IPFS subsystem tried to mark a connection as useful before the connection manager learned about it, the connection manager would discard this information. We believe this was causing #6271. It no longer does that.
π Improved Bitswap Connection Management
Bitswap now uses the connection manager to mark all peers downloading blocks as important (while downloading). Previously, it only marked peers from which it was downloading blocks.
β¬οΈ Reduced Memory Usage
π The most noticeable memory reduction in this release comes from fixing connection closing. However, we've made a few additional improvements:
- π Bitswap's "work queue" no longer remembers every peer it has seen indefinitely.
- The peerstore now interns protocol names.
- The per-peer goroutine count has been reduced.
- The DHT now wastes less memory on idle peers by pooling buffered writers and returning them to the pool when not actively using them.
Increased File Descriptor Limit
0οΈβ£ The default file descriptor limit has been raised to 8192 (from 2048). Unfortunately, go-ipfs behaves poorly when it runs out of file descriptors and it uses a lot of file descriptors.
Luckily, most modern kernels can handle thousands of file descriptors without any difficulty.
β¬ Decreased Connection Handshake Latency
Libp2p now shaves off a couple of round trips when initiating connections by beginning the protocol negotiation before the remote peer responds to the π initial handshake message.
In the optimal case (when the target peer speaks our preferred protocol), this β¬οΈ reduces the number of handshake round-trips from 6 to 4 (including the TCP handshake).
Commands
π This release brings no new commands but does introduce a few changes, bugfixes, and enhancements. This section is hardly complete but it lists the most π noticeable changes.
π Take note: this release also introduces a few breaking changes.
π [DEPRECATION] The URLStore Command Deprecated
π The experimental
ipfs urlstore
command is now deprecated. Please useipfs add --nocopy URL
instead.[BREAKING] The DHT Command Base64 Encodes Values
When responding to an
ipfs dht get
command, the daemon now encodes the returned value using base64. Theipfs
command will automatically decode this value before returning it to the user so this change should only affect those using the HTTP API directly.Unfortunately, this change was necessary as DHT records are arbitrary binary blobs which can't be directly stored in JSON strings.
0οΈβ£ [BREAKING] Base32 Encoded v1 CIDs By Default
0οΈβ£ Both js-ipfs and go-ipfs now encode CIDv1 CIDs using base32 by default, instead of base58. Unfortunately, base58 is case-sensitive and doesn't play well with π browsers (see #4143.
Human Readable Numbers
π The
ipfs bitswap stat
and andipfs object stat
commands now support a--humanize
flag that formats numbers with human-readable units (GiB, MiB, etc.).π Improved Errors
π This release improves two types of errors:
- Commands that take paths/multiaddrs now include the path/multiaddr in the error message when it fails to parse.
ipfs swarm connect
now returns a detailed error describing which addresses were tried and why the dial failed.
Ping Improvements
π The ping command has received some small improvements and fixes:
- It now exits with a non-zero exit status on failure.
- It no longer succeeds with zero successful pings if we have a zombie but
non-functional connection to the peer being pinged
(#6298).
π€ 3. It now prints out the average latency when canceled with
^C
(like the unixping
command).
π Improved Help Text
Go-ipfs now intelligently wraps help text for easier reading. On an 80 character wide terminal,
Before
USAGE ipfs add <path>... - Add a file or directory to ipfs. SYNOPSIS ipfs add [--recursive | -r] [--dereference-args] [--stdin-name=<stdin-name>] [ --hidden | -H] [--quiet | -q] [--quieter | -Q] [--silent] [--progress | -p] [--t rickle | -t] [--only-hash | -n] [--wrap-with-directory | -w] [--chunker=<chunker > | -s] [--pin=false] [--raw-leaves] [--nocopy] [--fscache] [--cid-version=<cid- version>] [--hash=<hash>] [--inline] [--inline-limit=<inline-limit>] [--] <path> ... ARGUMENTS <path>... - The path to a file to be added to ipfs. OPTIONS -r, --recursive bool - Add directory paths recursive ly. --dereference-args bool - Symlinks supplied in argument s are dereferenced. --stdin-name string - Assign a name if the file sou rce is stdin. -H, --hidden bool - Include files that are hidden . Only takes effect on recursive add. -q, --quiet bool - Write minimal output. -Q, --quieter bool - Write only final hash. --silent bool - Write no output. -p, --progress bool - Stream progress data. -t, --trickle bool - Use trickle-dag format for da g generation. -n, --only-hash bool - Only chunk and hash - do not write to disk. -w, --wrap-with-directory bool - Wrap files with a directory o bject. -s, --chunker string - Chunking algorithm, size-[byt es] or rabin-[min]-[avg]-[max]. Default: size-262144. --pin bool - Pin this object when adding. Default: true. --raw-leaves bool - Use raw blocks for leaf nodes . (experimental). --nocopy bool - Add the file using filestore. Implies raw-leaves. (experimental). --fscache bool - Check the filestore for pre-e xisting blocks. (experimental). --cid-version int - CID version. Defaults to 0 un less an option that depends on CIDv1 is passed. (experimental). --hash string - Hash function to use. Implies CIDv1 if not sha2-256. (experimental). Default: sha2-256. --inline bool - Inline small blocks into CIDs . (experimental). --inline-limit int - Maximum block size to inline. (experimental). Default: 32.
After
USAGE ipfs add <path>... - Add a file or directory to ipfs. SYNOPSIS ipfs add [--recursive | -r] [--dereference-args] [--stdin-name=<stdin-name>] [--hidden | -H] [--quiet | -q] [--quieter | -Q] [--silent] [--progress | -p] [--trickle | -t] [--only-hash | -n] [--wrap-with-directory | -w] [--chunker=<chunker> | -s] [--pin=false] [--raw-leaves] [--nocopy] [--fscache] [--cid-version=<cid-version>] [--hash=<hash>] [--inline] [--inline-limit=<inline-limit>] [--] <path>... ARGUMENTS <path>... - The path to a file to be added to ipfs. OPTIONS -r, --recursive bool - Add directory paths recursively. --dereference-args bool - Symlinks supplied in arguments are dereferenced. --stdin-name string - Assign a name if the file source is stdin. -H, --hidden bool - Include files that are hidden. Only takes effect on recursive add. -q, --quiet bool - Write minimal output. -Q, --quieter bool - Write only final hash. --silent bool - Write no output. -p, --progress bool - Stream progress data. -t, --trickle bool - Use trickle-dag format for dag generation. -n, --only-hash bool - Only chunk and hash - do not write to disk. -w, --wrap-with-directory bool - Wrap files with a directory object. -s, --chunker string - Chunking algorithm, size-[bytes] or rabin-[min]-[avg]-[max]. Default: size-262144. --pin bool - Pin this object when adding. Default: true. --raw-leaves bool - Use raw blocks for leaf nodes. (experimental). --nocopy bool - Add the file using filestore. Implies raw-leaves. (experimental). --fscache bool - Check the filestore for pre-existing blocks. (experimental). --cid-version int - CID version. Defaults to 0 unless an option that depends on CIDv1 is passed. (experimental). --hash string - Hash function to use. Implies CIDv1 if not sha2-256. (experimental). Default: sha2-256. --inline bool - Inline small blocks into CIDs. (experimental). --inline-limit int - Maximum block size to inline. (experimental). Default: 32.
π Features
π This release is primarily a bug fix release but it still includes two nice π features from libp2p.
π Experimental TLS1.3 support
π Go-ipfs now has experimental TLS1.3 support. Currently, libp2p (IPFS's networking library) uses a custom TLS-like protocol we call SECIO. However, the π conventional wisdom concerning custom security transports is "just don't" so we are working on replacing it with TLS1.3
0οΈβ£ To choose this protocol by default, set the
Experimental.PreferTLS
config variable:> ipfs config --bool Experimental.PreferTLS true
Why TLS1.3 and not X (noise, etc.)?
- Libp2p allows negotiating transports so there's no reason not to add noise support to libp2p as well. π 2. TLS has wide language support which should make implementing libp2p for new languages significantly simpler.
π OpenSSL Support
π Go-ipfs can now (optionally) be built with OpenSSL support for improved π performance when establishing connections. This is primarily useful for nodes receiving multiple inbound connections per second.
π To enable openssl support, rebuild go-ipfs with:
> make build GOFLAGS=-tags=openssl
CoreAPI
π¨ The CoreAPI refactor is still underway and we've made significant progress towards a usable ipfs-as-a-library constructor. Specifically, we've integrated the fx dependency injection system and are now working on cleaning up our initialization logic. This should make it easier to inject new services into a go-ipfs process without messing with the core internals.
π Build:
GOCC
Environment Variableπ· Build system now uses
GOCC
environment variable allowing for use of specific π go versions during builds.π Changelog
- github.com/ipfs/go-ipfs:
- fix: use http.Error for sending errors (ipfs/go-ipfs#6379)
- core: call app.Stop once (ipfs/go-ipfs#6380)
- explain what dhtclient does (ipfs/go-ipfs#6375)
- ci: actually enable golangci-lint (ipfs/go-ipfs#6362)
- commands/swarm(fix): handle empty multiaddrs (ipfs/go-ipfs#6355)
- feat: improve errors when a path fails to parse (ipfs/go-ipfs#6346)
- fix vendoring dependencies when building the source tarball (ipfs/go-ipfs#6349)
- core: Use correct default for connmgr lowWater (ipfs/go-ipfs#6352)
- doc: remove out of date documentation (ipfs/go-ipfs#6345)
- Add generation of dependency changes to mkreleaselog (ipfs/go-ipfs#6348)
- readme: remove mention of DCO (ipfs/go-ipfs#6344)
- Add golangci-lint (ipfs/go-ipfs#6321)
- docs+mk: update guidance for unsupported platforms (ipfs/go-ipfs#6338)
- fix formatting in object get (ipfs/go-ipfs#6340)
- fail start when loading a plugin fails (ipfs/go-ipfs#6339)
- fix a typo in the issue template (ipfs/go-ipfs#6335)
- github: turn issue template into a multiple-choice question (ipfs/go-ipfs#6333)
- object put: Allow empty objects (ipfs/go-ipfs#6330)
- Update fuse.md (ipfs/go-ipfs#6332)
- work towards fixing dht commands (ipfs/go-ipfs#6277)
- fix setting ulimit (ipfs/go-ipfs#6319)
- switch to base32 by default for CIDv1 (ipfs/go-ipfs#6300)
- cmdkit -> cmds (ipfs/go-ipfs#6318)
- raise default fd limit to 8192 (ipfs/go-ipfs#6266)
- pin: don't walk all pinned blocks when removing a non-existent pin (ipfs/go-ipfs#6311)
- ping: fix a bunch of issues (ipfs/go-ipfs#6312)
- test(coreapi): use a thread-safe datastore everywhere (ipfs/go-ipfs#6222)
- fix(Dockerfile): Allow ipfs mount in Docker container (ipfs/go-ipfs#5560)
- docs: fix Routing section (ipfs/go-ipfs#6309)
- License update to dual MIT and Apache 2 (ipfs/go-ipfs#6301)
- Go test fix (ipfs/go-ipfs#6293)
- commands(pin update): return resolved CIDs instead of paths (ipfs/go-ipfs#6275)
- core: fix autonat construction (ipfs/go-ipfs#6289)
- Test and fix GC/pin bug (ipfs/go-ipfs#6288)
- GOCC implementation & fix in make & build scripts (ipfs/go-ipfs#6282)
- gc: cancel context (ipfs/go-ipfs#6281)
- fix: windows friendly daemon help (ipfs/go-ipfs#6278)
- Invert constructor config handling (ipfs/go-ipfs#6276)
- docs: document environment variables (ipfs/go-ipfs#6268)
- add: Return error from iterator (ipfs/go-ipfs#6272)
- commands(feat): use the coreapi in the urlstore command (ipfs/go-ipfs#6259)
- humanize for ipfs bitswap stat (ipfs/go-ipfs#6258)
- Revert "raise default fd limit to 8192" (ipfs/go-ipfs#6265)
- raise default fd limit to 8192 (ipfs/go-ipfs#6261)
- Fix AutoNAT service for private network (ipfs/go-ipfs#6251)
- add: Fix adding multiple files (ipfs/go-ipfs#6255)
- reprovider: Use goprocess (ipfs/go-ipfs#6248)
- core/corehttp/gateway_handler: pass a request ctx instead of the node (ipfs/go-ipfs#6244)
- constructor: cleanup some things (ipfs/go-ipfs#6246)
- Support --human flag in cmd/object-stat (ipfs/go-ipfs#6241)
- build: fix macos build with fuse (ipfs/go-ipfs#6235)
- add an experiment to prefer TLS 1.3 over secio (ipfs/go-ipfs#6229)
- fix two small nits in the go-ipfs constructor (ipfs/go-ipfs#6234)
- DI-based core.NewNode (ipfs/go-ipfs#6162)
- coreapi: Drop error from ParsePath (ipfs/go-ipfs#6122)
- fix the wrong path configuration in root redirection (ipfs/go-ipfs#6215)
- github.com/ipfs/go-bitswap (v0.0.4 -> v0.0.7):
- feat(engine): tag peers with requests (ipfs/go-bitswap#128)
- fix(network): add mutex to avoid data race (ipfs/go-bitswap#127)
- Change bitswap provide toggle to not be static (ipfs/go-bitswap#124)
- Use shared peer task queue with Graphsync (ipfs/go-bitswap#119)
- Add missing godoc comments, refactor to avoid confusion (ipfs/go-bitswap#117)
- fix(decision): cleanup request queues (ipfs/go-bitswap#116)
- Control provider workers with experiment flag (ipfs/go-bitswap#110)
- connmgr: give peers more weight when actively participating in a session (ipfs/go-bitswap#111)
- make the WantlistManager own the PeerHandler (ipfs/go-bitswap#78)
- remove IPFS_LOW_MEM flag support (ipfs/go-bitswap#115)
- github.com/ipfs/go-cid (v0.0.1 -> v0.0.2):
- default cidv1 to base32 (ipfs/go-cid#85)
- github.com/ipfs/go-cidutil (v0.0.1 -> v0.0.2):
- default cidv1 to base32 (ipfs/go-cidutil#13)
- github.com/ipfs/go-datastore (v0.0.3 -> v0.0.5):
- MapDatastore: obey KeysOnly (ipfs/go-datastore#130)
- fix the keytransform datastore's query implementation (ipfs/go-datastore#127)
- sync: apply entire query while locked (ipfs/go-datastore#129)
- filter: values are now always bytes (ipfs/go-datastore#126)
- autobatch: batch deletes (ipfs/go-datastore#128)
- github.com/ipfs/go-ipfs-cmds (v0.0.5 -> v0.0.8):
- fix: use golang's http.Error to send errors (ipfs/go-ipfs-cmds#167)
- improve help text on narrow terminals (ipfs/go-ipfs-cmds#140)
- chore: remove an old hack (ipfs/go-ipfs-cmds#165)
- http: use the request context (ipfs/go-ipfs-cmds#163)
- merge in go-ipfs-cmdkit (ipfs/go-ipfs-cmds#164)
- fix: return the correct error (ipfs/go-ipfs-cmds#162)
- github.com/ipfs/go-ipfs-config (v0.0.1 -> v0.0.3):
- Closes: #6284 Add appropriate IPv6 ranges to defaultServerFilters (ipfs/go-ipfs-config#34)
- add an experiment to prefer TLS 1.3 over secio (ipfs/go-ipfs-config#32)
- github.com/ipfs/go-ipfs-files (v0.0.2 -> v0.0.3):
- webfile: make Size() work before Read (ipfs/go-ipfs-files#18)
- check http status code during WebFile reads and return error for non-2XX (ipfs/go-ipfs-files#17)
- github.com/ipfs/go-ipld-cbor (v0.0.1 -> v0.0.2):
- switch to base32 by default (ipfs/go-ipld-cbor#62)
- github.com/ipfs/go-ipld-git (v0.0.1 -> v0.0.2):
- switch to base32 by default (ipfs/go-ipld-git#40)
- github.com/ipfs/go-mfs (v0.0.4 -> v0.0.7):
- Fix directory mv and add tests (ipfs/go-mfs#76)
- fix: not remove file by mistakes (ipfs/go-mfs#73)
- github.com/ipfs/go-path (v0.0.3 -> v0.0.4):
- include the path in path errors (ipfs/go-path#28)
- github.com/ipfs/go-unixfs (v0.0.4 -> v0.0.6):
- chore: remove URL field (ipfs/go-unixfs#72)
- github.com/ipfs/interface-go-ipfs-core (v0.0.6 -> v0.0.8):
- switch to base32 cidv1 by default (ipfs/interface-go-ipfs-core#29)
- path: drop error from ParsePath (ipfs/interface-go-ipfs-core#22)
- tests: fix a bunch of small test lints/issues (ipfs/interface-go-ipfs-core#28)
- Update Pin.RmRecursive docs to clarify shared indirect pins are not removed (ipfs/interface-go-ipfs-core#26)
- github.com/libp2p/go-buffer-pool (v0.0.1 -> v0.0.2):
- feat: add buffered writer (libp2p/go-buffer-pool#9)
- π github.com/libp2p/go-conn-security-multistream (v0.0.1 -> v0.0.2):
- block while writing (libp2p/go-conn-security-multistream#10)
- github.com/libp2p/go-libp2p (v0.0.12 -> v0.0.28):
- Close the connection manager (libp2p/go-libp2p#639)
- Frequent Relay Advertisements (libp2p/go-libp2p#637)
- ping: return a stream of results (libp2p/go-libp2p#626)
- Use cancelable background context in identify (libp2p/go-libp2p#624)
- avoid intermediate allocation in relayAddrs (libp2p/go-libp2p#609)
- cache relayAddrs for a short period of time (libp2p/go-libp2p#608)
- autorelay: break findRelays into multiple functions and avoid the goto (libp2p/go-libp2p#606)
- autorelay: curtail addrsplosion (libp2p/go-libp2p#598)
- Periodically schedule identify push if the address set has changed (libp2p/go-libp2p#597)
- Replace peer addresses in identify (libp2p/go-libp2p#599)
- github.com/libp2p/go-libp2p-circuit (v0.0.4 -> v0.0.8):
- call Stream.Reset instead of Stream.Close (libp2p/go-libp2p-circuit#76)
- Tag the hop relay when creating stop streams (libp2p/go-libp2p-circuit#77)
- Tag peers with live hop streams (libp2p/go-libp2p-circuit#75)
- Hard Limit the number of hop stream goroutines (libp2p/go-libp2p-circuit#74)
- set deadline for stop handshake (libp2p/go-libp2p-circuit#73)
- github.com/libp2p/go-libp2p-connmgr (v0.0.1 -> v0.0.6):
- Background trimming (libp2p/go-libp2p-connmgr#43)
- Implement UpsertTag (libp2p/go-libp2p-connmgr#38)
- Add peer protection capability (implementation) (libp2p/go-libp2p-connmgr#36)
- github.com/libp2p/go-libp2p-crypto (v0.0.1 -> v0.0.2):
- add openssl support (libp2p/go-libp2p-crypto#61)
- github.com/libp2p/go-libp2p-discovery (v0.0.1 -> v0.0.4):
- More consistent use of options (libp2p/go-libp2p-discovery#25)
- Use 3hrs as routing advertisement ttl (libp2p/go-libp2p-discovery#23)
- github.com/libp2p/go-libp2p-interface-connmgr (v0.0.1 -> v0.0.5):
- Add Close method to the ConnManager interface (libp2p/go-libp2p-interface-connmgr#18)
- Add UpsertTag to the interface (libp2p/go-libp2p-interface-connmgr#17)
- Fix NullConnMgr to respect ConnManager interface (libp2p/go-libp2p-interface-connmgr#15)
- Add peer protection capability (libp2p/go-libp2p-interface-connmgr#14)
- github.com/libp2p/go-libp2p-kad-dht (v0.0.7 -> v0.0.13):
- fix: reduce memory used by buffered writers (libp2p/go-libp2p-kad-dht#332)
- query: fix a goroutine leak when the routing table is empty (libp2p/go-libp2p-kad-dht#329)
- query: fix error "leak" (libp2p/go-libp2p-kad-dht#328)
- providers: run datastore GC concurrently (libp2p/go-libp2p-kad-dht#326)
- fix(providers): gc (libp2p/go-libp2p-kad-dht#325)
- Remove the old protocol from the defaults (libp2p/go-libp2p-kad-dht#320)
- Fix some provider subsystem performance issues (libp2p/go-libp2p-kad-dht#319)
- github.com/libp2p/go-libp2p-peerstore (v0.0.2 -> v0.0.6):
- segment the memory peerstore + granular locks (libp2p/go-libp2p-peerstore#78)
- don't delete under the read lock (libp2p/go-libp2p-peerstore#76)
- Read/Write locking (libp2p/go-libp2p-peerstore#74)
- optimize peerstore memory (libp2p/go-libp2p-peerstore#71)
- fix unmarshalling of peer IDs (libp2p/go-libp2p-peerstore#72)
- fix error handling in UpdateAddrs: return on error (libp2p/go-libp2p-peerstore#70)
- github.com/libp2p/go-libp2p-pubsub (v0.0.1 -> v0.0.3):
- rework validator pipeline (libp2p/go-libp2p-pubsub#176)
- Test adversarial signing (libp2p/go-libp2p-pubsub#181)
- Strict message signing by default (libp2p/go-libp2p-pubsub#180)
- github.com/libp2p/go-libp2p-secio (v0.0.1 -> v0.0.3):
- fix buffer size check (libp2p/go-libp2p-secio#44)
- github.com/libp2p/go-libp2p-swarm (v0.0.2 -> v0.0.6):
- dial: return a nice custom dial error (libp2p/go-libp2p-swarm#121)
- github.com/libp2p/go-libp2p-tls (null -> v0.0.1):
- implement the new handshake (libp2p/go-libp2p-tls#20)
- use a prefix when signing the public key (libp2p/go-libp2p-tls#26)
- use ChaCha if one of the peers doesn't have AES hardware support (libp2p/go-libp2p-tls#23)
- improve peer verification (libp2p/go-libp2p-tls#17)
- add an example (mainly for development) (libp2p/go-libp2p-tls#14)
- β¬οΈ github.com/libp2p/go-libp2p-transport-upgrader (v0.0.1 -> v0.0.4):
- improve correctness of closing connections on failure (libp2p/go-libp2p-transport-upgrader#19)
- github.com/libp2p/go-maddr-filter (v0.0.1 -> v0.0.4):
- fix filter listing (libp2p/go-maddr-filter#13)
- Reinstate deprecated Remove() method to reverse breakage (libp2p/go-maddr-filter#12)
- Implement support for whitelists, default-deny/allow (libp2p/go-maddr-filter#8)
- github.com/libp2p/go-mplex (v0.0.1 -> v0.0.4):
- disable write coalescing (libp2p/go-mplex#61)
- fix SetDeadline error conditions (libp2p/go-mplex#59)
- don't use contexts for deadlines (libp2p/go-mplex#58)
- don't reset on pathologies, just ignore the data (libp2p/go-mplex#57)
- coalesce writes (libp2p/go-mplex#54)
- read as much as we can in one go (libp2p/go-mplex#53)
- use timeouts when sending messages for stream open, close, and reset. (libp2p/go-mplex#52)
- fix: reset a stream even if closed remotely (libp2p/go-mplex#50)
- downgrade Error log to Warning (libp2p/go-mplex#46)
- Fix race condition by adding a mutex for deadline access (libp2p/go-mplex#41)
- github.com/libp2p/go-msgio (v0.0.1 -> v0.0.2):
- fix: never claim to read more than read (libp2p/go-msgio#12)
- github.com/libp2p/go-ws-transport (v0.0.2 -> v0.0.4):
- dep: import go-smux-* into the libp2p org (libp2p/go-ws-transport#43)
- replace gx instructions with note about gomod (libp2p/go-ws-transport#42)
-
v0.4.21-rc3
May 23, 2019 -
v0.4.21-rc2
May 22, 2019 -
v0.4.21-rc1
May 20, 2019 -
v0.4.20 Changes
April 16, 2019π We're happy to release go-ipfs 0.4.20. This release includes some critical
π performance and stability fixes so all users should upgrade ASAP.π This is also the first release to use go modules instead of GX. While GX has
π been a great way to dogfood an IPFS-based package manager, building and
maintaining a custom package manager is a lot of work and we haven't been able
to dedicate enough time to bring the user experience of gx to an acceptable
level. You can read #5850 for
some discussion on this matter.π³ Docker
π As of this release, it's now much easier to run arbitrary IPFS commands within
π³ the docker container:\> docker run --name my-ipfs ipfs/go-ipfs:v0.4.20 config profile apply server # apply the server profile\> docker start my-ipfs # start the daemon
π This release also reverts a change that
π³ caused some significant trouble in 0.4.19. If you've been running into Docker
β¬οΈ permission errors in 0.4.19, please upgrade.WebUI
π This release contains a major
π WebUI release with some
π» significant improvements to the file browser and new opt-in, privately hosted,
π anonymous usage analytics.Commands
As usual, we've made several changes and improvements to our commands. The most
notable changes are listed in this section.π New:
ipfs version deps
π This release includes a new command,
ipfs version deps
, to list all
π dependencies (with versions) of the current go-ipfs build. This should make it
easy to tell exactly how go-ipfs was built when tracking down issues.π New:
ipfs add URL
π The
ipfs add
command has gained support for URLs. This means you can:- Add files with
ipfs add URL
instead of downloading the file first. π 2. Replace all uses of theipfs urlstore
command with a call toipfs add --nocopy
. Theipfs urlstore
command will be deprecated in a future
π release.
π Changed:
ipfs swarm connect
The
ipfs swarm connect
command has a few new features:It now marks the newly created connection as "important". This should ensure
that the connection manager won't come along later and close the connection if
it doesn't think it's being used.It can now resolve
/dnsaddr
addresses that don't end in a peer ID. For
example, you can now runipfs swarm connect /dnsaddr/bootstrap.libp2p.io
to
connect to one of the bootstrap peers at random. NOTE: This could connect you to
an arbitrary peer as DNS is not secure (by default). Please do not rely on
β this except for testing or unless you know what you're doing.Finally,
ipfs swarm connect
now returns all errors on failure. This should
π make it much easier to debug connectivity issues. For example, one might see an
error like:Error: connect QmYou failure: dial attempt failed: 6 errors occurred: * <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 * <peer.ID Qm*Me> --> <peer.ID Qm*You> (/ip6/::1/tcp/4001) dial attempt failed: dial tcp6 [::1]:4001: connect: connection refused * <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 * <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 * <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 * <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
π Changed:
ipfs bitswap stat
ipfs bitswap stat
no longer lists bitswap partners unless the-v
flag is
passed. That is, it will now return:> ipfs bitswap stat bitswap status provides buffer: 0 / 256 blocks received: 0 blocks sent: 79 data received: 0 data sent: 672706 dup blocks received: 0 dup data received: 0 B wantlist [0 keys] partners [197]
Instead of:
> ipfs bitswap stat -v bitswap status provides buffer: 0 / 256 blocks received: 0 blocks sent: 79 data received: 0 data sent: 672706 dup blocks received: 0 dup data received: 0 B wantlist [0 keys] partners [203] QmNQTTTRCDpCYCiiu6TYWCqEa7ShAUo9jrZJvWngfSu1mL QmNWaxbqERvdcgoWpqAhDMrbK2gKi3SMGk3LUEvfcqZcf4 QmNgSVpgZVEd41pBX6DyCaHRof8UmUJLqQ3XH2qNL9xLvN ... omitting 200 lines ...
π Changed:
ipfs repo stat --human
The
--human
flag in theipfs repo stat
command now intelligently picks a
size unit instead of always using MiB.π Changed:
ipfs resolve
(ipfs dns
,ipfs name resolve
)All of the resolve commands now:
- Resolve recursively (up to 32 steps) by default to better match user
0οΈβ£ expectations (these commands used to be non-recursive by default). To turn
recursion off, pass-r false
. - When resolving non-recursively, these commands no longer fail when partially
resolving a name. Instead, they simply return the intermediate result.
π Changed:
ipfs files flush
The
ipfs files flush
command now returns the CID of the flushed file.π Performance And Reliability
π This release has the usual collection of performance and reliability
π improvements.Badger Memory Usage
Those of you using the badger datastore should notice reduced memory usage in
π this release due to some upstream changes. Badger still uses significantly more
π§ memory than the default datastore configuration but this will hopefully continue
to improve.Bitswap
π We fixed some critical CPU utilization regressions in bitswap for this release.
If you've been noticing CPU regressions in go-ipfs 0.4.19, especially when
β¬οΈ running a public gateway, upgrading to 0.4.20 will likely fix them.Relays
After AutoRelay was introduced in go-ipfs 0.4.19, the number of peers connecting
through relays skyrocketed to over 120K concurrent peers. This highlighted some
π performance issues that we've now fixed in this release. Specifically:- We've significantly reduced the amount of memory allocated per-peer.
- π We've fixed a bug where relays might, in rare cases, try to actively dial a
0οΈβ£ peer to relay traffic. By default, relays only forward traffic between peers
already connected to the relay. - π We've fixed quite a number of performance issues that only show up when
rapidly forming new connections. This will actually help all nodes but will
especially help relays.
If you've enabled relay hop (
Swarm.EnableRelayHop
) in go-ipfs 0.4.19 and it
π hasn't burned down your machine yet, this release should improve things
significantly. However, relays are still under heavy load so running an open
relay will continue to be resource intensive.We're continuing to investigate this issue and have a few more patches on the
π way that, unfortunately, won't make it into this release.Panics
π We've fixed two notable panics in this release:
- π We've fixed a frequent panic in the DHT.
- π We've fixed an occasional panic in the experimental QUIC transport.
Content Routing
IPFS announces and finds content by sending and retrieving content routing
("provider") records to and from the DHT. Unfortunately, sending out these
records can be quite resource intensive.π This release has two changes to alleviate this: a reduced number of initial
π· provide workers and a persistent provider queue.π· We've reduced the number of parallel initial provide workers (workers that send
out provider records when content is initially added to go-ipfs) from 512 to 6.
Each provide request (currently, due to some issues in our DHT) tries to
π establish hundreds of connections, significantly impacting the performance of
go-ipfs and crashing some
routers.We've introduced a new persistent provider queue for files added via
ipfs add
π andipfs pin add
. When new directory trees are added to go-ipfs, go-ipfs will
β add the root/final CID to this queue. Then, in the background, go-ipfs will walk
the queue, sequentially sending out provider records for each CID.This ensures that root CIDs are sent out as soon as possible and are sent even
when files are added when the go-ipfs daemon isn't running.By example, let's add a directory tree to go-ipfs:
\> # We're going to do this in "online" mode first so let's start the daemon.\> ipfs daemon &... Daemon is ready\> # Now, we're going to create a directory to add.\> mkdir foo\> for i in {0..1000}; do echo do echo $i \> foo/$i; done\> # finally, we're going to add it.\> ipfs add -r foo added QmUQcSjQx2bg4cSe2rUZyQi6F8QtJFJb74fWL7D784UWf9 foo/0 ... added QmQac2chFyJ24yfG2Dfuqg1P5gipLcgUDuiuYkQ5ExwGap foo/990 added QmQWwz9haeQ5T2QmQeXzqspKdowzYELShBCLzLJjVa2DuV foo/991 added QmQ5D4MtHUN4LTS4n7mgyHyaUukieMMyCfvnzXQAAbgTJm foo/992 added QmZq4n4KRNq3k1ovzxJ4qdQXZSrarfJjnoLYPR3ztHd7EY foo/993 added QmdtrsuVf8Nf1s1MaSjLAd54iNqrn1KN9VoFNgKGnLgjbt foo/994 added QmbstvU9mnW2hsE94WFmw5WbrXdLTu2Sf9kWWSozrSDscL foo/995 added QmXFd7f35gAnmisjfFmfYKkjA3F3TSpvUYB9SXr6tLsdg8 foo/996 added QmV5BxS1YQ9V227Np2Cq124cRrFDAyBXNMqHHa6kpJ9cr6 foo/997 added QmcXsccUtwKeQ1SuYC3YgyFUeYmAR9CXwGGnT3LPeCg5Tx foo/998 added Qmc4mcQcpaNzyDQxQj5SyxwFg9ZYz5XBEeEZAuH4cQirj9 foo/999 added QmXpXzUhcS9edmFBuVafV5wFXKjfXkCQcjAUZsTs7qFf3G foo
In 0.4.19, we would have sent out provider records for files
foo/{0..1000}
before sending out a provider record forfoo
. If you were ask a friend to
download /ipfs/QmUQcSjQx2bg4cSe2rUZyQi6F8QtJFJb74fWL7D784UWf9, they would
(baring other issues) be able to find it pretty quickly as this is the first CID
you'll have announced to the network. However, if you ask your friend to
download /ipfs/QmXpXzUhcS9edmFBuVafV5wFXKjfXkCQcjAUZsTs7qFf3G/0, they'll have to
wait for you to finish telling the network about every file infoo
first.In 0.4.20, we immediately tell the network about
QmXpXzUhcS9edmFBuVafV5wFXKjfXkCQcjAUZsTs7qFf3G
(thefoo
directory) as soon
as we finish adding the directory to go-ipfs without waiting to finish
π announcingfoo/{0..1000}
. This is especially important in this release
π· because we've drastically reduced the number of provide workers.The second benefit is that this queue is persistent. That means go-ipfs won't
forget to send out this record, even if it was offline when the content was
initially added. NOTE: go-ipfs does continuously re-send provider records in
the background twice a day, it just might be a while before it gets around to
sending out any specific one.Bitswap
Bitswap now periodically re-sends its wantlist to connected peers. This should
π help work around some race conditions we've seen in bitswap where one node wants
a block but the other doesn't know for some reason.You can track this issue here: #5183.
π Improved NAT Traversal
π While NATs are still p2p enemy #1, this release includes slightly improved
π support for traversing them.π Specifically, this release now:
π 1. Better detects the "gateway" NAT, even when multiple devices on the network
claim to be NATs. π 2. Better guesses the external IP address when port mapping, even when the
gateway lies.β¬οΈ Reduced AutoRelay Boot Time
The experimental AutoRelay feature can now detect NATs much faster as we've
β¬οΈ reduced initial NAT detection delay to 15 seconds. There's still room for
π improvement but this should make nodes that have enabled this feature dialable
earlier on start.π Changelogs
- github.com/ipfs/go-ipfs:
- gitattributes: avoid normalizing known binary files (ipfs/go-ipfs#6209)
- gitattributes: default to LF (ipfs/go-ipfs#6198)
- Fix level db panic (ipfs/go-ipfs#6186)
- Dockerfile: Remove 2 year old deprecation warning (ipfs/go-ipfs#6188)
- align output for the command ipfs object stat (ipfs/go-ipfs#6189)
- provider queue: don't repeatedly retry the same item if we fail (ipfs/go-ipfs#6187)
- test: remove version/deps from ro commands test (ipfs/go-ipfs#6185)
- feat: add version deps command [modversion] (ipfs/go-ipfs#6115)
- readme: update for go modules (ipfs/go-ipfs#6180)
- Switch to Go 1.12 (ipfs/go-ipfs#6144)
- ci: avoid interleaving output from different sharness tests (ipfs/go-ipfs#6175)
- fix two bugs where the repo may not properly be closed (ipfs/go-ipfs#6176)
- fix error check in swarm connect (ipfs/go-ipfs#6174)
- feat(coreapi): tag all explicit connect requests in the connection manager (ipfs/go-ipfs#6171)
- chore: remove CODEOWNERS (ipfs/go-ipfs#6172)
- feat: update to IPFS Web UI 2.4.4 (ipfs/go-ipfs#6169)
- fix add error handling (ipfs/go-ipfs#6156)
- chore: remove waffle (ipfs/go-ipfs#6157)
- chore: fix a bunch of issues caught by golangci-lint (ipfs/go-ipfs#6140)
- docs/experimental-features.md: link to ipfs-ds-convert (ipfs/go-ipfs#6154)
- interrupt: fix send on closed (ipfs/go-ipfs#6147)
- docs: document Gateway.Writable not Gateway.Writeable (ipfs/go-ipfs#6151)
- Fuse fixes (ipfs/go-ipfs#6135)
- Remove duplicate blockstore from the package list (ipfs/go-ipfs#6138)
- Query for provider head/tail (ipfs/go-ipfs#6125)
- Remove dead link from ISSUE_TEMPLATE.md (ipfs/go-ipfs#6128)
- coreapi: remove Unixfs.Wrap (ipfs/go-ipfs#6123)
- coreapi unixfs: change Wrap logic to make more sense (ipfs/go-ipfs#6019)
- deps: switch back to jbenet go-is-domain (ipfs/go-ipfs#6119)
- command repo stat: add human flag tests to t0080-repo.sh (ipfs/go-ipfs#6116)
- gc: fix a potential deadlock (ipfs/go-ipfs#6112)
- fix config options in osxfuse error messages (ipfs/go-ipfs#6105)
- Command repo stat: improve human flag behavior (ipfs/go-ipfs#6106)
- Provide root node immediately on add and pin add (ipfs/go-ipfs#6068)
- gomod: Update Dockerfile, remove Dockerfile.fast (ipfs/go-ipfs#6100)
- Return CID from 'ipfs files flush' (ipfs/go-ipfs#6102)
- resolve: fix recursion (ipfs/go-ipfs#6087)
- fix(swarm): add dnsaddr support in swarm connect (ipfs/go-ipfs#5535)
- make in-memory datastore thread-safe (ipfs/go-ipfs#6085)
- Update package table to remove broken jenkins links (ipfs/go-ipfs#6084)
- mk: fix maketarball to work with gomod (ipfs/go-ipfs#6078)
- fix ls command to use the new coreinterface types (ipfs/go-ipfs#6051)
- mk: remove install_unsupported, leave a note (ipfs/go-ipfs#6063)
- mk: change git-hash command to include information about modifications (ipfs/go-ipfs#6060)
- mk: fix make install by not setting GOBIN (ipfs/go-ipfs#6059)
- go: require Golang 1.11.4 (ipfs/go-ipfs#6057)
- yamux: increase yamux window size to 8MiB. (ipfs/go-ipfs#6049)
- Introduce go modules [yey] (ipfs/go-ipfs#6038)
- cleanup daemon online logic (ipfs/go-ipfs#6050)
- ci: test on 32bit os (ipfs/go-ipfs#5429)
- feat/cmds: hide peers info default in bitswap stat (ipfs/go-ipfs#5820)
- Improve CLI help pages (ipfs/go-ipfs#6013)
- Close #6044 (ipfs/go-ipfs#6045)
- commands(dht): return final error (ipfs/go-ipfs#6034)
- Revert "Really run as non-root user in docker container" (ipfs/go-ipfs#6040)
- github.com/ipfs/go-bitswap:
- feat(messagequeue): rebroadcast wantlist (ipfs/go-bitswap#106)
- reduce provide workers to 6 (ipfs/go-bitswap#93)
- Reduce memory allocation (ipfs/go-bitswap#103)
- refactor(messagequeue): remove dead code (ipfs/go-bitswap#98)
- fix: limit use of custom context type (ipfs/go-bitswap#89)
- fix: remove non-error log message (ipfs/go-bitswap#91)
- fix(messagequeue): Remove second run loop (ipfs/go-bitswap#94)
- github.com/ipfs/go-blockservice:
- Revert "Remove verifcid as it is handled in go-cid" (ipfs/go-blockservice#25)
- Remove verifcid as it is handled in go-cid (ipfs/go-blockservice#23)
- github.com/ipfs/go-datastore:
- cleanup and optimize naive query filters (ipfs/go-datastore#125)
- Fix β sorted limited offset mount queries (ipfs/go-datastore#124)
- Fix function comments based on best practices from Effective Go (ipfs/go-datastore#122)
- remove ThreadSafeDatastore (ipfs/go-datastore#120)
- Splinter TTLDatastore interface into TTL + Datastore (ipfs/go-datastore#118)
- github.com/ipfs/go-ds-badger:
- tweak the default options (ipfs/go-ds-badger#52)
- remove thread-safe assertion (ipfs/go-ds-badger#55)
- make memory-safe against concurrent closure/operations (ipfs/go-ds-badger#53)
- make badger use our logging framework (ipfs/go-ds-badger#50)
- github.com/ipfs/go-ds-flatfs:
- remove thread-safe assertion (ipfs/go-ds-flatfs#53)
- github.com/ipfs/go-ds-leveldb:
- Fast reverse query (ipfs/go-ds-leveldb#28)
- remove thread-safe assertion (ipfs/go-ds-leveldb#27)
- github.com/ipfs/go-ipfs-cmdkit:
- Extract files package (ipfs/go-ipfs-cmdkit#31)
- github.com/ipfs/go-ipfs-cmds:
- sync: add yet another sync error (ipfs/go-ipfs-cmds#161)
- Removed broken link from readme (ipfs/go-ipfs-cmds#159)
- Fix broken link in readme (ipfs/go-ipfs-cmds#160)
- set WebFile fpath to URL base (ipfs/go-ipfs-cmds#158)
- Handle stdin name in cli/parse (ipfs/go-ipfs-cmds#157)
- support url paths as files.WebFile (ipfs/go-ipfs-cmds#154)
- typed encoder: improve pointer reflection (ipfs/go-ipfs-cmds#155)
- cli: don't sync output to NUL on Windows (ipfs/go-ipfs-cmds#153)
- github.com/ipfs/go-ipfs-files:
- return url as AbsPath from WebFile to implement FileInfo (ipfs/go-ipfs-files#13)
- fix the content disposition header (ipfs/go-ipfs-files#14)
- go format (ipfs/go-ipfs-files#15)
- simplify content type checking (ipfs/go-ipfs-files#9)
- remove extra webfile test code (ipfs/go-ipfs-files#12)
- github.com/ipfs/go-merkledag:
- add function to marshal raw nodes to json (ipfs/go-merkledag#36)
- fix some performance regressions when reading protobuf nodes (ipfs/go-merkledag#34)
- github.com/ipfs/go-metrics-interface:
- update the counter interface to match prometheus (ipfs/go-metrics-interface#2)
- github.com/ipfs/go-mfs:
- Return node from FlushPath (ipfs/go-mfs#72)
- Wire up context to FlushPath (ipfs/go-mfs#70)
- github.com/ipfs/interface-go-ipfs-core:
- don't close the top-level addr (ipfs/interface-go-ipfs-core#25)
- fix a bunch of small test "bugs" (ipfs/interface-go-ipfs-core#24)
- remove Wrap (ipfs/interface-go-ipfs-core#21)
- Unixfs.Wrap Fixes (ipfs/interface-go-ipfs-core#10)
- tweak the Ls interface (ipfs/interface-go-ipfs-core#14)
- github.com/libp2p/go-buffer-pool:
- Enable tests (libp2p/go-buffer-pool#6)
- github.com/libp2p/go-flow-metrics:
- Just repair spelling mistake (libp2p/go-flow-metrics#3)
- github.com/libp2p/go-libp2p:
- Deprecate gx in readme & link to workspace repo (libp2p/go-libp2p#591)
- Respect nodial option in routed host (libp2p/go-libp2p#590)
- fix panic in observed address activation check (libp2p/go-libp2p#586)
- Improve observed address handling (libp2p/go-libp2p#585)
- identify: avoid parsing/printing multiaddrs (libp2p/go-libp2p#583)
- move things outside of the lock in obsaddr (libp2p/go-libp2p#582)
- identify: be more careful about the addresses we store (libp2p/go-libp2p#577)
- relay: turn autorelay into a service and always filter out relay addresses (libp2p/go-libp2p#578)
- chore: fail in the libp2p constructor if we fail to store the key (libp2p/go-libp2p#576)
- Fix broken link in README.md (libp2p/go-libp2p#580)
- Link to docs & discuss in readme (libp2p/go-libp2p#571)
- Reduce autorelay boot delay and correctly handle private->public transition (libp2p/go-libp2p#570)
- reduce nat error level (libp2p/go-libp2p#568)
- relay: simplify declaration of multiaddr var (libp2p/go-libp2p#563)
- Fix UDP listen on a Unspecified Address and Dial from the Unspecified Address (libp2p/go-libp2p#561)
- Remove jenkins column from package table (libp2p/go-libp2p#562)
- Fix typos in p2p/net/README.md (libp2p/go-libp2p#555)
- better nat mapping (libp2p/go-libp2p#549)
- github.com/libp2p/go-libp2p-autonat:
- fully close the autonat client stream (libp2p/go-libp2p-autonat#21)
- parallelize dialbacks (libp2p/go-libp2p-autonat#20)
- Pacify the race detector (libp2p/go-libp2p-autonat#17)
- github.com/libp2p/go-libp2p-autonat-svc:
- full close the autonat stream (libp2p/go-libp2p-autonat-svc#20)
- reduce dialback timeout to 15s (libp2p/go-libp2p-autonat-svc#17)
- github.com/libp2p/go-libp2p-circuit:
- use buffer pool in newDelimitedReader (libp2p/go-libp2p-circuit#71)
- Use NoDial option when opening hop streams for non-active relays (libp2p/go-libp2p-circuit#70)
- use io.CopyBuffer with explicitly allocated buffers (libp2p/go-libp2p-circuit#69)
- docs and nits (libp2p/go-libp2p-circuit#66)
- github.com/libp2p/go-libp2p-kad-dht:
- dialQueue: start the control loop later (libp2p/go-libp2p-kad-dht#312)
- make it work in wasm (libp2p/go-libp2p-kad-dht#310)
- Revert "GoModules: Checksum mismatch:" (libp2p/go-libp2p-kad-dht#309)
- defer dialqueue action until initial peers have been added (libp2p/go-libp2p-kad-dht#301)
- github.com/libp2p/go-libp2p-nat:
- switch to libp2p's go-nat fork (libp2p/go-libp2p-nat#16)
- remove all uses of multiaddrs (libp2p/go-libp2p-nat#14)
- github.com/libp2p/go-libp2p-net:
- fix WithNoDial to return the context (libp2p/go-libp2p-net#43)
- NoDial context option (libp2p/go-libp2p-net#42)
- github.com/libp2p/go-libp2p-peer:
- Let ID implement encoding.Binary[Un]Marshaler and encoding.Text[Un]Marshaler (libp2p/go-libp2p-peer#44)
- github.com/libp2p/go-libp2p-peerstore:
- keep temp addresses for 2 minutes (libp2p/go-libp2p-peerstore#67)
- migrate to multiformats/go-base32 (libp2p/go-libp2p-peerstore#61)
- github.com/libp2p/go-libp2p-protocol:
- update readme (libp2p/go-libp2p-protocol#6)
- Enable standard Travis CI tests. (libp2p/go-libp2p-protocol#5)
- Fix go get address. (libp2p/go-libp2p-protocol#4)
- Add MIT license (libp2p/go-libp2p-protocol#3)
- Standardized Readme (libp2p/go-libp2p-protocol#2)
- github.com/libp2p/go-libp2p-pubsub-router:
- gx publish 0.5.17 (libp2p/go-libp2p-pubsub-router#26)
- github.com/libp2p/go-libp2p-quic-transport:
- update quic-go to v0.11.0 (libp2p/go-libp2p-quic-transport#54)
- github.com/libp2p/go-libp2p-routing-helpers:
- fix(put): fail if any router fails (libp2p/go-libp2p-routing-helpers#19)
- github.com/libp2p/go-libp2p-swarm:
- Add context option to disable dialing when opening a new stream (libp2p/go-libp2p-swarm#116)
- return all dial errors if dial has failed (libp2p/go-libp2p-swarm#115)
- Differentiate no addresses error from no good addresses (libp2p/go-libp2p-swarm#113)
- github.com/libp2p/go-libp2p-transport:
- tests: constrain concurrency with race detector. (libp2p/go-libp2p-transport#47)
- pick test timeout from env var if available. (libp2p/go-libp2p-transport#46)
- increase test timeout. (libp2p/go-libp2p-transport#45)
- github.com/libp2p/go-msgio:
- Improve test coverage (libp2p/go-msgio#10)
- github.com/libp2p/go-reuseport:
- fix: add wasm build tag to wasm module (libp2p/go-reuseport#70)
- github.com/libp2p/go-reuseport-transport:
- don't set linger to 0 (libp2p/go-reuseport-transport#14)
- github.com/libp2p/go-tcp-transport:
- set linger to 0 for both inbound and outbound connections (libp2p/go-tcp-transport#36)
- github.com/libp2p/go-ws-transport:
- modernize request handling (libp2p/go-ws-transport#41)
- Add files with
-
v0.4.20-rc2
April 12, 2019 -
v0.4.20-rc1
April 05, 2019