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 01 of 17] [rpc-light] Make the abstraction layer more u

To: xen-api@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-API] [PATCH 01 of 17] [rpc-light] Make the abstraction layer more uniform, especially for the error handling
From: Thomas Gazagnaire <thomas.gazagnaire@xxxxxxxxxx>
Date: Fri, 8 Jan 2010 13:49:14 +0000
Delivery-date: Fri, 08 Jan 2010 05:49:48 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <patchbomb.1262958553@steel>
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>
Sender: xen-api-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User Thomas Gazagnaire <thomas.gazagnaire@xxxxxxxxxx>
# Date 1262958466 0
# Node ID 5158e68dfc6b17a197655390b0301bfd6fa603ea
# Parent  cbb5fc1d4be43b9a9a9243a551538d33ac909ef0
[rpc-light] Make the abstraction layer more uniform, especially for the error 
handling.

Indeed, XMLRPC and JSONRPC are a bit different on error handling, but abstract 
these minor differences away.

Signed-off-by: Thomas Gazagnaire <thomas.gazagnaire@xxxxxxxxxx>

diff -r cbb5fc1d4be4 -r 5158e68dfc6b rpc-light/jsonrpc.ml
--- a/rpc-light/jsonrpc.ml      Fri Jan 08 13:47:46 2010 +0000
+++ b/rpc-light/jsonrpc.ml      Fri Jan 08 13:47:46 2010 +0000
@@ -78,19 +78,19 @@
        ] in
        to_string json
 
-let string_of_response id response =
-       let json = match response with
-               | Success v ->
+let string_of_response response =
+       let json =
+               if response.Rpc.success then
                        `Dict [
-                               "result", v;
+                               "result", response.Rpc.contents;
                                "error", `None;
-                               "id", `Int id
+                               "id", `Int 0L
                        ]
-               | Fault f ->
+               else
                        `Dict [
                                "result", `None;
-                               "error", f;
-                               "id", `Int id
+                               "error", response.Rpc.contents;
+                               "id", `Int 0L
                        ] in
        to_string json
 
@@ -500,8 +500,8 @@
        | `Dict d ->
                let name = match get "method" d with `String s -> s | _ -> 
raise (Malformed_method_request str) in
                let params = match get "params" d with `List l -> l | _ -> 
raise (Malformed_method_request str) in
-               let id = match get "id" d with `Int i -> i | _ -> raise 
(Malformed_method_request str) in
-               id, { name = name; params = params }
+               let (_:int64) = match get "id" d with `Int i -> i | _ -> raise 
(Malformed_method_request str) in
+               { name = name; params = params }
        | _ -> raise (Malformed_method_request str)
 
 let response_of_string str =
@@ -509,11 +509,11 @@
        | `Dict d ->
                  let result = get "result" d in
                  let error = get "error" d in
-                 let id = match get "id" d with `Int i -> i | _ -> raise 
(Malformed_method_response str) in
+                 let (_:int64) = match get "id" d with `Int i -> i | _ -> 
raise (Malformed_method_response str) in
                  begin match result, error with
                          | `None, `None -> raise (Malformed_method_response 
str)
-                         | `None, v     -> id, Fault v
-                         | v, `None     -> id, Success v
+                         | `None, v     -> { Rpc.success = false; contents = v 
}
+                         | v, `None     -> { Rpc.success = true;  contents = v 
}
                          | _            -> raise (Malformed_method_response 
str)
                  end
        | _ -> raise (Malformed_method_response str)
diff -r cbb5fc1d4be4 -r 5158e68dfc6b rpc-light/jsonrpc.mli
--- a/rpc-light/jsonrpc.mli     Fri Jan 08 13:47:46 2010 +0000
+++ b/rpc-light/jsonrpc.mli     Fri Jan 08 13:47:46 2010 +0000
@@ -16,10 +16,10 @@
 val of_string : string -> Rpc.Val.t
 
 val string_of_call: Rpc.call -> string
-val call_of_string: string -> int64 * Rpc.call
+val call_of_string: string -> Rpc.call
 
-val string_of_response: int64 -> Rpc.Val.t Rpc.response -> string
-val response_of_string: string -> int64 * Rpc.Val.t Rpc.response
+val string_of_response: Rpc.response -> string
+val response_of_string: string -> Rpc.response
 
 
 
diff -r cbb5fc1d4be4 -r 5158e68dfc6b rpc-light/rpc.ml
--- a/rpc-light/rpc.ml  Fri Jan 08 13:47:46 2010 +0000
+++ b/rpc-light/rpc.ml  Fri Jan 08 13:47:46 2010 +0000
@@ -49,6 +49,7 @@
        params: Val.t list
 }
 
-type 'a response =
-       | Success of Val.t
-       | Fault of 'a
+type response = {
+       success: bool;
+       contents: Val.t
+}
diff -r cbb5fc1d4be4 -r 5158e68dfc6b rpc-light/xmlrpc.ml
--- a/rpc-light/xmlrpc.ml       Fri Jan 08 13:47:46 2010 +0000
+++ b/rpc-light/xmlrpc.ml       Fri Jan 08 13:47:46 2010 +0000
@@ -96,18 +96,10 @@
        let module B = Buffer in
        let buf = B.create 256 in
        let add = B.add_string buf in
-       begin match response with
-       | Rpc.Success v   ->
-               add "<?xml version=\"1.0\"?><methodResponse><params><param>";
-               add (to_string v);
-               add "</param></params></methodResponse>";
-       | Rpc.Fault (i,s) ->
-               add "<?xml 
version=\"1.0\"?><methodResponse><fault><value><struct><member><name>faultCode</name><value><int>";
-               add (Int64.to_string i);
-               add 
"</int></value></member><member><name>faultString</name><value><string>";
-               add s;
-               add 
"</string></value></member></struct></value></fault></methodResponse>";
-       end;
+       let v = `Dict [ (if response.Rpc.success then "success" else 
"failure"), response.Rpc.contents ] in
+       add "<?xml version=\"1.0\"?><methodResponse><params><param>";
+       add (to_string v);
+       add "</param></params></methodResponse>";
        B.contents buf
 
 exception Parse_error of string * Xmlm.signal * Xmlm.input
@@ -294,19 +286,15 @@
        | `Dtd _ -> ignore (Xmlm.input input)
        | _      -> () end;
        Parser.map_tag "methodResponse" (fun input ->
-               match Xmlm.peek input with
-               | `El_start ((_,"fault"),_) ->
-                       Parser.map_tag "fault" (fun input ->
+               Parser.map_tag "params" (fun input ->
+                       Parser.map_tag "param" (fun input ->
                                let signal = Xmlm.peek input in
                                match Parser.of_xml ?callback [] input with
-                                       | `Dict [ "faultCode", `Int i; 
"faultString", `String s ] -> Rpc.Fault (i, s)
-                                       | s -> parse_error (to_string s) signal 
input
+                               | `Dict [ "success", v ] -> { Rpc.success = 
true;  Rpc.contents = v }
+                               | `Dict [ "failure", v ] -> { Rpc.success = 
false; Rpc.contents = v }
+                               | v -> parse_error "response" signal input
                                ) input
-               | `El_start ((_,"params"),_) ->
-                       Parser.map_tag "params" (fun input ->
-                               Parser.map_tag "param" (fun input -> 
Rpc.Success (Parser.of_xml ?callback [] input)) input
-                               ) input
-               | s -> parse_error "response" s input
-               ) input 
+                       ) input
+               ) input
 
        
diff -r cbb5fc1d4be4 -r 5158e68dfc6b rpc-light/xmlrpc.mli
--- a/rpc-light/xmlrpc.mli      Fri Jan 08 13:47:46 2010 +0000
+++ b/rpc-light/xmlrpc.mli      Fri Jan 08 13:47:46 2010 +0000
@@ -18,5 +18,5 @@
 val string_of_call: Rpc.call -> string
 val call_of_string: ?callback:Rpc.callback -> string -> Rpc.call
 
-val string_of_response: (int64 * string) Rpc.response -> string
-val response_of_string: ?callback:Rpc.callback -> string -> (int64 * string) 
Rpc.response
+val string_of_response: Rpc.response -> string
+val response_of_string: ?callback:Rpc.callback -> string -> Rpc.response
5 files changed, 33 insertions(+), 44 deletions(-)
rpc-light/jsonrpc.ml  |   26 +++++++++++++-------------
rpc-light/jsonrpc.mli |    6 +++---
rpc-light/rpc.ml      |    7 ++++---
rpc-light/xmlrpc.ml   |   34 +++++++++++-----------------------
rpc-light/xmlrpc.mli  |    4 ++--


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

_______________________________________________
xen-api mailing list
xen-api@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/mailman/listinfo/xen-api
<Prev in Thread] Current Thread [Next in Thread>