Commit f626ec3e authored by Kirill Smelkov's avatar Kirill Smelkov

.

parent a39d91af
......@@ -751,11 +751,10 @@ ABcov:
b.done = true
}
// stop if r coverage is complete
// continue with next right bucket until r coverage is complete
if r.hi_ <= b.hi_ {
break
}
// continue with next right bucket
lo = b.hi_ + 1
}
}
......
......@@ -234,6 +234,7 @@ func (δBtail *ΔBtail) Tail() zodb.Tid { return δBtail.δZtail.Tail() }
// XXX path -> []oid ?
//
// XXX catch cycles on add?
// XXX no need to pass in key
func (δBtail *ΔBtail) Track(key Key, nodePath []Node) error { // XXX Tree|Bucket; path[0] = root
path := nodePathToPath(nodePath)
......@@ -339,20 +340,37 @@ func (δTtail *ΔTtail) rebuild(δZtail *zodb.ΔTail, db *zodb.DB) (δtrackSet P
// XXX update .KVAtTail, .lastRevOf
}
// an iteration closer to tail may turn out to add a key to the tracking set
// we have to recheck all entries past that revision for changes to that key
// an iteration closer to tail may turn out to add a key to the tracking set.
// We have to recheck all entries newer that revision for changes to that key
// for example:
//
// XXX
//
// restart from head and cycle until set of tracked keys does not grow anymore
// Implement this via restarting from head and cycling until
// set of tracked keys does not grow anymore.
if δtkeycov.Empty() {
break
}
top := &nodeInRange{prefix: nil, lo: KeyMin, hi_: KeyMax, node: root}
V := rangeSplit{top}
for _, r := δtkeycov.AllRanges() {
lo := r.lo
for {
b, err := V.GetToLeaf(ctx, lo)
if err != nil {
return nil, err
}
trackNew.AddPath(b.Path())
// continue with next right bucket until r coverage is complete
if r.hi_ <= b.hi_ {
break
}
lo = b.hi_ + 1
}
}
}
......
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