Skip to content

@aschmahmann aschmahmann released this Feb 19, 2021 · 488 commits to master since this release

go-ipfs 0.8.0 Release

We're happy to announce go-ipfs 0.8.0! This release is focused on making it easier to work with pins. We have some snazzy new features around being able to ask remote services to pin data for you, and modifying large pin sets is much faster than ever before.

🔦 Highlights

🧷 Remote pinning services

There is now support for asking remote services to pin data for you.

This comes with a redesign of how we're thinking about pinning and includes some commonly requested features such as:

  • Pins can have names (and coming soon metadata)
  • Data can be pinned in either the foreground or background
  • Pins can be searched by name, CID, or status

Command-line users benefit from ipfs pin remote commands, which simplify remote pinning operations. The built-in pinning service API client executes all the necessary remote calls under the hood. HTTP API users have access to new commands under /api/v0/pin/remote.

As long a service supports the vendor-agnostic IPFS Pinning Service API, it can be used directly in go-ipfs.

Examples include:

ipfs pin remote service add mysrv https://my-service.example.com/api-endpoint myAccessToken
ipfs pin remote service ls --stat # confirm service mysrv is available

ipfs pin remote add /ipfs/bafymydata --service=mysrv --name=myfile  # will block until status is pinned
ipfs pin remote ls --service=mysrv --name=myfile
ipfs pin remote rm --serivce=mysrv --name=myfile

ipfs pin remote add /ipfs/bafymydata2 --service=mysrv --name=myfile2 --background  # queue pin request and finish instantly
ipfs pin remote ls --service=mysrv --cid=bafymydata2 --status=queued,pinning,pinned,failed
ipfs pin remote rm --serivce=mysrv --cid=bafymydata2 --status=queued,pinning,pinned,failed

More examples can be found under ipfs pin remote --help

A few notes:

  • Remote pinning services work with recursive pins. This means commands like ipfs pin remote ls will not list indirectly pinned CIDs.
  • By default, only finished, successful pins are listed. To list or remove pending/failed pins, pass explicit status: --status=queued,pinning,pinned,failed
  • While pinning service data is stored in the configuration file it cannot be edited directly via the ipfs config commands due to the sensitive nature of pinning service API keys. The ipfs pin remote service commands can be used for interacting with remote service settings.
  • An OpenAPI ipfs-pinning-service.yaml makes it easy to create or generate a compatible client/server. Anyone can implement it and allow for pin management.

🏠 Remote MFS pinning policy

Every service added via ipfs pin remote service add can be tasked to update a pin every time MFS root changes:

$ ipfs config --json Pinning.RemoteServices.mysrv.Policies.MFS.Enable

To avoid flooding remote service with many updates, go-ipfs will send them at most once every five minutes.

Details about customizing behavior of this feature can be found in configuration docs.

📌 Faster local pinning and unpinning

The pinning subsystem has been redesigned to be much faster and more flexible in how it tracks pins. For users who are working with many pins this will lead to a big speed increase in listing and modifying the set of pinned items as well as decreased memory usage.

Part of the redesign was setup to account for being able to interact with local pins the same way we can now interact with remote pins (e.g. names, being allowed to pin the same CID multiple times, etc.). Keep posted for more improvements to pinning.

🔒 DNSLink names on https:// subdomains

Previously DNSLink names would have trouble loading over subdomain gateways with HTTPS support since there is no way to get multilevel wildcard certificates (e.g. en.wikipedia-on-ipfs.org.ipns.dweb.link cannot be covered by TLS wildcard cert for *.ipns.dweb.link). Therefore, when trying to load DNSLink names over https:// subdomains go-ipfs we now forward to an inlined DNS name. Since DNS labels cannot contain . in them they are escaped using -.

/ipns/en.wikipedia-on-ipfs.org
ipns://en.wikipedia-on-ipfs.org
https://dweb.link/ipns/en.wikipedia-on-ipfs.org
https://en-wikipedia--on--ipfs-org.ipns.dweb.link 👈 a single DNS label, no TLS error 🔒

Note: The last redirect is specific to HTTPS, and is triggered only when X-Forwarded-Proto: https header is present.
Recipes for setting up your own public gateway can be found in configuration docs.

💨 QUIC update

QUIC support has received a number of upgrades, including the ability to take advantage of larger UDP receive buffers for increased performance.

Linux users may notice a logged error on daemon startup if your system needs extra configuration to allow IPFS increase the buffer size. A helpful link for resolving this is in the log message as well as here.

👋 No more Darwin 386 builds

Go 1.15 (the latest version of Go) no longer supports Darwin 386 and so we are dropping support as well.

Changelog

Full Changelog

Contributors

Contributor Commits Lines ± Files Changed
Eric Myhre 180 +26453/-11032 883
Marten Seemann 212 +14876/-9352 794
hannahhoward 41 +9195/-3113 186
Alex Cruikshank 5 +3323/-1895 58
Andrew Gillis 3 +3792/-581 21
vyzo 49 +2675/-949 95
Adin Schmahmann 57 +1473/-837 90
Steven Allen 43 +1252/-780 99
Petar Maymounkov 3 +1755/-113 17
Marcin Rataj 35 +979/-210 61
Paul Wolneykien 2 +670/-338 9
Jeromy Johnson 9 +525/-221 21
gammazero 11 +366/-101 26
Hector Sanjuan 7 +312/-0 11
Dirk McCormick 4 +190/-90 15
Will Scott 1 +252/-0 1
Oli Evans 1 +201/-0 1
Tomasz Zdybał 2 +182/-3 6
Daniel Martí 6 +104/-66 35
Sam 3 +76/-59 5
Łukasz Magiera 2 +92/-3 5
whyrusleeping 3 +77/-15 3
nisdas 3 +76/-15 4
Raúl Kripalani 3 +59/-31 5
Lucas Molas 1 +66/-3 2
Alex Towle 1 +52/-8 2
Dennis Trautwein 1 +58/-0 2
Adrian Lanzafame 2 +49/-7 4
klzgrad 1 +49/-5 2
Fazlul Shahriar 1 +35/-14 17
Yingrong Zhao 1 +45/-2 2
Jakub Sztandera 2 +22/-13 2
Chaitanya 8 +16/-16 8
Aarsh Shah 1 +27/-1 3
Rod Vagg 1 +23/-4 2
M. Hawn 4 +11/-11 8
Will 1 +12/-2 1
frrist 1 +7/-0 1
Rafael Ramalho 2 +5/-2 2
dependabot[bot] 1 +3/-3 1
Zaurbek Zhakupov 1 +3/-3 1
Tom Worrall 1 +4/-2 1
Jorropo 2 +5/-1 2
Chaitanya Raju 1 +3/-3 2
Egon Elbre 1 +0/-5 1
incognitomode 1 +2/-2 1
achingbrain 1 +2/-2 1
Michael Burns 1 +2/-2 1
David Florness 2 +2/-2 2
RubenKelevra 1 +2/-1 1
Andrew Nesbitt 2 +2/-1 2
Tarun Bansal 1 +1/-1 1
Max Inden 1 +1/-1 1
K 1 +2/-0 1
Jacob Heun 1 +1/-1 1
Henrique Dias 1 +1/-1 1
Bryan White 1 +1/-1 1
Bryan Stenson 1 +1/-1 1
Assets 44