[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] oxenstored: handle unknown operations by returning an error to the client
# HG changeset patch # User Ian Campbell <ian.campbell@xxxxxxxxxx> # Date 1323967836 0 # Node ID a9d61ea9973abad4b7434f4c55fe5963bafe0156 # Parent 99caac2e35df41cbece606f663cb5570a62613c3 oxenstored: handle unknown operations by returning an error to the client Previous an unknown operation would be decoded as a Not_found exception which would bubble all the way up to the try ... with surrounding the call to main_loop where it would be logged and ignored. This would leave the guest hanging waiting for a response to the invalid request. Instead introduce a specific "Invalid" operation. Higher level functionality, such as Process.process_packet, already handles operations which are not understood with an error reply due to the final wildcard entry in Process.function_of_type but explicitly handle Invalid this way to make it clear what is going on. Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx> Acked-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx> Committed-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx> --- diff -r 99caac2e35df -r a9d61ea9973a tools/ocaml/libs/xb/op.ml --- a/tools/ocaml/libs/xb/op.ml Thu Dec 15 14:28:45 2011 +0100 +++ b/tools/ocaml/libs/xb/op.ml Thu Dec 15 16:50:36 2011 +0000 @@ -19,8 +19,7 @@ Transaction_end | Introduce | Release | Getdomainpath | Write | Mkdir | Rm | Setperms | Watchevent | Error | Isintroduced | - Resume | Set_target - | Restrict + Resume | Set_target | Restrict | Invalid let operation_c_mapping = [| Debug; Directory; Read; Getperms; @@ -41,7 +40,7 @@ let of_cval i = if i >= 0 && i < size then operation_c_mapping.(i) - else raise Not_found + else Invalid let to_cval op = array_search op operation_c_mapping @@ -69,3 +68,4 @@ | Resume -> "RESUME" | Set_target -> "SET_TARGET" | Restrict -> "RESTRICT" + | Invalid -> "INVALID" diff -r 99caac2e35df -r a9d61ea9973a tools/ocaml/libs/xb/xb.mli --- a/tools/ocaml/libs/xb/xb.mli Thu Dec 15 14:28:45 2011 +0100 +++ b/tools/ocaml/libs/xb/xb.mli Thu Dec 15 16:50:36 2011 +0000 @@ -23,6 +23,7 @@ | Resume | Set_target | Restrict + | Invalid (* Not a valid wire operation *) val operation_c_mapping : operation array val size : int val array_search : 'a -> 'a array -> int diff -r 99caac2e35df -r a9d61ea9973a tools/ocaml/xenstored/logging.ml --- a/tools/ocaml/xenstored/logging.ml Thu Dec 15 14:28:45 2011 +0100 +++ b/tools/ocaml/xenstored/logging.ml Thu Dec 15 16:50:36 2011 +0000 @@ -182,6 +182,7 @@ | Xenbus.Xb.Op.Error -> "error " | Xenbus.Xb.Op.Watchevent -> "w event " + | Xenbus.Xb.Op.Invalid -> "invalid " (* | x -> Xenbus.Xb.Op.to_string x *) diff -r 99caac2e35df -r a9d61ea9973a tools/ocaml/xenstored/process.ml --- a/tools/ocaml/xenstored/process.ml Thu Dec 15 14:28:45 2011 +0100 +++ b/tools/ocaml/xenstored/process.ml Thu Dec 15 16:50:36 2011 +0000 @@ -324,7 +324,8 @@ | Xenbus.Xb.Op.Resume -> reply_ack do_resume | Xenbus.Xb.Op.Set_target -> reply_ack do_set_target | Xenbus.Xb.Op.Restrict -> reply_ack do_restrict - | _ -> reply_ack do_error + | Xenbus.Xb.Op.Invalid -> reply_ack do_error + | _ -> reply_ack do_error let input_handle_error ~cons ~doms ~fct ~ty ~con ~t ~rid ~data = let reply_error e = diff -r 99caac2e35df -r a9d61ea9973a tools/ocaml/xenstored/xenstored.ml --- a/tools/ocaml/xenstored/xenstored.ml Thu Dec 15 14:28:45 2011 +0100 +++ b/tools/ocaml/xenstored/xenstored.ml Thu Dec 15 16:50:36 2011 +0000 @@ -43,9 +43,7 @@ debug "closing socket connection" in let process_fdset_with fds fct = - List.iter (fun fd -> - try try_fct fct (Connections.find cons fd) - with Not_found -> ()) fds + List.iter (fun fd -> try_fct fct (Connections.find cons fd)) fds in process_fdset_with rset Process.do_input; process_fdset_with wset Process.do_output _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |