Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  • Is there any primitives, building blocks to provide compatibility?
  • Difficulties for day by day coding.
    • java serialzation
      • anonymous class names based on declaration order
  • Compatibility testing.
    • explicit tests.
    • ability to run tests with random node versions
  • New feature implementation, enabling.
  • patterns for implementing commons cases: new version of algorithmes, testing against new versions.
  • Scope of compatibility: 
    • Currently any third-party module can register own ports (messages?) and must be able to track compatibility. 

Implementation phases

...

Code Cleanup

  • remove DirectByteBufferStreamImpl  V1-V3, keep V4, only.
  • remove all items from IgniteFeatures  and corresponding checks.
  • remove all code and checks for GridContinuousProcessor#discoProtoVer
  • TcpDiscoverySpi#setForceServerMode
  • All old version of classes - keep only max from V2, V3, etc. versions. StartRequestV2 that belongs to internal communication.
    Classes releated to thin client, jdbc, odbc interaction must stay.
    • StartRequest must be deleted. Rename StartRequestV2 → StartRequest.
    • CacheMetricsSnapshot must be deleted. Rename CacheMetricsSnapshotV2 → CacheMetricsSnapshot.
  • MessageFactory.
  • IgniteDataTransferObject
  • EXCHANGE_PROTOCOL_2_SINCE and related code

  • IgniteProductVersion.fromString - usages

...

BinaryMarshaller modularization

  • modularize BinaryMarshaller.
  • create small jar for ignite thin client
  • provide clear API for binary objects inside ignite-code and other modules.

...

Communication SPI Compatibility

  • Communication MessageWriter and MessageReader are aware of peers version, and then schema of a message.
  • Distinguish serdes generation from POJO
  • PR checks for Messages  ancestor change with the some warning, labels, etc. that can draw reviewer attention to the possible compatibility issues.

Jira
serverASF JIRA
columnIdsissuekey,summary,issuetype,created,updated,duedate,assignee,reporter,priority,status,resolution
columnskey,summary,type,created,updated,due,assignee,reporter,priority,status,resolution
maximumIssues20
jqlQueryissue = IGNITE-25881
serverId5aa69414-a9e9-3523-82ec-879b028fb15b

...

Discovery SPI Compatibility

  • (question) Serdes changes to provide compatibility? (current approach with JDK serialization provides some compatibility (13).
    Is it enough for long-term compatibility support?
  • (question) Serdes changes to restrict classes that can be sent over SPI.
  • PR checks for Messages  ancestor change with the some warning, labels, etc. that can draw reviewer attention to the possible compatibility issues.

Jira
serverASF JIRA
columnIdsissuekey,summary,issuetype,created,updated,duedate,assignee,reporter,priority,status,resolution
columnskey,summary,type,created,updated,due,assignee,reporter,priority,status,resolution
maximumIssues20
jqlQueryissue = IGNITE-25883
serverId5aa69414-a9e9-3523-82ec-879b028fb15b

...

Management API

  • Provide ability to change arg, result classes in compatible way.
    • Possible approach is to reuse communication serdes framework.
    • Other possibility is to migrate on BinaryObject as a arguments and results.
  • PR checks for Messages  ancestor change with the some warning, labels, etc. that can draw reviewer attention to the possible compatibility issues.

...

IgniteFeatures 

  • Write down clear rules to deal with the new features and not compatible enhancements.
  • Support, if not, already this rules in IgniteFeatures framework.

...

Compatibility Matrix

  • A way to declare one version as incompatible with another.
  • A component to enforce a rule that only compatible versions can join one cluster.

...

Testing

  • ducktests to check upgrade procedure.
  • (question) unit tests mode that start some nodes of previous version. 

...

Development process changes

  • (question) Any change in public API MUST be in the form of IEP.
  • (question) Any change in public API MUST be voted by two(three?) committers.
  • Documentation with clear description of development rules for all subsystems required to be compatible.

...