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
|
self.node_id = node_id
|
||||||
job_name = 'node_assign:%s' % target_name
|
job_name = 'node_assign:%s' % target_name
|
||||||
super(NodeAssignmentJob, self).__init__(job_name, data, nodepool)
|
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:
|
finally:
|
||||||
self._delete_threads_lock.release()
|
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):
|
def _deleteNode(self, session, node):
|
||||||
self.log.debug("Deleting node id: %s which has been in %s "
|
self.log.debug("Deleting node id: %s which has been in %s "
|
||||||
"state for %s hours" %
|
"state for %s hours" %
|
||||||
@@ -1845,6 +1852,13 @@ class NodePool(threading.Thread):
|
|||||||
jenkins.deleteNode(jenkins_name)
|
jenkins.deleteNode(jenkins_name)
|
||||||
self.log.info("Deleted jenkins node id: %s" % node.id)
|
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:
|
for subnode in node.subnodes:
|
||||||
if subnode.external_id:
|
if subnode.external_id:
|
||||||
try:
|
try:
|
||||||
|
Reference in New Issue
Block a user