+1 (binding) Penghui
> On Feb 9, 2023, at 17:24, Nozomi Kurihara <nkuri...@apache.org> wrote: > > +1 > > The LTS plan seems clear and helpful for users. > > Thanks, > Nozomi > > 2023年2月9日(木) 5:44 Matteo Merli <matteo.me...@gmail.com>: > >> https://github.com/apache/pulsar/issues/15966 >> >> >> ---------------------------------------------------------------------------------------- >> >> >> ## Motivation >> >> In PIP-47 ( >> https://github.com/apache/pulsar/wiki/PIP-47:-Time-Based-Release-Plan), we >> have adopted a time-based release plan. This was the first attempt at >> establishing a new principle on how releases should b >> >> The main two benefits of this approach have been: >> >> 1. Clarity for users and developers on when to expect a release >> 2. Breaking a hard relationship between feature and release: a particular >> feature will be included in the release if it is completed in time. >> Otherwise, it will be bubbled up to the next release. >> >> The motivation for the current proposal is to extend the existing process >> to address the issues that we have seen and that were left out of the scope >> of PIP-47. >> >> ## Summary of existing issues in the process >> >> ### Short maintenance cycles for releases >> >> Since we're doing a 3 months release cycle, we are ending with 4 releases >> done per year, even though it's more close to 3 releases. >> >> There is a high cost to maintain a lot of old releases, backport bug fixes, >> and security patches. In general, we actively support the last 3 minor >> releases while continuing to develop the next release. E.g., 2.8, 2.9, and >> 2.10, while 2.11 is under development. >> >> The result is that a user adopting a particular release is forced to >> upgrade in a < 1-year timeframe to keep up to date and use a supported >> release. This timeframe is too short for many users as it imposes a lot of >> forced upgrades, for which they are not prepared in terms of available time >> and required effort. >> >> ### Live Upgrade/Downgrade compatibility path >> >> In Pulsar, we guarantee that users have a way to do live upgrades and >> downgrades with zero downtime. >> >> This is very powerful because it gives them the freedom to upgrade to a new >> release with the assurance of being able to roll back to the previous >> release in case any functional or performance regressions are encountered. >> >> Today, this compatibility is guaranteed across minor versions. Eg: I can do >> `2.7 -> 2.8 -> 2.7` as a live upgrade. >> >> What is not guaranteed is to "skip" releases. E.g.: `2.7 -> 2.9` might work >> or not, but it's not guaranteed. In that case an intermediated upgrade >> would be required: `2.7 -> 2.8 -> 2.9`. >> >> The reasons for which the "skip" upgrade might not work are multiple: >> 1. Incompatible upgrade of some dependency (e.g., ZooKeeper) that might >> not be compatible with an older version. >> 2. Adoption of a new metadata format or data format on disk. >> Every time we introduce a new incompatible format change (outside of a >> regular Protobuf field addition), we do it in a 2 steps way: >> - In a new release, we introduce the new feature/format, disabled by >> default. The new release can read both old and new formats, though it keeps >> writing the old format by default. >> - In a subsequent release, we change the default to the new format >> >> Note that this consideration is separate from the compatibility between >> clients and brokers, where we ***never*** break compatibility. The oldest >> available Pulsar client can still talk with the newest Pulsar broker, and >> vice versa, a new client, will be perfectly fine with an older broker >> (except the new features won't be working). >> >> ### Releases getting delayed >> >> Another problem we have been experiencing is that release cycles have been >> stretching considerably. Part of this has been because we have been >> reaching the end of the release window, preparing a candidate, and then >> taking a long time to flush out all issues found at the last minute in the >> new release. >> >> We need to ensure that we have a date set in stone to deliver the release >> to users. >> >> ## Proposal >> >> The proposal to address the above issues is composed of 2 parts. >> >> ### 1. Establish Long Term Support releases >> >> We need to provide a way for users to quickly understand the expected >> lifecycle timeline of a given release and for that timeline to be long >> enough not to be a constant update mandate. >> >> At the same time, we need to ensure that we maintainers are not spending >> all the time just maintaining a huge list of old releases. >> >> For that, we can use the established concept of "Long Term Releases" or >> LTS. >> >> We will perform LTS releases at a fixed cadence every 18 months, and we >> will keep doing regular feature releases every 3 months as we're currently >> doing. >> >> The LTS releases will be identified by being a `.0` version. For example: >> * `3.0` -> LTS >> * `3.1` -> regular release >> * `3.2` -> regular release >> * `4.0` -> LTS >> >> The major version bump will not carry any special meaning in terms of "big >> features" included in the release or breaking API changes. Instead, it >> would simply signal the type of the release. >> >> #### Compatibility between releases >> >> It will be guaranteed to be able to do a live upgrade/downgrade between one >> LTS and the next one. >> >> For example: >> >> * `3.0 -> 4.0 -> 3.0` : OK >> * `3.2 -> 4.0 -> 3.2` : OK >> * `3.2 -> 4.4 -> 3.2` : OK >> * `3.2 -> 5.0` : Not OK >> >> #### Release support expectation >> >> We will publish clear guidelines on the Pulsar website regarding the >> expected timeline for which each release is supported and when the new >> feature and LTS releases will be available. >> >> The support model will be: >> >> * LTS >> * Released every 18 months >> * Support for 24 months >> * Security patches for 36 months >> * Feature releases >> * Released every 3 months >> * Support for 6 months >> * Security patches for 6 months >> >> This can be translated into: >> * We support the last 2 LTS releases and the last 2 feature releases >> * Security patches are provided for the past 3 LTS releases and 2 >> feature releases >> >> Users are therefore encouraged to stay in an LTS release until they are >> ready to jump into the next LTS unless they want to have access to some of >> the features included in the latest feature releases. >> >> ### 2. Introduce a code-freeze period in the release cycle >> >> To address the problem with delayed release cycles, we are introducing a >> code freeze period that will give us time to stabilize the release code >> while not blocking new changes from being merged into master for the >> subsequent version. >> >> This code-freeze will only be adopted for LTS/feature releases, not for any >> patch release. >> >> In a 3 months release cycle, the last 3 weeks will be marked as a code >> freeze period. The release manager will branch off from master, and he will >> be responsible for selecting the changes that will be cherry-picked in the >> release branch. >> >> From the code-freeze point, to minimize the risk of delaying the release, >> only bug fixes involving a regression of behavior compared to a previous >> release should be allowed. Occasional exceptions will be possible after >> higher scrutiny of the change. >> >> At the moment of the code freeze, the release manager will also prepare a >> release candidate in the same way we are doing today. Committers, >> contributors, and users will test this RC to detect issues as early as >> possible. >> >> A formal vote by the PMC will not be required at this stage (though any >> disagreement should be sent out ASAP). >> >> After 1 week, if there are any changes, the release manager will provide a >> new RC release that the community will test again. >> >> After 1 more week, if there are any changes, a third RC will be prepared, >> and this will be submitted to vote to the PMC. Otherwise, the vote will be >> held on an earlier RC release if no issues are found. >> >> The last 1 week will be used for the voting process and for updating Pulsar >> website and the blog post announcing the release, which should (hopefully) >> happen on the scheduled day. >> >> >> -- >> Matteo Merli >> <matteo.me...@gmail.com> >>