From a2825885849a585a4ce468c8220c8535295dee3f Mon Sep 17 00:00:00 2001 From: Pawel Wodkowski Date: Thu, 6 Dec 2018 16:55:19 +0100 Subject: [PATCH] scripts/rpc: support sending multiple requests This will allow testing notifications code where user will most likely issue many requests and socket buffereing might just squash them into one packet. Note that multiple requests are not send in batch mode. Change-Id: Icfa4bfe21ff1268796bc41cf0443737f260b6040 Signed-off-by: Pawel Wodkowski Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/436529 Tested-by: SPDK CI Jenkins Reviewed-by: Ben Walker Reviewed-by: Jim Harris --- scripts/rpc/client.py | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/scripts/rpc/client.py b/scripts/rpc/client.py index c90fc185a..967ea7849 100644 --- a/scripts/rpc/client.py +++ b/scripts/rpc/client.py @@ -3,6 +3,7 @@ import socket import time import os import logging +import copy def print_dict(d): @@ -64,7 +65,7 @@ class JSONRPCClient(object): if getattr(self, "sock", None): self.sock.close() - def send(self, method, params=None): + def add_request(self, method, params): self._request_id += 1 req = { 'jsonrpc': '2.0', @@ -73,12 +74,22 @@ class JSONRPCClient(object): } if params: - req['params'] = params + req['params'] = copy.deepcopy(params) - reqstr = json.dumps(req, indent=2) - self._logger.info("request:\n%s\n", reqstr) + self._logger.debug("append request:\n%s\n", json.dumps(req)) + self._reqs.append(req) + + def flush(self): + self._logger.debug("Flushing buffer") + # TODO: We can drop indent parameter + reqstr = "\n".join(json.dumps(req, indent=2) for req in self._reqs) + self._reqs = [] + self._logger.info("Requests:\n%s\n", reqstr) self.sock.sendall(reqstr.encode("utf-8")) - return req + + def send(self, method, params=None): + self.add_request(method, params) + self.flush() def decode_one_response(self): try: