Commit a2825885 authored by Pawel Wodkowski's avatar Pawel Wodkowski Committed by Jim Harris
Browse files

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: default avatarPawel Wodkowski <pawelx.wodkowski@intel.com>
Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/436529


Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarBen Walker <benjamin.walker@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
parent 27cc63ec
Loading
Loading
Loading
Loading
+16 −5
Original line number Diff line number Diff line
@@ -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)

        self._logger.debug("append request:\n%s\n", json.dumps(req))
        self._reqs.append(req)

        reqstr = json.dumps(req,  indent=2)
        self._logger.info("request:\n%s\n", reqstr)
    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: