[ADMIN_API][MGM]: Be nicer to Nova networks for deletes
Instead of deleting a bad instance instantly add to the DB with a DELETED status so that the next run of the delete scheduler will wipe it out. Change-Id: Ib5518ef51176729baa703eeb410911cd8437fa9c
This commit is contained in:
		@@ -314,6 +314,8 @@ class GearmanWork(object):
 | 
				
			|||||||
                continue
 | 
					                continue
 | 
				
			||||||
            if status.result['response'] == 'FAIL':
 | 
					            if status.result['response'] == 'FAIL':
 | 
				
			||||||
                LOG.error('Pool manager failed to build a device')
 | 
					                LOG.error('Pool manager failed to build a device')
 | 
				
			||||||
 | 
					                if 'name' in status.result:
 | 
				
			||||||
 | 
					                    self._add_bad_node(status.result)
 | 
				
			||||||
                continue
 | 
					                continue
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            built_count += 1
 | 
					            built_count += 1
 | 
				
			||||||
@@ -351,3 +353,21 @@ class GearmanWork(object):
 | 
				
			|||||||
        with db_session() as session:
 | 
					        with db_session() as session:
 | 
				
			||||||
            session.add(device)
 | 
					            session.add(device)
 | 
				
			||||||
            session.commit()
 | 
					            session.commit()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def _add_bad_node(self, data):
 | 
				
			||||||
 | 
					        LOG.info(
 | 
				
			||||||
 | 
					            'Adding bad device {0} to DB to be deleted'.format(data['name'])
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					        device = Device()
 | 
				
			||||||
 | 
					        device.name = data['name']
 | 
				
			||||||
 | 
					        device.publicIpAddr = data['addr']
 | 
				
			||||||
 | 
					        # TODO: kill this field, make things use publicIpAddr instead
 | 
				
			||||||
 | 
					        device.floatingIpAddr = data['addr']
 | 
				
			||||||
 | 
					        device.az = data['az']
 | 
				
			||||||
 | 
					        device.type = data['type']
 | 
				
			||||||
 | 
					        device.pingCount = 0
 | 
				
			||||||
 | 
					        device.status = 'DELETED'
 | 
				
			||||||
 | 
					        device.created = None
 | 
				
			||||||
 | 
					        with db_session() as session:
 | 
				
			||||||
 | 
					            session.add(device)
 | 
				
			||||||
 | 
					            session.commit()
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -121,9 +121,8 @@ class BuildController(object):
 | 
				
			|||||||
                return self.msg
 | 
					                return self.msg
 | 
				
			||||||
            sleep(60)
 | 
					            sleep(60)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        nova.delete(node_id)
 | 
					 | 
				
			||||||
        LOG.error(
 | 
					        LOG.error(
 | 
				
			||||||
            "Node {0} didn't come up after 10 minutes, deleted".format(node_id)
 | 
					            "Node {0} didn't come up after 10 minutes".format(node_id)
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
        self.msg[self.RESPONSE_FIELD] = self.RESPONSE_FAILURE
 | 
					        self.msg[self.RESPONSE_FIELD] = self.RESPONSE_FAILURE
 | 
				
			||||||
        return self.msg
 | 
					        return self.msg
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user