Uploaded image for project: 'Cassandra'
  1. Cassandra
  2. CASSANDRA-12042

Decouple messaging protocol versioning from individual message types

    XMLWordPrintableJSON

Details

    Description

      At the moment we have a single constant - MessagingService.current_version defining serialization format for everything, including every possible message type.

      In practice it means that any tiniest change to any message requires bumping the global MessagingService version.

      This is problematic for several reasons, the primary of which is currently the schema propagation barrier between differently versioned C* nodes. In tick-tock world, it means that any change (say, to a read command message), would require a messaging service bump, putting nodes on split versions of the service, and making schema changes during this now considered minor upgrade, impossible, which is not neat.

      I propose that starting with 4.0 we version all messages individually instead, and separately version messaging service protocol itself - which will basically amount to just framing, once CASSANDRA-8457 is completed.

      In practice, this might be implemented the following way:

      1. We use an extra byte with each message to specify the version of that particular message type encoding
      2. Instead of relying on messaging service of the sending note (determining which can be racy, especially during upgrades), we use that byte to determine the version of the message during deserialisation
      3. On sending side, we can use the gossipped version of Cassandra itself - not the messaging service version - to determine the maximum supported message type version of the destination node

      In the new world, I expect the framing protocol version to change very rarely after 4.0, if ever, and most message types to change extremely rarely as well, with schema, read, and write messages to change version most often.

      Attachments

        Activity

          People

            Unassigned Unassigned
            aleksey Aleksey Yeschenko
            Votes:
            0 Vote for this issue
            Watchers:
            11 Start watching this issue

            Dates

              Created:
              Updated: