Use event-driven task distribution.
Use Green Threads via the eventlet module to execute the server tasks. So far, the only task is the Gearman worker. This is another step forward to being able to execute a Gearman client task. Change-Id: I4824753d3a3a07ad8ccf521a957efd41150b0752
This commit is contained in:
parent
c204b3d4e6
commit
fa2d870b09
@ -12,6 +12,9 @@
|
|||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
|
import eventlet
|
||||||
|
eventlet.monkey_patch()
|
||||||
|
|
||||||
import daemon
|
import daemon
|
||||||
import daemon.pidfile
|
import daemon.pidfile
|
||||||
import grp
|
import grp
|
||||||
@ -24,24 +27,32 @@ from libra.worker.drivers.base import known_drivers
|
|||||||
from libra.worker.drivers.haproxy.services_base import haproxy_services
|
from libra.worker.drivers.haproxy.services_base import haproxy_services
|
||||||
|
|
||||||
|
|
||||||
class Server(object):
|
class EventServer(object):
|
||||||
"""
|
"""
|
||||||
Encapsulates server activity so we can run it in either daemon or
|
Encapsulates server activity so we can run it in either daemon or
|
||||||
non-daemon mode.
|
non-daemon mode.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, logger, servers, reconnect_sleep):
|
def __init__(self, logger):
|
||||||
self.logger = logger
|
self.logger = logger
|
||||||
self.driver = None
|
|
||||||
self.servers = servers
|
|
||||||
self.reconnect_sleep = reconnect_sleep
|
|
||||||
|
|
||||||
def main(self):
|
def main(self, tasks):
|
||||||
""" Main method of the server. """
|
"""
|
||||||
config_manager(self.logger,
|
Main method of the server.
|
||||||
self.driver,
|
|
||||||
self.servers,
|
tasks
|
||||||
self.reconnect_sleep)
|
A tuple with two items: a function name, and a tuple with
|
||||||
|
that function's arguments.
|
||||||
|
"""
|
||||||
|
|
||||||
|
thread_list = []
|
||||||
|
|
||||||
|
for task, args in tasks:
|
||||||
|
thread_list.append(eventlet.spawn(task, *args))
|
||||||
|
|
||||||
|
for thd in thread_list:
|
||||||
|
thd.wait()
|
||||||
|
|
||||||
self.logger.info("Shutting down")
|
self.logger.info("Shutting down")
|
||||||
|
|
||||||
|
|
||||||
@ -98,11 +109,15 @@ def main():
|
|||||||
driver = driver_class()
|
driver = driver_class()
|
||||||
|
|
||||||
logger.info("Job server list: %s" % args.server)
|
logger.info("Job server list: %s" % args.server)
|
||||||
server = Server(logger, args.server, args.reconnect_sleep)
|
server = EventServer(logger)
|
||||||
server.driver = driver
|
|
||||||
|
# Tasks to execute in parallel
|
||||||
|
task_list = [
|
||||||
|
(config_manager, (logger, driver, args.server, args.reconnect_sleep))
|
||||||
|
]
|
||||||
|
|
||||||
if args.nodaemon:
|
if args.nodaemon:
|
||||||
server.main()
|
server.main(task_list)
|
||||||
else:
|
else:
|
||||||
context = daemon.DaemonContext(
|
context = daemon.DaemonContext(
|
||||||
working_directory='/etc/haproxy',
|
working_directory='/etc/haproxy',
|
||||||
@ -124,6 +139,6 @@ def main():
|
|||||||
return 1
|
return 1
|
||||||
|
|
||||||
with context:
|
with context:
|
||||||
server.main()
|
server.main(task_list)
|
||||||
|
|
||||||
return 0
|
return 0
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
eventlet
|
||||||
gearman
|
gearman
|
||||||
python-daemon
|
python-daemon
|
||||||
requests
|
requests
|
||||||
|
Loading…
x
Reference in New Issue
Block a user