Saggi Mizrahi has uploaded a new change for review.

Change subject: Add multi-threading option to JsonRpcServer
......................................................................

Add multi-threading option to JsonRpcServer

Change-Id: I0a37dfcf3cfde92c8552e6c6eef5016efe3fbd6d
Signed-off-by: Saggi Mizrahi <[email protected]>
---
M vdsm_api/BindingJsonRpc.py
M vdsm_api/jsonrpc/__init__.py
2 files changed, 14 insertions(+), 3 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/74/10374/1

diff --git a/vdsm_api/BindingJsonRpc.py b/vdsm_api/BindingJsonRpc.py
index 645428e..11080b5 100644
--- a/vdsm_api/BindingJsonRpc.py
+++ b/vdsm_api/BindingJsonRpc.py
@@ -28,13 +28,19 @@
     pass
 
 
+def _simpleThreadFactory(func):
+    t = threading.Thread(target=func)
+    t.setDaemon(False)
+    t.start()
+
+
 class BindingJsonRpc(object):
     log = logging.getLogger('BindingJsonRpc')
 
     def __init__(self, bridge, backendConfig):
         reactors = []
         self.bridge = bridge
-        self.server = JsonRpcServer(bridge)
+        self.server = JsonRpcServer(bridge, _simpleThreadFactory)
         for backendType, cfg in backendConfig:
             if backendType == "tcp":
                 reactors.append(self._createTcpReactor(cfg))
diff --git a/vdsm_api/jsonrpc/__init__.py b/vdsm_api/jsonrpc/__init__.py
index 9463262..2ef6e36 100644
--- a/vdsm_api/jsonrpc/__init__.py
+++ b/vdsm_api/jsonrpc/__init__.py
@@ -15,6 +15,7 @@
 import json
 import logging
 from Queue import Queue
+from functools import partial
 
 __all__ = ["tcpReactor"]
 
@@ -93,9 +94,10 @@
 class JsonRpcServer(object):
     log = logging.getLogger("jsonrpc.JsonRpcServer")
 
-    def __init__(self, bridge):
+    def __init__(self, bridge, threadFactory=None):
         self._bridge = bridge
         self._workQueue = Queue()
+        self._threadFactory = threadFactory
 
     def _parseMessage(self, msg):
         try:
@@ -180,7 +182,10 @@
                 break
 
             if isinstance(obj, _JsonRpcRequest):
-                self._serveRequest(obj)
+                if self._threadFactory is None:
+                    self._serveRequest(obj)
+                else:
+                    self._threadFactory(partial(self._serveRequest, obj))
             else:
                 self._processResponse(obj)
 


--
To view, visit http://gerrit.ovirt.org/10374
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I0a37dfcf3cfde92c8552e6c6eef5016efe3fbd6d
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Saggi Mizrahi <[email protected]>
_______________________________________________
vdsm-patches mailing list
[email protected]
https://lists.fedorahosted.org/mailman/listinfo/vdsm-patches

Reply via email to