Change in vdsm[master]: reactor: using single instance

piotr.kliczewski at gmail.com piotr.kliczewski at gmail.com
Thu Apr 23 10:04:54 UTC 2015


Piotr Kliczewski has uploaded a new change for review.

Change subject: reactor: using single instance
......................................................................

reactor: using single instance


Change-Id: I8f36ec36b91fcc46e1ab46eb92f9739e9e19e448
Signed-off-by: pkliczew <piotr.kliczewski at gmail.com>
---
M tests/jsonRpcHelper.py
M tests/protocoldetectorTests.py
M vdsm/clientIF.py
M vdsm/protocoldetector.py
4 files changed, 29 insertions(+), 16 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/70/40170/1

diff --git a/tests/jsonRpcHelper.py b/tests/jsonRpcHelper.py
index de0ee12..4abca18 100644
--- a/tests/jsonRpcHelper.py
+++ b/tests/jsonRpcHelper.py
@@ -27,6 +27,7 @@
 from itertools import product
 from M2Crypto import SSL
 from rpc.BindingXMLRPC import BindingXMLRPC, XmlDetector
+from yajsonrpc.betterAsyncore import Reactor
 from yajsonrpc.stompReactor import StompDetector, StompRpcClient, _FAKE_SUB_ID
 from protocoldetector import MultiProtocolAcceptor
 from rpc.BindingJsonRpc import BindingJsonRpc
@@ -59,7 +60,8 @@
 @contextmanager
 def constructAcceptor(log, ssl, jsonBridge):
     sslctx = DEAFAULT_SSL_CONTEXT if ssl else None
-    acceptor = MultiProtocolAcceptor("127.0.0.1", 0, sslctx)
+    reactor = Reactor()
+    acceptor = MultiProtocolAcceptor(reactor, "127.0.0.1", 0, sslctx)
     cif = FakeClientIf()
 
     xml_binding = BindingXMLRPC(cif, cif.log)
@@ -72,8 +74,10 @@
     stompDetector = StompDetector(json_binding)
     acceptor.add_detector(stompDetector)
 
-    thread = threading.Thread(target=acceptor.serve_forever,
-                              name='Detector thread')
+    thread = threading.Thread(
+        target=reactor.process_requests,
+        name='Detector thread',
+    )
     thread.setDaemon(True)
     thread.start()
 
diff --git a/tests/protocoldetectorTests.py b/tests/protocoldetectorTests.py
index 7d300dd..695bd76 100644
--- a/tests/protocoldetectorTests.py
+++ b/tests/protocoldetectorTests.py
@@ -25,6 +25,7 @@
 import time
 from contextlib import contextmanager
 
+from yajsonrpc.betterAsyncore import Reactor
 from vdsm import sslutils
 from protocoldetector import MultiProtocolAcceptor
 from sslhelper import KEY_FILE, CRT_FILE
@@ -199,13 +200,18 @@
     # Helpers
 
     def start_acceptor(self, use_ssl):
+        self.reactor = Reactor()
         self.acceptor = MultiProtocolAcceptor(
-            '127.0.0.1', 0, sslctx=self.SSLCTX if use_ssl else None)
+            self.reactor,
+            '127.0.0.1',
+            0,
+            sslctx=self.SSLCTX if use_ssl else None
+        )
         self.acceptor.TIMEOUT = 1
         self.acceptor.add_detector(Echo())
         self.acceptor.add_detector(Uppercase())
         self.acceptor_address = self.acceptor._acceptor.socket.getsockname()
-        t = threading.Thread(target=self.acceptor.serve_forever)
+        t = threading.Thread(target=self.reactor.process_requests)
         t.deamon = True
         t.start()
 
diff --git a/vdsm/clientIF.py b/vdsm/clientIF.py
index 2719101..0a4c12f 100644
--- a/vdsm/clientIF.py
+++ b/vdsm/clientIF.py
@@ -55,6 +55,8 @@
 except ImportError:
     _glusterEnabled = False
 
+from yajsonrpc.betterAsyncore import Reactor
+
 
 class clientIF(object):
     """
@@ -109,6 +111,7 @@
 
             host = config.get('addresses', 'management_ip')
             port = config.getint('addresses', 'management_port')
+            self._createReactor()
             self._createAcceptor(host, port)
             self._prepareXMLRPCBinding()
             self._prepareJSONRPCBinding()
@@ -166,10 +169,14 @@
                     cls._instance = clientIF(irs, log)
         return cls._instance
 
+    def _createReactor(self):
+        self._reactor = Reactor()
+
     def _createAcceptor(self, host, port):
         sslctx = self._createSSLContext()
 
-        self._acceptor = MultiProtocolAcceptor(host, port, sslctx)
+        self._acceptor = MultiProtocolAcceptor(self._reactor, host,
+                                               port, sslctx)
 
     def _createSSLContext(self):
         sslctx = None
@@ -236,6 +243,8 @@
             for binding in self.bindings.values():
                 binding.stop()
 
+            self._reactor.stop()
+
             self._enabled = False
             self.channelListener.stop()
             self._hostStats.stop()
@@ -253,8 +262,8 @@
     def start(self):
         for binding in self.bindings.values():
             binding.start()
-        self.thread = threading.Thread(target=self._acceptor.serve_forever,
-                                       name='Detector thread')
+        self.thread = threading.Thread(target=self._reactor.process_requests,
+                                       name='Reactor thread')
         self.thread.setDaemon(True)
         self.thread.start()
 
diff --git a/vdsm/protocoldetector.py b/vdsm/protocoldetector.py
index 97796fd..68972c6 100644
--- a/vdsm/protocoldetector.py
+++ b/vdsm/protocoldetector.py
@@ -21,9 +21,7 @@
 import logging
 import socket
 
-from vdsm.utils import traceback
 import vdsm.infra.filecontrol as filecontrol
-from yajsonrpc.betterAsyncore import Reactor
 
 from vdsm.utils import monotonic_time
 from vdsm.sslutils import SSLHandshakeDispatcher
@@ -161,13 +159,14 @@
 
     def __init__(
         self,
+        reactor,
         host,
         port,
         sslctx=None,
         ssl_hanshake_timeout=SSLHandshakeDispatcher.SSL_HANDSHAKE_TIMEOUT,
     ):
         self._sslctx = sslctx
-        self._reactor = Reactor()
+        self._reactor = reactor
         sock = _create_socket(host, port)
         self._host, self._port = sock.getsockname()
         self.log.info("Listening at %s:%d", self._host, self._port)
@@ -195,11 +194,6 @@
         )
 
         return dispatcher
-
-    @traceback(on=log.name)
-    def serve_forever(self):
-        self.log.debug("Running")
-        self._reactor.process_requests()
 
     def add_detector(self, detector):
         self.log.debug("Adding detector %s", detector)


-- 
To view, visit https://gerrit.ovirt.org/40170
To unsubscribe, visit https://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I8f36ec36b91fcc46e1ab46eb92f9739e9e19e448
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Piotr Kliczewski <piotr.kliczewski at gmail.com>


More information about the vdsm-patches mailing list