[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen stable-4.7] oxenstored: add transaction info relevant to history-tracking
commit d431ba30ba27063bc043e483e63a9ff605d2cfdb Author: Jonathan Davies <jonathan.davies@xxxxxxxxxx> AuthorDate: Tue Mar 14 12:17:38 2017 +0000 Commit: Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx> CommitDate: Wed Apr 5 15:14:43 2017 +0100 oxenstored: add transaction info relevant to history-tracking Specifically: * retain the original store (not just the root) in full transactions * store commit count at the time of the start of the transaction Reported-by: Juergen Gross <jgross@xxxxxxxx> Signed-off-by: Jonathan Davies <jonathan.davies@xxxxxxxxxx> Reviewed-by: Thomas Sanders <thomas.sanders@xxxxxxxxxx> Reviewed-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx> Reviewed-by: Christian Lindig <christian.lindig@xxxxxxxxxx> --- tools/ocaml/xenstored/process.ml | 2 +- tools/ocaml/xenstored/transaction.ml | 12 ++++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/tools/ocaml/xenstored/process.ml b/tools/ocaml/xenstored/process.ml index 7b60376..5f92044 100644 --- a/tools/ocaml/xenstored/process.ml +++ b/tools/ocaml/xenstored/process.ml @@ -301,7 +301,7 @@ let transaction_replay c t doms cons = | Transaction.No -> error "attempted to replay a non-full transaction"; false - | Transaction.Full(id, oldroot, cstore) -> + | Transaction.Full(id, oldstore, cstore) -> let tid = Connection.start_transaction c cstore in let new_t = Transaction.make tid cstore in let con = sprintf "r(%d):%s" id (Connection.get_domstr c) in diff --git a/tools/ocaml/xenstored/transaction.ml b/tools/ocaml/xenstored/transaction.ml index 6f758ff..b1791b3 100644 --- a/tools/ocaml/xenstored/transaction.ml +++ b/tools/ocaml/xenstored/transaction.ml @@ -73,12 +73,13 @@ let can_coalesce oldroot currentroot path = type ty = No | Full of ( int * (* Transaction id *) - Store.Node.t * (* Original root *) + Store.t * (* Original store *) Store.t (* A pointer to the canonical store: its root changes on each transaction-commit *) ) type t = { ty: ty; + start_count: int64; store: Store.t; (* This is the store that we change in write operations. *) quota: Quota.t; mutable paths: (Xenbus.Xb.Op.operation * Store.Path.t) list; @@ -87,10 +88,13 @@ type t = { mutable write_lowpath: Store.Path.t option; } +let counter = ref 0L + let make id store = - let ty = if id = none then No else Full(id, Store.get_root store, store) in + let ty = if id = none then No else Full(id, Store.copy store, store) in { ty = ty; + start_count = !counter; store = if id = none then store else Store.copy store; quota = Quota.copy store.Store.quota; paths = []; @@ -161,7 +165,7 @@ let commit ~con t = let has_commited = match t.ty with | No -> true - | Full (id, oldroot, cstore) -> (* "cstore" meaning current canonical store *) + | Full (id, oldstore, cstore) -> (* "cstore" meaning current canonical store *) let commit_partial oldroot cstore store = (* get the lowest path of the query and verify that it hasn't been modified by others transactions. *) @@ -204,7 +208,7 @@ let commit ~con t = if !test_eagain && Random.int 3 = 0 then false else - try_commit oldroot cstore t.store + try_commit (Store.get_root oldstore) cstore t.store in if has_commited && has_write_ops then Disk.write t.store; -- generated by git-patchbot for /home/xen/git/xen.git#stable-4.7 _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxx https://lists.xenproject.org/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |