Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
IDIEP-132
Author
Sponsor
Created

28.11.2024

Status

Status
colourBlue
titleIN PROGRESS

...

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.
  •  remove MessageFactory.
  •  IgniteDataTransferObject
  •  

    EXCHANGE_PROTOCOL_2_SINCE and related code

  •  

    IgniteProductVersion.fromString - usages

...

BinaryMarshaller modularization

  •  modularize BinaryMarshaller.
  •  create small jar for ignite thin client. As a separate module, not part of the core. Optional, helps to see if changes affect resialization.
  •  provide clear API for binary objects inside ignite-code and other modules. Finish IEP-119. Optional, helps to see if changes affect resialization.

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-27675 24780
serverId5aa69414-a9e9-3523-82ec-879b028fb15b

...

  •  Communication MessageWriter and MessageReader are aware of peers version, and then schema of a message.
  •  Distinguish serdes generation from POJO
  •  Guarantee that all messages use new serialization framework. Remove previous framework classes.
  •  Code checks, see Communication protocol#Codechecks

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.
  •  Guarantee that all messages use new serialization framework. Remove previous framework classes.
  •  PR checks for Messages  ancestor change with the some warning, labels, etc. that can draw reviewer attention to the possible compatibility issues.Code checks, see Communication protocol#Codechecks

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

...

  • 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.

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-27621
serverId5aa69414-a9e9-3523-82ec-879b028fb15b

IgniteFeatures 

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

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-28424
serverId5aa69414-a9e9-3523-82ec-879b028fb15b

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. 
  • Only nodes with close versions (like 2.17 and 2.18, not 2.17 and 2.19) should be allowed to join cluster.

Testing

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

...

  • (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.
  • Each release should be started with compatibility code removal.

Alternative designs

  • subsystem API versions (like in REST API)
  • runtime component(IgniteProcessor, IgniteManager) upgrade with the dynamic class loading. 

...

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
jqlQuerylabels = IEP-132 and type != Epic
serverId5aa69414-a9e9-3523-82ec-879b028fb15b