Return-Path: X-Original-To: apmail-cassandra-commits-archive@www.apache.org Delivered-To: apmail-cassandra-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 608BEC9C5 for ; Mon, 17 Nov 2014 13:50:34 +0000 (UTC) Received: (qmail 61359 invoked by uid 500); 17 Nov 2014 13:50:34 -0000 Delivered-To: apmail-cassandra-commits-archive@cassandra.apache.org Received: (qmail 61312 invoked by uid 500); 17 Nov 2014 13:50:34 -0000 Mailing-List: contact commits-help@cassandra.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@cassandra.apache.org Delivered-To: mailing list commits@cassandra.apache.org Received: (qmail 61295 invoked by uid 99); 17 Nov 2014 13:50:34 -0000 Received: from arcas.apache.org (HELO arcas.apache.org) (140.211.11.28) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 17 Nov 2014 13:50:34 +0000 Date: Mon, 17 Nov 2014 13:50:34 +0000 (UTC) From: "Sam Tunnicliffe (JIRA)" To: commits@cassandra.apache.org Message-ID: In-Reply-To: References: Subject: [jira] [Updated] (CASSANDRA-8280) Cassandra crashing on inserting data over 64K into indexed strings MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394 [ https://issues.apache.org/jira/browse/CASSANDRA-8280?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Sam Tunnicliffe updated CASSANDRA-8280: --------------------------------------- Attachment: (was: 8280-2.1.txt) > Cassandra crashing on inserting data over 64K into indexed strings > ------------------------------------------------------------------ > > Key: CASSANDRA-8280 > URL: https://issues.apache.org/jira/browse/CASSANDRA-8280 > Project: Cassandra > Issue Type: Bug > Components: Core > Environment: Debian 7, Cassandra 2.1.1, java 1.7.0_60 > Reporter: Cristian Marinescu > Assignee: Sam Tunnicliffe > Priority: Critical > Fix For: 2.1.3 > > Attachments: 8280-2.0.txt, 8280-2.1.txt > > > An attemtp to instert 65536 bytes in a field that is a primary index throws (correctly?) the cassandra.InvalidRequest exception. However, inserting the same data *in a indexed field that is not a primary index* works just fine. > However, Cassandra will crash on next commit and never recover. So I rated it as Critical as it can be used for DoS attacks. > Reproduce: see the snippet below: > {code} > import uuid > from cassandra import ConsistencyLevel > from cassandra import InvalidRequest > from cassandra.cluster import Cluster > from cassandra.auth import PlainTextAuthProvider > from cassandra.policies import ConstantReconnectionPolicy > from cassandra.cqltypes import UUID > > # DROP KEYSPACE IF EXISTS cs; > # CREATE KEYSPACE cs WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 1}; > # USE cs; > # CREATE TABLE test3 (name text, value uuid, sentinel text, PRIMARY KEY (name)); > # CREATE INDEX test3_sentinels ON test3(sentinel); > > class CassandraDemo(object): > > def __init__(self): > ips = ["127.0.0.1"] > ap = PlainTextAuthProvider(username="cs", password="cs") > reconnection_policy = ConstantReconnectionPolicy(20.0, max_attempts=1000000) > cluster = Cluster(ips, auth_provider=ap, protocol_version=3, reconnection_policy=reconnection_policy) > self.session = cluster.connect("cs") > > def exec_query(self, query, args): > prepared_statement = self.session.prepare(query) > prepared_statement.consistency_level = ConsistencyLevel.LOCAL_QUORUM > self.session.execute(prepared_statement, args) > > def bug(self): > k1 = UUID( str(uuid.uuid4()) ) > long_string = "X" * 65536 > query = "INSERT INTO test3 (name, value, sentinel) VALUES (?, ?, ?);" > args = ("foo", k1, long_string) > > self.exec_query(query, args) > self.session.execute("DROP KEYSPACE IF EXISTS cs_test", timeout=30) > self.session.execute("CREATE KEYSPACE cs_test WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 1}") > > c = CassandraDemo() > #first run > c.bug() > #second run, Cassandra crashes with java.lang.AssertionError > c.bug() > {code} > And here is the cassandra log: > {code} > ERROR [MemtableFlushWriter:3] 2014-11-06 16:44:49,263 CassandraDaemon.java:153 - Exception in thread Thread[MemtableFlushWriter:3,5,main] > java.lang.AssertionError: 65536 > at org.apache.cassandra.utils.ByteBufferUtil.writeWithShortLength(ByteBufferUtil.java:290) ~[apache-cassandra-2.1.1.jar:2.1.1] > at org.apache.cassandra.db.ColumnIndex$Builder.maybeWriteRowHeader(ColumnIndex.java:214) ~[apache-cassandra-2.1.1.jar:2.1.1] > at org.apache.cassandra.db.ColumnIndex$Builder.add(ColumnIndex.java:201) ~[apache-cassandra-2.1.1.jar:2.1.1] > at org.apache.cassandra.db.ColumnIndex$Builder.build(ColumnIndex.java:142) ~[apache-cassandra-2.1.1.jar:2.1.1] > at org.apache.cassandra.io.sstable.SSTableWriter.rawAppend(SSTableWriter.java:233) ~[apache-cassandra-2.1.1.jar:2.1.1] > at org.apache.cassandra.io.sstable.SSTableWriter.append(SSTableWriter.java:218) ~[apache-cassandra-2.1.1.jar:2.1.1] > at org.apache.cassandra.db.Memtable$FlushRunnable.writeSortedContents(Memtable.java:354) ~[apache-cassandra-2.1.1.jar:2.1.1] > at org.apache.cassandra.db.Memtable$FlushRunnable.runWith(Memtable.java:312) ~[apache-cassandra-2.1.1.jar:2.1.1] > at org.apache.cassandra.io.util.DiskAwareRunnable.runMayThrow(DiskAwareRunnable.java:48) ~[apache-cassandra-2.1.1.jar:2.1.1] > at org.apache.cassandra.utils.WrappedRunnable.run(WrappedRunnable.java:28) ~[apache-cassandra-2.1.1.jar:2.1.1] > at com.google.common.util.concurrent.MoreExecutors$SameThreadExecutorService.execute(MoreExecutors.java:297) ~[guava-16.0.jar:na] > at org.apache.cassandra.db.ColumnFamilyStore$Flush.run(ColumnFamilyStore.java:1053) ~[apache-cassandra-2.1.1.jar:2.1.1] > at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) ~[na:1.7.0_60] > at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) ~[na:1.7.0_60] > at java.lang.Thread.run(Thread.java:745) ~[na:1.7.0_60] > {code} -- This message was sent by Atlassian JIRA (v6.3.4#6332)