Skip to content

Commit

Permalink
add retry in zmqrpc
Browse files Browse the repository at this point in the history
  • Loading branch information
delulu committed Mar 5, 2019
1 parent 288ccf5 commit 67db43a
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 2 deletions.
8 changes: 6 additions & 2 deletions locust/rpc/zmqrpc.py
Original file line number Diff line number Diff line change
@@ -1,24 +1,28 @@
import zmq.green as zmq

from .protocol import Message

from locust.util.exception_handler import retry

class BaseSocket(object):
def __init__(self, sock_type):
context = zmq.Context()
self.socket = context.socket(sock_type)


@retry()
def send(self, msg):
self.socket.send(msg.serialize())

@retry()
def send_to_client(self, msg):
self.socket.send_multipart([msg.node_id.encode(), msg.serialize()])

@retry()
def recv(self):
data = self.socket.recv()
msg = Message.unserialize(data)
return msg

@retry()
def recv_from_client(self):
data = self.socket.recv_multipart()
addr = data[0]
Expand Down
23 changes: 23 additions & 0 deletions locust/util/exception_handler.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import logging
from time import sleep

logger = logging.getLogger(__name__)

def retry(delays=(1, 3, 5),
exception=Exception):
def decorator(function):
def wrapper(*args, **kwargs):
cnt = 0
for delay in delays + (None,):
try:
return function(*args, **kwargs)
except exception:
if delay is None:
logger.info("Retry failed after %d times." % ( cnt ) )
raise
else:
cnt += 1
logger.info("Exception found on retry %d: -- retry after %ds" % ( cnt, delay ) )
sleep(delay)
return wrapper
return decorator

0 comments on commit 67db43a

Please sign in to comment.