Commit 899ca815 authored by Kirill Smelkov's avatar Kirill Smelkov

.

parent dd6ce1db
...@@ -1507,8 +1507,8 @@ func (δBtail *ΔBtail) ForgetPast(revCut zodb.Tid) { ...@@ -1507,8 +1507,8 @@ func (δBtail *ΔBtail) ForgetPast(revCut zodb.Tid) {
// //
// if revExact=False - rev is upper estimate for the revision. // if revExact=False - rev is upper estimate for the revision.
// //
// XXX at must ∈ (tail, head] // key must be tracked
// XXX key must be tracked // at must ∈ (tail, head]
// //
// XXX naming -> GetAt ? // XXX naming -> GetAt ?
func (δBtail *ΔBtail) Get(ctx context.Context, root *Tree, key Key, at zodb.Tid) (value Value, ok bool, rev zodb.Tid, revExact bool, err error) { func (δBtail *ΔBtail) Get(ctx context.Context, root *Tree, key Key, at zodb.Tid) (value Value, ok bool, rev zodb.Tid, revExact bool, err error) {
......
...@@ -648,7 +648,7 @@ func xverifyΔBTail_Update(t *testing.T, subj string, db *zodb.DB, treeRoot zodb ...@@ -648,7 +648,7 @@ func xverifyΔBTail_Update(t *testing.T, subj string, db *zodb.DB, treeRoot zodb
} }
t.Run(fmt.Sprintf(" track=%s", keys), func(t *testing.T) { t.Run(fmt.Sprintf(" track=%s", keys), func(t *testing.T) {
xverifyΔBTail_Update1(t, subj, db, treeRoot, t1.at,t2.at, t1.xkv,t2.xkv, t2.δZ, keys, kadj12) xverifyΔBTail_Update1(t, subj, db, treeRoot, t1.at,t2.at, t1.xkv,t2.xkv, t2.δZ, t2.δkv, keys, kadj12)
}) })
} }
}) })
...@@ -656,12 +656,10 @@ func xverifyΔBTail_Update(t *testing.T, subj string, db *zodb.DB, treeRoot zodb ...@@ -656,12 +656,10 @@ func xverifyΔBTail_Update(t *testing.T, subj string, db *zodb.DB, treeRoot zodb
// xverifyΔBTail_Update1 verifies how ΔBTail handles ZODB update at1->at2 from initial // xverifyΔBTail_Update1 verifies how ΔBTail handles ZODB update at1->at2 from initial
// tracked state defined by initialTrackedKeys. // tracked state defined by initialTrackedKeys.
func xverifyΔBTail_Update1(t *testing.T, subj string, db *zodb.DB, treeRoot zodb.Oid, at1,at2 zodb.Tid, xkv1,xkv2 RBucketSet, δZ *zodb.EventCommit, initialTrackedKeys SetKey, kadj KAdjMatrix) { func xverifyΔBTail_Update1(t *testing.T, subj string, db *zodb.DB, treeRoot zodb.Oid, at1,at2 zodb.Tid, xkv1,xkv2 RBucketSet, δZ *zodb.EventCommit, d12 map[Key]Δstring, initialTrackedKeys SetKey, kadj KAdjMatrix) {
X := exc.Raiseif X := exc.Raiseif
tracef("\n>>> Track=%s\n", initialTrackedKeys) tracef("\n>>> Track=%s\n", initialTrackedKeys)
d12 := kvdiff(xkvFlatten(xkv1), xkvFlatten(xkv2))
var kadjTracked SetKey = nil var kadjTracked SetKey = nil
var δT, δTok map[Key]Δstring = nil, nil var δT, δTok map[Key]Δstring = nil, nil
...@@ -880,24 +878,17 @@ func xverifyΔBTail_rebuild(t *testing.T, db *zodb.DB, treeRoot zodb.Oid, t0, t1 ...@@ -880,24 +878,17 @@ func xverifyΔBTail_rebuild(t *testing.T, db *zodb.DB, treeRoot zodb.Oid, t0, t1
t2.at: "at2", t2.at: "at2",
} }
fmt.Printf("@%s: %v\n", xat[t0.at], xkvFlatten(t0.xkv)) fmt.Printf("@%s: %v\n", xat[t0.at], t0.xkv.Flatten())
fmt.Printf("@%s: %v\n", xat[t1.at], xkvFlatten(t1.xkv)) fmt.Printf("@%s: %v\n", xat[t1.at], t1.xkv.Flatten())
fmt.Printf("@%s: %v\n", xat[t2.at], xkvFlatten(t2.xkv)) fmt.Printf("@%s: %v\n", xat[t2.at], t2.xkv.Flatten())
d01 := kvdiff(xkvFlatten(t0.xkv), xkvFlatten(t1.xkv))
d12 := kvdiff(xkvFlatten(t1.xkv), xkvFlatten(t2.xkv))
_ = d01
_ = d12
kadj01 := KAdj(t0,t1, allTestKeys(t0,t1,t2)) kadj01 := KAdj(t0,t1, allTestKeys(t0,t1,t2))
kadj12 := KAdj(t1,t2, allTestKeys(t0,t1,t2)) kadj12 := KAdj(t1,t2, allTestKeys(t0,t1,t2))
_ = kadj01 _ = kadj01
_ = kadj12
//ø := SetKey{}
ø := trackIndex{} ø := trackIndex{}
// verify t0 -> t1 Track(keys1) -> t2 Track(keys2) // verify t0 -> t1 Track(keys1) Rebuild -> t2 Track(keys2) Rebuild
// for all combinations of keys1 and keys2 // for all combinations of keys1 and keys2
for k1idx := range IntSets(len(tAllKeyv)) { for k1idx := range IntSets(len(tAllKeyv)) {
keys1 := SetKey{} keys1 := SetKey{}
...@@ -967,7 +958,6 @@ func xverifyΔBTail_rebuild_U(t *testing.T, δbtail *ΔBtail, ti, tj *tTreeCommi ...@@ -967,7 +958,6 @@ func xverifyΔBTail_rebuild_U(t *testing.T, δbtail *ΔBtail, ti, tj *tTreeCommi
δB, err := δbtail.Update(tj.δZ); X(err) δB, err := δbtail.Update(tj.δZ); X(err)
// XXX assert δB.Rev = tj.at; δB = δ(ti,tj)/initially tracked // XXX assert δB.Rev = tj.at; δB = δ(ti,tj)/initially tracked
δbtail.assertTrack(t, fmt.Sprintf("after Update(@%s→@%s)", xat[ti.at], xat[tj.at]), trackIdx, ø) δbtail.assertTrack(t, fmt.Sprintf("after Update(@%s→@%s)", xat[ti.at], xat[tj.at]), trackIdx, ø)
// XXX vδB=[ø]
_ = δB _ = δB
} }
...@@ -997,6 +987,7 @@ func xverifyΔBTail_rebuild_TR(t *testing.T, db *zodb.DB, δbtail *ΔBtail, tj * ...@@ -997,6 +987,7 @@ func xverifyΔBTail_rebuild_TR(t *testing.T, db *zodb.DB, δbtail *ΔBtail, tj *
// XXX assert vδB=[δ1/T(keys)] // XXX assert vδB=[δ1/T(keys)]
// XXX verify Get // XXX verify Get
// XXX verify SliceByRootRev // XXX verify SliceByRootRev
} }
...@@ -1015,7 +1006,7 @@ func ___xverifyΔBTail_Get(t *testing.T, db *zodb.DB, treeRoot zodb.Oid, vt ...* ...@@ -1015,7 +1006,7 @@ func ___xverifyΔBTail_Get(t *testing.T, db *zodb.DB, treeRoot zodb.Oid, vt ...*
for i := range vt { for i := range vt {
xat[vt[i].at] = fmt.Sprintf("at%d", i) xat[vt[i].at] = fmt.Sprintf("at%d", i)
fmt.Printf("@%s: %v\n", xat[vt[i].at], xkvFlatten(vt[i].xkv)) fmt.Printf("@%s: %v\n", xat[vt[i].at], vt[i].xkv.Flatten())
} }
tkeys := allTestKeys(vt...) tkeys := allTestKeys(vt...)
...@@ -1112,13 +1103,14 @@ func ΔBTest(xtest interface{}) ΔBTestEntry { ...@@ -1112,13 +1103,14 @@ func ΔBTest(xtest interface{}) ΔBTestEntry {
return test return test
} }
// ΔBCommit represent test commit changing a tree XXX // ΔBCommit represent test commit changing a tree.
type tTreeCommit struct { type tTreeCommit struct {
tree string // XXX +parent *tTreeCommit?
at zodb.Tid tree string // the tree in toplogy-encoding
δZ *zodb.EventCommit // δZ.tid == at at zodb.Tid // commit revision
xkv RBucketSet // full tree state as of @at δZ *zodb.EventCommit // raw ZODB changes; δZ.tid == at
// XXX do we also need δkv ? xkv RBucketSet // full tree state as of @at
δkv map[Key]Δstring // full tree-diff against parent
} }
// tZODBCacheEverything is workaround for ZODB/go not implementing real // tZODBCacheEverything is workaround for ZODB/go not implementing real
...@@ -1192,13 +1184,15 @@ func testΔBTail(t *testing.T, testq chan ΔBTestEntry) { ...@@ -1192,13 +1184,15 @@ func testΔBTail(t *testing.T, testq chan ΔBTestEntry) {
var t0 *tTreeCommit var t0 *tTreeCommit
t1 := &tTreeCommit{ t1 := &tTreeCommit{
tree: "ø", // initial tree: "ø", // initial XXX ok?
at: tg.head, at: tg.head,
δZ: nil, // XXX ok?
xkv: XGetTree(db, tg.head, tg.treeRoot), xkv: XGetTree(db, tg.head, tg.treeRoot),
δZ: nil, // XXX ok?
δkv: nil, // XXX ok?
} }
for test := range testq { for test := range testq {
t2 := XCommitTree(test.tree) t2 := XCommitTree(test.tree)
t2.δkv = kvdiff(t1.xkv.Flatten(), t2.xkv.Flatten())
subj := fmt.Sprintf("%s -> %s", t1.tree, t2.tree) subj := fmt.Sprintf("%s -> %s", t1.tree, t2.tree)
tracef("\n\n\n**** %s ****\n\n", subj) tracef("\n\n\n**** %s ****\n\n", subj)
...@@ -1221,16 +1215,6 @@ func testΔBTail(t *testing.T, testq chan ΔBTestEntry) { ...@@ -1221,16 +1215,6 @@ func testΔBTail(t *testing.T, testq chan ΔBTestEntry) {
xverifyΔBTail_rebuild(t, db, tg.treeRoot, t0,t1,t2) xverifyΔBTail_rebuild(t, db, tg.treeRoot, t0,t1,t2)
} }
/* XXX kill
xverifyΔBTail_Get(t, db, tg.treeRoot, t2)
xverifyΔBTail_Get(t, db, tg.treeRoot, t1, t2)
if t0 != nil {
xverifyΔBTail_Get(t, db, tg.treeRoot, t0, t1, t2)
}
// XXX ΔBTail.SliceByRootRev
*/
t0, t1 = t1, t2 t0, t1 = t1, t2
} }
} }
...@@ -1458,8 +1442,8 @@ func TestΔBTail(t *testing.T) { ...@@ -1458,8 +1442,8 @@ func TestΔBTail(t *testing.T) {
} }
// TestΔBTreeAllStructs verifies ΔBtail on tree topologies generated by AllStructs. // TestΔBTailAllStructs verifies ΔBtail on tree topologies generated by AllStructs.
func TestΔBTreeAllStructs(t *testing.T) { func TestΔBTailAllStructs(t *testing.T) {
X := exc.Raiseif X := exc.Raiseif
// considerations: // considerations:
...@@ -1663,8 +1647,8 @@ func TestKVTxt(t *testing.T) { ...@@ -1663,8 +1647,8 @@ func TestKVTxt(t *testing.T) {
} }
} }
// xkvFlatten converts xkv with bucket structure into regular dict. // Flatten converts xkv with bucket structure into regular dict.
func xkvFlatten(xkv RBucketSet) map[Key]string { func (xkv RBucketSet) Flatten() map[Key]string {
kv := make(map[Key]string) kv := make(map[Key]string)
for _, b := range xkv { for _, b := range xkv {
for k,v := range b.kv { for k,v := range b.kv {
......
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