conf: Add on_lockfailure event configuration

Using this new element, one can configure an action that should be
performed when resource locks are lost.
This commit is contained in:
Jiri Denemark 2012-09-06 22:17:01 +02:00
parent d0ea530b00
commit 76f5bcabe6
5 changed files with 79 additions and 0 deletions

View File

@ -919,6 +919,7 @@
<on_poweroff>destroy</on_poweroff> <on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot> <on_reboot>restart</on_reboot>
<on_crash>restart</on_crash> <on_crash>restart</on_crash>
<on_lockfailure>poweroff</on_lockfailure>
...</pre> ...</pre>
<p> <p>
@ -974,6 +975,27 @@
domain will be restarted with the same configuration</dd> domain will be restarted with the same configuration</dd>
</dl> </dl>
<p>
The <code>on_lockfailure</code> element (<span class="since">since
0.10.3</span>) may be used to configure what action should be
taken when a lock manager loses resource locks. The following
actions are recognized by libvirt, although not all of them need
to be supported by individual lock managers. When no action is
specified, each lock manager will take its default action.
</p>
<dl>
<dt><code>poweroff</code></dt>
<dd>The domain will be forcefully powered off.</dd>
<dt><code>restart</code></dt>
<dd>The domain will be powered off and started up again to
reacquire its locks.</dd>
<dt><code>pause</code></dt>
<dd>The domain will be paused so that it can be manually resumed
when lock issues are solved.</dd>
<dt><code>ignore</code></dt>
<dd>Keep the domain running as if nothing happened.</dd>
</dl>
<h3><a name="elementsPowerManagement">Power Management</a></h3> <h3><a name="elementsPowerManagement">Power Management</a></h3>
<p> <p>

View File

@ -2246,6 +2246,11 @@
<ref name="crashOptions"/> <ref name="crashOptions"/>
</element> </element>
</optional> </optional>
<optional>
<element name="on_lockfailure">
<ref name="lockfailureOptions"/>
</element>
</optional>
</interleave> </interleave>
</define> </define>
<!-- <!--
@ -2287,6 +2292,23 @@
<value>coredump-restart</value> <value>coredump-restart</value>
</choice> </choice>
</define> </define>
<!--
Options when resource locks are lost:
poweroff: power off the domain
restart: power off the domain and start it up again to reacquire the
locks
pause: pause the execution of the domain so that it can be manually
resumed when lock issues are solved
ignore: keep the domain running
-->
<define name="lockfailureOptions">
<choice>
<value>poweroff</value>
<value>restart</value>
<value>pause</value>
<value>ignore</value>
</choice>
</define>
<!-- <!--
Control ACPI sleep states (dis)allowed for the domain Control ACPI sleep states (dis)allowed for the domain
For each of the states the following rules apply: For each of the states the following rules apply:

View File

@ -134,6 +134,13 @@ VIR_ENUM_IMPL(virDomainLifecycleCrash, VIR_DOMAIN_LIFECYCLE_CRASH_LAST,
"coredump-destroy", "coredump-destroy",
"coredump-restart") "coredump-restart")
VIR_ENUM_IMPL(virDomainLockFailure, VIR_DOMAIN_LOCK_FAILURE_LAST,
"default",
"poweroff",
"restart",
"pause",
"ignore")
VIR_ENUM_IMPL(virDomainPMState, VIR_DOMAIN_PM_STATE_LAST, VIR_ENUM_IMPL(virDomainPMState, VIR_DOMAIN_PM_STATE_LAST,
"default", "default",
"yes", "yes",
@ -8963,6 +8970,13 @@ static virDomainDefPtr virDomainDefParseXML(virCapsPtr caps,
virDomainLifecycleCrashTypeFromString) < 0) virDomainLifecycleCrashTypeFromString) < 0)
goto error; goto error;
if (virDomainEventActionParseXML(ctxt, "on_lockfailure",
"string(./on_lockfailure[1])",
&def->onLockFailure,
VIR_DOMAIN_LOCK_FAILURE_DEFAULT,
virDomainLockFailureTypeFromString) < 0)
goto error;
if (virDomainPMStateParseXML(ctxt, if (virDomainPMStateParseXML(ctxt,
"string(./pm/suspend-to-mem/@enabled)", "string(./pm/suspend-to-mem/@enabled)",
&def->pm.s3) < 0) &def->pm.s3) < 0)
@ -13692,6 +13706,11 @@ virDomainDefFormatInternal(virDomainDefPtr def,
"on_crash", "on_crash",
virDomainLifecycleCrashTypeToString) < 0) virDomainLifecycleCrashTypeToString) < 0)
goto cleanup; goto cleanup;
if (def->onLockFailure != VIR_DOMAIN_LOCK_FAILURE_DEFAULT &&
virDomainEventActionDefFormat(buf, def->onLockFailure,
"on_lockfailure",
virDomainLockFailureTypeToString) < 0)
goto cleanup;
if (def->pm.s3 || def->pm.s4) { if (def->pm.s3 || def->pm.s4) {
virBufferAddLit(buf, " <pm>\n"); virBufferAddLit(buf, " <pm>\n");

View File

@ -1413,6 +1413,18 @@ enum virDomainLifecycleCrashAction {
VIR_DOMAIN_LIFECYCLE_CRASH_LAST VIR_DOMAIN_LIFECYCLE_CRASH_LAST
}; };
typedef enum {
VIR_DOMAIN_LOCK_FAILURE_DEFAULT,
VIR_DOMAIN_LOCK_FAILURE_POWEROFF,
VIR_DOMAIN_LOCK_FAILURE_RESTART,
VIR_DOMAIN_LOCK_FAILURE_PAUSE,
VIR_DOMAIN_LOCK_FAILURE_IGNORE,
VIR_DOMAIN_LOCK_FAILURE_LAST
} virDomainLockFailureAction;
VIR_ENUM_DECL(virDomainLockFailure)
enum virDomainPMState { enum virDomainPMState {
VIR_DOMAIN_PM_STATE_DEFAULT = 0, VIR_DOMAIN_PM_STATE_DEFAULT = 0,
VIR_DOMAIN_PM_STATE_ENABLED, VIR_DOMAIN_PM_STATE_ENABLED,
@ -1681,6 +1693,8 @@ struct _virDomainDef {
int onPoweroff; int onPoweroff;
int onCrash; int onCrash;
int onLockFailure; /* enum virDomainLockFailureAction */
struct { struct {
/* These options are actually type of enum virDomainPMState */ /* These options are actually type of enum virDomainPMState */
int s3; int s3;

View File

@ -421,6 +421,8 @@ virDomainLifecycleTypeFromString;
virDomainLifecycleTypeToString; virDomainLifecycleTypeToString;
virDomainLiveConfigHelperMethod; virDomainLiveConfigHelperMethod;
virDomainLoadAllConfigs; virDomainLoadAllConfigs;
virDomainLockFailureTypeFromString;
virDomainLockFailureTypeToString;
virDomainMemballoonModelTypeFromString; virDomainMemballoonModelTypeFromString;
virDomainMemballoonModelTypeToString; virDomainMemballoonModelTypeToString;
virDomainMemDumpTypeFromString; virDomainMemDumpTypeFromString;