1#!/usr/bin/python3 2# Copyright 2017 Facebook 3# Licensed under the same terms as memcached itself. 4 5import argparse 6import socket 7import csv 8from time import sleep 9 10parser = argparse.ArgumentParser(description="daemon for emulating set/get pressure") 11parser.add_argument("--host", help="host to connect to", 12 type=str, default="localhost:11211") 13parser.add_argument("-s", "--sleep", help="seconds between rounds", 14 type=int, default="1") 15parser.add_argument("-c", "--config", help="load specification file", 16 type=str, default="./config") 17 18args = parser.parse_args() 19 20# prefix, size, count, do_gets 21with open(args.config, newline='') as f: 22 reader = csv.reader(f) 23 tests = [row for row in reader] 24 25host, port = args.host.split(':') 26 27c = socket.create_connection((host, port), 5) 28s = c.makefile(mode="rw", buffering=1) 29 30global_counter = 0 31 32while True: 33 # LATER: stat argument file 34 # LATER: reload arg file if necessary 35 for test in tests: 36 prefix = test[0] 37 size = int(test[1]) 38 count = int(test[2]) 39 do_gets = int(test[3]) 40 value = 'x'*size 41 # issue N 'noreply' sets per specified size 42 for i in range(count): 43 s.write('set {}{} 0 0 {} noreply\r\n{}\r\n'.format(prefix,global_counter,size,value)) 44 global_counter += 1 45 # TODO: issue N gets per specified size? 46 sleep(args.sleep) 47