Merge "Remove vbmc feature of starting up vbmcd"

This commit is contained in:
Zuul 2020-03-06 11:03:08 +00:00 committed by Gerrit Code Review
commit 9742c04208
3 changed files with 19 additions and 43 deletions

View File

@ -0,0 +1,6 @@
---
upgrade:
- |
Removes the backward compatibility feature of ``vbmc`` to automatically
start up ``vbmcd`` daemon process if it is not running. From now on,
``vbmcd`` should be started by systemd or some other mechanism.

View File

@ -13,7 +13,6 @@
import json import json
import logging import logging
import sys import sys
import time
from cliff.app import App from cliff.app import App
from cliff.command import Command from cliff.command import Command
@ -23,11 +22,9 @@ from cliff.lister import Lister
import zmq import zmq
import virtualbmc import virtualbmc
from virtualbmc.cmd import vbmcd
from virtualbmc import config as vbmc_config from virtualbmc import config as vbmc_config
from virtualbmc.exception import VirtualBMCError from virtualbmc.exception import VirtualBMCError
from virtualbmc import log from virtualbmc import log
from virtualbmc import utils
CONF = vbmc_config.get_config() CONF = vbmc_config.get_config()
@ -78,49 +75,22 @@ class ZmqClient(object):
poller = zmq.Poller() poller = zmq.Poller()
poller.register(socket, zmq.POLLIN) poller.register(socket, zmq.POLLIN)
while True: try:
try: socket.send(data_out.encode('utf-8'))
if data_out:
socket.send(data_out.encode('utf-8'))
socks = dict(poller.poll(timeout=self.SERVER_TIMEOUT)) socks = dict(poller.poll(timeout=self.SERVER_TIMEOUT))
if socket in socks and socks[socket] == zmq.POLLIN: if socket in socks and socks[socket] == zmq.POLLIN:
data_in = socket.recv() data_in = socket.recv()
break
else:
raise zmq.ZMQError( raise zmq.ZMQError(
zmq.RCVTIMEO, msg='Server response timed out') zmq.RCVTIMEO, msg='Server response timed out')
except zmq.ZMQError as ex: except zmq.ZMQError as ex:
LOG.debug('Server at %(port)s connection error: ' msg = ('Server at %(port)s connection error: '
'%(error)s', {'port': server_port, 'error': ex}) '%(error)s' % {'port': server_port, 'error': ex})
LOG.error(msg)
if no_daemon: raise VirtualBMCError(msg)
msg = ('Server at %(port)s may be dead, will not '
'try to revive it' % {'port': server_port})
LOG.error(msg)
raise VirtualBMCError(msg)
no_daemon = True
LOG.debug("Attempting to start `vbmcd` behind the "
"scenes. Consider configuring your system to "
"manage `vbmcd` via systemd. Automatic "
"`vbmcd` start up will be removed in the "
"future releases!")
# attempt to start and daemonize the server
with utils.detach_process() as pid:
if pid == 0:
# NOTE(etingof): this child will never return
vbmcd.main(['--foreground'])
# TODO(etingof): perform some more retries
time.sleep(CONF['default']['server_spawn_wait'] / 1000.)
# MQ will deliver the original message to the daemon
# we've started
data_out = {}
finally: finally:
if socket: if socket:

View File

@ -36,8 +36,8 @@ class VBMCTestCase(base.TestCase):
@mock.patch.object(zmq, 'Poller') @mock.patch.object(zmq, 'Poller')
def test_server_timeout(self, mock_zmq_poller, mock_zmq_context): def test_server_timeout(self, mock_zmq_poller, mock_zmq_context):
expected_rc = 1 expected_rc = 1
expected_output = ('Server at 50891 may be dead, ' expected_output = (
'will not try to revive it\n') 'Server at 50891 connection error: Server response timed out\n')
mock_zmq_poller = mock_zmq_poller.return_value mock_zmq_poller = mock_zmq_poller.return_value
mock_zmq_poller.poll.return_value = {} mock_zmq_poller.poll.return_value = {}