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}
 }
 
openSUSE Build Service is sponsored by