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

CQL 3.0 prepare_cql_query fails on "BEGIN BATCH"

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Low
    • Resolution: Fixed
    • 1.1.1
    • Legacy/CQL
    • OSX 10.7.2, Cassandra 1.1.0, Thrift 0.7

    • Low

    Description

      Preparing the following (contrived) statement with the C++ Thrift bindings
      throws a TTransportException ("No more data to read." from TTransport.h:41)

      q = "begin batch insert into crashtest (id, val) values (?, ?); apply batch";
      client.prepare_cql_query(pr, q, Compression::NONE);

      crashtest.cpp
      #include <protocol/TBinaryProtocol.h>
      #include <thrift/transport/TSocket.h>
      #include <thrift/transport/TTransportUtils.h>
      #include "Cassandra.h"
      
      using namespace std;
      using namespace apache::thrift;
      using namespace apache::thrift::protocol;
      using namespace apache::thrift::transport;
      using namespace org::apache::cassandra;
      using namespace boost;
      
      int main(int argc, char **argv) {
          shared_ptr<TTransport> socket(new TSocket("127.0.0.1", 9160));
          shared_ptr<TTransport> transport(new TFramedTransport(socket));
          shared_ptr<TProtocol> protocol(new TBinaryProtocol(transport));
      
          CassandraClient client(protocol);
      
          try {
              transport->open();
              client.set_keyspace("test1");
              client.set_cql_version("3.0.0");
      
              CqlResult cr;
              CqlPreparedResult pr;
      
              // In cqlsh: create table crashtest (id int primary key, val text);
              const char *q;
              // q = "insert into crashtest (id, val) values (?, ?)"; // This works fine
              q = "begin batch insert into crashtest (id, val) values (?, ?); apply batch";
      
              client.prepare_cql_query(pr,  q, Compression::NONE);
      
              vector<string> vtypes = pr.variable_types;
              vector<string>::iterator it;
      
              for (it = vtypes.begin(); it != vtypes.end(); it++) {
                  cout << *it << endl;
              }
          } catch (TException &tx) {
              cerr << "TException ERROR: " << tx.what() << endl;
          }
      }
      
      backtrace
      #0  0x00007fff901800e9 in __cxa_throw ()
      #1  0x0000000100009ab9 in apache::thrift::transport::readAll<apache::thrift::transport::TBufferBase> (trans=@0x100401100, buf=0x7fff5fbfefc0 "??_\001", len=4) at TTransport.h:41
      #2  0x0000000100009c1d in apache::thrift::transport::TBufferBase::readAll (this=0x100401100, buf=0x7fff5fbfefc0 "??_\001", len=4) at TBufferTransports.h:82
      #3  0x0000000100009c5b in apache::thrift::transport::TFramedTransport::readAll (this=0x100401100, buf=0x7fff5fbfefc0 "??_\001", len=4) at TBufferTransports.h:390
      #4  0x0000000100004b45 in apache::thrift::transport::TVirtualTransport<apache::thrift::transport::TFramedTransport, apache::thrift::transport::TBufferBase>::readAll_virt (this=0x100401100, buf=0x7fff5fbfefc0 "??_\001", len=4) at TVirtualTransport.h:99
      #5  0x00000001000034c1 in apache::thrift::transport::TTransport::readAll (this=0x100401100, buf=0x7fff5fbfefc0 "??_\001", len=4) at TTransport.h:126
      #6  0x0000000100009f4c in apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TTransport>::readI32 (this=0x100401370, i32=@0x7fff5fbff020) at TBinaryProtocol.h:372
      #7  0x000000010000b5bf in apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TTransport>::readMessageBegin (this=0x100401370, name=@0x7fff5fbff228, messageType=@0x7fff5fbff224, seqid=@0x7fff5fbff234) at TBinaryProtocol.h:203
      #8  0x0000000100006b07 in apache::thrift::protocol::TVirtualProtocol<apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TTransport>, apache::thrift::protocol::TProtocolDefaults>::readMessageBegin_virt (this=0x100401370, name=@0x7fff5fbff228, messageType=@0x7fff5fbff224, seqid=@0x7fff5fbff234) at TVirtualProtocol.h:432
      #9  0x00000001000abe78 in apache::thrift::protocol::TProtocol::readMessageBegin (this=0x100401370, name=@0x7fff5fbff228, messageType=@0x7fff5fbff224, seqid=@0x7fff5fbff234) at TProtocol.h:518
      #10 0x0000000100069a98 in org::apache::cassandra::CassandraClient::recv_prepare_cql_query (this=0x7fff5fbff5b0, _return=@0x7fff5fbff4c0) at Cassandra.cpp:10231
      #11 0x000000010003bf3f in org::apache::cassandra::CassandraClient::prepare_cql_query (this=0x7fff5fbff5b0, _return=@0x7fff5fbff4c0, query=@0x7fff5fbff6b0, compression=org::apache::cassandra::Compression::NONE) at Cassandra.cpp:10206
      #12 0x00000001000020ea in main (argc=1, argv=0x7fff5fbff8c8) at crashtest.cpp:36
      
      server error message
      ERROR 17:13:55,089 Error occurred during processing of message.
      java.lang.ArrayIndexOutOfBoundsException: 0
      	at org.apache.cassandra.cql3.statements.UpdateStatement.prepare(UpdateStatement.java:278)
      	at org.apache.cassandra.cql3.statements.BatchStatement.prepare(BatchStatement.java:157)
      	at org.apache.cassandra.cql3.QueryProcessor.getStatement(QueryProcessor.java:207)
      	at org.apache.cassandra.cql3.QueryProcessor.prepare(QueryProcessor.java:158)
      	at org.apache.cassandra.thrift.CassandraServer.prepare_cql_query(CassandraServer.java:1260)
      	at org.apache.cassandra.thrift.Cassandra$Processor$prepare_cql_query.getResult(Cassandra.java:3484)
      	at org.apache.cassandra.thrift.Cassandra$Processor$prepare_cql_query.getResult(Cassandra.java:3472)
      	at org.apache.thrift.ProcessFunction.process(ProcessFunction.java:32)
      	at org.apache.thrift.TBaseProcessor.process(TBaseProcessor.java:34)
      	at org.apache.cassandra.thrift.CustomTThreadPoolServer$WorkerProcess.run(CustomTThreadPoolServer.java:186)
      	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
      	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
      	at java.lang.Thread.run(Thread.java:680)
      

      Attachments

        1. 4202.txt
          7 kB
          Sylvain Lebresne

        Activity

          People

            slebresne Sylvain Lebresne
            sbillig Sean Billig
            Sylvain Lebresne
            Pavel Yaskevich
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: