Commit 4d9005ee authored by Kirill Smelkov's avatar Kirill Smelkov

.

parent 4f3bd5d6
...@@ -53,12 +53,12 @@ package xbtree ...@@ -53,12 +53,12 @@ package xbtree
// traversal also belongs to the set. // traversal also belongs to the set.
// //
// A new Track request potentially grows tracked keys coverage. Due to this, // A new Track request potentially grows tracked keys coverage. Due to this,
// ΔBtail needs to recompute potentially whole vδT of the affected tree. This // on a query, ΔBtail needs to recompute potentially whole vδT of the affected
// recomputation is managed by "rebuild..." family of functions and uses the // tree. This recomputation is managed by "vδTSnapForTracked*" and "_rebuild"
// same treediff algorithm, that Update is using, but modulo PPTreeSubSet // functions and uses the same treediff algorithm, that Update is using, but
// corresponding to δ key coverage. Update also potentially needs to rebuild // modulo PPTreeSubSet corresponding to δ key coverage. Update also potentially
// whole vδT history, not only append new δT, because a change to tracked tree // needs to rebuild whole vδT history, not only append new δT, because a
// nodes can result in growth of tracked key coverage. // change to tracked tree nodes can result in growth of tracked key coverage.
// //
// Queries are relatively straightforward code that work on vδT snapshot. The // Queries are relatively straightforward code that work on vδT snapshot. The
// main complexity, besides BTree-diff algorithm, lies in recomputing vδT when // main complexity, besides BTree-diff algorithm, lies in recomputing vδT when
...@@ -68,6 +68,16 @@ package xbtree ...@@ -68,6 +68,16 @@ package xbtree
// //
// Concurrency // Concurrency
// //
// In order to allow multiple Track and queries requests to be served in
// parallel ΔBtail employs special organization of vδT rebuild process:
//
// 1. vδT is managed under read-copy-update (RCU) discipline: before making
// any vδT change the mutator atomically clones whole vδT and applies the
// change to the clone. This way a query, once it retrieves vδT snapshot,
// does not need to further synchronize with vδT mutators.
//
// 2.
//
// trackSet, ktrackNew, krebuildJobs + explain rebuild algo (query lock, check ktrackNew, krebuildJob, go/merge/...) // trackSet, ktrackNew, krebuildJobs + explain rebuild algo (query lock, check ktrackNew, krebuildJob, go/merge/...)
// //
// XXX queries work on vδT snapshot. When updated, vδT is modified via RCU ... // XXX queries work on vδT snapshot. When updated, vδT is modified via RCU ...
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment