summaryrefslogtreecommitdiff
path: root/trove/taskmanager/models.py
diff options
context:
space:
mode:
Diffstat (limited to 'trove/taskmanager/models.py')
-rwxr-xr-xtrove/taskmanager/models.py144
1 files changed, 7 insertions, 137 deletions
diff --git a/trove/taskmanager/models.py b/trove/taskmanager/models.py
index 104a7cfb..62e1f9b2 100755
--- a/trove/taskmanager/models.py
+++ b/trove/taskmanager/models.py
@@ -20,10 +20,8 @@ import traceback
from cinderclient import exceptions as cinder_exceptions
from eventlet import greenthread
from eventlet.timeout import Timeout
-from novaclient import exceptions as nova_exceptions
from oslo_log import log as logging
from oslo_utils import netutils
-import six
from swiftclient.client import ClientException
from trove.backup import models as bkup_models
@@ -54,13 +52,11 @@ from trove.common.notification import (
StartNotification,
TroveInstanceCreate,
TroveInstanceModifyVolume,
- TroveInstanceModifyFlavor,
- TroveInstanceDelete)
+ TroveInstanceModifyFlavor)
import trove.common.remote as remote
from trove.common.remote import create_cinder_client
from trove.common.remote import create_dns_client
from trove.common.remote import create_guest_client
-from trove.common import server_group as srv_grp
from trove.common.strategies.cluster import strategy
from trove.common import template
from trove.common import timeutils
@@ -416,21 +412,10 @@ class ClusterTasks(Cluster):
class FreshInstanceTasks(FreshInstance, NotifyMixin, ConfigurationMixin):
-
- def _delete_resources(self, deleted_at):
- LOG.debug("Begin _delete_resources for instance %s", self.id)
-
- # If volume has "available" status, delete it manually.
- try:
- if self.volume_id:
- volume = self.volume_client.volumes.get(self.volume_id)
- if volume.status == "available":
- volume.delete()
- except Exception as e:
- LOG.warning("Failed to delete volume for instance %s, error: %s",
- self.id, six.text_type(e))
-
- LOG.debug("End _delete_resource for instance %s", self.id)
+ """
+ FreshInstanceTasks contains the tasks related an instance that not
+ associated with a compute server.
+ """
def wait_for_instance(self, timeout, flavor):
# Make sure the service becomes active before sending a usage
@@ -1076,125 +1061,10 @@ class FreshInstanceTasks(FreshInstance, NotifyMixin, ConfigurationMixin):
class BuiltInstanceTasks(BuiltInstance, NotifyMixin, ConfigurationMixin):
"""
- Performs the various asynchronous instance related tasks.
+ BuiltInstanceTasks contains the tasks related an instance that already
+ associated with a compute server.
"""
- def _delete_resources(self, deleted_at):
- LOG.info("Starting to delete resources for instance %s", self.id)
-
- # Stop db
- server_id = self.db_info.compute_instance_id
- old_server = self.nova_client.servers.get(server_id)
- try:
- # The server may have already been marked as 'SHUTDOWN'
- # but check for 'ACTIVE' in case of any race condition
- # We specifically don't want to attempt to stop db if
- # the server is in 'ERROR' or 'FAILED" state, as it will
- # result in a long timeout
- if self.server_status_matches(['ACTIVE', 'SHUTDOWN'], server=self):
- LOG.debug("Stopping datastore on instance %s before deleting "
- "any resources.", self.id)
- self.guest.stop_db()
- except Exception as e:
- LOG.warning("Failed to stop the datastore before attempting "
- "to delete instance id %s, error: %s", self.id,
- six.text_type(e))
-
- # Nova VM
- try:
- LOG.info("Deleting server for instance %s", self.id)
- self.server.delete()
- except Exception as e:
- LOG.warning("Failed to delete compute server %s", self.server.id,
- six.text_type(e))
-
- # Neutron ports
- try:
- ret = self.neutron_client.list_ports(name='trove-%s' % self.id)
- ports = ret.get("ports", [])
- for port in ports:
- LOG.info("Deleting port %s for instance %s", port["id"],
- self.id)
- neutron.delete_port(self.neutron_client, port["id"])
- except Exception as e:
- LOG.warning("Failed to delete ports for instance %s, "
- "error: %s", self.id, six.text_type(e))
-
- # Neutron security groups
- try:
- name = "%s-%s" % (CONF.trove_security_group_name_prefix, self.id)
- ret = self.neutron_client.list_security_groups(name=name)
- sgs = ret.get("security_groups", [])
- for sg in sgs:
- LOG.info("Deleting security group %s for instance %s",
- sg["id"], self.id)
- self.neutron_client.delete_security_group(sg["id"])
- except Exception as e:
- LOG.warning("Failed to delete security groups for instance %s, "
- "error: %s", self.id, six.text_type(e))
-
- # DNS resources, e.g. Designate
- try:
- dns_support = CONF.trove_dns_support
- if dns_support:
- dns_api = create_dns_client(self.context)
- dns_api.delete_instance_entry(instance_id=self.id)
- except Exception as e:
- LOG.warning("Failed to delete dns entry of instance %s, error: %s",
- self.id, six.text_type(e))
-
- # Nova server group
- try:
- srv_grp.ServerGroup.delete(self.context, self.server_group)
- except Exception as e:
- LOG.warning("Failed to delete server group for %s, error: %s",
- self.id, six.text_type(e))
-
- def server_is_finished():
- try:
- server = self.nova_client.servers.get(server_id)
- if not self.server_status_matches(['SHUTDOWN', 'ACTIVE'],
- server=server):
- LOG.warning("Server %(server_id)s entered ERROR status "
- "when deleting instance %(instance_id)s!",
- {'server_id': server.id,
- 'instance_id': self.id})
- return False
- except nova_exceptions.NotFound:
- return True
-
- try:
- LOG.info("Waiting for server %s removal for instance %s",
- server_id, self.id)
- utils.poll_until(server_is_finished, sleep_time=2,
- time_out=CONF.server_delete_time_out)
- except PollTimeOut:
- LOG.warning("Failed to delete instance %(instance_id)s: "
- "Timeout deleting compute server %(server_id)s",
- {'instance_id': self.id, 'server_id': server_id})
-
- # If volume has been resized it must be manually removed
- try:
- if self.volume_id:
- volume = self.volume_client.volumes.get(self.volume_id)
- if volume.status == "available":
- volume.delete()
- except Exception as e:
- LOG.warning("Failed to delete volume for instance %s, error: %s",
- self.id, six.text_type(e))
-
- TroveInstanceDelete(instance=self,
- deleted_at=timeutils.isotime(deleted_at),
- server=old_server).notify()
-
- LOG.info("Finished to delete resources for instance %s", self.id)
-
- def server_status_matches(self, expected_status, server=None):
- if not server:
- server = self.server
- return server.status.upper() in (
- status.upper() for status in expected_status)
-
def resize_volume(self, new_size):
LOG.info("Resizing volume for instance %(instance_id)s from "
"%(old_size)s GB to %(new_size)s GB.",