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

2.1 sstableloader will fail if there are collections in the schema tables

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Normal
    • Resolution: Fixed
    • 2.1.13
    • Legacy/Tools
    • None
    • Normal

    Description

      In BulkLoader.ExternalClient, we use the Thrift execute_cql3_query() method to read the system schema tables. Because it's a Thrift connection, we use the v2 protocol format for serializing data. However, when we later read the results with CFMetadata.fromThriftCqlRow(), we use the v3 protocol format to deserialize the results. If there are any collections in the results, such as entries in dropped_columns, the following error will occur:

      Caused by: java.lang.IllegalArgumentException: null
              at java.nio.Buffer.limit(Buffer.java:275) ~[na:1.8.0_45-internal]
              at org.apache.cassandra.utils.ByteBufferUtil.readBytes(ByteBufferUtil.java:543) ~[cassandra-all-2.1.11.jar:2.1.11]
              at org.apache.cassandra.serializers.CollectionSerializer.readValue(CollectionSerializer.java:124) ~[cassandra-all-2.1.1
      1.jar:2.1.11]
              at org.apache.cassandra.serializers.MapSerializer.deserializeForNativeProtocol(MapSerializer.java:101) ~[cassandra-all-
      2.1.11.jar:2.1.11]
              at org.apache.cassandra.serializers.MapSerializer.deserializeForNativeProtocol(MapSerializer.java:30) ~[cassandra-all-2
      .1.11.jar:2.1.11]
              at org.apache.cassandra.serializers.CollectionSerializer.deserialize(CollectionSerializer.java:50) ~[cassandra-all-2.1.
      11.jar:2.1.11]
              at org.apache.cassandra.db.marshal.AbstractType.compose(AbstractType.java:68) ~[cassandra-all-2.1.11.jar:2.1.11]
              at org.apache.cassandra.cql3.UntypedResultSet$Row.getMap(UntypedResultSet.java:287) ~[cassandra-all-2.1.11.jar:2.1.11]
              at org.apache.cassandra.config.CFMetaData.fromSchemaNoTriggers(CFMetaData.java:1833) ~[cassandra-all-2.1.11.jar:2.1.11]
              at org.apache.cassandra.config.CFMetaData.fromThriftCqlRow(CFMetaData.java:1126) ~[cassandra-all-2.1.11.jar:2.1.11]
              at org.apache.cassandra.tools.BulkLoader$ExternalClient.init(BulkLoader.java:330) ~[cassandra-all-2.1.11.jar:na]
              ... 7 common frames omitted
      

      I believe this only affects 2.1 due to the re-working of BulkLoader/sstableloader in 2.2 and 3.0, but I haven't confirmed that.

      Attachments

        Issue Links

          Activity

            People

              tjake T Jake Luciani
              thobbs Tom Hobbs
              T Jake Luciani
              Aleksey Yeschenko
              Votes:
              2 Vote for this issue
              Watchers:
              5 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: