1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177
|
# *********************************************************
# The aim of this testcase is to test the functionality
# of the multiple get functionality
# case 1: be able to get correct value from mutliple get
# case 2: If there is no corresponding value for a key
# should not affect the other values in fetching
# case 3: No support for switch between the tables
# *********************************************************
source include/not_valgrind.inc;
source include/have_memcached_plugin.inc;
source include/not_windows.inc;
# This testcase fails sporadiaclly with these options --big,--parallel=8,--repeat=30 --retry=0
# Due to some bug in the get_multi, variable unbale to clean up,following is the failure snippet
# @@desc_t2.DD => DELHIDELHIDELHIDELHIDELHIDELHIDELHIDELHIDELHIDELHI0DAHARDAHARDAHARDAHARDAHARDAHARDAHARDAHARDAHARDAHAR
# Tried with un-initialize variables , but still fails ,hence skipping
#--source include/not_parallel.inc
# 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", "0");
# describe table for memcache
INSERT INTO containers VALUES ("desc_t1", "test", "t1", "c1", "c2,
c21,c22,c23,c24,c25", "c3", "c4", "c5", "PRIMARY");
INSERT INTO containers VALUES ("desc_t2", "test", "t2", "c1",
"c2,c3", "c4", "c5", "c6", "PRIMARY");
USE test;
--disable_warnings
DROP TABLE IF EXISTS t1;
DROP TABLE IF EXISTS t2;
--enable_warnings
CREATE TABLE t1 (c1 VARCHAR(32),c2 VARCHAR(40),c21 VARCHAR(40),c22 VARCHAR(40),
c23 VARCHAR(40),c24 VARCHAR(40),c25 VARCHAR(40),c3 INT, c4 BIGINT UNSIGNED, c5 INT, primary key(c1))
ENGINE = INNODB;
INSERT INTO t1 VALUES ('D', 'Darmstadt', 'City','1', 'dddddddddddddd', '1234', '2012', 0, 0, 0);
INSERT INTO t1 VALUES ('B', 'Berlin', 'Mitte', '2', 'bbbbbbbbbbbbbb', '2345', '2012', 0, 0, 0);
INSERT INTO t1 VALUES ('C', 'Cottbus', 'West', '3', 'cccccccccccccc', '3456', '2012', 0, 0 ,0);
INSERT INTO t1 VALUES ('H', 'Hamburg', 'Norderstedt', '4', 'hhhhhhhhhh', '4567', '2012', 0, 0, 0);
INSERT INTO t1 VALUES ('N', NULL, NULL, NULL, NULL, NULL, '2012', 0, 0, 0);
CREATE TABLE t2(c1 VARCHAR(32),c2 VARCHAR(1024),c3 VARCHAR(1024),
c4 INT, c5 BIGINT UNSIGNED, c6 INT, primary key(c1)) ENGINE=InnoDB;
INSERT INTO t2 VALUES ('DD','DELHI','DAHAR', 0, 0, 0);
INSERT INTO t2 VALUES ('BB','BOMBAY', 'BANGALORE', 0, 0, 0);
INSERT INTO t2 VALUES ('CC','CALICUTT','CHENNAI', 0, 0 ,0);
INSERT INTO t2 VALUES ('HH','HYDERABAD','HOSPET', 0, 0, 0);
# Tables must exist before plugin can be started!
--let $memcached_address=127.0.0.1:11294
--source ../include/load_daemon_memcached_expecting_success.inc
--sorted_result
SELECT c1,c2,c21,c22,c23,c24,c25 FROM t1;
--echo # case 1: Fetch results for all Keys
perl;
use DBI;
use Cache::Memcached;
use Data::Dumper;
my $memd = new Cache::Memcached {
'servers' => [ "127.0.0.1:11294" ],
'connect_timeout' => 20,
'select_timeout' => 20
};
@keys = qw( D B C H D B C H N );
print "Here are the memcached results with @keys:\n";
my $val = $memd->get_multi(@keys);
foreach my $item (sort keys %$val) {
if (defined $item && exists $val->{$item} ) {
print "$item => $val->{$item}\n";
}
delete $val->{$item};
undef $val->{$item};
}
$memd->disconnect_all;
EOF
SELECT SLEEP(2);
--sorted_result
SELECT c1,c2,c21,c22,c23,c24,c25 FROM t1;
--echo # case 2: Fetch results, when no values are exist for some keys
perl;
use DBI;
use Cache::Memcached;
my $memd = new Cache::Memcached {
'servers' => [ "127.0.0.1:11294" ],
'connect_timeout' => 20,
'select_timeout' => 20
};
@keys = qw( D B C H I J K L M N O P NULL Q R S T U V X Y Z A D B C H );
print "Here are the memcached results with @keys:\n";
my $val = $memd->get_multi(@keys);
foreach my $item (sort keys %$val) {
if (defined $item && exists $val->{$item} ) {
print "$item => $val->{$item}\n";
}
delete $val->{$item};
undef $val->{$item};
}
$memd->disconnect_all;
EOF
SELECT SLEEP(2);
--sorted_result
SELECT c1,c2,c3 FROM t2;
--echo # case 3: No support switch between the tables t2 and t1
--echo # Here it shows the results of table t2 and not for t1
perl;
use DBI;
use Cache::Memcached;
my $memd = new Cache::Memcached {
'servers' => [ "127.0.0.1:11294" ],
'connect_timeout' => 20,
'select_timeout' => 20
};
@keys = qw( @@desc_t2.DD @@desc_t2.BB @@desc_t2.CC @@desc_t1.c @@desc_t2.HH @@desc_t1.H );
print "Here are the memcached results with @keys:\n";
my $val = $memd->get_multi(@keys);
foreach my $item (sort keys %$val) {
if (defined $item && exists $val->{$item} ) {
print "$item => $val->{$item}\n";
}
delete $val->{$item};
undef $val->{$item};
}
$memd->disconnect_all;
EOF
SELECT SLEEP(2);
--sorted_result
SELECT c1,c2,c21,c22,c23,c24,c25 FROM t1;
# Temporary quote out due to instability
#perl;
#use DBI;
#use Cache::Memcached;
#my $memd = new Cache::Memcached {
# 'servers' => [ "127.0.0.1:11294" ],
# 'connect_timeout' => 20,
# 'select_timeout' => 20
#};
#print "Test No support for Multiple range get :\n";
#$val = $memd->get('@@desc_t1');
#if ($val) { print "$val\n"; }
#$val = $memd->get('@1 @@ @^ @? / @=D @=C');
#if ($val) { print "$val\n"; }
#$val = $memd->get('@<D @>D @>=D@<=N @>D @<N');
#if ($val) { print "$val\n"; }
#$memd->disconnect_all;
#EOF
#SELECT SLEEP(2);
DROP TABLE t1;
DROP TABLE t2;
UNINSTALL PLUGIN daemon_memcached;
DROP DATABASE innodb_memcache;
|