File 0001-Low-VirtualDomain-Add-a-functionality-that-modifies.patch of Package resource-agents
From fa9ac65f510b58025e234e066d1cff26f8c2d6ed Mon Sep 17 00:00:00 2001
From: John Shi <jshi@novell.com>
Date: Mon, 18 Jul 2011 14:54:00 +0800
Subject: [PATCH] Low: VirtualDomain: Add a functionality that modifies
utilization of resource automatically.
---
heartbeat/VirtualDomain | 67 +++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 67 insertions(+), 0 deletions(-)
Index: resource-agents/heartbeat/VirtualDomain
===================================================================
--- resource-agents.orig/heartbeat/VirtualDomain 2011-07-18 16:26:44.000000000 +0800
+++ resource-agents/heartbeat/VirtualDomain 2011-07-18 16:55:41.000000000 +0800
@@ -19,9 +19,15 @@
# Defaults
OCF_RESKEY_force_stop_default=0
OCF_RESKEY_hypervisor_default="$(virsh --quiet uri)"
+OCF_RESKEY_dynamic_utilization_default="true"
+OCF_RESKEY_set_utilization_cpu_default="true"
+OCF_RESKEY_set_utilization_memory_default="true"
: ${OCF_RESKEY_force_stop=${OCF_RESKEY_force_stop_default}}
: ${OCF_RESKEY_hypervisor=${OCF_RESKEY_hypervisor_default}}
+: ${OCF_RESKEY_dynamic_utilization=${OCF_RESKEY_dynamic_utilization_default}}
+: ${OCF_RESKEY_set_utilization_cpu=${OCF_RESKEY_set_utilization_cpu_default}}
+: ${OCF_RESKEY_set_utilization_memory=${OCF_RESKEY_set_utilization_memory_default}}
#######################################################################
## I'd very much suggest to make this RA use bash,
@@ -117,6 +123,28 @@
<content type="string" default="" />
</parameter>
+<parameter name="dynamic_utilization" unique="0" required="0">
+<longdesc lang="en">
+If set, the utilization parameter of resource will be reset if there are
+difference between resource parameters and system parameters when agent monitor.
+Otherwise, the resource parameters will be set once when agent start.
+</longdesc>
+<shortdesc lang="en">Set utilization of resource when agent monitor</shortdesc>
+<content type="boolean" default="true" />
+</parameter>
+
+<parameter name="set_utilization_cpu" unique="0" required="0">
+<longdesc lang="en">Enable setting cpu of utilization.</longdesc>
+<shortdesc lang="en">Enable setting cpu of utilization</shortdesc>
+<content type="boolean" default="true" />
+</parameter>
+
+<parameter name="set_utilization_memory" unique="0" required="0">
+<longdesc lang="en">Enable setting memory of utilization.</longdesc>
+<shortdesc lang="en">Enable setting memory of utilization</shortdesc>
+<content type="boolean" default="true" />
+</parameter>
+
</parameters>
<actions>
@@ -133,6 +161,33 @@
EOF
}
+set_utilization() {
+ local dom_cpu dom_mem
+ local uti_cpu uti_mem
+
+ read dom_cpu dom_mem <<EOF
+$(LANG=C virsh $VIRSH_OPTIONS dominfo ${DOMAIN_NAME} |
+awk '/CPU\(s\)/{cpu=$2} /Max memory/{mem=$3} END{printf("%d %d\n", cpu, mem/1024)}')
+EOF
+ uti_cpu=$(crm_resource -Q -r $OCF_RESOURCE_INSTANCE -z -g cpu 2>/dev/null)
+ uti_mem=$(crm_resource -Q -r $OCF_RESOURCE_INSTANCE -z -g hv_memory 2>/dev/null)
+
+ if [ "$OCF_RESKEY_set_utilization_cpu" = "true" -o "$OCF_RESKEY_set_utilization_cpu" = "1" ]; then
+ if [ "$dom_cpu" != "$uti_cpu" ]; then
+ if ! crm_resource -r $OCF_RESOURCE_INSTANCE -z -p cpu -v $dom_cpu; then
+ ocf_log warn "Failed to set cpu of utilization by crm_resource."
+ fi
+ fi
+ fi
+ if [ "$OCF_RESKEY_set_utilization_memory" = "true" -o "$OCF_RESKEY_set_utilization_memory" = "1" ]; then
+ if [ "$dom_mem" != "$uti_mem" ]; then
+ if ! crm_resource -r $OCF_RESOURCE_INSTANCE -z -p hv_memory -v $dom_mem; then
+ ocf_log warn "Failed to set memory of utilization by crm_resource."
+ fi
+ fi
+ fi
+}
+
# Set options to be passed to virsh:
VIRSH_OPTIONS="--connect=${OCF_RESKEY_hypervisor} --quiet"
@@ -236,6 +291,11 @@
while ! VirtualDomain_Monitor; do
sleep 1
done
+
+ if [ "$OCF_RESKEY_dynamic_utilization" = "false" -o "$OCF_RESKEY_dynamic_utilization" = "0" ]; then
+ set_utilization
+ fi
+
return $OCF_SUCCESS
}
@@ -404,6 +464,13 @@
fi
done
fi
+
+ if ocf_is_probe; then
+ if [ "$OCF_RESKEY_dynamic_utilization" = "true" -o "$OCF_RESKEY_dynamic_utilization" = "1" ]; then
+ set_utilization
+ fi
+ fi
+
return ${rc}
}