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
|