Commit 5eb50c5f authored by Kirill Smelkov's avatar Kirill Smelkov

.

parent 6d77591b
...@@ -257,7 +257,9 @@ func (δBtail *ΔBtail) Track(key Key, keyPresent bool, path []Node, flags Track ...@@ -257,7 +257,9 @@ func (δBtail *ΔBtail) Track(key Key, keyPresent bool, path []Node, flags Track
panicf("node %s is reachable from multiple parents: %s %s", panicf("node %s is reachable from multiple parents: %s %s",
oid, track.parent, parent) oid, track.parent, parent)
} }
track.trackedKeys.Add(key) if track.trackedKeys != nil { // root always covers [-∞, ∞)
track.trackedKeys.Add(key)
}
parent = oid parent = oid
} }
...@@ -297,20 +299,32 @@ func (δBtail *ΔBtail) Update(δZ *zodb.EventCommit) (_ ΔB, err error) { ...@@ -297,20 +299,32 @@ func (δBtail *ΔBtail) Update(δZ *zodb.EventCommit) (_ ΔB, err error) {
fmt.Printf("trackIdx: %v\n", δBtail.trackIdx) fmt.Printf("trackIdx: %v\n", δBtail.trackIdx)
// {} root -> {oid} changed under that root in tracked set // {} root -> {oid} changed under that root in tracked set
rootOf := func(node zodb.Oid) (root zodb.Oid, ok bool) {
track, ok := δBtail.trackIdx[node]
if !ok {
return zodb.InvalidOid, false
}
for track.parent != zodb.InvalidOid {
node = track.parent
track = δBtail.trackIdx[node] // must be present
}
return node, true
}
δZByRoot := map[zodb.Oid]SetOid{} δZByRoot := map[zodb.Oid]SetOid{}
for _, oid := range δZ.Changev { for _, oid := range δZ.Changev {
roots, ok := δBtail.trackIdx[oid] root, ok := rootOf(oid)
if !ok { if !ok {
continue continue
} }
for root := range roots {
δZT, ok := δZByRoot[root] δZT, ok := δZByRoot[root]
if !ok { if !ok {
δZT = SetOid{} δZT = SetOid{}
δZByRoot[root] = δZT δZByRoot[root] = δZT
}
δZT.Add(oid)
} }
δZT.Add(oid)
} }
fmt.Println("δZByRoot:", δZByRoot) fmt.Println("δZByRoot:", δZByRoot)
......
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