Hi devs,
I’d like to discuss/propose a new strategy for Database and Servlet Container version support.
Rationale for change
- MySQL is now removed from debian packages but we need to continue supporting it
- We don’t have a clear strategy for non debian packages (Oracle for ex).
- Debian package can lag behind and that depends on the individual package managers
Analysis
Strategy 1: Last stable + previous super stable (aka LTS):
- Tomcat: stable = 9.0.x, lts = 8.5.x
- Jetty: stable = 9.4.x, lts = 9.3.x
- MySQL: stable = 8.0.x, lts = 5.7.x
- MariaDB: stable = 10.4.x, lts = 10.3.x
- PostgreSQL: stable = 12.3.x, lts = 11.8.x
- Oracle: stable = 19.3.x, lts = 18.4.x
For stable and LTS:
- Version must be available to all OSes (for ex for Oracle, version 19.5 is only available for Solaris ATM)
The hard part is choosing the LTS which is not always easy (e.g. Jetty, MariaDB, Oracle). So the strategy could be:
- Closest previous version that is maintained (ie it has bugfix releases)
- Been maintained for over a year or so
- Free maintained releases (doesn’t require a paying contract)
Example for Jetty:
- https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-distribution/
- 9.4.x started in 2016-06-03 and last release is 2020-05-21
- 9.3.x started in 2014-09-24 and last release is 2019-11-05 (9.3.28)
- 8.1.x last release is 2016-09-22
- => LTS is 9.3.x (closest, maintained, maintained for more than 1 year)
Example of MariaDB:
- https://downloads.mariadb.org/mariadb/+releases/
- 10.4 started in 2018-11-09 and last release is 2020-05-12
- 10.3 started in 2017-04-16 and last release is 2020-05-12 (10.3.23)
- 10.2 last release is 2020-05-12 so it’s also maintained
- 5.5 last release is 2020-05-12 so it’s also maintained
- => LTS is 10.3.x (closest, maintained, maintained for more than 1 year)
Example for Oracle:
- https://www.oracle.com/database/technologies/oracle-database-software-downloads.html
- https://support.oracle.com/knowledge/Oracle%20Cloud/742060_1.html
- 19.3 is the last release for all OSes
- 18.x is the previous one, supported till Jun 08, 2021
- 12.2.0.1 supported till “March 31, 2022 with Limited Error Correction from Dec 1, 2020”
- 12.1.0.2 supported till “Jul 31, 2022 with paid ES, ULA, or EBS waiver”
- => LTS is 18.x (closest, maintained, maintained for more than 1 year)
Strategy 2: Follow Debian package manager selections (“stable” and “oldstable”):
- Tomcat: stable = 9.0.x, lts = 8.5.x
- Jetty: stable = 9.4.x, lts = 9.2.x <-----
- MySQL: N/A <-----
- MariaDB: stable = 10.3.x, lts = 10.1.x <-----
- PostgreSQL: stable = 11.7.x, lts = 9.6.x <-----
- Oracle: N/A <-----
Pros of strategy 1
- More up to date, e.g. postgresql 12.3.x and 11.8.x vs 11.7.x and 9.6.x
- Works even if there are no debian packages, e.g. MySQL and Oracle
Pros of strategy 2
- Simpler since someone else is doing the selection work for you
Update Strategy
The work is to update the jenkins pipeline code.
Proposal A
- Similar to POM dependency upgrades we need someone to monitor releases of supported DBs & servlet containers
- Could be Ilie monitoring releases since it’s related to quality
Proposal B
- Check every month for new releases (when final XS version is released)
- B1- Could be part of Release Plan for final versions.
- B2- Could be owned by an individual: Vincent or someone else
Conclusion/Proposal
I’m proposing to follow strategy 1 + B1 (I’m fine also with B2).
WDYT?
Thanks