Skip to content

Commit 4128eec

Browse files
Merge pull request #58 from simonjbeaumont/ca-185923
CA-185923: Don't silently fail if archiving SR RRDs fails
2 parents dd5bdae + fa2038f commit 4128eec

File tree

3 files changed

+38
-29
lines changed

3 files changed

+38
-29
lines changed

rrdd/rrdd_server.ml

Lines changed: 27 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -21,36 +21,38 @@ open Pervasiveext
2121
open Xstringext
2222
open Threadext
2323
open Rrdd_shared
24+
open Rrd_interface
2425

2526
module D = Debug.Make(struct let name="rrdd_server" end)
2627
open D
2728

28-
let sr_rrds_path _ ~(sr_uuid : string) : string =
29-
Filename.concat sr_rrds_location (sr_uuid ^ ".gz")
30-
31-
let archive_sr_rrd _ ~(sr_uuid : string) : unit =
32-
if Mutex.try_lock mutex then begin
33-
let srrds =
34-
try
35-
Hashtbl.fold (fun k v acc -> (k,v.rrd)::acc) sr_rrds []
36-
with exn ->
37-
Mutex.unlock mutex;
38-
raise exn
39-
in
40-
Mutex.unlock mutex;
41-
try
42-
let rrd = List.assoc sr_uuid srrds in
43-
archive_rrd ~uuid:sr_uuid ~rrd ()
44-
with Not_found -> ()
45-
end
46-
47-
let get_sr_rrd ~sr_uuid =
48-
let path = Filename.concat sr_rrds_location sr_uuid in
49-
rrd_of_gzip path
50-
51-
let push_sr_rrd _ ~(sr_uuid : string) : unit =
29+
let archive_sr_rrd _ ~(sr_uuid : string) : string =
30+
let sr_rrd = Mutex.execute mutex (fun () ->
31+
try (Hashtbl.find sr_rrds sr_uuid)
32+
with Not_found ->
33+
let msg = Printf.sprintf "No RRD found for SR: %s." sr_uuid in
34+
raise (Archive_failed(msg))
35+
) in
5236
try
53-
let rrd = get_sr_rrd ~sr_uuid in
37+
archive_rrd ~uuid:sr_uuid ~rrd:sr_rrd.rrd ();
38+
let archive_path =
39+
Filename.concat Constants.rrd_location (sr_uuid ^ ".gz") in
40+
if not (Unixext.file_exists archive_path) then begin
41+
let msg = Printf.sprintf "Archive not found: %s." archive_path in
42+
raise (Archive_failed(msg))
43+
end;
44+
archive_path
45+
with e ->
46+
let msg = Printf.sprintf "Exception raised: %s." (Printexc.to_string e) in
47+
raise (Archive_failed(msg))
48+
49+
let push_sr_rrd _ ~(sr_uuid : string) ~(path : string) : unit =
50+
try
51+
let path =
52+
if Filename.check_suffix path ".gz"
53+
then Filename.chop_suffix path ".gz"
54+
else path in
55+
let rrd = rrd_of_gzip path in
5456
debug "Pushing RRD for SR uuid=%s locally" sr_uuid;
5557
Mutex.execute mutex (fun _ ->
5658
Hashtbl.replace sr_rrds sr_uuid {rrd; dss=[]; domid=0}

rrdd/rrdd_shared.ml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,6 @@ let cache_sr_lock = Mutex.create ()
3434
let default_ssl_port = 443
3535
let https_port = ref default_ssl_port
3636

37-
let sr_rrds_location = Constants.rrd_location
38-
3937
(** Pool secret. *)
4038
let get_pool_secret () =
4139
try

rrdd/test_rrdd_monitor.ml

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,10 +43,10 @@ let check_host_dss expected_dss =
4343
(List.sort compare expected_dss)
4444
(List.sort compare (dump_dss info.Rrdd_shared.dss))
4545

46-
let update_rrds_test ~dss ~uuid_domids ~paused_vms
46+
let update_rrds_test ~dss ~uuid_domids ~rebooting_vms ~paused_vms
4747
~expected_vm_rrds ~expected_sr_rrds ~expected_host_dss = fun ctxt ->
4848
OUnit2.bracket reset_rrdd_shared_state (fun () -> ignore) ctxt;
49-
Rrdd_monitor.update_rrds 12345.0 dss uuid_domids paused_vms;
49+
Rrdd_monitor.update_rrds 12345.0 dss uuid_domids rebooting_vms paused_vms;
5050
check_rrd_hash Rrdd_shared.vm_rrds expected_vm_rrds;
5151
check_rrd_hash Rrdd_shared.sr_rrds expected_sr_rrds;
5252
check_host_dss expected_host_dss
@@ -56,6 +56,7 @@ let update_rrds = "update_rrds" >::: let open Rrd in [
5656
~dss:[]
5757
~uuid_domids:[]
5858
~paused_vms:[]
59+
~rebooting_vms:[]
5960
~expected_vm_rrds:[]
6061
~expected_sr_rrds:[]
6162
~expected_host_dss:[];
@@ -64,6 +65,7 @@ let update_rrds = "update_rrds" >::: let open Rrd in [
6465
~dss:[(Host, ds_a)]
6566
~uuid_domids:[]
6667
~paused_vms:[]
68+
~rebooting_vms:[]
6769
~expected_vm_rrds:[]
6870
~expected_sr_rrds:[]
6971
~expected_host_dss:["ds_a"];
@@ -72,6 +74,7 @@ let update_rrds = "update_rrds" >::: let open Rrd in [
7274
~dss:[(Host, ds_a); (Host, ds_a)]
7375
~uuid_domids:[]
7476
~paused_vms:[]
77+
~rebooting_vms:[]
7578
~expected_vm_rrds:[]
7679
~expected_sr_rrds:[]
7780
~expected_host_dss:["ds_a"; "ds_a"];
@@ -80,6 +83,7 @@ let update_rrds = "update_rrds" >::: let open Rrd in [
8083
~dss:[(VM "a", ds_a)]
8184
~uuid_domids:[]
8285
~paused_vms:[]
86+
~rebooting_vms:[]
8387
~expected_vm_rrds:[]
8488
~expected_sr_rrds:[]
8589
~expected_host_dss:[];
@@ -88,6 +92,7 @@ let update_rrds = "update_rrds" >::: let open Rrd in [
8892
~dss:[(VM "a", ds_a); (VM "b", ds_a)]
8993
~uuid_domids:[]
9094
~paused_vms:[]
95+
~rebooting_vms:[]
9196
~expected_vm_rrds:[]
9297
~expected_sr_rrds:[]
9398
~expected_host_dss:[];
@@ -96,6 +101,7 @@ let update_rrds = "update_rrds" >::: let open Rrd in [
96101
~dss:[(VM "a", ds_a)]
97102
~uuid_domids:[("a", 1)]
98103
~paused_vms:[]
104+
~rebooting_vms:[]
99105
~expected_vm_rrds: ["a", ["ds_a"]]
100106
~expected_sr_rrds:[]
101107
~expected_host_dss:[];
@@ -104,6 +110,7 @@ let update_rrds = "update_rrds" >::: let open Rrd in [
104110
~dss:[(VM "a", ds_a); (VM "b", ds_a); (VM "b", ds_b)]
105111
~uuid_domids:[("a", 1); ("b", 1)]
106112
~paused_vms:[]
113+
~rebooting_vms:[]
107114
~expected_vm_rrds:["a", ["ds_a"]; "b", ["ds_a"; "ds_b"]]
108115
~expected_sr_rrds:[]
109116
~expected_host_dss:[];
@@ -112,6 +119,7 @@ let update_rrds = "update_rrds" >::: let open Rrd in [
112119
~dss:[(VM "a", ds_a); (VM "b", ds_a); (VM "c", ds_a)]
113120
~uuid_domids:[("a", 1); ("b", 1)]
114121
~paused_vms:[]
122+
~rebooting_vms:[]
115123
~expected_vm_rrds:["a", ["ds_a"]; "b", ["ds_a"]]
116124
~expected_sr_rrds:[]
117125
~expected_host_dss:[];
@@ -120,6 +128,7 @@ let update_rrds = "update_rrds" >::: let open Rrd in [
120128
~dss:[(SR "a", ds_a); (SR "b", ds_a); (SR "b", ds_b)]
121129
~uuid_domids:[]
122130
~paused_vms:[]
131+
~rebooting_vms:[]
123132
~expected_vm_rrds:[]
124133
~expected_sr_rrds:["a", ["ds_a"]; "b", ["ds_a"; "ds_b"]]
125134
~expected_host_dss:[];

0 commit comments

Comments
 (0)