IDIEP-69
Author
Sponsor
Created

 

StatusDRAFT


Motivation

It is hard to believe that modern distributed databases can live for years without having releases with breaking backwards compatibility changes as the Apache Ignite does. The lot of @deprecated methods in the API and many obsolete documentation pages leads to a bad user experience. Moreover, the same problem exists for maintaining the obsolete source code for developers and blocks using modern technologies and the latest development language features. 

Here are a few Apache project examples with the same approach:

Description

Versioning

Use three digits for the version of Apache Ignite: grand.major.bug-fix[-rc_number]

  • [grand] - the version which may contain breaking changes e.g. changing API, thin client protocol changes, updating cluster defaults, persistence datastore format change.
  • [major] - the version which guarantees 100% compatibility with the previous major version (API, persistence, etc.), and also contains some major improvements (e.g. Thin Client Compute support, PDS defragmentation, Encryption).
  • [bug-fix] - the version contains only fixed issues of the previous major version, without breaking any kind of compatibility.
  • [-rc_number] - (optional) the release candidate suffix.

Release guarantees

All planning releases will be major release by default. However, after a reasonable period of time but not earlier than a year from the last grand release some of the changes may break the compatibility. In this case, the grand version will be bumped up. The following changes may break the compatibility:

  • change the thin-client protocol
  • remove deprecated API methods
  • drop the support of old java versions
  • an incompatible persistence datastore

For each breaking change the following guarantees need to be provided:

  • persistent datastore migration scripts (if applicable)
  • java code snippets for new API usage
  • dedicated documentation page if defaults have changed

The previous grand version of the Apache Ignite guaranteed to be supported with bug-fix releases no more than once a quarter.

Changes for the next grand release (3.0.0)

The total amount of changes for this release must be not so big. Thus, two or three community members may complete them within a few months.

Guarantees

  • The persistence data store format without changes (cluster must be able to start from last persistence data store)
  • Long-term support with big-fix updates from at least one year the previous 2.xx release
  • All the deprecated JMX metrics should remain

Deny features

  • turn off atomic operation inside transactions by default

  • deny async operation inside transactions

Remove obsolete features

  • remove ignite-aop
  • remove ignite-schedule
  • remove Old Service Grid implementation
  • remove MVCC

Remove deprecated 

  • remove IgniteCache.withAsync, IgniteAsyncSupport
  • remove IgniteCache.lockAll
  • remove MemoryPolicyConfiguration, MemoryConfiguration, PersistentStoreConfiguration
  • remove StreamTupleExtractor

Cleaning up the API

  • remove `force server mode` for client nodes
  • change `Object consistentId` to `String consistentId`
  • remove CacheRebalanceMode.NONE
  • remove DiscoverySpi#failNode()

  • rename some of IgniteSystemProperties to be without IGNITE_

Changing cluster defaults

  • set Spring 5 as the default
  • set compact footer = true for thin client


Risks and Assumptions

There are some public activities with the 3.0 Ignite version that already happened e.g. the 3.0-alpha version creation, some public online meetups. Thus, the main risk associated with the release of the new 3.0 version is mainly related to marketing activities. However, the amount of changes for the new Ignite architecture is too big to be completed within the next few years. The stabilization period of such a version may take even more time.

I think the grand release version which contains the new Ignite architecture must be determined when the pre-release source code will be available.

Discussion Links

http://apache-ignite-developers.2346864.n4.nabble.com/DISCUSSION-IEP-69-The-evolutionary-release-process-td51655.html

Reference Links

[1] Apache Ignite 3.0 Wishlist

[2] Apache Ignite 3.0.0-alpha1

Tickets

// Links or report with relevant JIRA tickets.

  • No labels