Commit ab28adcd authored by Kirill Smelkov's avatar Kirill Smelkov

.

parent 86e5f70f
......@@ -168,17 +168,13 @@ type ΔBtail struct {
// XXX or ask client to provide db on every call?
db *zodb.DB // to open connections to load new/old tree|buckets
// tracked index: BTree|Bucket -> top tree element.
// XXX allow only single root (else it is "tree corrupt") ?
// XXX as of @head state
// trackIdx map[zodb.Oid]SetOid // oid -> {} roots
// tracked nodes index: node -> parent + accessed holes under this node
// we only allow single parent/root case and report "tree corrupt" otherwise.
// trackIdx describes @head state
trackIdx map[zodb.Oid]nodeTrack
// tracked objects that are not yet taken into account in current δBtail
trackNew SetOid
// tracked nodes index: node -> parent + accessed holes under this node
trackIdx map[zodb.Oid]nodeTrack
}
// XXX place
......@@ -206,7 +202,7 @@ type ΔRoots struct {
//
// See ΔBtail documentation for details.
type ΔTtail struct {
vδT []ΔTree // changes to tree keys; rev↑. covers keys ∈ tracket subset
vδT []ΔTree // changes to tree keys; rev↑. covers keys ∈ tracked subset
// {}k/v @tail for keys that are changed in (tail, head].
KVAtTail map[Key]Value
......@@ -233,7 +229,6 @@ func NewΔBtail(at0 zodb.Tid, db *zodb.DB) *ΔBtail {
return &ΔBtail{
δZtail: zodb.NewΔTail(at0),
byRoot: make(map[zodb.Oid]*ΔTtail),
// trackIdx: make(map[zodb.Oid]SetOid),
trackIdx: map[zodb.Oid]nodeTrack{},
db: db,
}
......@@ -274,10 +269,6 @@ const (
// XXX TrackMinKey (we don't need it in WCFS)
)
// XXX keep in trackedKeys only keys that are not present in btree - i.e. only negative entries
// -> this requires to merge δc returned by diffT and adjust bChildren to tail into
// -> it will use less memory and offload Track from (re)loading leaf bucket
// ... for now we go more simple way
func (δBtail *ΔBtail) Track(key Key, keyPresent bool, path []Node, flags TrackFlags) error { // XXX Tree|Bucket; path[0] = root
l := len(path)
if l == 0 {
......@@ -363,7 +354,7 @@ func (δBtail *ΔBtail) Update(δZ *zodb.EventCommit) (_ ΔB, err error) {
return δB, nil
}
// open ZODB connections correponding to "old" and "new" states
// open ZODB connections corresponding to "old" and "new" states
// TODO caller should provide one of those (probably new)
txn, ctx := transaction.New(context.TODO()) // XXX
defer txn.Abort()
......@@ -388,7 +379,7 @@ func (δBtail *ΔBtail) Update(δZ *zodb.EventCommit) (_ ΔB, err error) {
}
// XXX .δBtail <- (δZ.rev, [](root, []key))
// XXX rebuilf lastRevOf
// XXX rebuild lastRevOf
return δB, nil
}
......@@ -499,7 +490,7 @@ func (rs rangeSplit) Get_(k Key) (rnode *nodeInRange, ok bool) {
//
// rnode must be initially in *prs.
// rnode.node must be tree.
// rnode.node must be aleady activated.
// rnode.node must be already activated.
//
// inserted children is also returned for convenience.
func (prs *rangeSplit) Expand(rnode *nodeInRange) (children rangeSplit) {
......@@ -759,8 +750,6 @@ func diffT(ctx context.Context, a, b *Tree, δZTC SetOid, trackIdx map[zodb.Oid]
}
children := av.Expand(arn)
// fmt.Printf("Y children: %s\n", children)
// fmt.Printf("Y av: %s\n", av)
for _, rchild := range children {
coid := rchild.node.POid()
if !( δZTC.Has(coid) ||
......@@ -815,7 +804,7 @@ func diffT(ctx context.Context, a, b *Tree, δZTC SetOid, trackIdx map[zodb.Oid]
// Each delve for A or B, potentially adds new keys to process on the
// other side.
//
// XXX inneficient: we process each key separately, while they can be
// XXX inefficient: we process each key separately, while they can be
// processed in sorted batches.
for len(Aqueue) > 0 || len(Bqueue) > 0 {
fmt.Printf("\n")
......@@ -1159,7 +1148,7 @@ func __diffT(ctx context.Context, a, b *Tree, δZTC SetOid, trackIdx map[zodb.Oi
for child := range allChildren { // XXX -> sorted?
// add/del/modify, but child is not tracked - ignore
// XXX correct only in children from a? (b could have changed childeren to new objects)
// XXX correct only in children from a? (b could have changed children to new objects)
if !δZTC.Has(child) {
continue
}
......@@ -1456,7 +1445,7 @@ func vtree(v []TreeEntry) string {
return s
}
// vnode returns brief huan-readable representation of node.
// vnode returns brief human-readable representation of node.
func vnode(node Node) string {
kind := "?"
switch node.(type) {
......
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