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