[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen master] oxenstored: do not commit read-only transactions
commit b2a4105820807beb85cfeeaf2dc3c8bb93cc6d0c Author: Thomas Sanders <thomas.sanders@xxxxxxxxxx> AuthorDate: Fri Mar 24 16:16:10 2017 +0000 Commit: Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx> CommitDate: Tue Mar 28 13:07:04 2017 +0100 oxenstored: do not commit read-only transactions The packet telling us to end the transaction has always carried an argument telling us whether to commit. If the transaction made no modifications to the tree, now we ignore that argument and do not commit: it is just a waste of effort. This makes read-only transactions immune to conflicts, and means that we do not need to store any of their details in the history that is used for assigning blame for conflicts. We count a transaction as a read-only transaction only if it contains no operations that modified the tree. This means that (for example) a transaction that creates a new node then deletes it would NOT count as read-only, even though it makes no change overall. A more sophisticated algorithm could judge the transaction based on comparison of its initial and final states, but this would add complexity and computational cost. Signed-off-by: Thomas Sanders <thomas.sanders@xxxxxxxxxx> Reviewed-by: Jonathan Davies <jonathan.davies@xxxxxxxxxx> --- tools/ocaml/xenstored/process.ml | 1 + tools/ocaml/xenstored/transaction.ml | 1 + 2 files changed, 2 insertions(+) diff --git a/tools/ocaml/xenstored/process.ml b/tools/ocaml/xenstored/process.ml index 88fea34..c1511c0 100644 --- a/tools/ocaml/xenstored/process.ml +++ b/tools/ocaml/xenstored/process.ml @@ -378,6 +378,7 @@ let do_transaction_end con t domains cons data = | x :: _ -> raise (Invalid_argument x) | _ -> raise Invalid_Cmd_Args in + let commit = commit && not (Transaction.is_read_only t) in let success = let commit = if commit then Some (fun con trans -> transaction_replay con trans domains cons) else None in History.end_transaction t con (Transaction.get_id t) commit in diff --git a/tools/ocaml/xenstored/transaction.ml b/tools/ocaml/xenstored/transaction.ml index edd1178..8f95301 100644 --- a/tools/ocaml/xenstored/transaction.ml +++ b/tools/ocaml/xenstored/transaction.ml @@ -128,6 +128,7 @@ let make ?(internal=false) id store = let get_store t = t.store let get_paths t = t.paths +let is_read_only t = t.paths = [] let add_wop t ty path = t.paths <- (ty, path) :: t.paths let add_operation ~perm t request response = if !Define.maxrequests >= 0 -- generated by git-patchbot for /home/xen/git/xen.git#master _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxx https://lists.xenproject.org/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |