[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-API] [PATCH] VMs marked for best-effort restart dont need to worry about becoming non-agile



# HG changeset patch
# User David Scott <dave.scott@xxxxxxxxxxxxx>
# Date 1270118733 -3600
# Node ID 261d6bc80bba15972fb1d4410c2a72bf6dd28d4f
# Parent  453a340d8fb0ebdf82af49b03dabd4ad0236fdab
CA-38698: unify notions of HA "protected-ness". This should unblock (eg) 
attempts to make a best-effort VM non-agile by adding a local disk.

Previously some of the code used ha_always_run = true while other parts of the 
code used ha_always_run = true && ha_restart_priority <> best-effort.

Signed-off-by: David Scott <dave.scott@xxxxxxxxxxxxx>

diff -r 453a340d8fb0 -r 261d6bc80bba ocaml/xapi/helpers.ml
--- a/ocaml/xapi/helpers.ml     Thu Apr 01 11:43:39 2010 +0100
+++ b/ocaml/xapi/helpers.ml     Thu Apr 01 11:45:33 2010 +0100
@@ -611,9 +611,14 @@
     then bisect f mid upper
     else bisect f lower mid
 
-(* Returns true if the specified VM is "protected" by xHA *)
-let is_xha_protected ~__context ~self = Db.VM.get_ha_always_run ~__context 
~self
-let is_xha_protected_r record = record.API.vM_ha_always_run
+(* All non best-effort VMs with always_run set should be kept running at all 
costs *)
+let vm_should_always_run always_run restart_priority = 
+  always_run && (restart_priority <> Constants.ha_restart_best_effort)
+
+(* Returns true if the specified VM is "protected" (non best-effort) by xHA *)
+let is_xha_protected ~__context ~self = 
+  vm_should_always_run (Db.VM.get_ha_always_run ~__context ~self) 
(Db.VM.get_ha_restart_priority ~__context ~self)
+let is_xha_protected_r record = vm_should_always_run 
record.API.vM_ha_always_run record.API.vM_ha_restart_priority
 
 open Listext
 
diff -r 453a340d8fb0 -r 261d6bc80bba ocaml/xapi/xapi_ha_vm_failover.ml
--- a/ocaml/xapi/xapi_ha_vm_failover.ml Thu Apr 01 11:43:39 2010 +0100
+++ b/ocaml/xapi/xapi_ha_vm_failover.ml Thu Apr 01 11:45:33 2010 +0100
@@ -14,14 +14,10 @@
 module D = Debug.Debugger(struct let name="xapi_ha_vm_failover" end)
 open D
 
-(* All non best-effort VMs with always_run set should be kept running at all 
costs *)
-let vm_should_always_run always_run restart_priority = 
-  always_run && (restart_priority <> Constants.ha_restart_best_effort)
-
 (* Return a list of (ref, record) pairs for all VMs which are marked as 
always_run *)
 let all_protected_vms ~__context = 
    let vms = Db.VM.get_all_records ~__context in
-   List.filter (fun (_, vm_rec) -> vm_should_always_run 
vm_rec.API.vM_ha_always_run vm_rec.API.vM_ha_restart_priority) vms 
+   List.filter (fun (_, vm_rec) -> Helpers.vm_should_always_run 
vm_rec.API.vM_ha_always_run vm_rec.API.vM_ha_restart_priority) vms 
 
 (* Comparison function which can be used to sort a list of VM ref, record by 
restart_priority *)
 let by_restart_priority (vm_ref1,vm_rec1) (vm_ref2,vm_rec2) =
diff -r 453a340d8fb0 -r 261d6bc80bba ocaml/xapi/xapi_ha_vm_failover.mli
--- a/ocaml/xapi/xapi_ha_vm_failover.mli        Thu Apr 01 11:43:39 2010 +0100
+++ b/ocaml/xapi/xapi_ha_vm_failover.mli        Thu Apr 01 11:45:33 2010 +0100
@@ -15,9 +15,6 @@
  * @group High Availability (HA)
  *)
  
-(** True if the VM is set to always run *)
-val vm_should_always_run : bool -> string -> bool
-
 val all_protected_vms : __context:Context.t -> (API.ref_VM * API.vM_t) list 
 
 (** Take a set of live VMs and attempt to restart all protected VMs which have 
failed *)
diff -r 453a340d8fb0 -r 261d6bc80bba ocaml/xapi/xapi_host.ml
--- a/ocaml/xapi/xapi_host.ml   Thu Apr 01 11:43:39 2010 +0100
+++ b/ocaml/xapi/xapi_host.ml   Thu Apr 01 11:45:33 2010 +0100
@@ -241,7 +241,7 @@
   let pool = Helpers.get_pool ~__context in
   let protected_vms, unprotected_vms = 
     if Db.Pool.get_ha_enabled ~__context ~self:pool
-    then List.partition (fun (vm, record) -> 
Xapi_ha_vm_failover.vm_should_always_run record.API.vM_ha_always_run 
record.API.vM_ha_restart_priority) all_user_vms
+    then List.partition (fun (vm, record) -> Helpers.vm_should_always_run 
record.API.vM_ha_always_run record.API.vM_ha_restart_priority) all_user_vms
     else all_user_vms, [] in
   List.iter (fun (vm, _) -> Hashtbl.replace plans vm (Error 
(Api_errors.host_not_enough_free_memory, [ Ref.string_of vm ]))) 
unprotected_vms;
   let migratable_vms, unmigratable_vms = List.partition (fun (vm, record) ->
diff -r 453a340d8fb0 -r 261d6bc80bba ocaml/xapi/xapi_pool.ml
--- a/ocaml/xapi/xapi_pool.ml   Thu Apr 01 11:43:39 2010 +0100
+++ b/ocaml/xapi/xapi_pool.ml   Thu Apr 01 11:45:33 2010 +0100
@@ -963,7 +963,7 @@
               if not(List.mem pri valid_priorities)
               then raise (Api_errors.Server_error(Api_errors.invalid_value, [ 
"ha_restart_priority"; pri ]))) configuration;
 
-  let protected_vms = List.map fst (List.filter (fun (vm, priority) -> 
Xapi_ha_vm_failover.vm_should_always_run true priority) configuration) in
+  let protected_vms = List.map fst (List.filter (fun (vm, priority) -> 
Helpers.vm_should_always_run true priority) configuration) in
   let protected_vms = List.map (fun vm -> vm, Db.VM.get_record ~__context 
~self:vm) protected_vms in
   Xapi_ha_vm_failover.compute_max_host_failures_to_tolerate ~__context 
~protected_vms ()
 
diff -r 453a340d8fb0 -r 261d6bc80bba ocaml/xapi/xapi_vm.ml
--- a/ocaml/xapi/xapi_vm.ml     Thu Apr 01 11:43:39 2010 +0100
+++ b/ocaml/xapi/xapi_vm.ml     Thu Apr 01 11:45:33 2010 +0100
@@ -189,7 +189,7 @@
   let pool = Helpers.get_pool ~__context in
   let always_run = Db.VM.get_ha_always_run ~__context ~self:vm in
   let priority = Db.VM.get_ha_restart_priority ~__context ~self:vm in
-  if Db.Pool.get_ha_enabled ~__context ~self:pool && 
(Xapi_ha_vm_failover.vm_should_always_run always_run priority)
+  if Db.Pool.get_ha_enabled ~__context ~self:pool && 
(Helpers.vm_should_always_run always_run priority)
   then raise (Api_errors.Server_error(Api_errors.vm_is_protected, [ 
Ref.string_of vm ]))
 
 let pause_already_locked  ~__context ~vm = 
6 files changed, 12 insertions(+), 14 deletions(-)
ocaml/xapi/helpers.ml              |   11 ++++++++---
ocaml/xapi/xapi_ha_vm_failover.ml  |    6 +-----
ocaml/xapi/xapi_ha_vm_failover.mli |    3 ---
ocaml/xapi/xapi_host.ml            |    2 +-
ocaml/xapi/xapi_pool.ml            |    2 +-
ocaml/xapi/xapi_vm.ml              |    2 +-


Attachment: xen-api.hg.patch
Description: Text Data

_______________________________________________
xen-api mailing list
xen-api@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/mailman/listinfo/xen-api

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.