Partial dead code deletion
Most of the unused code around node deletion can now be removed. Change-Id: I88262abae183c014b7cfa05517794252f0238dcd
This commit is contained in:
parent
ae20ff1792
commit
64b39bf970
@ -16,8 +16,6 @@
|
|||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
import apscheduler.schedulers.background
|
|
||||||
import apscheduler.triggers.cron
|
|
||||||
import json
|
import json
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
@ -1309,35 +1307,6 @@ class NodePool(threading.Thread):
|
|||||||
t.name)
|
t.name)
|
||||||
t.online = False
|
t.online = False
|
||||||
|
|
||||||
def reconfigureCrons(self, config):
|
|
||||||
cron_map = {
|
|
||||||
'cleanup': self._doPeriodicCleanup,
|
|
||||||
'check': self._doPeriodicCheck,
|
|
||||||
}
|
|
||||||
|
|
||||||
if not self.apsched:
|
|
||||||
self.apsched = apscheduler.schedulers.background.BackgroundScheduler()
|
|
||||||
self.apsched.start()
|
|
||||||
|
|
||||||
for c in config.crons.values():
|
|
||||||
if ((not self.config) or
|
|
||||||
c.timespec != self.config.crons[c.name].timespec):
|
|
||||||
if self.config and self.config.crons[c.name].job:
|
|
||||||
self.config.crons[c.name].job.remove()
|
|
||||||
parts = c.timespec.split()
|
|
||||||
if len(parts) > 5:
|
|
||||||
second = parts[5]
|
|
||||||
else:
|
|
||||||
second = None
|
|
||||||
minute, hour, dom, month, dow = parts[:5]
|
|
||||||
trigger = apscheduler.triggers.cron.CronTrigger(
|
|
||||||
month=month, day=dom, day_of_week=dow,
|
|
||||||
hour=hour, minute=minute, second=second)
|
|
||||||
c.job = self.apsched.add_job(
|
|
||||||
cron_map[c.name], trigger=trigger)
|
|
||||||
else:
|
|
||||||
c.job = self.config.crons[c.name].job
|
|
||||||
|
|
||||||
def reconfigureZooKeeper(self, config):
|
def reconfigureZooKeeper(self, config):
|
||||||
if self.config:
|
if self.config:
|
||||||
running = self.config.zookeeper_servers.values()
|
running = self.config.zookeeper_servers.values()
|
||||||
@ -1714,19 +1683,6 @@ class NodePool(threading.Thread):
|
|||||||
launch_timeout)
|
launch_timeout)
|
||||||
t.start()
|
t.start()
|
||||||
|
|
||||||
def deleteNode(self, node_id):
|
|
||||||
try:
|
|
||||||
self._delete_threads_lock.acquire()
|
|
||||||
if node_id in self._delete_threads:
|
|
||||||
return
|
|
||||||
t = NodeDeleter(self, node_id)
|
|
||||||
self._delete_threads[node_id] = t
|
|
||||||
t.start()
|
|
||||||
except Exception:
|
|
||||||
self.log.exception("Could not delete node %s", node_id)
|
|
||||||
finally:
|
|
||||||
self._delete_threads_lock.release()
|
|
||||||
|
|
||||||
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" %
|
||||||
@ -1782,72 +1738,6 @@ class NodePool(threading.Thread):
|
|||||||
self.statsd.incr(key)
|
self.statsd.incr(key)
|
||||||
self.updateStats(session, node.provider_name)
|
self.updateStats(session, node.provider_name)
|
||||||
|
|
||||||
def deleteInstance(self, provider_name, external_id):
|
|
||||||
key = (provider_name, external_id)
|
|
||||||
try:
|
|
||||||
self._instance_delete_threads_lock.acquire()
|
|
||||||
if key in self._instance_delete_threads:
|
|
||||||
return
|
|
||||||
t = InstanceDeleter(self, provider_name, external_id)
|
|
||||||
self._instance_delete_threads[key] = t
|
|
||||||
t.start()
|
|
||||||
except Exception:
|
|
||||||
self.log.exception("Could not delete instance %s on provider %s",
|
|
||||||
provider_name, external_id)
|
|
||||||
finally:
|
|
||||||
self._instance_delete_threads_lock.release()
|
|
||||||
|
|
||||||
def _deleteInstance(self, provider_name, external_id):
|
|
||||||
provider = self.config.providers[provider_name]
|
|
||||||
manager = self.getProviderManager(provider)
|
|
||||||
manager.cleanupServer(external_id)
|
|
||||||
|
|
||||||
def _doPeriodicCleanup(self):
|
|
||||||
if self.no_deletes:
|
|
||||||
return
|
|
||||||
try:
|
|
||||||
self.periodicCleanup()
|
|
||||||
except Exception:
|
|
||||||
self.log.exception("Exception in periodic cleanup:")
|
|
||||||
|
|
||||||
def periodicCleanup(self):
|
|
||||||
# This function should be run periodically to clean up any hosts
|
|
||||||
# that may have slipped through the cracks, as well as to remove
|
|
||||||
# old images.
|
|
||||||
|
|
||||||
self.log.debug("Starting periodic cleanup")
|
|
||||||
|
|
||||||
for k, t in self._delete_threads.items()[:]:
|
|
||||||
if not t.isAlive():
|
|
||||||
del self._delete_threads[k]
|
|
||||||
|
|
||||||
for k, t in self._instance_delete_threads.items()[:]:
|
|
||||||
if not t.isAlive():
|
|
||||||
del self._instance_delete_threads[k]
|
|
||||||
|
|
||||||
node_ids = []
|
|
||||||
with self.getDB().getSession() as session:
|
|
||||||
for node in session.getNodes():
|
|
||||||
node_ids.append(node.id)
|
|
||||||
|
|
||||||
for node_id in node_ids:
|
|
||||||
try:
|
|
||||||
with self.getDB().getSession() as session:
|
|
||||||
node = session.getNode(node_id)
|
|
||||||
if node:
|
|
||||||
self.cleanupOneNode(session, node)
|
|
||||||
except Exception:
|
|
||||||
self.log.exception("Exception cleaning up node id %s:" %
|
|
||||||
node_id)
|
|
||||||
|
|
||||||
try:
|
|
||||||
self.cleanupLeakedInstances()
|
|
||||||
pass
|
|
||||||
except Exception:
|
|
||||||
self.log.exception("Exception cleaning up leaked nodes")
|
|
||||||
|
|
||||||
self.log.debug("Finished periodic cleanup")
|
|
||||||
|
|
||||||
def cleanupLeakedInstances(self):
|
def cleanupLeakedInstances(self):
|
||||||
known_providers = self.config.providers.keys()
|
known_providers = self.config.providers.keys()
|
||||||
for provider in self.config.providers.values():
|
for provider in self.config.providers.values():
|
||||||
@ -1888,35 +1778,6 @@ class NodePool(threading.Thread):
|
|||||||
if provider.clean_floating_ips:
|
if provider.clean_floating_ips:
|
||||||
manager.cleanupLeakedFloaters()
|
manager.cleanupLeakedFloaters()
|
||||||
|
|
||||||
def cleanupOneNode(self, session, node):
|
|
||||||
now = time.time()
|
|
||||||
time_in_state = now - node.state_time
|
|
||||||
if (node.state in [nodedb.READY, nodedb.HOLD]):
|
|
||||||
return
|
|
||||||
delete = False
|
|
||||||
if (node.state == nodedb.DELETE):
|
|
||||||
delete = True
|
|
||||||
elif (node.state == nodedb.TEST and
|
|
||||||
time_in_state > TEST_CLEANUP):
|
|
||||||
delete = True
|
|
||||||
elif time_in_state > NODE_CLEANUP:
|
|
||||||
delete = True
|
|
||||||
if delete:
|
|
||||||
try:
|
|
||||||
self.deleteNode(node.id)
|
|
||||||
except Exception:
|
|
||||||
self.log.exception("Exception deleting node id: "
|
|
||||||
"%s" % node.id)
|
|
||||||
|
|
||||||
def _doPeriodicCheck(self):
|
|
||||||
if self.no_deletes:
|
|
||||||
return
|
|
||||||
try:
|
|
||||||
with self.getDB().getSession() as session:
|
|
||||||
self.periodicCheck(session)
|
|
||||||
except Exception:
|
|
||||||
self.log.exception("Exception in periodic check:")
|
|
||||||
|
|
||||||
def periodicCheck(self, session):
|
def periodicCheck(self, session):
|
||||||
# This function should be run periodically to make sure we can
|
# This function should be run periodically to make sure we can
|
||||||
# still access hosts via ssh.
|
# still access hosts via ssh.
|
||||||
|
@ -6,7 +6,6 @@ paramiko>1.11.6,<2.0.0
|
|||||||
python-daemon>=2.0.4,<2.1.0
|
python-daemon>=2.0.4,<2.1.0
|
||||||
extras
|
extras
|
||||||
statsd>=3.0
|
statsd>=3.0
|
||||||
apscheduler>=3.0
|
|
||||||
sqlalchemy>=0.8.2,<1.1.0
|
sqlalchemy>=0.8.2,<1.1.0
|
||||||
PyMySQL
|
PyMySQL
|
||||||
PrettyTable>=0.6,<0.8
|
PrettyTable>=0.6,<0.8
|
||||||
|
Loading…
Reference in New Issue
Block a user