Commit 1476e602 authored by Kirill Smelkov's avatar Kirill Smelkov

.

parent 312d0f25
...@@ -69,7 +69,9 @@ package xbtree ...@@ -69,7 +69,9 @@ package xbtree
// Concurrency // Concurrency
// //
// In order to allow multiple Track and queries requests to be served in // In order to allow multiple Track and queries requests to be served in
// parallel ΔBtail employs special organization of vδT rebuild process: // parallel ΔBtail employs special organization of vδT rebuild process where
// complexity of concurrency is reduced to math on merging updates to vδT and
// trackSet, and on key range lookup:
// //
// 1. vδT is managed under read-copy-update (RCU) discipline: before making // 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 its // any vδT change the mutator atomically clones whole vδT and applies its
...@@ -117,13 +119,21 @@ package xbtree ...@@ -117,13 +119,21 @@ package xbtree
// //
// vδT/(T₁∪T₂) = vδT/T₁ | vδT/T₂ // vδT/(T₁∪T₂) = vδT/T₁ | vδT/T₂
// //
// i.e. vδT computed for tracked set being union of T₁ and T₂ is the same // ( i.e. vδT computed for tracked set being union of T₁ and T₂ is the
// as merge of vδT computed for tracked set T₁ and vδT computed for tracked // same as merge of vδT computed for tracked set T₁ and vδT computed
// set T₂. // for tracked set T₂ )
// //
// this merge property allows to run computation for δ(vδT) independently // and that
// and with ΔBtail unlocked, which in turn enables running several //
// Track/queries in parallel. // trackSet | (δPP₁|δPP₂) = (trackSet|δPP₁) | (trackSet|δPP₂)
//
// ( i.e. tracking set updated for union of δPP₁ and δPP₂ is the same
// as union of tracking set updated with δPP₁ and tracking set updated
// with δPP₂ )
//
// these merge properties allow to run computation for δ(vδT) and δ(trackSet)
// independently and with ΔBtail unlocked, which in turn enables running
// several Track/queries in parallel.
// //
// 4. while vδT rebuild is being run, krebuildJobs keeps corresponding keycov // 4. while vδT rebuild is being run, krebuildJobs keeps corresponding keycov
// entry to indicate in-progress rebuild. Should a query need vδT for keys // entry to indicate in-progress rebuild. Should a query need vδT for keys
......
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