File: memcached.test

package info (click to toggle)
tarantool 1.5.2.20.g5f5d924-2
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 26,568 kB
  • ctags: 18,697
  • sloc: ansic: 109,092; sh: 21,312; cpp: 20,633; xml: 9,666; asm: 2,488; python: 2,195; java: 1,759; perl: 1,002; makefile: 679
file content (106 lines) | stat: -rw-r--r-- 3,378 bytes parent folder | download | duplicates (2)
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
# encoding: tarantool
import os
import sys
import time
import yaml

from lib.memcached_connection import MemcachedConnection
from lib.tarantool_server import TarantoolServer

sonet = """The expense of spirit
in a waste of shame
Is lust in action;
and till action, lust""".split('\n')

master = server
master_memcached = master.memcached

replica = TarantoolServer()
replica.deploy("replication/cfg/replica.cfg",
           replica.find_exe(self.args.builddir),
           os.path.join(self.args.vardir, "replica"))
replica_memcached = replica.memcached

###################################
def get_lsn(serv):
    serv_admin = serv.admin
    resp = exec serv_admin silent "lua box.info.lsn"
    return yaml.load(resp)[0]

def wait(serv_master = master, serv_replica = replica):
    lsn = get_lsn(serv_master)
    serv_replica.wait_lsn(lsn)
    return lsn

def get_memcached_len(serv):
    serv_admin = serv.admin
    resp = exec serv_admin silent "lua box.space[box.cfg.memcached_space]:len()"
    return yaml.load(resp)[0]

def wait_for_empty_space(serv):
    serv_admin = serv.admin
    while True:
        if get_memcached_len(serv) == 0:
            return
        time.sleep(0.01)

###################################

print """# set initial k-v pairs"""
for i in xrange(10):
    exec master_memcached silent "set %d 0 0 5\r\ngood%d\r\n" % (i, i)

print """# wait and get last k-v pair from replica"""
wait()
exec replica_memcached "get 9\r\n"

print """# make multiple cnanges with master"""
answer = exec master_memcached silent "gets 9\r\n"
cas = int(answer.split()[4])
exec master_memcached silent "append 1 0 0 3\r\nafk\r\n"
exec master_memcached silent "prepend 2 0 0 3\r\nkfa\r\n"
exec master_memcached silent "set 3 0 0 2\r\n80\r\n"
exec master_memcached silent "set 4 0 0 2\r\n60\r\n"
exec master_memcached silent "delete 6\r\n"
exec master_memcached silent "replace 7 0 0 %d\r\n%s\r\n" % (len(sonet[0]), sonet[0])
exec master_memcached silent "replace 8 0 0 %d\r\n%s\r\n" % (len(sonet[1]), sonet[1])
exec master_memcached silent "cas 9 0 0 %d %d\r\n%s\r\n" % (len(sonet[2]), cas, sonet[2])
exec master_memcached silent "add 10 0 0 %d\r\n%s\r\n" % (len(sonet[3]), sonet[3])
exec master_memcached silent "incr 3 15\r\n"
exec master_memcached silent "decr 4 15\r\n"

print """# wait and get k-v's from replicas"""
wait()
exec replica_memcached "get 1 2 3 4 5 7 8 9 10\r\n"

print """# get deleted value"""
exec replica_memcached "get 6\r\n"

print """# flush all k-v on master and try to get them from replica"""
exec master_memcached silent "flush_all\r\n"
wait_for_empty_space(replica)
exec replica_memcached "get 10\r\n"


print """# check that expiration is working properly on replica"""
exec master_memcached silent "set 1 0 1 %d\r\n%s\r\n" % (len(sonet[0]), sonet[0])
lsn = wait()
exec replica_memcached "get 1\r\n"
replica.wait_lsn(lsn + 1)
exec replica_memcached "get 1\r\n"

print """# check that expiration is working properly, when replica becomes master"""
exec master_memcached silent "set 1 0 1 %d\r\n%s\r\n" % (len(sonet[0]), sonet[0])
lsn = wait()
replica.reconfigure("replication/cfg/replica_to_master.cfg")
exec replica_memcached "get 1\r\n"
replica.wait_lsn(lsn + 1)
exec replica_memcached "get 1\r\n"


# restore default suite config
replica.stop()
replica.cleanup(True)
master.stop()
master.deploy(self.suite_ini["config"])
# vim: syntax=python