Skip to content

Version Compatibility and Support Matrix

John Blum edited this page Mar 2, 2021 · 2 revisions

Table of Contents

This page was created to answer 1 question…​

What versions of Apache Geode and Pivotal GemFire is Spring Data for Apache Geode and Pivotal GemFire (SDG) built on?

In addition to answering this question, among many others, this document will also explain:

  • Spring Data & Apache Geode/Pivotal GemFire Versioning

  • Release Cadence Mismatch

  • Compatibility and the Effects of Release Cadence

  • Difference between Compatibility & Support

  • Importance of Version Numbers and their relationship to both upstream & downstream dependencies, relative to Spring Data

Please post questions on StackOverflow for anything you think is missing, incorrect or ambiguous.

DISCLAIMER: This document is a work-in-progress (WIP) and currently under review. This document also does NOT represent a legally binding contract between you, your company and Pivotal Software, Inc. / VMWare, Inc. The statements are also subject to change at anytime.

Note
This page will be replacing the old Spring Data for Pivotal GemFire Version Compatibility Matrix.
Table 1. Legend
Acronym Definition

SD

Spring Data

SDG

Spring Data for Apache Geode and/or Pivotal GemFire

Overview

The overview provides a quick summary of the sections that follow starting with the "Support Matrix".

After the "Support Matrix", you will find the "Compatibility Matrix". Keep in mind that "support" and "compatibility" are not the same thing!

SDG Support Matrix

This "Support Matrix" specifies the "supported" versions of Spring Data for Apache Geode & Pivotal GemFire.

By "support" we mean that SDG is "guaranteed" to work with the versions of Apache Geode & Pivotal GemFire declared in the "Historical & Official Support Matrices". This "guarantee" does not apply to the "Compatibility Matrix".

If a feature is missing, a function is broken, a CVE is found, or if any behavior of Apache Geode or Pivotal GemFire in a Spring context is not correct, then we will take action to fix the issue until the problem is resolved, meaning either a fix as been made or a workaround is provided.

All changes (missing features, minor enhancements, bug fixes, CVEs, etc) that are possible to resolve are only made in the next development iteration (e.g. 2.3.0.M3 if 2.3.0.M2 is current, or 2.3.0.RC2 if 2.3.0.RC1 is current) or service release (e.g. 2.2.5.RELEASE if 2.2.4.RELEASE is current).

Important
Not all issues with Apache Geode or Pivotal GemFire in a Spring context are Spring issues. In many cases, these issues can be reproduced with no Spring bits present at all, simply by using the Apache Geode or Pivotal GemFire API! It is very important to establish where the root cause of a problem occurs for the proper and most efficient resolution of your problem.
Important
If a problem is proven to be caused by Spring (HINT: test(s)), then you must be able to reproduce the problem using the latest patch version of SDG in your "supported" major.minor version. For example, if you are using SDG Moore/2.2, then you must be able to reproduce the problem with the latest patch version of SDG Moore/2.2. If 2.2.4.RELEASE is the latest release of SDG Moore/2.2 and you are using less than 2.2.4.RELEASE (e.g. 2.2.3.RELEASE, or earlier), then you must upgrade and test with the latest patch version before reporting your issue.

SDG Historical Support Matrix

Table 2. Spring Data for Apache Geode & Pivotal GemFire Historical Support Matrix
SDG Latest SD Release Train Spring Framework Apache Geode Pivotal GemFire

1.0.x

1.0.1.RELEASE

NA

3.0.x.RELEASE

NA

6.5.1.4

1.1.x

1.1.2.RELEASE

NA

3.1.x.RELEASE

NA

6.6.3

1.2.x

1.2.2.RELEASE

NA

3.1.x.RELEASE

NA

7.0

1.3.x

1.3.4.RELEASE

NA

3.2.x.RELEASE

NA

7.0.1

1.4.x

1.4.6.RELEASE

Dijkstra

3.2.x.RELEASE

NA

7.0.2

1.5.x

1.5.4.RELEASE

Evans

4.0.x.RELEASE

NA

7.0.2

1.6.x

1.6.2.RELEASE

Fowler

4.0.x.RELEASE

NA

8.0.0

1.7.x

1.7.6.RELEASE

Gosling

4.1.x.RELEASE

NA

8.1.0

1.8.x

1.8.11.RELEASE

Hopper

4.2.x.RELEASE

NA

8.2.0

1.9.x

1.9.23.RELEASE

Ingalls

4.3.x.RELEASE

NA

8.2.13

2.0.x

2.0.14.RELEASE

Kay

5.0.x.RELEASE

1.2.1

9.1.1

No version of Spring Data for Apache Geode or Pivotal GemFire (SDG) nor any version of Apache Geode or Pivotal GemFire in the "Historical Support Matrix" above is currently supported. All SDG, Apache Geode and Pivotal GemFire versions have reached their End-of-Life (EOL).

Warning
If you are using one of these product versions, you should upgrade immediately! See the Official Support Matrix below.
Note
Spring Data for Apache Geode & Pivotal GemFire (SDG) does not have a Spring Data (SD) Release Train association/version prior to SDG 1.4 since SDG was not part of the SD Release Train from 1.0.x to 1.3.x. It was a significant effort to incorporate SDG into the SD Release Train. It also means that you will experience both guarantees as well as consequences of this association, which are explained further below.
Note
Spring Data for Apache Geode (SDG) was not "officially supported" by Spring Data (SD) prior to SD Kay/2.0. At, or around this time, when SD Kay/2.0 went GA (Oct 2017), Apache Geode was just about to become a Top-Level Project (TLP) in the Apache Software Foundation (ASF).

SDG Official Support Matrix

Table 3. Spring Data for Apache Geode & Pivotal GemFire Official Support Matrix
SDG Latest SD Release Train EOL Spring Framework Apache Geode Pivotal GemFire

2.1.x

2.1.18.RELEASE

Lovelace

~October 2020

5.1.x.RELEASE

1.6.0

9.5.4

2.1.x

2.1.19.BUILD-SNAPSHOT

Lovelace

~October 2020

5.1.x.RELEASE

1.6.0

9.5.4

2.2.x

2.2.8.RELEASE

Moore

~March 2021

5.2.x.RELEASE

1.9.2

9.8.7

2.2.x

2.2.9.BUILD-SNAPSHOT

Moore

~March 2021

5.2.x.RELEASE

1.9.2

9.8.8

2.3.x

2.3.1.RELEASE

Neumann

~May 2021

5.2.x.RELEASE

1.12.0

9.10.0

2.3.x

2.3.2.BUILD-SNAPSHOT

Neumann

~May 2021

5.2.x.RELEASE

1.12.0

9.10.1

Warning
Apache Geode 1.6.x and Pivotal GemFire 9.5.x are no longer supported! If you are using Spring Data for Apache Geode or Pivotal GemFire (SDG) Lovelace/2.1.x, which are based on Apache Geode 1.6.0 and Pivotal GemFire 9.5.4 respectively, then we highly recommend you to upgrade to Spring Data (SD) Moore using the latest SDG Moore/2.2.x version. SDG Moore/2.2 is based on Apache Geode 1.9 and Pivotal GemFire 9.8, respectively.
Caution
Spring Data Modules (e.g. SDG) and Release Trains (e.g. Lovelace) may have different support cycles than either Apache Geode or Pivotal GemFire itself. While these support cycles overlap it is possible and likely that 1 may end before the other. For instance, Apache Geode 1.6 and Pivotal GemFire 9.5 have already reached their EOL (i.e. Apache Geode 1.6 is no longer available from the website and Pivotal GemFire is no longer available in PivNet for download, which generally implies these versions are no longer supported), yet SDG Lovelace/2.1.x is still in support until ~October 2020. While SDG outlasted either Apache Geode or Pivotal GemFire in this case, the opposite situation can happen as well. Generally, you should take this to mean that your support is now limited and you are also strongly recommended to upgrade ASAP. While no more changes will be back ported if the SD Release Train reaches EOL, on the same note, very few if any changes will be back ported to a still supported SD Release Train (e.g. Lovelace/2.1.x) when the underlying data store modules (i.e. Apache Geode & Pivotal GemFire) are no longer supported.

Spring Data (SD) Release Trains and Modules generally have a 18 month support cycle from the moment the first GA version of a specific SD Release Train occurs. This means 18 months from a major.minor.0.RELEASE (e.g. 2.1.0.RELEASE, referred to as Lovelace-RELEASE), which is considered the first GA version of the major.minor version (e.g. 2.1).

After the first GA version of a major.minor (e.g. 2.1), the support clock starts ticking and a series of service releases (a.k.a. maintenance versions or patches) to the major.minor version occur over the next 18 months.

For example, this is symbolized as Lovelace-SR15 or 2.1.15.RELEASE, which is the 15th patch, maintenance version, or service release of Spring Data Lovelace/2.1 since the first GA version (i.e. Lovelace-RELEASE or 2.1.0.RELEASE). These patches will continue roughly every 6 to 8 weeks until EOL occurs.

SDG Compatibility Matrix

Table 4. Spring Data for Apache Geode Version Compatibility Matrix
SDG Geode 1.6.0 Geode 1.7.0 Geode 1.8.0 Geode 1.9.2 Geode 1.10.0 Geode 1.11.0 Geode 1.12.0

2.1.18.RELEASE

icon?job=spring data geode%2F2.1

icon?job=spring data geode%2F2.1.x apache geode 1.7

icon?job=spring data geode%2F2.1.x apache geode 1.8

NA

NA

NA

NA

2.2.8.RELEASE

NA

NA

NA

icon?job=spring data geode%2F2.2

icon?job=spring data geode%2F2.2.x apache geode 1.10

icon?job=spring data geode%2F2.2.x apache geode 1.11

NA

2.3.1.RELEASE

NA

NA

NA

NA

NA

NA

icon?job=spring data geode%2F2.3

Table 5. Spring Data for VMware GemFire Version Compatibility Matrix
SDG GemFire 9.5.4 GemFire 9.6.2 GemFire 9.7.6 GemFire 9.8.7 GemFire 9.9.1 GemFire 9.10.0

2.1.18.RELEASE

icon?job=spring data gemfire%2F2.1

icon?job=spring data gemfire%2F2.1.x pivotal gemfire 9.6

icon?job=spring data gemfire%2F2.1.x pivotal gemfire 9.7

NA

NA

NA

2.2.8.RELEASE

NA

NA

NA

icon?job=spring data gemfire%2F2.2

icon?job=spring data gemfire%2F2.2.x pivotal gemfire 9.9

NA

2.3.1.RELEASE

NA

NA

NA

NA

NA

https://jenkins.spring.io/job/spring-data-geode/job/2.3.x/

…​

Versioning

The following section describes how Spring Data Modules and Apache Geode / Pivotal GemFire versions are determined.

Spring Data Versions

Spring Data uses symbolic versions in addition to closely following semantic versioning.

Symbolic Versioning

Spring Data (SD) progresses in a series of "Release Trains". Each SD Release Train is "symbolically" named after a notorious computer scientist (e.g. …​, Lovelace, Moore, Neumann, …​). However, the SD Release Train naming conventions are much more than a fancy name.

The SD Release Train contains a set of Spring Data Modules (see "Main modules"), which are all based on a "common", core codebase rooted in Spring Data Commons. Even higher up, Spring Data is based on the core Spring Framework itself.

These SD Modules (i.e. "Main" modules; "Community" and "Related" modules are not part of the SD Release Train) all release together in harmony as part of the SD Release Train. The SD Modules are tested to ensure that they all work together in conjunction with each other when a user depends on the "symbolic" Spring Data version in his/her Spring application dependencies. This is very important since, after all, it is common for users to be using multiple SD Modules (e.g. Apache Geode with JDBC or JPA, i.e. with a RDBMS) together in a single Spring application. Clearly, it would be problematic if SD JDBC and SD for Apache Geode depended on and used different versions of Spring Data Commons or the core Spring Framework!

In addition to these "upstream" dependencies, there are also "downstream" dependencies from Spring Data, which can have consequences as well, and we will cover this concern in a later section.

Example Spring application Maven POM snippet using Spring Data BOM dependency management along with individual Spring Data Module dependency declarations
<dependencyManagement>
  <dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-releasetrain</artifactId>
    <version>Moore-SR4</version>
    <scope>import</scope>
    <type>pom</type>
  <dependency>
</dependencyManagement>

<dependencies>
  <dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-jdbc</artifactId>
  </dependency>
  <dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-geode</artifactId>
  </dependency>
</dependencies>
Tip
See Spring Boot’s Dependency Management BOM for example, here and here. This is also why using Spring Boot to manage your Spring application dependencies, not just Spring Data, is generally a good idea!

This example highlights that value of declaring a <dependencyManagement> section and importing the Spring Data BOM. You don’t need to specify or even know the versions of the individual SD Modules (e.g. SD JDBC, SDG) that your Spring application is using. This is helpful because the individual SD Modules (e.g. SD JDBC, SDG) may be at different major.minor versions within the SD Release Train. And, in this case, they are!

Tip
As further evidence, see here, then here and finally, here.

The point is, when using the Spring Data BOM, you don’t have to care about individual SD Module versions. The BOM handles that for you. You only need to depend on the Spring Data BOM (or alternatively, Spring Boot’s Dependency Management BOM) in your Spring application Maven POM (or Gradle build) file and know that you will have compatible SD Modules all built and tested on the same common, core codebase, which means they will all work together.

The fact of the matter is, versions are going to be different, even within the Spring Data project portfolio itself, because each SD Module has come into existence at different points in time. This is also what makes Spring Boot’s Dependency Management BOM so important and powerful since it curates and harmonizes in a thoroughly tested manner, not only the wider Spring portfolio, but also 3rd party Java libraries typically used by your Spring/Java applications as well (e.g. like logging). This ensures that those Java libs all work with your Spring applications in conjunction with the Spring bits, which use some of those same 3rd party Java libraries (e.g. SLF4J) without incident.

Note
Spring Data encompasses much more than simply the "Main modules". Also see the "Community modules" and "Related modules" on the Spring Data project page at spring.io[https://spring.io]. Again, SD "Community" and "Related" modules are not part of the SD Release Train.

Now that we have beaten this dead horse enough, let’s move forward.

Semantic Versioning

Not only does Spring Data (SD) use symbolic versions for, and to group, releases in the SD Release Train, SD also uses semantic versioning, expressed as a major.minor.patch version.

For example, SDG Moore-SR4 is SDG 2.2.4.RELEASE.

Technically, even with "semantic, numbered versioning", the Spring Data Team also combines major.minor.patch version numbers with Milestones (e.g. M1), Release Candidates (e.g. RC3) and GA (i.e. RELEASE) version qualifiers.

Major Minor version numbers (e.g. SDG 2.2.4.RELEASE) progress as you would expect, remaining generally compatible across minor versions (e.g. 2.0.x, 2.1.x, 2.2.x). Of course, the underlying data store must also be compatible across minor version numbers. SD minor versions cannot be compatible if the data store is not compatible across minor versions!

The patch version (a.k.a. "maintenance" version; the Spring Data Team calls them "service releases") only occur after a SD Release Train and the individual SD Modules contained in the SD Release Train reaches GA, that is, when the SD Modules reach version major.minor.0.RELEASE (e.g. SDG 2.2.0.RELEASE).

The RELEASE version qualifier is only used for the first GA version of the major.minor version and subsequent service releases (e.g. SDG 2.2.4.RELEASE; This means there have been 4 service releases, or patches, to the 2.2.0.RELEASE, the first GA version of SDG 2.2).

Before the GA release of a new major.minor version occurs, the Spring Data Release Train progresses through a series of 1 or more Milestones, then Release Candidate(s) and finally, the arrives at its first GA version, approximately 6 months later from the initial major.minor.0 build snapshot.

For example, SDG x.y.z.BUILD-SNAPSHOT to x.y.0.M1, x.y.0.M2, x.y.0.RC1 and finally, x.y.0.RELEASE is ~6 months. x.y.1-N.RELEASE (or N service releases of the `x.y.0.RELEASE/GA version) occur over a duration of 18 months.

The number of Milestones depends on the amount of scope the Spring Data Team has determined for a given SD Release Train. This varies from 1 SD Release Train to another Release Train.

For instance, SD Ingalls/1.x (e.g. SDG 1.9.x) only had 1 Milestone whereas SD Kay (e.g. SDG 2.0.x) had 4 Milestones, prior to their final GA releases.

The Spring Data Team prefers more frequent releases (Milestones) leading up to a final GA if the new features and enhancements are reasonably involved and we need to garner more feedback from our users on both direction and development (e.g. Think SD Reactive Repositories built on Project Reactor introduced in SD Kay/2.0 combined with the core Spring Framework’s new JDK 8 baseline as of 5.0, upon which SD Kay/2.0 was based; 2 very significant changes there).

Still, SD releases are time boxed as much as possible so users can expect a predictable release cadence, particularly to plan for upgrades given each SD Release Train has a general 18 month support cycle (hence "service releases) from the first GA.

While Milestones occur during ongoing development work of new features and enhancements, Spring Data Release Candidates are geared towards stabilizing the major.minor version. This generally means only fixes for bugs and CVEs. We may have 1 or more Release Candidates, roughly spaced a couple weeks apart, to lock down the release leading up to the final GA for the major.minor version.

Then, the GA version, or first "official" release of the major.minor version occurs (e.g. SDG 2.2.0.RELEASE). After which, we proceed with series of service releases, or patches to that major.minor version (e.g. SDG 2.2.x). Recently, the number of service releases, or patches, more closely coincides with Spring Boot’s lifecycle.

For instance, Spring Data Moore/2.2 is pulled in downstream by Spring Boot 2.2 and we will continue to support SD Moore/2.2 with service releases / patches for as long as Spring Boot 2.2 is supported and patched. This does not always perfectly align, but is generally the accepted practice followed now by the Spring Data Team, and all Spring projects for that matter given Spring Boot is the preferred starting point for all things Spring.

Finally, it is also important to point out that SD Modules each independently builds and depends on their underlying data store. After all, Spring Data_ (SD) is a common abstraction for, and integration technology supporting many different data stores.

SD MongoDB depends on MongoDB, SD Redis depends on Redis, and of course, SD GemFire/Geode depend on Apache Geode and Pivotal GemFire, respectively. Once the SD Module major.minor version reaches Release Candidate status, we fix that SD Module major.minor version on whatever the latest underlying data store major.minor version is at that time.

For example, SDG Lovelace/2.1 is based on Apache Geode 1.6 and Pivotal GemFire 9.5, which were the latest major.minor versions of GemFire/Geode at that time. Also important to note is that Pivotal GemFire 9.5 is based on Apache Geode 1.6. It would not be logical if SDG Lovelace/2.1 was based on Apache Geode 1.9 and Pivotal GemFire 9.5 if the GemFire/Geode versions were not compatible! This applies equally the other way too, i.e. SDG Lovelace/2.1 based on Apache Geode 1.2 and Pivotal GemFire 9.5, which is not compatible!

To compare and contrast, SD Moore/2.2 is based on Apache Geode 1.9 and Pivotal GemFire 9.8. Pivotal GemFire 9.8 is based on Apache Geode 1.9. SD Kay/2.0 was based on Apache Geode 1.2 and Pivotal GemFire 9.1. Pivotal GemFire 9.1 was based on Apache Geode 1.2.

Once a SD Release Train and SD Modules are fixed, the SD Modules can only upgrade to patch versions of the underlying data store within service releases of the SD Release Train.

For example SDG Moore/2.2 is currently on Apache Geode 1.9.2 and Pivotal GemFire 9.8.6. It is not OK, however, for SDG Moore/2.2 to move to Apache Geode 1.10/1.11 and Pivotal GemFire 9.9, whatever is available after the first Release Candidate, or especially after GA in addition to subsequent service release versions.

More on this topic will be explained further below.

Apache Geode & Pivotal GemFire Versions

Apache Geode and Pivotal GemFire do not use "symbolic versions". Both simply use semantic versioning non-strictly speaking.

It is not advisable to change the underlying binaries of either Apache Geode or Pivotal GemFire for a particular Spring Data for Apache Geode or Pivotal GemFire version since GemFire/Geode API binary compatibility is not guaranteed. There have been known issues when switching the baseline bits.

For instance, changing the underlying Apache Geode or Pivotal GemFire binaries of SDG Lovelace/2.1, which is firmly based on Apache Geode 1.6 & Pivotal GemFire 9.5, to Apache Geode 1.7, 1.8 or later and Pivotal GemFire 9.6, 9.7 or later is not guaranteed to work in all cases.

With regards to semantic versioning, users should be aware that not all minor enhancements nor bug fixes are back ported to previous, still supported, versions of Apache Geode and Pivotal GemFire. In many cases, users are required to upgrade. This can pose serious challenges when it comes to Spring Data’s compatibility for Apache Geode or Pivotal GemFire.

Additional technical details will be provided further below.

Release Cadence

…​

Clone this wiki locally