I'm opening this issue in parallel of https://github.com/paritytech/yamux/issues/92 to keep note, within Substrate, of this update.
I think that Substrate does not necessarily need to go through all those upgrade steps but can fast-forward to the end. The issue is about the initial window update. Since https://github.com/paritytech/substrate/pull/4892 the lazy_open yamux option is active in Substrate and the configured receive window size was always the default, which means that no initial window update is ever sent by nodes which have #4892 applied. The new version will also only send initial window updates if the receive window is configured to be larger than the default.
It may just happen that, due to other changes in libp2p, substrate goes through these steps anyway but in any case there does not need to be a delayed rollout between such versions, as no "migration" should be necessary for substrate nodes.
Since #4892 the
lazy_openyamux option is active in Substrate [...]
So just to confirm: Substrate versions v2.0.0-alpha.1 (tagging date: 2020-02-25) and later contain this setting. This means Polkadot v0.7.21 (tagging date: 2020-03-05) and later use it as well AFAICS, but versions prior to that do not and are thus not compatible with the changes to Yamux and will produce errors at runtime. Is this okay? In https://telemetry.polkadot.io/#list/Polkadot I see no version number less than 0.8.2, but https://telemetry.polkadot.io/#list/Kusama has some 0.7.0 instances, however they do not look healthy.
Any node that is not on a recent update, probably fails to sync anyway because of some missing functionality or similar for the runtime.
We've purposefully broken compatibility with versions 0.7.x recently.
0.8.0 is the version where Polkadot was released.
Let's close this, since the update is already fully done and working.
Most helpful comment
I think that Substrate does not necessarily need to go through all those upgrade steps but can fast-forward to the end. The issue is about the initial window update. Since https://github.com/paritytech/substrate/pull/4892 the
lazy_openyamux option is active in Substrate and the configured receive window size was always the default, which means that no initial window update is ever sent by nodes which have #4892 applied. The new version will also only send initial window updates if the receive window is configured to be larger than the default.