Skip to content
This repository has been archived by the owner on Apr 16, 2021. It is now read-only.

Add blog post about v03x/v04x migration #27

Merged
merged 3 commits into from
Feb 12, 2016
Merged
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
92 changes: 92 additions & 0 deletions src/9-v04x-migration/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
---
date: 2016-02-12
id: 9-v04x-migration
template: tmpl/layouts/post.html
baseurl: ..
breadcrumbs:
- {name: "9-v04x-migration", link: "./" }
tags: gateway, bootstrap, infrastructure
title: Migrating ipfs.io from go-ipfs 0.3.x to 0.4.0
author: Lars Gierth
collection: posts
---

Good news everyone! We are about to release go-ipfs 0.4.0,
which contains lots of great changes and enhancements.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i think we want (to link to) a separate post about "the great changes and enhancements". can anyone pick this up? maybe @RichardLitt with help of @whyrusleeping and @diasdavid?


There are breaking changes
which prevent 0.4.x nodes from communicating with 0.3.x nodes.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think the intro needs some acknowledgement that breaking changes suck, that we take them seriously, and that we've a smooth upgrade path.

We know breaking changes are painful. We avoid them. In this case, the improvement makes IPFS substantially more upgradable. It's one of those things that "should've been different" from the start. Having the freedom to improve the core protocol is why IPFS is still in alpha phase.

Nevertheless, we take service disruption very seriously even in these early days. We know thousands of developers use IPFS, and hundreds of thousands of people rely on IPFS links to our gateway. So we planned a smooth upgrade path.

The breaking change is at the wire protocol level, which means there will be, and already are, two separate networks. ...

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think the intro needs some acknowledgement that breaking changes suck, that we take them seriously, and that we've a smooth upgrade path.

That's excellent and the basic tone that I couldn't come up with :)

This means that there will be, and already are, two separate networks.
We'll call these networks v03x and v04x.
IPFS nodes built from the master branch are already part of v04x.
The Docker image `ipfs/go-ipfs` is built from master and thus also part of v04x.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we should have the docker image follow the tags i have in jbenet/go-ipfs:

  • hub.docker.com/u/jbenet/go-ipfs@release follows github.com/ipfs/go-ipfs@release (0.3.11 now)
  • hub.docker.com/u/jbenet/go-ipfs@latest follows github.com/ipfs/go-ipfs@release (0.3.11 now)
  • hub.docker.com/u/jbenet/go-ipfs@master follows github.com/ipfs/go-ipfs@master (0.4.0 now)

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We'll be able to have these only after the next release. It actually had a v0.3.11 tag until I removed it today (ipfs/kubo#1944). The problem is that the dockerfile on 0.3.x just downloads ipfs_master_linux-386.zip from gobuilder. So it doesn't actually build an 0.3.x image. We'd have to build the image manually with current master's good dockerfile and push that, which doesn't seem to be allowed for automatic builds.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Adding a tiny note about this.


ipfs.io provides two essential services to the community,
which are affected by this: the gateway and the default bootstrappers.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"the public http-to-ipfs gateway"

We'll continue to support them for the v03x network until the **end of April 2016**.

Please note that we won't support 0.3.x with patches or new features.
All development effort is directed towards 0.4.0, and you should update as soon as possible.

- [How do I update go-ipfs to 0.4.0?](#how-do-i-update-go-ipfs-to-0-4-0-)
- [The public gateways at ipfs.io](#the-public-gateways-at-ipfs-io)
- [The default bootstrappers](#the-default-bootstrappers)
- [How does this affect me?](#how-does-this-affect-me-)


## How do I update go-ipfs to 0.4.0?

You can use the [ipfs-update tool][ipfs-update] to update go-ipfs.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(i think the below is better?)

You can:

Please note that installing with go get github.com/ipfs/go-ipfs does not work at this time. We are experimenting with our ipfs-based package manager.


[ipfs-update]: http://dist.ipfs.io/#ipfs-update


## The public gateways at ipfs.io

For the time being, https://ipfs.io uses both v03x and v04x to service requests.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

add: "Content available in either network will be served just fine."

Whichever responds successfully first (2xx or 3xx status code),
gets to serve its content. The other response is discarded.
If the first response is not successful (4xx/5xx, connection errors),
it is discarded and the second response is served, regardless of its status code.

We're using the [multireq proxy][multireq] to accomplish this multiplexing behaviour.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Add:
"multireq is a new tool, so if you notice any weirdness with gateway requests, please let us know."


If you want to target a specific network, use v03x.ipfs.io or v04x.ipfs.io.
These domain names will stay around as long as the respective network is
supported by the public gateway.

All of the above also applies to the `/api` endpoint (the readonly API),
which is part of the gateway.

Expect the **v03x gateway** to be **supported until the end of April 2016.**
After that day, ipfs.io will be served by v04x exclusively,
and v03x.ipfs.io will no longer work.

[multireq]: https://github.com/whyrusleeping/multireq


## The default bootstrappers
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

maybe:

Solarnet: the default bootstrappers

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh yep that's a good occasion to subtly highlight what solarnet actually is :)


We call the 8 bootstrap nodes in go-ipfs's default config the default bootstrappers.
Their PeerIDs start with `QmSoL` (for Solarnet),
and all of them use `/tcp/4001` and/or `/udp/4002/utp`.
Use `ipfs bootstrap` to see or modify the bootstrappers currently used by your IPFS node.

In order to balance the default bootstrappers over v03x and v04x,
a few of them bind v04x to these ports, and a few bind v03x.
The respective other network is bound to `/tcp/14001` and `/udp/14002/utp`.
This means that all 8 hosts run bootstrappers for both networks,
but are available as default bootstrappers only to one.

We'll gradually shift the v03x/v04x ratio to v04x.
Expect at least **two v03x bootstrappers** to be **supported until the end of April 2016.**


## How does this affect me?

Check which version of go-ipfs you are running: `ipfs version`

If you're running an 0.3.x node, it won't be able to communicate
with any node which has updated to 0.4.x, let alone exchange data.
You can access data added by 0.4.0 nodes using the public gateway.
Likewise, data added by your 0.3.x node is still available on the public gateway.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If you rely on the public gateways, we ask you to please upgrade to 0.4.0 as soon as you can. You can subscribe to this issue to be notified when 0.4.0 is released.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If you're running an 0.4.0 node, all is well in the world 😎 You don't need to do anything.

Thank you for bearing with this important change. We seek to provide a smooth transition for everyone, and wish we didn't have to bother you with this at all.