summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJosh Kearney <josh@jk0.org>2011-10-18 13:33:00 -0500
committerJosh Kearney <josh@jk0.org>2011-10-19 10:51:57 -0500
commit9eefcd3aa7cfad2e0c3753695ae63f6b384b1c00 (patch)
treef8b543de3138207bebf387127b2c72c49a2ae324
parent08486b1bbf7c33459e55e0bd4685f9aae4c4d022 (diff)
Only log instance actions once if instance action logging is enabled (now disabled by default).
Fixes bug 874487. Change-Id: I25b4e82bd71ab8073953d5ddbcb013757619d548
-rw-r--r--nova/virt/xenapi_conn.py22
1 files changed, 16 insertions, 6 deletions
diff --git a/nova/virt/xenapi_conn.py b/nova/virt/xenapi_conn.py
index 2e4a53c5b..aa200f6a4 100644
--- a/nova/virt/xenapi_conn.py
+++ b/nova/virt/xenapi_conn.py
@@ -119,6 +119,8 @@ flags.DEFINE_string('xenapi_agent_path',
' and flat_injected=True')
flags.DEFINE_string('xenapi_sr_base_path', '/var/run/sr-mount',
'Base path to the storage repository')
+flags.DEFINE_bool('xenapi_log_instance_actions', False,
+ 'Log all instance calls to XenAPI in the database.')
flags.DEFINE_string('target_host',
None,
'iSCSI Target Host')
@@ -449,29 +451,37 @@ class XenAPISession(object):
action was completed successfully or not.
"""
try:
+ ctxt = context.get_admin_context()
name = self._session.xenapi.task.get_name_label(task)
status = self._session.xenapi.task.get_status(task)
+
# Ensure action is never > 255
action = dict(action=name[:255], error=None)
- if id:
+ log_instance_actions = FLAGS.xenapi_log_instance_actions and id
+ if log_instance_actions:
action["instance_id"] = int(id)
+
if status == "pending":
return
elif status == "success":
result = self._session.xenapi.task.get_result(task)
LOG.info(_("Task [%(name)s] %(task)s status:"
" success %(result)s") % locals())
+
+ if log_instance_actions:
+ db.instance_action_create(ctxt, action)
+
done.send(_parse_xmlrpc_value(result))
else:
error_info = self._session.xenapi.task.get_error_info(task)
- action["error"] = str(error_info)
LOG.warn(_("Task [%(name)s] %(task)s status:"
" %(status)s %(error_info)s") % locals())
- done.send_exception(self.XenAPI.Failure(error_info))
- if id:
- db.instance_action_create(context.get_admin_context(),
- action)
+ if log_instance_actions:
+ action["error"] = str(error_info)
+ db.instance_action_create(ctxt, action)
+
+ done.send_exception(self.XenAPI.Failure(error_info))
except self.XenAPI.Failure, exc:
LOG.warn(exc)
done.send_exception(*sys.exc_info())