Commit 057ec71c authored by Kirill Smelkov's avatar Kirill Smelkov

.

parent 7f4143fc
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
package main package main
// XXX doc (2 ways of testing: explicit + allstructs), treegen py helper
import ( import (
"bufio" "bufio"
"context" "context"
...@@ -108,11 +110,10 @@ func StartTreeGen(zurl string) (_ *TreeGen, err error) { ...@@ -108,11 +110,10 @@ func StartTreeGen(zurl string) (_ *TreeGen, err error) {
return nil, fmt.Errorf("root: %s", err) return nil, fmt.Errorf("root: %s", err)
} }
//fmt.Printf("XXX started @%s root=%s\n", tg.head, tg.treeRoot)
return tg, nil return tg, nil
} }
// Close shutdowns the generator. // Close shutdowns treegen server.
func (tg *TreeGen) Close() (err error) { func (tg *TreeGen) Close() (err error) {
defer xerr.Contextf(&err, "treegen %s: close", tg.zurl) defer xerr.Contextf(&err, "treegen %s: close", tg.zurl)
...@@ -125,7 +126,6 @@ func (tg *TreeGen) Close() (err error) { ...@@ -125,7 +126,6 @@ func (tg *TreeGen) Close() (err error) {
// Commit creates new commit with underlying tree changed to tree topology. // Commit creates new commit with underlying tree changed to tree topology.
func (tg *TreeGen) Commit(tree string) (_ zodb.Tid, err error) { func (tg *TreeGen) Commit(tree string) (_ zodb.Tid, err error) {
defer xerr.Contextf(&err, "treegen %s: commit %s", tg.zurl, tree) defer xerr.Contextf(&err, "treegen %s: commit %s", tg.zurl, tree)
fmt.Printf("commit %s ...\n", tree)
_, err = io.WriteString(tg.pyin, tree + "\n") _, err = io.WriteString(tg.pyin, tree + "\n")
if err != nil { if err != nil {
...@@ -147,11 +147,10 @@ func (tg *TreeGen) Commit(tree string) (_ zodb.Tid, err error) { ...@@ -147,11 +147,10 @@ func (tg *TreeGen) Commit(tree string) (_ zodb.Tid, err error) {
} }
// XGetTree loads LOBtree from zurl@at->obj<root>. // XGetTree loads Tree from zurl@at->obj<root>.
// Tree values must be ZBlk whose data is returned instead of references to ZBlk. // Tree values must be ZBlk whose data is returned instead of references to ZBlk objects.
func XGetTree(db *zodb.DB, at zodb.Tid, root zodb.Oid) map[Key]string { func XGetTree(db *zodb.DB, at zodb.Tid, root zodb.Oid) map[Key]string {
defer exc.Contextf("%s: @%s: get tree %s", db.Storage().URL(), at, root) defer exc.Contextf("%s: @%s: get tree %s", db.Storage().URL(), at, root)
X := exc.Raiseif X := exc.Raiseif
txn, ctx := transaction.New(context.Background()) txn, ctx := transaction.New(context.Background())
...@@ -164,6 +163,8 @@ func XGetTree(db *zodb.DB, at zodb.Tid, root zodb.Oid) map[Key]string { ...@@ -164,6 +163,8 @@ func XGetTree(db *zodb.DB, at zodb.Tid, root zodb.Oid) map[Key]string {
exc.Raisef("expected %s, got %s", typeOf(ztree), typeOf(xztree)) exc.Raisef("expected %s, got %s", typeOf(ztree), typeOf(xztree))
} }
// XXX better load through direct nodes traversal, not via bucket.next?
// (firstbucket and .next might be broken)
err = ztree.PActivate(ctx); X(err) err = ztree.PActivate(ctx); X(err)
defer ztree.PDeactivate() defer ztree.PDeactivate()
zbucket := ztree.FirstBucket() zbucket := ztree.FirstBucket()
...@@ -288,6 +289,28 @@ func TestΔBTail(t *testing.T) { ...@@ -288,6 +289,28 @@ func TestΔBTail(t *testing.T) {
err := db.Close(); X(err) err := db.Close(); X(err)
}() }()
// XCommitTree calls tg.Commit and returns δZ corresponding to made transaction.
XCommitTree := func(tree string) *zodb.EventCommit {
defer exc.Contextf("commit %s", tree)
watchq := make(chan zodb.Event)
at0 := zstor.AddWatch(watchq)
defer zstor.DelWatch(watchq)
tid, err := tg.Commit(tree); X(err)
if !(tid > at0) {
exc.Raisef("treegen -> %s ; want > %s", tid, at0)
}
zevent := <-watchq
δZ := zevent.(*zodb.EventCommit)
if δZ.Tid != tid {
exc.Raisef("treegen -> %s ; watchq -> %s", tid, δZ)
}
return δZ
}
/* /*
XXX := func(tree1, tree2 string) { XXX := func(tree1, tree2 string) {
// XXX commit tree1 // XXX commit tree1
...@@ -320,11 +343,11 @@ func TestΔBTail(t *testing.T) { ...@@ -320,11 +343,11 @@ func TestΔBTail(t *testing.T) {
at1 := tg.head at1 := tg.head
kv1 := XGetTree(db, at1, tg.treeRoot) kv1 := XGetTree(db, at1, tg.treeRoot)
for _, tree := range testv { for _, tree := range testv {
at2, err := tg.Commit(tree); X(err) // tree2 δZ := XCommitTree(tree) // tree2
at2 := δZ.Tid
//at2, err := tg.Commit(tree); X(err) // tree2
kv2 := XGetTree(db, at2, tg.treeRoot) kv2 := XGetTree(db, at2, tg.treeRoot)
var δZ *zodb.EventCommit // XXX
verifyΔBTail(t, db, tg.treeRoot, at1,at2, kv1,kv2, δZ) verifyΔBTail(t, db, tg.treeRoot, at1,at2, kv1,kv2, δZ)
at1 = at2 at1 = at2
......
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