diff options
Diffstat (limited to 'system/xen/xsa/xsa206-4.8-0016-oxenstored-trim-history-in-the-frequent_ops-function.patch')
-rw-r--r-- | system/xen/xsa/xsa206-4.8-0016-oxenstored-trim-history-in-the-frequent_ops-function.patch | 79 |
1 files changed, 0 insertions, 79 deletions
diff --git a/system/xen/xsa/xsa206-4.8-0016-oxenstored-trim-history-in-the-frequent_ops-function.patch b/system/xen/xsa/xsa206-4.8-0016-oxenstored-trim-history-in-the-frequent_ops-function.patch deleted file mode 100644 index 40102efceb..0000000000 --- a/system/xen/xsa/xsa206-4.8-0016-oxenstored-trim-history-in-the-frequent_ops-function.patch +++ /dev/null @@ -1,79 +0,0 @@ -From 26b15d4eb7ac71fcab28a7fca664afa0549c135c Mon Sep 17 00:00:00 2001 -From: Thomas Sanders <thomas.sanders@citrix.com> -Date: Tue, 28 Mar 2017 18:57:52 +0100 -Subject: [PATCH 16/15] oxenstored: trim history in the frequent_ops function - -We were trimming the history of commits only at the end of each -transaction (regardless of how it ended). - -Therefore if non-transactional writes were being made but no -transactions were being ended, the history would grow -indefinitely. Now we trim the history at regular intervals. - -Signed-off-by: Thomas Sanders <thomas.sanders@citrix.com> ---- - tools/ocaml/xenstored/history.ml | 6 +++--- - tools/ocaml/xenstored/transaction.ml | 8 ++++++-- - tools/ocaml/xenstored/xenstored.ml | 1 + - 3 files changed, 10 insertions(+), 5 deletions(-) - -diff --git a/tools/ocaml/xenstored/history.ml b/tools/ocaml/xenstored/history.ml -index 4079588..f39565b 100644 ---- a/tools/ocaml/xenstored/history.ml -+++ b/tools/ocaml/xenstored/history.ml -@@ -39,7 +39,8 @@ let mark_symbols () = - (* Keep only enough commit-history to protect the running transactions that we are still tracking *) - (* There is scope for optimisation here, replacing List.filter with something more efficient, - * probably on a different list-like structure. *) --let trim () = -+let trim ?txn () = -+ Transaction.trim_short_running_transactions txn; - history := match Transaction.oldest_short_running_transaction () with - | None -> [] (* We have no open transaction, so no history is needed *) - | Some (_, txn) -> ( -@@ -49,8 +50,7 @@ let trim () = - - let end_transaction txn con tid commit = - let success = Connection.end_transaction con tid commit in -- Transaction.end_transaction txn; -- trim (); -+ trim ~txn (); - success - - let push (x: history_record) = -diff --git a/tools/ocaml/xenstored/transaction.ml b/tools/ocaml/xenstored/transaction.ml -index da4a3e3..23e7ccf 100644 ---- a/tools/ocaml/xenstored/transaction.ml -+++ b/tools/ocaml/xenstored/transaction.ml -@@ -106,10 +106,14 @@ let oldest_short_running_transaction () = - | x :: xs -> last xs - in last !short_running_txns - --let end_transaction txn = -+let trim_short_running_transactions txn = - let cutoff = Unix.gettimeofday () -. !Define.conflict_max_history_seconds in -+ let keep = match txn with -+ | None -> (function (start_time, _) -> start_time >= cutoff) -+ | Some t -> (function (start_time, tx) -> start_time >= cutoff && tx != t) -+ in - short_running_txns := List.filter -- (function (start_time, tx) -> start_time >= cutoff && tx != txn) -+ keep - !short_running_txns - - let make ?(internal=false) id store = -diff --git a/tools/ocaml/xenstored/xenstored.ml b/tools/ocaml/xenstored/xenstored.ml -index 92ea99e..c45146d 100644 ---- a/tools/ocaml/xenstored/xenstored.ml -+++ b/tools/ocaml/xenstored/xenstored.ml -@@ -280,6 +280,7 @@ let _ = - * than the periodic_ops function *) - let frequent_ops () = - if Unix.gettimeofday () > !next_frequent_ops then ( -+ History.trim (); - Domains.incr_conflict_credit domains; - advance_next_frequent_ops () - ) in --- -1.7.9.5 - |