[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 2/5] oxenstored: avoid leading slash in paths in saved store state
Internally, paths are represented as lists of strings, where * path "/" is represented by [] * path "/local/domain/0" is represented by ["local"; "domain"; "0"] (see comment for Store.Path.t). However, the traversal function generated paths like [""; "local"; "domain"; "0"] because the name of the root node is "". Change it to generate paths correctly. Furthermore, the function passed to Store.dump_fct would render the node "foo" under the path [] as "//foo". Change this to return "/foo". Signed-off-by: Jonathan Davies <jonathan.davies@xxxxxxxxxx> --- tools/ocaml/xenstored/store.ml | 8 +++++++- tools/ocaml/xenstored/xenstored.ml | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/tools/ocaml/xenstored/store.ml b/tools/ocaml/xenstored/store.ml index 9f619b8..13cf3b5 100644 --- a/tools/ocaml/xenstored/store.ml +++ b/tools/ocaml/xenstored/store.ml @@ -122,6 +122,11 @@ let of_string s = | "" :: path when is_valid path -> path | _ -> raise Define.Invalid_path +let of_path_and_name path name = + match path, name with + | [], "" -> [] + | _ -> path @ [name] + let create path connection_path = of_string (Utils.path_validate path connection_path) @@ -343,7 +348,8 @@ let path_exists store path = let traversal root_node f = let rec _traversal path node = f path node; - List.iter (_traversal (path @ [ Symbol.to_string node.Node.name ])) node.Node.children + let node_path = Path.of_path_and_name path (Symbol.to_string node.Node.name) in + List.iter (_traversal node_path) node.Node.children in _traversal [] root_node diff --git a/tools/ocaml/xenstored/xenstored.ml b/tools/ocaml/xenstored/xenstored.ml index 09da257..77fd9e3 100644 --- a/tools/ocaml/xenstored/xenstored.ml +++ b/tools/ocaml/xenstored/xenstored.ml @@ -213,7 +213,7 @@ let to_channel store cons chan = (* dump the store *) Store.dump_fct store (fun path node -> let name, perms, value = Store.Node.unpack node in - let fullpath = (Store.Path.to_string path) ^ "/" ^ name in + let fullpath = Store.Path.to_string (Store.Path.of_path_and_name path name) in let permstr = Perms.Node.to_string perms in fprintf chan "store,%s,%s,%s\n" (hexify fullpath) (hexify permstr) (hexify value) ); -- 2.7.4 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |