polardbxengine/mysql-test/suite/memcached/t/memc299_undo_mod.test

107 lines
3.4 KiB
Plaintext

# Bug #29539701 MEMCACHED PLUGIN WITH MULTI-COLUMN PRIMARY INDEX CAUSES CRASH
# This scenario emonstrates a bug in handling a partial rollback (undo) of
# row update 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:11299
--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:11299" ],
'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|v4");
$val = $memd->get("\@\@desct15.Leopard");
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;