added task broadcasting for workers within a group

This commit is contained in:
Francisco Ribeiro
2018-05-09 04:45:08 +01:00
committed by Francisco Ribeiro
parent 7aafd05cbb
commit 32eb1bc27d
+26
View File
@@ -804,6 +804,7 @@ class Scheduler(MetaScheduler):
Field('group_name', default='main'), Field('group_name', default='main'),
Field('status', requires=IS_IN_SET(TASK_STATUS), Field('status', requires=IS_IN_SET(TASK_STATUS),
default=QUEUED, writable=False), default=QUEUED, writable=False),
Field('broadcast', 'boolean', default=False),
Field('function_name', Field('function_name',
requires=IS_IN_SET(sorted(self.tasks.keys())) requires=IS_IN_SET(sorted(self.tasks.keys()))
if self.tasks else DEFAULT), if self.tasks else DEFAULT),
@@ -1358,6 +1359,31 @@ class Scheduler(MetaScheduler):
gname = task.group_name gname = task.group_name
ws = wkgroups.get(gname) ws = wkgroups.get(gname)
if ws: if ws:
if task.broadcast:
for worker in ws['workers']:
new_task = db.scheduler_task.insert(
application_name = task.application_name,
task_name = task.task_name,
group_name = task.group_name,
status = ASSIGNED,
broadcast = False,
function_name = task.function_name,
args = task.args,
start_time = now,
repeats = 1,
retry_failed = task.retry_failed,
sync_output = task.sync_output,
assigned_worker_name = worker['name'])
if task.period:
next_run_time = now+datetime.timedelta(seconds=task.period)
else:
# must be cronline
raise NotImplementedError
db(st.id == task.id).update(times_run=task.times_run+1,
next_run_time=next_run_time,
last_run_time=now)
db.commit()
else:
counter = 0 counter = 0
myw = 0 myw = 0
for i, w in enumerate(ws['workers']): for i, w in enumerate(ws['workers']):