More code reorg: move Gearman code to worker.py

Move the Gearman code used by the worker out of main.py and into
worker.py where it belongs.

Change-Id: Ied1e32034e7c2f497fcc6c183fc6c5f48cc08129
This commit is contained in:
David Shrewsbury
2012-11-02 16:35:29 -04:00
parent ff97e0c82a
commit d0bce05abd
2 changed files with 42 additions and 36 deletions

View File

@@ -14,26 +14,16 @@
import daemon
import daemon.pidfile
import gearman.errors
import grp
import pwd
import socket
from time import sleep
from libra.openstack.common import importutils
from libra.common.json_gearman import JSONGearmanWorker
from libra.common.options import Options, setup_logging
from libra.worker.worker import config_manager
from libra.worker.drivers.base import known_drivers
from libra.worker.drivers.haproxy.services_base import haproxy_services
class CustomJSONGearmanWorker(JSONGearmanWorker):
""" Custom class we will use to pass arguments to the Gearman task. """
logger = None
driver = None
class Server(object):
"""
Encapsulates server activity so we can run it in either daemon or
@@ -48,31 +38,10 @@ class Server(object):
def main(self):
""" Main method of the server. """
my_ip = socket.gethostbyname(socket.gethostname())
task_name = "lbaas-%s" % my_ip
self.logger.info("Registering task %s" % task_name)
worker = CustomJSONGearmanWorker(self.servers)
worker.set_client_id(my_ip)
worker.register_task(task_name, config_manager)
worker.logger = self.logger
worker.driver = self.driver
retry = True
while (retry):
try:
worker.work()
except KeyboardInterrupt:
retry = False
except gearman.errors.ServerUnavailable:
self.logger.error("Job server(s) went away. Reconnecting.")
sleep(self.reconnect_sleep)
retry = True
except Exception as e:
self.logger.critical("Exception: %s, %s" % (e.__class__, e))
retry = False
config_manager(self.logger,
self.driver,
self.servers,
self.reconnect_sleep)
self.logger.info("Shutting down")

View File

@@ -12,12 +12,22 @@
# License for the specific language governing permissions and limitations
# under the License.
import gearman.errors
import json
import socket
import time
from libra.common.json_gearman import JSONGearmanWorker
from libra.worker.controller import LBaaSController
def config_manager(worker, job):
class CustomJSONGearmanWorker(JSONGearmanWorker):
""" Custom class we will use to pass arguments to the Gearman task. """
logger = None
driver = None
def handler(worker, job):
"""
Main Gearman worker task.
@@ -36,3 +46,30 @@ def config_manager(worker, job):
logger.debug("Return JSON message: %s" % json.dumps(response, indent=4))
return response
def config_manager(logger, driver, servers, reconnect_sleep):
my_ip = socket.gethostbyname(socket.gethostname())
task_name = "lbaas-%s" % my_ip
logger.info("Registering task %s" % task_name)
worker = CustomJSONGearmanWorker(servers)
worker.set_client_id(my_ip)
worker.register_task(task_name, handler)
worker.logger = logger
worker.driver = driver
retry = True
while (retry):
try:
worker.work()
except KeyboardInterrupt:
retry = False
except gearman.errors.ServerUnavailable:
logger.error("Job server(s) went away. Reconnecting.")
time.sleep(reconnect_sleep)
retry = True
except Exception as e:
logger.critical("Exception: %s, %s" % (e.__class__, e))
retry = False