[Commits] Rev 3499: MDEV-3997: Querying a Cassandra table on a server with query cache enabled is likely to cause problems in file:///data0/psergey/dev2/10.0/

Sergey Petrunya psergey at askmonty.org
Mon Feb 4 08:14:21 EET 2013


At file:///data0/psergey/dev2/10.0/

------------------------------------------------------------
revno: 3499
revision-id: psergey at askmonty.org-20130204061420-xq39drhjw0hrj6i2
parent: psergey at askmonty.org-20130204052229-txtd59or730oeq36
committer: Sergey Petrunya <psergey at askmonty.org>
branch nick: 10.0
timestamp: Mon 2013-02-04 10:14:20 +0400
message:
  MDEV-3997: Querying a Cassandra table on a server with query cache enabled is likely to cause problems
  - Disable query cache for Cassandra tables.
=== added file 'mysql-test/suite/plugins/r/cassandra_qcache.result'
--- a/mysql-test/suite/plugins/r/cassandra_qcache.result	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/plugins/r/cassandra_qcache.result	2013-02-04 06:14:20 +0000
@@ -0,0 +1,16 @@
+drop table if exists t1, t2;
+create table t1 (rowkey int primary key, a int) engine=cassandra
+thrift_host='localhost' keyspace='mariadbtest2' column_family='cf1';
+create table t2 like t1;
+set global query_cache_size=1024*1024;
+select * from t1;
+rowkey	a
+insert into t2 values (1,1);
+select * from t1;
+rowkey	a
+1	1
+select sql_no_cache * from t1;
+rowkey	a
+1	1
+drop table t1,t2;
+set global QUERY_CACHE_SIZE=0;

=== added file 'mysql-test/suite/plugins/t/cassandra_qcache.opt'
--- a/mysql-test/suite/plugins/t/cassandra_qcache.opt	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/plugins/t/cassandra_qcache.opt	2013-02-04 06:14:20 +0000
@@ -0,0 +1,1 @@
+--plugin-load=$HA_CASSANDRA_SO --loose-cassandra=on

=== added file 'mysql-test/suite/plugins/t/cassandra_qcache.test'
--- a/mysql-test/suite/plugins/t/cassandra_qcache.test	1970-01-01 00:00:00 +0000
+++ b/mysql-test/suite/plugins/t/cassandra_qcache.test	2013-02-04 06:14:20 +0000
@@ -0,0 +1,59 @@
+#
+# Tests for cassandra storage engine
+#
+-- source include/have_query_cache.inc
+
+if (`SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.ENGINES WHERE engine = 'cassandra' AND support IN ('YES', 'DEFAULT', 'ENABLED')`)
+{
+  --skip Test requires Cassandra.
+}
+
+--disable_warnings
+drop table if exists t1, t2;
+--enable_warnings
+
+############################################################################
+## Cassandra initialization
+############################################################################
+
+# Step 1: remove the keyspace that could be left over from the previous test
+--remove_files_wildcard $MYSQLTEST_VARDIR cassandra_test_cleanup.cql
+--write_file $MYSQLTEST_VARDIR/cassandra_test_cleanup.cql
+drop keyspace mariadbtest2;
+EOF
+--error 0,1,2
+--system cqlsh -3 -f $MYSQLTEST_VARDIR/cassandra_test_cleanup.cql
+
+# Step 2: create new keyspace and test column families
+--remove_files_wildcard $MYSQLTEST_VARDIR cassandra_test_init.cql
+--write_file $MYSQLTEST_VARDIR/cassandra_test_init.cql
+
+CREATE KEYSPACE mariadbtest2
+  WITH strategy_class = 'org.apache.cassandra.locator.SimpleStrategy'
+  AND strategy_options:replication_factor='1';
+
+USE mariadbtest2;
+create columnfamily cf1 ( rowkey int primary key, a int );
+EOF
+
+--error 0,1,2
+--system cqlsh -3 -f $MYSQLTEST_VARDIR/cassandra_test_init.cql
+
+############################################################################
+## The test itsef:
+############################################################################
+
+create table t1 (rowkey int primary key, a int) engine=cassandra
+  thrift_host='localhost' keyspace='mariadbtest2' column_family='cf1';
+create table t2 like t1;
+
+set global query_cache_size=1024*1024;
+
+select * from t1;
+insert into t2 values (1,1);
+
+select * from t1;
+select sql_no_cache * from t1;
+
+drop table t1,t2;
+set global QUERY_CACHE_SIZE=0;

=== modified file 'storage/cassandra/ha_cassandra.h'
--- a/storage/cassandra/ha_cassandra.h	2013-01-31 08:48:19 +0000
+++ b/storage/cassandra/ha_cassandra.h	2013-02-04 06:14:20 +0000
@@ -272,4 +272,18 @@
 
   THR_LOCK_DATA **store_lock(THD *thd, THR_LOCK_DATA **to,
                              enum thr_lock_type lock_type);     ///< required
+
+  my_bool register_query_cache_table(THD *thd, char *table_key,
+                                     uint key_length,
+                                     qc_engine_callback
+                                     *engine_callback,
+                                     ulonglong *engine_data)
+  {
+    /* 
+      Do not put data from Cassandra tables into query cache (because there 
+      is no way to tell whether the data in cassandra cluster has changed or 
+      not)
+    */
+    return FALSE;
+  }
 };



More information about the commits mailing list