|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen stable-4.8] oxenstored: add transaction info relevant to history-tracking
commit 4f4596a0e90ebf7ed971b1949244e3b2cbed5d11
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:10:42 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.8
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxx
https://lists.xenproject.org/xen-changelog
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |