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