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:
James E. Blair
2016-06-17 10:29:18 -07:00
parent 2231489d87
commit fb8bda31a3
2 changed files with 23 additions and 0 deletions

View File

@@ -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)

View File

@@ -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: