Record Layer Versions
Variants
The Record Layer is released in two variants, depending on not Protobuf is renamed (“shaded”).
- Unshaded:
fdb-record-layer-core
- Shaded:
fdb-record-layer-core-shaded
In the shaded versions, com.google
classes will be renamed to com.apple.foundationdb.record.shaded.com.google
.
Note that code generated by one version of protoc
is generally not compatible with the Protobuf runtime classes from another version. For that reason, it is suggested that the adopter keep their protoc
version aligned with the Protobuf runtime used by the Record Layer library.
Maven Dependency
For the most up-to-date builds, the following maven repo should be added to the repositories section:
<repositories>
<repository>
<id>fdb-record-layer</id>
<name>FDB Record Layer</name>
<url>https://ossartifacts.jfrog.io/artifactory/fdb-record-layer</url>
</repository>
</repositories>
Then the following dependency can be added:
<groupId>org.foundationdb</groupId>
<artifactId>fdb-record-layer-core</artifactId>
<version>3.4.+</version>
Older builds are also available in the maven central repository, and newer builds will be published there upon the resolution of Issue #1288.
Gradle Dependency
For the most up-to-date builds, the following maven repo should be added to the repositories section:
repositories {
mavenCentral()
maven {
url "https://ossartifacts.jfrog.io/artifactory/fdb-record-layer/"
}
}
Then the following dependency can be added:
"org.foundationdb:fdb-record-layer-core:3.4.+"
Older builds are also available in the mavenCentral()
repository, and newer builds will be published there upon the resolution of Issue #1288.
Semantic Versioning
Record Layer versions are major.minor.build.patch.
New versions are typically cut off of the main branch of the Record Layer repository. In that case, the major and minor versions are specified by the version
property within gradle.properties
and the patch version will be 0
. (The build version is monotonically increasing.) However, in certain circumstances, bug fixes or even some backwards-compatible features might be cherry-picked to older releases. In that case, the patch will be non-zero and the major, minor, and build versions will match the version of the older release.
The corollary to this is that it is not always true that a “newer” version of the Record Layer contains all changes in an “older” version (where “newer” and “older” are determined only by looking at the version number). For example, suppose a bug is discovered on main and the fix is released as part of version 2.3.31.0 and also back-ported and included in version 2.2.29.7. Then the fix won’t be in version 2.3.30.0 even though 2.3.30.0 is “newer” than 2.2.29.7. In general, however, the following should be the case:
- Version
a.b.c1.0
contains all changes in versiona.b.c2.0
ifc1 > c2
. - Version
a.b.c.d1
contains all changes in versiona.b.c.d2
ifd1 > d2
.
Users are encouraged to check the release notes to see when changes introduced in a patch branch are made available in the main release train.
API Stability Annotations
Classes and methods annotations using @API
determine when they can be changed in a backwards-incompatible way or removed. See the Javadoc for more details.
-
STABLE
will not change until the major version is incremented. At that time, they may also change status to something less stable. -
MAINTAINED
will not change until the minor version is incremented. At that time, only the status changes toUNSTABLE
orDEPRECATED
. This indicates that in the next minor version they will change / be removed. -
UNSTABLE
can change in a minor release without other advance notice. -
DEPRECATED
can be removed in a minor release without other advance notice. -
EXPERIMENTAL
can change / be removed in any build without notice.
Creating a Patch Branch
-
Patch branches should be named
fdb-record-layer-a.b.c
after the build from which they are created. -
The new patch branch should be made using the tag created for the starting build.
git checkout -b fdb-record-layer-a.b.c a.b.c.0
-
In
gradle.properties
, changeversion=a.b
to
version=a.b.c
using the starting version.
-
In
docs/ReleaseNotes.md
, move the template for release notes for the next release to be just above the release note for the starting versiona.b.c
. -
Commit and push the new branch upstream.
-
Create patch fix pull requests against this new branch.
-
There may be conflicts in the
gradle.properties
anddocs/ReleaseNotes.md
files when the patch branch is merged into main. Be sure whenever merging that branch in that (1) the version on main is not accidentally changed and (2) the release notes file contains all release notes from both branches after the merge.