streamline hub calls
This commit is contained in:
parent
fbb24d631d
commit
f8c633f310
3 changed files with 33 additions and 14 deletions
|
|
@ -1039,8 +1039,7 @@ class TaskManager(object):
|
||||||
|
|
||||||
def getNextTask(self):
|
def getNextTask(self):
|
||||||
self.ready = self.readyForTask()
|
self.ready = self.readyForTask()
|
||||||
self.session.host.updateHost(self.task_load, self.ready)
|
self.session.host.updateHost(self.task_load, self.ready, data=self._get_host_data())
|
||||||
self.session.host.setHostData(json.dumps(self._get_host_data()))
|
|
||||||
if not self.ready:
|
if not self.ready:
|
||||||
self.logger.info("Not ready for task")
|
self.logger.info("Not ready for task")
|
||||||
return False
|
return False
|
||||||
|
|
|
||||||
|
|
@ -14704,10 +14704,19 @@ class HostExports(object):
|
||||||
host.verify()
|
host.verify()
|
||||||
return host.id
|
return host.id
|
||||||
|
|
||||||
def updateHost(self, task_load, ready):
|
def updateHost(self, task_load, ready, data=None):
|
||||||
|
"""Update host data
|
||||||
|
|
||||||
|
:param float task_load: current task load
|
||||||
|
:param bool ready: whether the host is ready to take a task
|
||||||
|
:param dict data: data for the scheduler
|
||||||
|
|
||||||
|
"""
|
||||||
host = Host()
|
host = Host()
|
||||||
host.verify()
|
host.verify()
|
||||||
host.updateHost(task_load, ready)
|
host.updateHost(task_load, ready)
|
||||||
|
if data is not None:
|
||||||
|
scheduler.set_host_data(host.id, data)
|
||||||
|
|
||||||
def getLoadData(self):
|
def getLoadData(self):
|
||||||
host = Host()
|
host = Host()
|
||||||
|
|
@ -14761,21 +14770,21 @@ class HostExports(object):
|
||||||
return task.setWeight(weight)
|
return task.setWeight(weight)
|
||||||
|
|
||||||
def setHostData(self, hostdata):
|
def setHostData(self, hostdata):
|
||||||
"""Builder will update all its resources
|
"""Provide host data for the scheduler
|
||||||
|
|
||||||
Initial implementation contains:
|
:param dict hostdata: host data
|
||||||
- available task methods
|
|
||||||
- maxjobs
|
For backwards compatibility, we also accept hostdata as a string containing a
|
||||||
- host readiness
|
json-encoded dictionary.
|
||||||
"""
|
"""
|
||||||
host = Host()
|
host = Host()
|
||||||
host.verify()
|
host.verify()
|
||||||
upsert = UpsertProcessor(
|
if isinstance(hostdata, str):
|
||||||
table='scheduler_host_data',
|
# for backwards compatibility
|
||||||
keys=['host_id'],
|
data = json.loads(hostdata)
|
||||||
data={'host_id': host.id, 'data': hostdata},
|
else:
|
||||||
)
|
data = hostdata
|
||||||
upsert.execute()
|
scheduler.set_host_data(host.id, hostdata)
|
||||||
|
|
||||||
def getTasks(self):
|
def getTasks(self):
|
||||||
host = Host()
|
host = Host()
|
||||||
|
|
|
||||||
|
|
@ -153,6 +153,17 @@ def get_host_data(hostID=None):
|
||||||
return query.execute()
|
return query.execute()
|
||||||
|
|
||||||
|
|
||||||
|
def set_host_data(hostID, data):
|
||||||
|
if not isinstance(data, dict):
|
||||||
|
raise koji.ParameterError('Host data should be a dictionary')
|
||||||
|
upsert = UpsertProcessor(
|
||||||
|
table='scheduler_host_data',
|
||||||
|
keys=['host_id'],
|
||||||
|
data={'host_id': hostID, 'data': json.dumps(data)},
|
||||||
|
)
|
||||||
|
upsert.execute()
|
||||||
|
|
||||||
|
|
||||||
class TaskRunsQuery(QueryView):
|
class TaskRunsQuery(QueryView):
|
||||||
|
|
||||||
tables = ['scheduler_task_runs']
|
tables = ['scheduler_task_runs']
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue