Skip to content

Instantly share code, notes, and snippets.

@overnin
Created April 20, 2012 07:05
Show Gist options
  • Select an option

  • Save overnin/2426748 to your computer and use it in GitHub Desktop.

Select an option

Save overnin/2426748 to your computer and use it in GitHub Desktop.
Issue when restarting a Vumi worker
#I get an exception when trying to dynamically restart a worker with the same name.
#In this case the worker is name 'simulator' and has transport_name ='simulator'.
#In the example below, the multiworker has to first stop the worker, then start a new one with the same mane.
#This request as send to the multiworker through control Messages (see in the log "Received control!")
==The Error==
2012-04-20 09:46:27+0300 [WorkerAMQClient,client] 'Unexpected error RuntimeError(u"cannot have two services with same name \'simulator\'",)'
==Logs==
2012-04-20 09:46:27+0300 [WorkerAMQClient,client] Received control! <Message payload="{u'worker_name': u'simulator', u'message_type': u'remove_worker'}">
2012-04-20 09:46:27+0300 [WorkerAMQClient,client] [simulator] Stoping Worker
2012-04-20 09:46:27+0300 [WorkerAMQClient,client] 'Queue has closed'
2012-04-20 09:46:27+0300 [WorkerAMQClient,client] 'Queue has closed'
2012-04-20 09:46:27+0300 [WorkerAMQClient,client] 'Queue has closed'
2012-04-20 09:46:27+0300 [WorkerAMQClient,client] Stopping factory <vumi.service.AmqpFactory instance at 0xa03154c>
2012-04-20 09:46:27+0300 [WorkerAMQClient,client] Received control! <Message payload="{u'worker_class': u'vusion.TtcGenericWorker', u'message_type': u'add_worker', u'worker_name': u'simulator', u'config': {u'application_name': u'simulator', u'transport_name': u'simulator', u'database_name': u'simulator', u'control_name': u'simulator', u'dispatcher_name': u'simulator.disptacher'}}">
2012-04-20 09:46:27+0300 [WorkerAMQClient,client] u'Control received: <Message payload="{u\'worker_class\': u\'vusion.TtcGenericWorker\', u\'message_type\': u\'add_worker\', u\'worker_name\': u\'simulator\', u\'config\': {u\'application_name\': \'simulator\', u\'transport_name\': \'simulator\', u\'database_name\': \'simulator\', u\'control_name\': \'simulator\', u\'dispatcher_name\': \'simulator.disptacher\'}}">'
2012-04-20 09:46:27+0300 [WorkerAMQClient,client] 'Unexpected error RuntimeError(u"cannot have two services with same name \'simulator\'",)'
20
==Code: multiworker (dynamically instanciating the TtcGenericWorker)==
@inlineCallbacks
def receive_control_message(self, msg):
log.debug('Received control! %s' % (msg,))
try:
if msg['message_type'] == 'add_worker':
if msg['worker_name'] in self.workers:
log.error('Cannot create worker, name already exist: %s'
% (msg['worker_name'],))
return
for key in msg['config'].keys():
msg['config'][key] = msg['config'][key].encode('utf-8')
self.config[msg['worker_name']] = msg['config']
worker = self.create_worker(msg['worker_name'],
msg['worker_class'])
self.workers[msg['worker_name']] = worker
if msg['message_type'] == 'remove_worker':
if not msg['worker_name'] in self.workers:
log.error('Cannot remove worker, name unknown: %s'
% (msg['worker_name']))
return
yield self.workers[msg['worker_name']].stopService()
self.workers.pop(msg['worker_name'])
except Exception as ex:
log.error("Control received: %s" % (msg))
log.error("Unexpected error %s" % repr(ex))
==Code: TtcGeneric worker==
def stopWorker(self):
self.log("Stoping Worker")
if self.sender:
self.sender.stop()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment