Revoke nodes via gearman on deletion
If a node is deleted without having run a job, the launcher it was assigned to will not know about it. Send it a notification. Change-Id: I9d44a3297aba2b05d64a97041de09f8140dbc295 Depends-On: Ib1dc0879e1cbbbdb6c0b16b6bb52ff9f8b98a25d
This commit is contained in:
@@ -184,3 +184,12 @@ class NodeAssignmentJob(NodepoolJob):
|
||||
self.node_id = node_id
|
||||
job_name = 'node_assign:%s' % target_name
|
||||
super(NodeAssignmentJob, self).__init__(job_name, data, nodepool)
|
||||
|
||||
|
||||
class NodeRevokeJob(NodepoolJob):
|
||||
log = logging.getLogger("jobs.NodeRevokeJob")
|
||||
|
||||
def __init__(self, node_id, manager_name, data, nodepool):
|
||||
self.node_id = node_id
|
||||
job_name = 'node_revoke:%s' % manager_name
|
||||
super(NodeRevokeJob, self).__init__(job_name, data, nodepool)
|
||||
|
@@ -1819,6 +1819,13 @@ class NodePool(threading.Thread):
|
||||
finally:
|
||||
self._delete_threads_lock.release()
|
||||
|
||||
def revokeAssignedNode(self, node):
|
||||
args = dict(name=node.nodename)
|
||||
job = jobs.NodeRevokeJob(node.id, node.manager_name,
|
||||
args, self)
|
||||
self.gearman_client.submitJob(job, timeout=300)
|
||||
# Do not wait for completion in case the manager is offline
|
||||
|
||||
def _deleteNode(self, session, node):
|
||||
self.log.debug("Deleting node id: %s which has been in %s "
|
||||
"state for %s hours" %
|
||||
@@ -1845,6 +1852,13 @@ class NodePool(threading.Thread):
|
||||
jenkins.deleteNode(jenkins_name)
|
||||
self.log.info("Deleted jenkins node id: %s" % node.id)
|
||||
|
||||
if node.manager_name is not None:
|
||||
try:
|
||||
self.revokeAssignedNode(node)
|
||||
except Exception:
|
||||
self.log.exception("Exception revoking node id: %s" %
|
||||
node.id)
|
||||
|
||||
for subnode in node.subnodes:
|
||||
if subnode.external_id:
|
||||
try:
|
||||
|
Reference in New Issue
Block a user