redis-shake工具
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

80 lines
1.6 KiB

import time
import pybbt as p
import helpers as h
def test(src, dst):
cross_slots_cmd = not (src.is_cluster() or dst.is_cluster())
inserter = h.DataInserter()
inserter.add_data(src, cross_slots_cmd=cross_slots_cmd)
p.ASSERT_TRUE(src.do("save"))
opts = h.ShakeOpts.create_sync_opts(src, dst)
p.log(f"opts: {opts}")
shake = h.Shake(opts)
# wait sync done
p.ASSERT_TRUE_TIMEOUT(lambda: shake.is_consistent(), timeout=10)
# add data again
inserter.add_data(src, cross_slots_cmd=cross_slots_cmd)
# wait sync done
p.ASSERT_TRUE_TIMEOUT(lambda: shake.is_consistent())
p.log(shake.get_status())
time.sleep(5)
# check data
inserter.check_data(src, cross_slots_cmd=cross_slots_cmd)
inserter.check_data(dst, cross_slots_cmd=cross_slots_cmd)
p.ASSERT_EQ(src.dbsize(), dst.dbsize())
@p.subcase()
def standalone_to_standalone():
src = h.Redis()
dst = h.Redis()
test(src, dst)
@p.subcase()
def standalone_to_cluster():
if h.REDIS_SERVER_VERSION < 3.0:
return
src = h.Redis()
dst = h.Cluster()
test(src, dst)
@p.subcase()
def cluster_to_standalone():
if h.REDIS_SERVER_VERSION < 3.0:
return
src = h.Cluster()
dst = h.Redis()
test(src, dst)
@p.subcase()
def cluster_to_cluster():
if h.REDIS_SERVER_VERSION < 3.0:
return
src = h.Cluster()
dst = h.Cluster()
test(src, dst)
@p.case(tags=["sync"])
def main():
standalone_to_standalone()
standalone_to_cluster()
cluster_to_standalone()
cluster_to_cluster()
if __name__ == '__main__':
main()