104 lines
3.3 KiB
Plaintext
104 lines
3.3 KiB
Plaintext
# Bug #29539701 MEMCACHED PLUGIN WITH MULTI-COLUMN PRIMARY INDEX CAUSES CRASH
|
|
# This scenario demonstrates a bug in handling a partial rollback (undo) of
|
|
# row insert when it violates uniqueness constraint.
|
|
|
|
source include/not_valgrind.inc;
|
|
source include/have_memcached_plugin.inc;
|
|
source include/not_windows.inc;
|
|
|
|
--disable_query_log
|
|
CALL mtr.add_suppression("daemon-memcached-w-batch-size': unsigned");
|
|
CALL mtr.add_suppression("Could not obtain server's UPN to be used as target service name");
|
|
CALL mtr.add_suppression("Warning: MySQL is trying to drop");
|
|
--enable_query_log
|
|
|
|
--enable_connect_log
|
|
SET @transaction_isolation= @@global.transaction_isolation;
|
|
SET GLOBAL TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
|
|
|
|
# Create the memcached tables
|
|
--disable_query_log
|
|
source include/memcache_config.inc;
|
|
--enable_query_log
|
|
|
|
INSERT INTO cache_policies VALUES("cache_policy", "innodb_only",
|
|
"innodb_only", "innodb_only", "innodb_only");
|
|
|
|
INSERT INTO config_options VALUES("separator", "|");
|
|
INSERT INTO config_options VALUES("table_map_delimiter", ".");
|
|
|
|
# describe table for memcache
|
|
|
|
# It seems crucial to reproduce the bug that we need more than one description
|
|
# (probably because otherwise we keep reusing some connection/settings instead of
|
|
# creating new one for @@desct15 ?)
|
|
|
|
INSERT INTO containers VALUES ("desct11", "test", "t1",
|
|
"c1", "c2,c21,c22,c23,c24,c25,c26,c27", "c3", "c4", "c5",
|
|
"PRIMARY");
|
|
INSERT INTO containers VALUES ("desct15", "test", "t1",
|
|
"c23", "c1,c21,c22,c24", "c3", "c4", "c5", "i15");
|
|
|
|
USE test;
|
|
|
|
--disable_warnings
|
|
DROP TABLE IF EXISTS t1,t2;
|
|
--enable_warnings
|
|
CREATE TABLE t1 (c1 VARCHAR(32),
|
|
c2 VARCHAR(512),
|
|
c21 VARCHAR(767),
|
|
c22 VARCHAR(512),
|
|
c23 VARCHAR(128),
|
|
c24 VARCHAR(24),
|
|
c25 VARCHAR(512),
|
|
c26 VARCHAR(128),
|
|
c27 VARCHAR(128),
|
|
c3 INT, c4 BIGINT UNSIGNED, c5 INT, primary key(c1))
|
|
ENGINE = INNODB;
|
|
|
|
INSERT INTO t1 VALUES ('D','Duesseldorf','City','98765','Hafen','1','A','a','Z',0,0,0);
|
|
INSERT INTO t1 VALUES ('O','Oldenburg','Mitte','87654','Deich','2','B','b','Y',0,0,0);
|
|
INSERT INTO t1 VALUES ('K','Koeln','West','76543','Rhein','3','C','c','X',0,0,0);
|
|
INSERT INTO t1 VALUES ('S','Stuttgart','Nord','65432','Fernsehturm','4','D','d','U',0,0,0);
|
|
|
|
CREATE UNIQUE INDEX i15 ON t1(c23);
|
|
CREATE UNIQUE INDEX u24 ON t1(c24);
|
|
|
|
# Tables must exist before plugin can be started!
|
|
--let $memcached_address=127.0.0.1:11298
|
|
--source ../include/load_daemon_memcached_expecting_success.inc
|
|
|
|
--sorted_result
|
|
SELECT c1,c2,c21,c22,c23,c24,c25,c26,c27 FROM t1;
|
|
|
|
perl;
|
|
use DBI;
|
|
use Cache::Memcached;
|
|
my $memd = new Cache::Memcached {
|
|
'servers' => [ "127.0.0.1:11298" ],
|
|
'connect_timeout' => 20,
|
|
'select_timeout' => 20
|
|
};
|
|
print "Here are the memcached results after set in desct15:\n";
|
|
$val = $memd->set('@@desct15.Zebra',"u1|u2|u3|u4");
|
|
$val = $memd->get("\@\@desct15.Zebra");
|
|
if ($val) { print "$val\n"; }
|
|
$val = $memd->set('@@desct15.Leopard',"v1|v2|v3|u4");
|
|
$val = $memd->get("\@\@desct15.Leopard");
|
|
if ($val) { print "$val\n"; }
|
|
$memd->disconnect_all;
|
|
EOF
|
|
|
|
--sorted_result
|
|
SELECT c1,c2,c21,c22,c23,c24,c25,c26,c27 FROM t1;
|
|
|
|
--sorted_result
|
|
SELECT c1,c2,c21,c22,c23,c24,c25,c26,c27 FROM t1;
|
|
|
|
DROP TABLE t1;
|
|
|
|
UNINSTALL PLUGIN daemon_memcached;
|
|
DROP DATABASE innodb_memcache;
|
|
|
|
SET @@global.transaction_isolation= @transaction_isolation;
|