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

potential backwards incompatibility in native protocol

    XMLWordPrintableJSON

Details

    Description

      In the text of the native_protocol.spec document, it explains the format for a notation called [option], which should represent "a pair of <id><value>".

      In doing a first-draft implementation of the protocol for the python driver, though, I found that I had a misunderstanding. I read that section as saying that <value> was a [value], and that it could have a length of 0 (i.e., the [int] on the front of the [value] could be 0). However, it turns out that <value> might not be there at all, or might be two [value]'s, depending on the option id and message context.

      I'm not a fan of this, since

      • A protocol parsing library can't simply implement a single function to read in [option]'s, since the length of the value part is dependent on the message context
      • If we add a new native data type (a new option id which could be used inside a <col_spec_i> in a RESULT message), then older clients will not know how to read past the value part. Of course they won't know how to interpret the data or deserialize later rows of that unknown type - that's not the problem - the problem is that the older client should be able just to mark that column as unparseable and still handle the rest of the columns.

      Can we make <value> be a [value], the contents of which can be re-interpreted as a [string], an [option], two [option]'s, or whatever?

      Attachments

        1. 4539.txt
          17 kB
          Sylvain Lebresne

        Activity

          People

            slebresne Sylvain Lebresne
            thepaul paul cannon
            Sylvain Lebresne
            paul cannon
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: