WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-api

[Xen-API] [PATCH 3 of 7] CA-34933: do not gc sessions in running tasks

To: xen-api <xen-api@xxxxxxxxxxxxxxxxxxx>
Subject: [Xen-API] [PATCH 3 of 7] CA-34933: do not gc sessions in running tasks
From: Marcus Granado <marcus.granado@xxxxxxxxxx>
Date: Fri, 21 May 2010 14:46:06 +0100
Delivery-date: Fri, 21 May 2010 06:56:17 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <patchbomb.1274449563@localhost>
List-help: <mailto:xen-api-request@lists.xensource.com?subject=help>
List-id: Discussion of API issues surrounding Xen <xen-api.lists.xensource.com>
List-post: <mailto:xen-api@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-api>, <mailto:xen-api-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-api>, <mailto:xen-api-request@lists.xensource.com?subject=unsubscribe>
References: <patchbomb.1274449563@localhost>
Sender: xen-api-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Mercurial-patchbomb/1.4.3
 ocaml/idl/datamodel.ml |  2 ++
 ocaml/xapi/db_gc.ml    |  9 +++++----
 2 files changed, 7 insertions(+), 4 deletions(-)


# HG changeset patch
# User Marcus Granado <marcus.granado@xxxxxxxxxx>
# Date 1274449016 -3600
# Node ID 3678824a34447601d81a115c6e83b8e7b2b06c99
# Parent  d14022d7376eae45eb056c5c9caa61eadb883358
CA-34933: do not gc sessions in running tasks

Signed-off-by: Marcus Granado <marcus.granado@xxxxxxxxxxxxx>

diff -r d14022d7376e -r 3678824a3444 ocaml/idl/datamodel.ml
--- a/ocaml/idl/datamodel.ml
+++ b/ocaml/idl/datamodel.ml
@@ -2858,6 +2858,7 @@
                  field ~in_product_since:rel_george ~qualifier:DynamicRO 
~default_value:(Some(VString(""))) ~ty:String "auth_user_sid" "the subject 
identifier of the user that was externally authenticated. If a session instance 
has is_local_superuser set, then the value of this field is undefined.";
                  field ~in_product_since:rel_midnight_ride 
~qualifier:DynamicRO ~default_value:(Some(VString(""))) ~ty:String 
"auth_user_name" "the subject name of the user that was externally 
authenticated. If a session instance has is_local_superuser set, then the value 
of this field is undefined.";
                  field ~in_product_since:rel_midnight_ride ~qualifier:StaticRO 
~default_value:(Some(VSet [])) ~ty:(Set(String)) "rbac_permissions" "list with 
all RBAC permissions for this session";
+                 field ~in_product_since:rel_midnight_ride 
~qualifier:DynamicRO ~ty:(Set(Ref _task)) "tasks" "list of tasks created using 
the current session";
                ]
        ()
 
@@ -5951,6 +5952,7 @@
 
     (* subtasks hierarchy *)
     (_task, "subtask_of"), (_task, "subtasks");
+    (_task, "session"), (_session, "tasks");
     
     (_pif, "bond_slave_of"), (_bond, "slaves");
     (_bond, "master"), (_pif, "bond_master_of");
diff -r d14022d7376e -r 3678824a3444 ocaml/xapi/db_gc.ml
--- a/ocaml/xapi/db_gc.ml
+++ b/ocaml/xapi/db_gc.ml
@@ -203,10 +203,14 @@
   let all_hosts = Db.Host.get_all ~__context in
   List.iter check_host all_hosts
 
+let task_status_is_completed task_status =
+    (task_status=`success) || (task_status=`failure) || 
(task_status=`cancelled)
+
 let timeout_sessions ~__context =
   let all_sessions = Db.Session.get_internal_records_where ~__context 
~expr:Db_filter_types.True in
   let not_intrapool_sessions = List.filter (fun (_, y) -> not 
y.Db_actions.session_pool) all_sessions in
-  let disposable_sessions = not_intrapool_sessions in
+  let unused_sessions = List.filter (fun (_, y) -> List.for_all (fun t -> 
task_status_is_completed (Db.Task.get_status ~__context ~self:t)) 
y.Db_actions.session_tasks) not_intrapool_sessions in
+  let disposable_sessions = unused_sessions in
   (* Only keep a list of (ref, last_active, uuid) *)
   let disposable_sessions = List.map (fun (x, y) -> x, Date.to_float 
y.Db_actions.session_last_active, y.Db_actions.session_uuid) 
disposable_sessions in
   (* Definitely invalidate sessions last used long ago *)
@@ -236,9 +240,6 @@
   let oldest_completed_time = Unix.time() -. Xapi_globs.completed_task_timeout 
(* time out completed tasks after 65 minutes *) in
   let oldest_pending_time   = Unix.time() -. Xapi_globs.pending_task_timeout   
(* time out pending tasks after 24 hours *) in
 
-  let task_status_is_completed task_status =
-    (task_status=`success) || (task_status=`failure) || 
(task_status=`cancelled) in  
-
   let should_delete_task (_, t) = 
     if task_status_is_completed t.Db_actions.task_status
     then Date.to_float t.Db_actions.task_finished < oldest_completed_time

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

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