Commit 9de107fe authored by Kirill Smelkov's avatar Kirill Smelkov

go/zodb/fs1tools: Dump

Add various FileStorage-specific dump commands with output being
bit-to-bit exact with the following ZODB/py FileStorage tools:

- fsdump.py
- fsdump.py (verbose dumper)
- fstail.py

Please see the patch for links about this dump formats.
parent db167e69
// Copyright (C) 2017 Nexedi SA and Contributors.
// Kirill Smelkov <kirr@nexedi.com>
//
// This program is free software: you can Use, Study, Modify and Redistribute
// it under the terms of the GNU General Public License version 3, or (at your
// option) any later version, as published by the Free Software Foundation.
//
// You can also Link and Combine this program with other software covered by
// the terms of any of the Free Software licenses or any of the Open Source
// Initiative approved licenses and Convey the resulting work. Corresponding
// source of such a combination shall include the source code for all other
// software used.
//
// This program is distributed WITHOUT ANY WARRANTY; without even the implied
// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
//
// See COPYING file for full licensing terms.
// See https://www.nexedi.com/licensing for rationale and options.
package fs1tools
// various dumping routines / subcommands
import (
"crypto/sha1"
"flag"
"fmt"
"io"
"os"
"lab.nexedi.com/kirr/neo/go/zodb"
"lab.nexedi.com/kirr/neo/go/zodb/storage/fs1"
"lab.nexedi.com/kirr/go123/prog"
"lab.nexedi.com/kirr/go123/xbytes"
"lab.nexedi.com/kirr/go123/xerr"
"lab.nexedi.com/kirr/go123/xfmt"
)
// Dumper is interface to implement various dumping modes
type Dumper interface {
// DumperName defines concise name to use in error-reporting when using this dumper.
DumperName() string
// DumpFileHeader dumps fh to buf
DumpFileHeader(buf *xfmt.Buffer, fh *fs1.FileHeader) error
// DumpTxn dumps current transaction from it to buf.
//
// It is dumper responsibility to iterate over data records inside
// transaction if it needs to dump information about data records.
//
// If dumper return io.EOF the whole dumping process finishes.
DumpTxn(buf *xfmt.Buffer, it *fs1.Iter) error
}
// Dump dumps content of a FileStorage file @ path.
//
// To do so it reads file header and then iterates over all transactions in the file.
// The logic to actually output information and, if needed read/process data, should be implemented by Dumper d.
func Dump(w io.Writer, path string, dir fs1.IterDir, d Dumper) (err error) {
defer xerr.Contextf(&err, "%s: %s", d.DumperName(), path)
it, f, err := fs1.IterateFile(path, dir)
if err != nil {
return err
}
defer func() {
err2 := f.Close()
err = xerr.First(err, err2)
}()
// buffer for formatting
buf := &xfmt.Buffer{}
flushBuf := func() error {
_, err := w.Write(buf.Bytes())
buf.Reset()
return err
}
// make sure to flush buffer on return
defer func() {
err2 := flushBuf()
err = xerr.First(err, err2)
}()
// file header
var fh fs1.FileHeader
err = fh.Load(it.R)
if err != nil {
return err
}
err = d.DumpFileHeader(buf, &fh)
if err != nil {
return err
}
// iter over txn/data
for {
err = it.NextTxn(fs1.LoadAll)
if err != nil {
if err == io.EOF {
err = nil
}
return err
}
err = d.DumpTxn(buf, it)
if err != nil {
if err == io.EOF {
err = nil
}
return err
}
err = flushBuf()
if err != nil {
return err
}
}
}
// ----------------------------------------
// DumperFsDump implements dumping with the same format as in fsdump/py
// originally written by Jeremy Hylton:
//
// https://github.com/zopefoundation/ZODB/blob/master/src/ZODB/FileStorage/fsdump.py
// https://github.com/zopefoundation/ZODB/commit/ddcb46a2
type DumperFsDump struct {
ntxn int // current transaction record #
// for loading data
dhLoading fs1.DataHeader
}
func (d *DumperFsDump) DumperName() string {
return "fsdump"
}
func (d *DumperFsDump) DumpFileHeader(buf *xfmt.Buffer, fh *fs1.FileHeader) error {
return nil
}
func (d *DumperFsDump) DumpTxn(buf *xfmt.Buffer, it *fs1.Iter) error {
txnh := &it.Txnh
buf .S("Trans #")
buf .S(fmt.Sprintf("%05d", d.ntxn)) // XXX -> .D_f("05", d.ntxn)
buf .S(" tid=") .V(txnh.Tid)
buf .S(" time=") .V(txnh.Tid.Time())
// XXX here fsdump/py prints position of first data record, NOT transaction start!
buf .S(" offset=") .D64(/*txnh.Pos*/ txnh.DataPos())
buf .S("\n status=") .Qpycb(byte(txnh.Status))
buf .S(" user=") .Qpyb(txnh.User)
buf .S(" description=") .Qpyb(txnh.Description) .S("\n")
d.ntxn++
for j := 0; ; j++ {
err := it.NextData()
if err != nil {
if err == io.EOF {
err = nil
}
return err
}
dh := &it.Datah
buf .S(" data #")
buf .S(fmt.Sprintf("%05d", j)) // XXX -> .D_f("05", j)
buf .S(" oid=") .V(dh.Oid)
// load actual data
d.dhLoading = *dh
dbuf, err := d.dhLoading.LoadData(it.R)
if err != nil {
return err
}
if dbuf.Data == nil {
buf .S(" class=undo or abort of object creation")
} else {
fullclass := zodb.PyData(dbuf.Data).ClassName()
buf .S(" size=") .D64(d.dhLoading.DataLen)
buf .S(" class=") .S(fullclass)
}
if dh.DataLen == 0 && dbuf.Data != nil {
// it was backpointer - print tid of transaction it points to
buf .S(" bp=") .V(d.dhLoading.Tid)
}
buf .S("\n")
dbuf.Release()
}
}
// DumperFsDumpVerbose implements a very verbose dumper with output identical
// to fsdump.Dumper in zodb/py originally written by Jeremy Hylton:
//
// https://github.com/zopefoundation/ZODB/blob/master/src/ZODB/FileStorage/fsdump.py
// https://github.com/zopefoundation/ZODB/commit/4d86e4e0
type DumperFsDumpVerbose struct {
}
func (d *DumperFsDumpVerbose) DumperName() string {
return "fsdumpv"
}
func (d *DumperFsDumpVerbose) DumpFileHeader(buf *xfmt.Buffer, fh *fs1.FileHeader) error {
for i := 0; i < 60; i++ {
buf .S("*")
}
buf .S("\n")
buf .S("file identifier: ") .Qpyb(fh.Magic[:]) .S("\n")
return nil
}
func (d *DumperFsDumpVerbose) DumpTxn(buf *xfmt.Buffer, it *fs1.Iter) error {
txnh := &it.Txnh
for i := 0; i < 60; i++ {
buf .S("=")
}
buf .S("\noffset: ") .D64(txnh.Pos)
buf .S("\nend pos: ") .D64(txnh.Pos + txnh.Len /* py does not account for redundant len size */- 8)
buf .S("\ntransaction id: ") .V(txnh.Tid)
buf .S("\ntrec len: ") .D64(txnh.Len /* py len ^^^ */- 8)
buf .S("\nstatus: ") .Qpycb(byte(txnh.Status))
buf .S("\nuser: ") .Qpyb(txnh.User)
buf .S("\ndescription: ") .Qpyb(txnh.Description)
buf .S("\nlen(extra): ") .D(len(txnh.Extension))
buf .S("\n")
for {
err := it.NextData()
if err != nil {
if err == io.EOF {
break
}
return err
}
err = d.dumpData(buf, it)
if err != nil {
return err
}
}
// NOTE printing the same .Len twice
// we do not print/check redundant len here because our
// FileStorage code checks/reports this itself
buf .S("redundant trec len: ") .D64(it.Txnh.Len /* py len ^^^ */- 8) .S("\n")
return nil
}
func (d *DumperFsDumpVerbose) dumpData(buf *xfmt.Buffer, it *fs1.Iter) error {
dh := &it.Datah
for i := 0; i < 60; i++ {
buf .S("-")
}
buf .S("\noffset: ") .D64(dh.Pos)
buf .S("\noid: ") .V(dh.Oid)
buf .S("\nrevid: "). V(dh.Tid)
buf .S("\nprevious record offset: ") .D64(dh.PrevRevPos)
buf .S("\ntransaction offset: ") .D64(dh.TxnPos)
buf .S("\nlen(data): ") .D64(dh.DataLen)
if dh.DataLen == 0 {
backPos, err := dh.LoadBackRef(it.R)
if err != nil {
return err // XXX err ctx
}
buf .S("\nbackpointer: ") .D64(backPos)
}
buf .S("\n")
return nil
}
const dumpSummary = "dump database transactions"
func dumpUsage(w io.Writer) {
fmt.Fprintf(w,
`Usage: fs1 dump [options] <storage>
Dump transactions from a FileStorage
<storage> is a path to FileStorage
options:
-h --help this help text.
-v verbose mode.
`)
}
func dumpMain(argv []string) {
var verbose bool
flags := flag.FlagSet{Usage: func() { dumpUsage(os.Stderr) }}
flags.Init("", flag.ExitOnError)
flags.BoolVar(&verbose, "v", verbose, "verbose mode")
flags.Parse(argv[1:])
argv = flags.Args()
if len(argv) < 1 {
flags.Usage()
prog.Exit(2)
}
storPath := argv[0]
var d Dumper
if verbose {
d = &DumperFsDumpVerbose{}
} else {
d = &DumperFsDump{}
}
err := Dump(os.Stdout, storPath, fs1.IterForward, d)
if err != nil {
prog.Fatal(err)
}
}
// ----------------------------------------
// DumperFsTail implements dumping with the same format as in fstail/py
// originally written by Jeremy Hylton:
//
// https://github.com/zopefoundation/ZODB/blob/master/src/ZODB/scripts/fstail.py
// https://github.com/zopefoundation/ZODB/commit/551122cc
type DumperFsTail struct {
Ntxn int // max # of transactions to dump
data []byte // buffer for reading txn data
}
func (d *DumperFsTail) DumperName() string {
return "fstail"
}
func (d *DumperFsTail) DumpFileHeader(buf *xfmt.Buffer, fh *fs1.FileHeader) error {
return nil
}
func (d *DumperFsTail) DumpTxn(buf *xfmt.Buffer, it *fs1.Iter) error {
if d.Ntxn == 0 {
return io.EOF
}
d.Ntxn--
txnh := &it.Txnh
// read raw data inside transaction record
dataLen := txnh.DataLen()
d.data = xbytes.Realloc64(d.data, dataLen)
_, err := it.R.ReadAt(d.data, txnh.DataPos())
if err != nil {
if err == io.EOF {
err = io.ErrUnexpectedEOF
}
// XXX dup wrt fs1.TxnHeader.err && ioname()
ioname := ""
if rn, ok := it.R.(interface{ Name() string }); ok {
ioname = rn.Name()
}
return &fs1.RecordError{ioname, "transaction record", txnh.Pos, "read data payload", err}
}
// print information about read txn record
dataSha1 := sha1.Sum(d.data)
buf .V(txnh.Tid.Time()) .S(": hash=") .Xb(dataSha1[:])
// fstail.py uses repr to print user/description:
// https://github.com/zopefoundation/ZODB/blob/5.2.0-5-g6047e2fae/src/ZODB/scripts/fstail.py#L39
buf .S("\nuser=") .Qpyb(txnh.User) .S(" description=") .Qpyb(txnh.Description)
// NOTE at runtime: in zodb/py .length is len - 8, in zodb/go - whole txn record length
buf .S(" length=") .D64(txnh.Len - 8)
buf .S(" offset=") .D64(txnh.Pos) .S(" (+") .D64(txnh.HeaderLen()) .S(")\n\n")
return nil
}
const tailSummary = "dump last few transactions of a database"
const ntxnDefault = 10
func tailUsage(w io.Writer) {
fmt.Fprintf(w,
`Usage: fs1 tail [options] <storage>
Dump transactions from a FileStorage in reverse order
<storage> is a path to FileStorage
options:
-h --help this help text.
-n <N> output the last <N> transactions (default %d).
`, ntxnDefault)
}
func tailMain(argv []string) {
ntxn := ntxnDefault
flags := flag.FlagSet{Usage: func() { tailUsage(os.Stderr) }}
flags.Init("", flag.ExitOnError)
flags.IntVar(&ntxn, "n", ntxn, "output the last <N> transactions")
flags.Parse(argv[1:])
argv = flags.Args()
if len(argv) < 1 {
flags.Usage()
prog.Exit(2)
}
storPath := argv[0]
err := Dump(os.Stdout, storPath, fs1.IterBackward, &DumperFsTail{Ntxn: ntxn})
if err != nil {
prog.Fatal(err)
}
}
// Copyright (C) 2017 Nexedi SA and Contributors.
// Kirill Smelkov <kirr@nexedi.com>
//
// This program is free software: you can Use, Study, Modify and Redistribute
// it under the terms of the GNU General Public License version 3, or (at your
// option) any later version, as published by the Free Software Foundation.
//
// You can also Link and Combine this program with other software covered by
// the terms of any of the Free Software licenses or any of the Open Source
// Initiative approved licenses and Convey the resulting work. Corresponding
// source of such a combination shall include the source code for all other
// software used.
//
// This program is distributed WITHOUT ANY WARRANTY; without even the implied
// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
//
// See COPYING file for full licensing terms.
// See https://www.nexedi.com/licensing for rationale and options.
package fs1tools
//go:generate sh -c "python2 -m ZODB.scripts.fstail -n 1000000 ../testdata/1.fs >testdata/1.fstail.ok"
//go:generate sh -c "python2 -c 'from ZODB.FileStorage import fsdump; fsdump.main()' ../testdata/1.fs >testdata/1.fsdump.ok"
//go:generate sh -c "python2 -c 'from ZODB.FileStorage.fsdump import Dumper; import sys; d = Dumper(sys.argv[1]); d.dump()' ../testdata/1.fs >testdata/1.fsdumpv.ok"
// fstail.py crashes on empty.fs . The output should be empty file so generate it with just echo.
////go:generate sh -c "python2 -m ZODB.scripts.fstail -n 1000000 ../testdata/empty.fs >testdata/empty.fstail.ok"
//go:generate sh -c "echo -n >testdata/empty.fstail.ok"
//go:generate sh -c "python2 -c 'from ZODB.FileStorage import fsdump; fsdump.main()' ../testdata/empty.fs >testdata/empty.fsdump.ok"
//go:generate sh -c "python2 -c 'from ZODB.FileStorage.fsdump import Dumper; import sys; d = Dumper(sys.argv[1]); d.dump()' ../testdata/empty.fs >testdata/empty.fsdumpv.ok"
import (
"bytes"
"fmt"
"io/ioutil"
"testing"
"lab.nexedi.com/kirr/neo/go/zodb/storage/fs1"
"github.com/kylelemons/godebug/diff"
)
func loadFile(t *testing.T, path string) string {
data, err := ioutil.ReadFile(path)
if err != nil {
t.Fatal(err)
}
return string(data)
}
func testDump(t *testing.T, dir fs1.IterDir, d Dumper) {
testv := []string{"1", "empty"}
for _, tt := range testv {
t.Run("db=" + tt, func(t *testing.T) {
buf := bytes.Buffer{}
err := Dump(&buf, fmt.Sprintf("../testdata/%s.fs", tt), dir, d)
if err != nil {
t.Fatalf("%s: %v", d.DumperName(), err)
}
dumpOk := loadFile(t, fmt.Sprintf("testdata/%s.%s.ok", tt, d.DumperName()))
if dumpOk != buf.String() {
t.Errorf("%s: dump different:\n%v", d.DumperName(), diff.Diff(dumpOk, buf.String()))
}
})
}
}
func TestFsDump(t *testing.T) { testDump(t, fs1.IterForward, &DumperFsDump{}) }
func TestFsDumpv(t *testing.T) { testDump(t, fs1.IterForward, &DumperFsDumpVerbose{}) }
func TestFsTail(t *testing.T) { testDump(t, fs1.IterBackward, &DumperFsTail{Ntxn: 1000000}) }
func BenchmarkTail(b *testing.B) {
// FIXME small testdata/1.fs is not representative for benchmarking
for i := 0; i < b.N; i++ {
err := Dump(ioutil.Discard, "../testdata/1.fs", fs1.IterBackward, &DumperFsTail{Ntxn: 1000000})
if err != nil {
b.Fatal(err)
}
}
}
...@@ -23,6 +23,8 @@ package fs1tools ...@@ -23,6 +23,8 @@ package fs1tools
import "lab.nexedi.com/kirr/go123/prog" import "lab.nexedi.com/kirr/go123/prog"
var commands = prog.CommandRegistry{ var commands = prog.CommandRegistry{
{"dump", dumpSummary, dumpUsage, dumpMain},
{"tail", tailSummary, tailUsage, tailMain},
} }
var helpTopics = prog.HelpRegistry{ var helpTopics = prog.HelpRegistry{
......
Trans #00000 tid=0285cbac258bf266 time=1979-01-03 21:00:08.800000 offset=52
status=' ' user='' description='initial database creation'
data #00000 oid=0000000000000000 size=61 class=persistent.mapping.PersistentMapping
Trans #00001 tid=0285cbac3d0369e6 time=1979-01-03 21:00:14.300000 offset=256
status=' ' user='user0.0' description='step 0.0'
data #00000 oid=0000000000000000 size=117 class=persistent.mapping.PersistentMapping
data #00001 oid=0000000000000001 size=52 class=zodbtools.test.gen_testdata.Object
Trans #00002 tid=0285cbac41b4e833 time=1979-01-03 21:00:15.400000 offset=610
status=' ' user='user0.1' description='step 0.1'
data #00000 oid=0000000000000000 size=137 class=persistent.mapping.PersistentMapping
data #00001 oid=0000000000000002 size=52 class=zodbtools.test.gen_testdata.Object
Trans #00003 tid=0285cbac46666680 time=1979-01-03 21:00:16.500000 offset=984
status=' ' user='user0.2' description='step 0.2'
data #00000 oid=0000000000000000 size=156 class=persistent.mapping.PersistentMapping
data #00001 oid=0000000000000003 size=52 class=zodbtools.test.gen_testdata.Object
Trans #00004 tid=0285cbac4b17e4cc time=1979-01-03 21:00:17.600000 offset=1377
status=' ' user='user0.3' description='step 0.3'
data #00000 oid=0000000000000002 size=52 class=zodbtools.test.gen_testdata.Object
Trans #00005 tid=0285cbac4fc96319 time=1979-01-03 21:00:18.700000 offset=1572
status=' ' user='user0.4' description='step 0.4'
data #00000 oid=0000000000000000 size=175 class=persistent.mapping.PersistentMapping
data #00001 oid=0000000000000004 size=52 class=zodbtools.test.gen_testdata.Object
Trans #00006 tid=0285cbac547ae166 time=1979-01-03 21:00:19.800000 offset=1984
status=' ' user='user0.5' description='step 0.5'
data #00000 oid=0000000000000000 size=194 class=persistent.mapping.PersistentMapping
data #00001 oid=0000000000000005 size=52 class=zodbtools.test.gen_testdata.Object
Trans #00007 tid=0285cbac592c5fb3 time=1979-01-03 21:00:20.900000 offset=2415
status=' ' user='user0.6' description='step 0.6'
data #00000 oid=0000000000000004 size=52 class=zodbtools.test.gen_testdata.Object
Trans #00008 tid=0285cbac5dddde00 time=1979-01-03 21:00:22.000000 offset=2610
status=' ' user='user0.7' description='step 0.7'
data #00000 oid=0000000000000005 size=52 class=zodbtools.test.gen_testdata.Object
Trans #00009 tid=0285cbac628f5c4c time=1979-01-03 21:00:23.100000 offset=2805
status=' ' user='user0.8' description='step 0.8'
data #00000 oid=0000000000000000 size=213 class=persistent.mapping.PersistentMapping
data #00001 oid=0000000000000006 size=52 class=zodbtools.test.gen_testdata.Object
Trans #00010 tid=0285cbac6740da99 time=1979-01-03 21:00:24.200001 offset=3255
status=' ' user='user0.9' description='step 0.9'
data #00000 oid=0000000000000006 size=52 class=zodbtools.test.gen_testdata.Object
Trans #00011 tid=0285cbac6bf258e6 time=1979-01-03 21:00:25.300001 offset=3452
status=' ' user='user0.10' description='step 0.10'
data #00000 oid=0000000000000003 size=53 class=zodbtools.test.gen_testdata.Object
Trans #00012 tid=0285cbac70a3d733 time=1979-01-03 21:00:26.400001 offset=3650
status=' ' user='user0.11' description='step 0.11'
data #00000 oid=0000000000000003 size=53 class=zodbtools.test.gen_testdata.Object
Trans #00013 tid=0285cbac75555580 time=1979-01-03 21:00:27.500001 offset=3848
status=' ' user='user0.12' description='step 0.12'
data #00000 oid=0000000000000001 size=53 class=zodbtools.test.gen_testdata.Object
Trans #00014 tid=0285cbac7a06d3cc time=1979-01-03 21:00:28.600001 offset=4046
status=' ' user='user0.13' description='step 0.13'
data #00000 oid=0000000000000005 size=53 class=zodbtools.test.gen_testdata.Object
Trans #00015 tid=0285cbac7eb85219 time=1979-01-03 21:00:29.700001 offset=4244
status=' ' user='user0.14' description='step 0.14'
data #00000 oid=0000000000000005 size=53 class=zodbtools.test.gen_testdata.Object
Trans #00016 tid=0285cbac8369d066 time=1979-01-03 21:00:30.800001 offset=4442
status=' ' user='user0.15' description='step 0.15'
data #00000 oid=0000000000000006 size=53 class=zodbtools.test.gen_testdata.Object
Trans #00017 tid=0285cbac881b4eb3 time=1979-01-03 21:00:31.900001 offset=4640
status=' ' user='user0.16' description='step 0.16'
data #00000 oid=0000000000000005 size=53 class=zodbtools.test.gen_testdata.Object
Trans #00018 tid=0285cbac8ccccd00 time=1979-01-03 21:00:33.000001 offset=4838
status=' ' user='user0.17' description='step 0.17'
data #00000 oid=0000000000000004 size=53 class=zodbtools.test.gen_testdata.Object
Trans #00019 tid=0285cbac917e4b4c time=1979-01-03 21:00:34.100001 offset=5036
status=' ' user='user0.18' description='step 0.18'
data #00000 oid=0000000000000004 size=53 class=zodbtools.test.gen_testdata.Object
Trans #00020 tid=0285cbac962fc999 time=1979-01-03 21:00:35.200001 offset=5234
status=' ' user='user0.19' description='step 0.19'
data #00000 oid=0000000000000005 size=53 class=zodbtools.test.gen_testdata.Object
Trans #00021 tid=0285cbac9ae147e6 time=1979-01-03 21:00:36.300001 offset=5432
status=' ' user='user0.20' description='step 0.20'
data #00000 oid=0000000000000002 size=53 class=zodbtools.test.gen_testdata.Object
Trans #00022 tid=0285cbac9f92c633 time=1979-01-03 21:00:37.400001 offset=5630
status=' ' user='user0.21' description='step 0.21'
data #00000 oid=0000000000000002 size=53 class=zodbtools.test.gen_testdata.Object
Trans #00023 tid=0285cbaca4444480 time=1979-01-03 21:00:38.500001 offset=5828
status=' ' user='user0.22' description='step 0.22'
data #00000 oid=0000000000000000 size=232 class=persistent.mapping.PersistentMapping
data #00001 oid=0000000000000007 size=53 class=zodbtools.test.gen_testdata.Object
Trans #00024 tid=0285cbaca8f5c2cc time=1979-01-03 21:00:39.600001 offset=6300
status=' ' user='user0.23' description='step 0.23'
data #00000 oid=0000000000000007 size=53 class=zodbtools.test.gen_testdata.Object
Trans #00025 tid=0285cbacada74119 time=1979-01-03 21:00:40.700001 offset=6498
status=' ' user='user0.24' description='step 0.24'
data #00000 oid=0000000000000003 size=53 class=zodbtools.test.gen_testdata.Object
Trans #00026 tid=0285cbacb258bf66 time=1979-01-03 21:00:41.800001 offset=6759
status=' ' user='root0.0\nYour\nMagesty ' description='undo 0.0\nmore detailed description\n\nzzz ...'
data #00000 oid=0000000000000007 size=53 class=zodbtools.test.gen_testdata.Object bp=0285cbaca4444480
Trans #00027 tid=0285cbacb70a3db3 time=1979-01-03 21:00:42.900001 offset=6976
status=' ' user='root0.1\nYour\nMagesty ' description='undo 0.1\nmore detailed description\n\nzzz ...\t'
data #00000 oid=0000000000000003 size=53 class=zodbtools.test.gen_testdata.Object bp=0285cbac70a3d733
Trans #00028 tid=0285cbacbbbbbc00 time=1979-01-03 21:00:44.000001 offset=7068
status=' ' user='' description='predelete 7'
data #00000 oid=0000000000000000 size=232 class=persistent.mapping.PersistentMapping
data #00001 oid=0000000000000008 size=51 class=zodbtools.test.gen_testdata.Object
Trans #00029 tid=0285cbacc06d3a4c time=1979-01-03 21:00:45.100001 offset=7633
status=' ' user="root0\nYour\nRoyal\nMagesty' \x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f" description='delete 0\nalpha beta gamma\'delta"lambda\n\nqqq ...'
data #00000 oid=0000000000000007 class=undo or abort of object creation
Trans #00030 tid=0285cbacfd70a433 time=1979-01-03 21:00:59.400001 offset=7784
status=' ' user='user1.0' description='step 1.0'
data #00000 oid=0000000000000008 size=52 class=zodbtools.test.gen_testdata.Object
Trans #00031 tid=0285cbad02222280 time=1979-01-03 21:01:00.500001 offset=7979
status=' ' user='user1.1' description='step 1.1'
data #00000 oid=0000000000000006 size=52 class=zodbtools.test.gen_testdata.Object
Trans #00032 tid=0285cbad06d3a0cc time=1979-01-03 21:01:01.600001 offset=8174
status=' ' user='user1.2' description='step 1.2'
data #00000 oid=0000000000000004 size=52 class=zodbtools.test.gen_testdata.Object
Trans #00033 tid=0285cbad0b851f19 time=1979-01-03 21:01:02.700001 offset=8369
status=' ' user='user1.3' description='step 1.3'
data #00000 oid=0000000000000003 size=52 class=zodbtools.test.gen_testdata.Object
Trans #00034 tid=0285cbad10369d66 time=1979-01-03 21:01:03.800001 offset=8564
status=' ' user='user1.4' description='step 1.4'
data #00000 oid=0000000000000003 size=52 class=zodbtools.test.gen_testdata.Object
Trans #00035 tid=0285cbad14e81bb3 time=1979-01-03 21:01:04.900001 offset=8759
status=' ' user='user1.5' description='step 1.5'
data #00000 oid=0000000000000008 size=52 class=zodbtools.test.gen_testdata.Object
Trans #00036 tid=0285cbad19999a00 time=1979-01-03 21:01:06.000001 offset=8954
status=' ' user='user1.6' description='step 1.6'
data #00000 oid=0000000000000001 size=52 class=zodbtools.test.gen_testdata.Object
Trans #00037 tid=0285cbad1e4b184c time=1979-01-03 21:01:07.100001 offset=9149
status=' ' user='user1.7' description='step 1.7'
data #00000 oid=0000000000000002 size=52 class=zodbtools.test.gen_testdata.Object
Trans #00038 tid=0285cbad22fc9699 time=1979-01-03 21:01:08.200001 offset=9344
status=' ' user='user1.8' description='step 1.8'
data #00000 oid=0000000000000008 size=52 class=zodbtools.test.gen_testdata.Object
Trans #00039 tid=0285cbad27ae14e6 time=1979-01-03 21:01:09.300001 offset=9539
status=' ' user='user1.9' description='step 1.9'
data #00000 oid=0000000000000008 size=52 class=zodbtools.test.gen_testdata.Object
Trans #00040 tid=0285cbad2c5f9333 time=1979-01-03 21:01:10.400002 offset=9736
status=' ' user='user1.10' description='step 1.10'
data #00000 oid=0000000000000006 size=53 class=zodbtools.test.gen_testdata.Object
Trans #00041 tid=0285cbad31111180 time=1979-01-03 21:01:11.500002 offset=9934
status=' ' user='user1.11' description='step 1.11'
data #00000 oid=0000000000000005 size=53 class=zodbtools.test.gen_testdata.Object
Trans #00042 tid=0285cbad35c28fcc time=1979-01-03 21:01:12.600002 offset=10132
status=' ' user='user1.12' description='step 1.12'
data #00000 oid=0000000000000008 size=53 class=zodbtools.test.gen_testdata.Object
Trans #00043 tid=0285cbad3a740e19 time=1979-01-03 21:01:13.700002 offset=10330
status=' ' user='user1.13' description='step 1.13'
data #00000 oid=0000000000000006 size=53 class=zodbtools.test.gen_testdata.Object
Trans #00044 tid=0285cbad3f258c66 time=1979-01-03 21:01:14.800002 offset=10528
status=' ' user='user1.14' description='step 1.14'
data #00000 oid=0000000000000003 size=53 class=zodbtools.test.gen_testdata.Object
Trans #00045 tid=0285cbad43d70ab3 time=1979-01-03 21:01:15.900002 offset=10726
status=' ' user='user1.15' description='step 1.15'
data #00000 oid=0000000000000003 size=53 class=zodbtools.test.gen_testdata.Object
Trans #00046 tid=0285cbad48888900 time=1979-01-03 21:01:17.000002 offset=10924
status=' ' user='user1.16' description='step 1.16'
data #00000 oid=0000000000000002 size=53 class=zodbtools.test.gen_testdata.Object
Trans #00047 tid=0285cbad4d3a074c time=1979-01-03 21:01:18.100002 offset=11122
status=' ' user='user1.17' description='step 1.17'
data #00000 oid=0000000000000003 size=53 class=zodbtools.test.gen_testdata.Object
Trans #00048 tid=0285cbad51eb8599 time=1979-01-03 21:01:19.200002 offset=11320
status=' ' user='user1.18' description='step 1.18'
data #00000 oid=0000000000000001 size=53 class=zodbtools.test.gen_testdata.Object
Trans #00049 tid=0285cbad569d03e6 time=1979-01-03 21:01:20.300002 offset=11518
status=' ' user='user1.19' description='step 1.19'
data #00000 oid=0000000000000005 size=53 class=zodbtools.test.gen_testdata.Object
Trans #00050 tid=0285cbad5b4e8233 time=1979-01-03 21:01:21.400002 offset=11716
status=' ' user='user1.20' description='step 1.20'
data #00000 oid=0000000000000003 size=53 class=zodbtools.test.gen_testdata.Object
Trans #00051 tid=0285cbad60000080 time=1979-01-03 21:01:22.500002 offset=11914
status=' ' user='user1.21' description='step 1.21'
data #00000 oid=0000000000000003 size=53 class=zodbtools.test.gen_testdata.Object
Trans #00052 tid=0285cbad64b17ecc time=1979-01-03 21:01:23.600002 offset=12112
status=' ' user='user1.22' description='step 1.22'
data #00000 oid=0000000000000006 size=53 class=zodbtools.test.gen_testdata.Object
Trans #00053 tid=0285cbad6962fd19 time=1979-01-03 21:01:24.700002 offset=12310
status=' ' user='user1.23' description='step 1.23'
data #00000 oid=0000000000000005 size=53 class=zodbtools.test.gen_testdata.Object
Trans #00054 tid=0285cbad6e147b66 time=1979-01-03 21:01:25.800002 offset=12508
status=' ' user='user1.24' description='step 1.24'
data #00000 oid=0000000000000005 size=53 class=zodbtools.test.gen_testdata.Object
Trans #00055 tid=0285cbad77777800 time=1979-01-03 21:01:28.000002 offset=12770
status=' ' user='root1.0\nYour\nMagesty ' description='undo 1.0\nmore detailed description\n\nzzz ...\t'
data #00000 oid=0000000000000006 size=53 class=zodbtools.test.gen_testdata.Object bp=0285cbad3a740e19
Trans #00056 tid=0285cbad7c28f64c time=1979-01-03 21:01:29.100002 offset=12988
status=' ' user='root1.1\nYour\nMagesty ' description='undo 1.1\nmore detailed description\n\nzzz ...\t\t'
data #00000 oid=0000000000000005 size=53 class=zodbtools.test.gen_testdata.Object bp=0285cbad6962fd19
Trans #00057 tid=0285cbad80da7499 time=1979-01-03 21:01:30.200002 offset=13080
status=' ' user='' description='predelete 6'
data #00000 oid=0000000000000000 size=232 class=persistent.mapping.PersistentMapping
data #00001 oid=0000000000000009 size=51 class=zodbtools.test.gen_testdata.Object
Trans #00058 tid=0285cbad858bf2e6 time=1979-01-03 21:01:31.300002 offset=13645
status=' ' user="root1\nYour\nRoyal\nMagesty' \x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f" description='delete 1\nalpha beta gamma\'delta"lambda\n\nqqq ...'
data #00000 oid=0000000000000006 class=undo or abort of object creation
************************************************************
file identifier: 'FS21'
============================================================
offset: 4
end pos: 155
transaction id: 0285cbac258bf266
trec len: 151
status: ' '
user: ''
description: 'initial database creation'
len(extra): 0
------------------------------------------------------------
offset: 52
oid: 0000000000000000
revid: 0285cbac258bf266
previous record offset: 0
transaction offset: 4
len(data): 61
redundant trec len: 151
============================================================
offset: 163
end pos: 509
transaction id: 0285cbac3d0369e6
trec len: 346
status: ' '
user: 'user0.0'
description: 'step 0.0'
len(extra): 55
------------------------------------------------------------
offset: 256
oid: 0000000000000000
revid: 0285cbac3d0369e6
previous record offset: 52
transaction offset: 163
len(data): 117
------------------------------------------------------------
offset: 415
oid: 0000000000000001
revid: 0285cbac3d0369e6
previous record offset: 0
transaction offset: 163
len(data): 52
redundant trec len: 346
============================================================
offset: 517
end pos: 883
transaction id: 0285cbac41b4e833
trec len: 366
status: ' '
user: 'user0.1'
description: 'step 0.1'
len(extra): 55
------------------------------------------------------------
offset: 610
oid: 0000000000000000
revid: 0285cbac41b4e833
previous record offset: 256
transaction offset: 517
len(data): 137
------------------------------------------------------------
offset: 789
oid: 0000000000000002
revid: 0285cbac41b4e833
previous record offset: 0
transaction offset: 517
len(data): 52
redundant trec len: 366
============================================================
offset: 891
end pos: 1276
transaction id: 0285cbac46666680
trec len: 385
status: ' '
user: 'user0.2'
description: 'step 0.2'
len(extra): 55
------------------------------------------------------------
offset: 984
oid: 0000000000000000
revid: 0285cbac46666680
previous record offset: 610
transaction offset: 891
len(data): 156
------------------------------------------------------------
offset: 1182
oid: 0000000000000003
revid: 0285cbac46666680
previous record offset: 0
transaction offset: 891
len(data): 52
redundant trec len: 385
============================================================
offset: 1284
end pos: 1471
transaction id: 0285cbac4b17e4cc
trec len: 187
status: ' '
user: 'user0.3'
description: 'step 0.3'
len(extra): 55
------------------------------------------------------------
offset: 1377
oid: 0000000000000002
revid: 0285cbac4b17e4cc
previous record offset: 789
transaction offset: 1284
len(data): 52
redundant trec len: 187
============================================================
offset: 1479
end pos: 1883
transaction id: 0285cbac4fc96319
trec len: 404
status: ' '
user: 'user0.4'
description: 'step 0.4'
len(extra): 55
------------------------------------------------------------
offset: 1572
oid: 0000000000000000
revid: 0285cbac4fc96319
previous record offset: 984
transaction offset: 1479
len(data): 175
------------------------------------------------------------
offset: 1789
oid: 0000000000000004
revid: 0285cbac4fc96319
previous record offset: 0
transaction offset: 1479
len(data): 52
redundant trec len: 404
============================================================
offset: 1891
end pos: 2314
transaction id: 0285cbac547ae166
trec len: 423
status: ' '
user: 'user0.5'
description: 'step 0.5'
len(extra): 55
------------------------------------------------------------
offset: 1984
oid: 0000000000000000
revid: 0285cbac547ae166
previous record offset: 1572
transaction offset: 1891
len(data): 194
------------------------------------------------------------
offset: 2220
oid: 0000000000000005
revid: 0285cbac547ae166
previous record offset: 0
transaction offset: 1891
len(data): 52
redundant trec len: 423
============================================================
offset: 2322
end pos: 2509
transaction id: 0285cbac592c5fb3
trec len: 187
status: ' '
user: 'user0.6'
description: 'step 0.6'
len(extra): 55
------------------------------------------------------------
offset: 2415
oid: 0000000000000004
revid: 0285cbac592c5fb3
previous record offset: 1789
transaction offset: 2322
len(data): 52
redundant trec len: 187
============================================================
offset: 2517
end pos: 2704
transaction id: 0285cbac5dddde00
trec len: 187
status: ' '
user: 'user0.7'
description: 'step 0.7'
len(extra): 55
------------------------------------------------------------
offset: 2610
oid: 0000000000000005
revid: 0285cbac5dddde00
previous record offset: 2220
transaction offset: 2517
len(data): 52
redundant trec len: 187
============================================================
offset: 2712
end pos: 3154
transaction id: 0285cbac628f5c4c
trec len: 442
status: ' '
user: 'user0.8'
description: 'step 0.8'
len(extra): 55
------------------------------------------------------------
offset: 2805
oid: 0000000000000000
revid: 0285cbac628f5c4c
previous record offset: 1984
transaction offset: 2712
len(data): 213
------------------------------------------------------------
offset: 3060
oid: 0000000000000006
revid: 0285cbac628f5c4c
previous record offset: 0
transaction offset: 2712
len(data): 52
redundant trec len: 442
============================================================
offset: 3162
end pos: 3349
transaction id: 0285cbac6740da99
trec len: 187
status: ' '
user: 'user0.9'
description: 'step 0.9'
len(extra): 55
------------------------------------------------------------
offset: 3255
oid: 0000000000000006
revid: 0285cbac6740da99
previous record offset: 3060
transaction offset: 3162
len(data): 52
redundant trec len: 187
============================================================
offset: 3357
end pos: 3547
transaction id: 0285cbac6bf258e6
trec len: 190
status: ' '
user: 'user0.10'
description: 'step 0.10'
len(extra): 55
------------------------------------------------------------
offset: 3452
oid: 0000000000000003
revid: 0285cbac6bf258e6
previous record offset: 1182
transaction offset: 3357
len(data): 53
redundant trec len: 190
============================================================
offset: 3555
end pos: 3745
transaction id: 0285cbac70a3d733
trec len: 190
status: ' '
user: 'user0.11'
description: 'step 0.11'
len(extra): 55
------------------------------------------------------------
offset: 3650
oid: 0000000000000003
revid: 0285cbac70a3d733
previous record offset: 3452
transaction offset: 3555
len(data): 53
redundant trec len: 190
============================================================
offset: 3753
end pos: 3943
transaction id: 0285cbac75555580
trec len: 190
status: ' '
user: 'user0.12'
description: 'step 0.12'
len(extra): 55
------------------------------------------------------------
offset: 3848
oid: 0000000000000001
revid: 0285cbac75555580
previous record offset: 415
transaction offset: 3753
len(data): 53
redundant trec len: 190
============================================================
offset: 3951
end pos: 4141
transaction id: 0285cbac7a06d3cc
trec len: 190
status: ' '
user: 'user0.13'
description: 'step 0.13'
len(extra): 55
------------------------------------------------------------
offset: 4046
oid: 0000000000000005
revid: 0285cbac7a06d3cc
previous record offset: 2610
transaction offset: 3951
len(data): 53
redundant trec len: 190
============================================================
offset: 4149
end pos: 4339
transaction id: 0285cbac7eb85219
trec len: 190
status: ' '
user: 'user0.14'
description: 'step 0.14'
len(extra): 55
------------------------------------------------------------
offset: 4244
oid: 0000000000000005
revid: 0285cbac7eb85219
previous record offset: 4046
transaction offset: 4149
len(data): 53
redundant trec len: 190
============================================================
offset: 4347
end pos: 4537
transaction id: 0285cbac8369d066
trec len: 190
status: ' '
user: 'user0.15'
description: 'step 0.15'
len(extra): 55
------------------------------------------------------------
offset: 4442
oid: 0000000000000006
revid: 0285cbac8369d066
previous record offset: 3255
transaction offset: 4347
len(data): 53
redundant trec len: 190
============================================================
offset: 4545
end pos: 4735
transaction id: 0285cbac881b4eb3
trec len: 190
status: ' '
user: 'user0.16'
description: 'step 0.16'
len(extra): 55
------------------------------------------------------------
offset: 4640
oid: 0000000000000005
revid: 0285cbac881b4eb3
previous record offset: 4244
transaction offset: 4545
len(data): 53
redundant trec len: 190
============================================================
offset: 4743
end pos: 4933
transaction id: 0285cbac8ccccd00
trec len: 190
status: ' '
user: 'user0.17'
description: 'step 0.17'
len(extra): 55
------------------------------------------------------------
offset: 4838
oid: 0000000000000004
revid: 0285cbac8ccccd00
previous record offset: 2415
transaction offset: 4743
len(data): 53
redundant trec len: 190
============================================================
offset: 4941
end pos: 5131
transaction id: 0285cbac917e4b4c
trec len: 190
status: ' '
user: 'user0.18'
description: 'step 0.18'
len(extra): 55
------------------------------------------------------------
offset: 5036
oid: 0000000000000004
revid: 0285cbac917e4b4c
previous record offset: 4838
transaction offset: 4941
len(data): 53
redundant trec len: 190
============================================================
offset: 5139
end pos: 5329
transaction id: 0285cbac962fc999
trec len: 190
status: ' '
user: 'user0.19'
description: 'step 0.19'
len(extra): 55
------------------------------------------------------------
offset: 5234
oid: 0000000000000005
revid: 0285cbac962fc999
previous record offset: 4640
transaction offset: 5139
len(data): 53
redundant trec len: 190
============================================================
offset: 5337
end pos: 5527
transaction id: 0285cbac9ae147e6
trec len: 190
status: ' '
user: 'user0.20'
description: 'step 0.20'
len(extra): 55
------------------------------------------------------------
offset: 5432
oid: 0000000000000002
revid: 0285cbac9ae147e6
previous record offset: 1377
transaction offset: 5337
len(data): 53
redundant trec len: 190
============================================================
offset: 5535
end pos: 5725
transaction id: 0285cbac9f92c633
trec len: 190
status: ' '
user: 'user0.21'
description: 'step 0.21'
len(extra): 55
------------------------------------------------------------
offset: 5630
oid: 0000000000000002
revid: 0285cbac9f92c633
previous record offset: 5432
transaction offset: 5535
len(data): 53
redundant trec len: 190
============================================================
offset: 5733
end pos: 6197
transaction id: 0285cbaca4444480
trec len: 464
status: ' '
user: 'user0.22'
description: 'step 0.22'
len(extra): 55
------------------------------------------------------------
offset: 5828
oid: 0000000000000000
revid: 0285cbaca4444480
previous record offset: 2805
transaction offset: 5733
len(data): 232
------------------------------------------------------------
offset: 6102
oid: 0000000000000007
revid: 0285cbaca4444480
previous record offset: 0
transaction offset: 5733
len(data): 53
redundant trec len: 464
============================================================
offset: 6205
end pos: 6395
transaction id: 0285cbaca8f5c2cc
trec len: 190
status: ' '
user: 'user0.23'
description: 'step 0.23'
len(extra): 55
------------------------------------------------------------
offset: 6300
oid: 0000000000000007
revid: 0285cbaca8f5c2cc
previous record offset: 6102
transaction offset: 6205
len(data): 53
redundant trec len: 190
============================================================
offset: 6403
end pos: 6593
transaction id: 0285cbacada74119
trec len: 190
status: ' '
user: 'user0.24'
description: 'step 0.24'
len(extra): 55
------------------------------------------------------------
offset: 6498
oid: 0000000000000003
revid: 0285cbacada74119
previous record offset: 3650
transaction offset: 6403
len(data): 53
redundant trec len: 190
============================================================
offset: 6601
end pos: 6809
transaction id: 0285cbacb258bf66
trec len: 208
status: ' '
user: 'root0.0\nYour\nMagesty '
description: 'undo 0.0\nmore detailed description\n\nzzz ...'
len(extra): 71
------------------------------------------------------------
offset: 6759
oid: 0000000000000007
revid: 0285cbacb258bf66
previous record offset: 6300
transaction offset: 6601
len(data): 0
backpointer: 6102
redundant trec len: 208
============================================================
offset: 6817
end pos: 7026
transaction id: 0285cbacb70a3db3
trec len: 209
status: ' '
user: 'root0.1\nYour\nMagesty '
description: 'undo 0.1\nmore detailed description\n\nzzz ...\t'
len(extra): 71
------------------------------------------------------------
offset: 6976
oid: 0000000000000003
revid: 0285cbacb70a3db3
previous record offset: 6498
transaction offset: 6817
len(data): 0
backpointer: 3650
redundant trec len: 209
============================================================
offset: 7034
end pos: 7435
transaction id: 0285cbacbbbbbc00
trec len: 401
status: ' '
user: ''
description: 'predelete 7'
len(extra): 0
------------------------------------------------------------
offset: 7068
oid: 0000000000000000
revid: 0285cbacbbbbbc00
previous record offset: 5828
transaction offset: 7034
len(data): 232
------------------------------------------------------------
offset: 7342
oid: 0000000000000008
revid: 0285cbacbbbbbc00
previous record offset: 0
transaction offset: 7034
len(data): 51
redundant trec len: 401
============================================================
offset: 7443
end pos: 7683
transaction id: 0285cbacc06d3a4c
trec len: 240
status: ' '
user: "root0\nYour\nRoyal\nMagesty' \x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f"
description: 'delete 0\nalpha beta gamma\'delta"lambda\n\nqqq ...'
len(extra): 62
------------------------------------------------------------
offset: 7633
oid: 0000000000000007
revid: 0285cbacc06d3a4c
previous record offset: 6759
transaction offset: 7443
len(data): 0
backpointer: 0
redundant trec len: 240
============================================================
offset: 7691
end pos: 7878
transaction id: 0285cbacfd70a433
trec len: 187
status: ' '
user: 'user1.0'
description: 'step 1.0'
len(extra): 55
------------------------------------------------------------
offset: 7784
oid: 0000000000000008
revid: 0285cbacfd70a433
previous record offset: 7342
transaction offset: 7691
len(data): 52
redundant trec len: 187
============================================================
offset: 7886
end pos: 8073
transaction id: 0285cbad02222280
trec len: 187
status: ' '
user: 'user1.1'
description: 'step 1.1'
len(extra): 55
------------------------------------------------------------
offset: 7979
oid: 0000000000000006
revid: 0285cbad02222280
previous record offset: 4442
transaction offset: 7886
len(data): 52
redundant trec len: 187
============================================================
offset: 8081
end pos: 8268
transaction id: 0285cbad06d3a0cc
trec len: 187
status: ' '
user: 'user1.2'
description: 'step 1.2'
len(extra): 55
------------------------------------------------------------
offset: 8174
oid: 0000000000000004
revid: 0285cbad06d3a0cc
previous record offset: 5036
transaction offset: 8081
len(data): 52
redundant trec len: 187
============================================================
offset: 8276
end pos: 8463
transaction id: 0285cbad0b851f19
trec len: 187
status: ' '
user: 'user1.3'
description: 'step 1.3'
len(extra): 55
------------------------------------------------------------
offset: 8369
oid: 0000000000000003
revid: 0285cbad0b851f19
previous record offset: 6976
transaction offset: 8276
len(data): 52
redundant trec len: 187
============================================================
offset: 8471
end pos: 8658
transaction id: 0285cbad10369d66
trec len: 187
status: ' '
user: 'user1.4'
description: 'step 1.4'
len(extra): 55
------------------------------------------------------------
offset: 8564
oid: 0000000000000003
revid: 0285cbad10369d66
previous record offset: 8369
transaction offset: 8471
len(data): 52
redundant trec len: 187
============================================================
offset: 8666
end pos: 8853
transaction id: 0285cbad14e81bb3
trec len: 187
status: ' '
user: 'user1.5'
description: 'step 1.5'
len(extra): 55
------------------------------------------------------------
offset: 8759
oid: 0000000000000008
revid: 0285cbad14e81bb3
previous record offset: 7784
transaction offset: 8666
len(data): 52
redundant trec len: 187
============================================================
offset: 8861
end pos: 9048
transaction id: 0285cbad19999a00
trec len: 187
status: ' '
user: 'user1.6'
description: 'step 1.6'
len(extra): 55
------------------------------------------------------------
offset: 8954
oid: 0000000000000001
revid: 0285cbad19999a00
previous record offset: 3848
transaction offset: 8861
len(data): 52
redundant trec len: 187
============================================================
offset: 9056
end pos: 9243
transaction id: 0285cbad1e4b184c
trec len: 187
status: ' '
user: 'user1.7'
description: 'step 1.7'
len(extra): 55
------------------------------------------------------------
offset: 9149
oid: 0000000000000002
revid: 0285cbad1e4b184c
previous record offset: 5630
transaction offset: 9056
len(data): 52
redundant trec len: 187
============================================================
offset: 9251
end pos: 9438
transaction id: 0285cbad22fc9699
trec len: 187
status: ' '
user: 'user1.8'
description: 'step 1.8'
len(extra): 55
------------------------------------------------------------
offset: 9344
oid: 0000000000000008
revid: 0285cbad22fc9699
previous record offset: 8759
transaction offset: 9251
len(data): 52
redundant trec len: 187
============================================================
offset: 9446
end pos: 9633
transaction id: 0285cbad27ae14e6
trec len: 187
status: ' '
user: 'user1.9'
description: 'step 1.9'
len(extra): 55
------------------------------------------------------------
offset: 9539
oid: 0000000000000008
revid: 0285cbad27ae14e6
previous record offset: 9344
transaction offset: 9446
len(data): 52
redundant trec len: 187
============================================================
offset: 9641
end pos: 9831
transaction id: 0285cbad2c5f9333
trec len: 190
status: ' '
user: 'user1.10'
description: 'step 1.10'
len(extra): 55
------------------------------------------------------------
offset: 9736
oid: 0000000000000006
revid: 0285cbad2c5f9333
previous record offset: 7979
transaction offset: 9641
len(data): 53
redundant trec len: 190
============================================================
offset: 9839
end pos: 10029
transaction id: 0285cbad31111180
trec len: 190
status: ' '
user: 'user1.11'
description: 'step 1.11'
len(extra): 55
------------------------------------------------------------
offset: 9934
oid: 0000000000000005
revid: 0285cbad31111180
previous record offset: 5234
transaction offset: 9839
len(data): 53
redundant trec len: 190
============================================================
offset: 10037
end pos: 10227
transaction id: 0285cbad35c28fcc
trec len: 190
status: ' '
user: 'user1.12'
description: 'step 1.12'
len(extra): 55
------------------------------------------------------------
offset: 10132
oid: 0000000000000008
revid: 0285cbad35c28fcc
previous record offset: 9539
transaction offset: 10037
len(data): 53
redundant trec len: 190
============================================================
offset: 10235
end pos: 10425
transaction id: 0285cbad3a740e19
trec len: 190
status: ' '
user: 'user1.13'
description: 'step 1.13'
len(extra): 55
------------------------------------------------------------
offset: 10330
oid: 0000000000000006
revid: 0285cbad3a740e19
previous record offset: 9736
transaction offset: 10235
len(data): 53
redundant trec len: 190
============================================================
offset: 10433
end pos: 10623
transaction id: 0285cbad3f258c66
trec len: 190
status: ' '
user: 'user1.14'
description: 'step 1.14'
len(extra): 55
------------------------------------------------------------
offset: 10528
oid: 0000000000000003
revid: 0285cbad3f258c66
previous record offset: 8564
transaction offset: 10433
len(data): 53
redundant trec len: 190
============================================================
offset: 10631
end pos: 10821
transaction id: 0285cbad43d70ab3
trec len: 190
status: ' '
user: 'user1.15'
description: 'step 1.15'
len(extra): 55
------------------------------------------------------------
offset: 10726
oid: 0000000000000003
revid: 0285cbad43d70ab3
previous record offset: 10528
transaction offset: 10631
len(data): 53
redundant trec len: 190
============================================================
offset: 10829
end pos: 11019
transaction id: 0285cbad48888900
trec len: 190
status: ' '
user: 'user1.16'
description: 'step 1.16'
len(extra): 55
------------------------------------------------------------
offset: 10924
oid: 0000000000000002
revid: 0285cbad48888900
previous record offset: 9149
transaction offset: 10829
len(data): 53
redundant trec len: 190
============================================================
offset: 11027
end pos: 11217
transaction id: 0285cbad4d3a074c
trec len: 190
status: ' '
user: 'user1.17'
description: 'step 1.17'
len(extra): 55
------------------------------------------------------------
offset: 11122
oid: 0000000000000003
revid: 0285cbad4d3a074c
previous record offset: 10726
transaction offset: 11027
len(data): 53
redundant trec len: 190
============================================================
offset: 11225
end pos: 11415
transaction id: 0285cbad51eb8599
trec len: 190
status: ' '
user: 'user1.18'
description: 'step 1.18'
len(extra): 55
------------------------------------------------------------
offset: 11320
oid: 0000000000000001
revid: 0285cbad51eb8599
previous record offset: 8954
transaction offset: 11225
len(data): 53
redundant trec len: 190
============================================================
offset: 11423
end pos: 11613
transaction id: 0285cbad569d03e6
trec len: 190
status: ' '
user: 'user1.19'
description: 'step 1.19'
len(extra): 55
------------------------------------------------------------
offset: 11518
oid: 0000000000000005
revid: 0285cbad569d03e6
previous record offset: 9934
transaction offset: 11423
len(data): 53
redundant trec len: 190
============================================================
offset: 11621
end pos: 11811
transaction id: 0285cbad5b4e8233
trec len: 190
status: ' '
user: 'user1.20'
description: 'step 1.20'
len(extra): 55
------------------------------------------------------------
offset: 11716
oid: 0000000000000003
revid: 0285cbad5b4e8233
previous record offset: 11122
transaction offset: 11621
len(data): 53
redundant trec len: 190
============================================================
offset: 11819
end pos: 12009
transaction id: 0285cbad60000080
trec len: 190
status: ' '
user: 'user1.21'
description: 'step 1.21'
len(extra): 55
------------------------------------------------------------
offset: 11914
oid: 0000000000000003
revid: 0285cbad60000080
previous record offset: 11716
transaction offset: 11819
len(data): 53
redundant trec len: 190
============================================================
offset: 12017
end pos: 12207
transaction id: 0285cbad64b17ecc
trec len: 190
status: ' '
user: 'user1.22'
description: 'step 1.22'
len(extra): 55
------------------------------------------------------------
offset: 12112
oid: 0000000000000006
revid: 0285cbad64b17ecc
previous record offset: 10330
transaction offset: 12017
len(data): 53
redundant trec len: 190
============================================================
offset: 12215
end pos: 12405
transaction id: 0285cbad6962fd19
trec len: 190
status: ' '
user: 'user1.23'
description: 'step 1.23'
len(extra): 55
------------------------------------------------------------
offset: 12310
oid: 0000000000000005
revid: 0285cbad6962fd19
previous record offset: 11518
transaction offset: 12215
len(data): 53
redundant trec len: 190
============================================================
offset: 12413
end pos: 12603
transaction id: 0285cbad6e147b66
trec len: 190
status: ' '
user: 'user1.24'
description: 'step 1.24'
len(extra): 55
------------------------------------------------------------
offset: 12508
oid: 0000000000000005
revid: 0285cbad6e147b66
previous record offset: 12310
transaction offset: 12413
len(data): 53
redundant trec len: 190
============================================================
offset: 12611
end pos: 12820
transaction id: 0285cbad77777800
trec len: 209
status: ' '
user: 'root1.0\nYour\nMagesty '
description: 'undo 1.0\nmore detailed description\n\nzzz ...\t'
len(extra): 71
------------------------------------------------------------
offset: 12770
oid: 0000000000000006
revid: 0285cbad77777800
previous record offset: 12112
transaction offset: 12611
len(data): 0
backpointer: 10330
redundant trec len: 209
============================================================
offset: 12828
end pos: 13038
transaction id: 0285cbad7c28f64c
trec len: 210
status: ' '
user: 'root1.1\nYour\nMagesty '
description: 'undo 1.1\nmore detailed description\n\nzzz ...\t\t'
len(extra): 71
------------------------------------------------------------
offset: 12988
oid: 0000000000000005
revid: 0285cbad7c28f64c
previous record offset: 12508
transaction offset: 12828
len(data): 0
backpointer: 12310
redundant trec len: 210
============================================================
offset: 13046
end pos: 13447
transaction id: 0285cbad80da7499
trec len: 401
status: ' '
user: ''
description: 'predelete 6'
len(extra): 0
------------------------------------------------------------
offset: 13080
oid: 0000000000000000
revid: 0285cbad80da7499
previous record offset: 7068
transaction offset: 13046
len(data): 232
------------------------------------------------------------
offset: 13354
oid: 0000000000000009
revid: 0285cbad80da7499
previous record offset: 0
transaction offset: 13046
len(data): 51
redundant trec len: 401
============================================================
offset: 13455
end pos: 13695
transaction id: 0285cbad858bf2e6
trec len: 240
status: ' '
user: "root1\nYour\nRoyal\nMagesty' \x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f"
description: 'delete 1\nalpha beta gamma\'delta"lambda\n\nqqq ...'
len(extra): 62
------------------------------------------------------------
offset: 13645
oid: 0000000000000006
revid: 0285cbad858bf2e6
previous record offset: 12770
transaction offset: 13455
len(data): 0
backpointer: 0
redundant trec len: 240
1979-01-03 21:01:31.300002: hash=94252f1f1d30b1a3f1f7503c266a713f02b4ba52
user="root1\nYour\nRoyal\nMagesty' \x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f" description='delete 1\nalpha beta gamma\'delta"lambda\n\nqqq ...' length=240 offset=13455 (+190)
1979-01-03 21:01:30.200002: hash=25f7492a49cc22ef77900de9eb3b83de7266e140
user='' description='predelete 6' length=401 offset=13046 (+34)
1979-01-03 21:01:29.100002: hash=fb51ce7bfafa31fed95763a9717d4634b48e7e63
user='root1.1\nYour\nMagesty ' description='undo 1.1\nmore detailed description\n\nzzz ...\t\t' length=210 offset=12828 (+160)
1979-01-03 21:01:28.000002: hash=9404e6448e47b8091b1d92bcf0f312fed8f4ad0d
user='root1.0\nYour\nMagesty ' description='undo 1.0\nmore detailed description\n\nzzz ...\t' length=209 offset=12611 (+159)
1979-01-03 21:01:25.800002: hash=897458fb84e889f88e7061041959ab98a371181b
user='user1.24' description='step 1.24' length=190 offset=12413 (+95)
1979-01-03 21:01:24.700002: hash=a56e6de8176172eb09883e48ccbf28cf33b7a75b
user='user1.23' description='step 1.23' length=190 offset=12215 (+95)
1979-01-03 21:01:23.600002: hash=f6dd3e02bd8e02c52558864e1cfbdcf898d847ab
user='user1.22' description='step 1.22' length=190 offset=12017 (+95)
1979-01-03 21:01:22.500002: hash=0fe8ae8e0ee1f5d82e354299ebf653f8cc15205f
user='user1.21' description='step 1.21' length=190 offset=11819 (+95)
1979-01-03 21:01:21.400002: hash=bcc9fce2b221b2e1e372f281c7497ccd0caddbf7
user='user1.20' description='step 1.20' length=190 offset=11621 (+95)
1979-01-03 21:01:20.300002: hash=9727adacbf4ad8c956ec3264d2420d1f5d96fa3b
user='user1.19' description='step 1.19' length=190 offset=11423 (+95)
1979-01-03 21:01:19.200002: hash=10546257706e21d2e15ccc08c33c65e17bd82657
user='user1.18' description='step 1.18' length=190 offset=11225 (+95)
1979-01-03 21:01:18.100002: hash=ad0151c6c824c3bcd7ff5ddfd679446743250910
user='user1.17' description='step 1.17' length=190 offset=11027 (+95)
1979-01-03 21:01:17.000002: hash=f3bebd8d1edeb250862df7623f20618dfe5c58c8
user='user1.16' description='step 1.16' length=190 offset=10829 (+95)
1979-01-03 21:01:15.900002: hash=7516e440ce0d427170c939cae6fcde1994c5afc9
user='user1.15' description='step 1.15' length=190 offset=10631 (+95)
1979-01-03 21:01:14.800002: hash=2163b0daccd414189f332c3a9791ef254e45074e
user='user1.14' description='step 1.14' length=190 offset=10433 (+95)
1979-01-03 21:01:13.700002: hash=88576c57888c89ae5d39c2abd884ec759688edfd
user='user1.13' description='step 1.13' length=190 offset=10235 (+95)
1979-01-03 21:01:12.600002: hash=2bd5dd2dc35b052c5c48a255fa2be3ffd1ecd7db
user='user1.12' description='step 1.12' length=190 offset=10037 (+95)
1979-01-03 21:01:11.500002: hash=e9f461a8d3006d364a1e66850cf9578c20b7ab21
user='user1.11' description='step 1.11' length=190 offset=9839 (+95)
1979-01-03 21:01:10.400002: hash=5bb3dae37c2952dd72a3c9fc6854acc1354c6033
user='user1.10' description='step 1.10' length=190 offset=9641 (+95)
1979-01-03 21:01:09.300001: hash=b603984d5114835b5f02eceb0864fad8c05e4c18
user='user1.9' description='step 1.9' length=187 offset=9446 (+93)
1979-01-03 21:01:08.200001: hash=82f456b31e0a04ba25ebdd4ff87901e10668c2e7
user='user1.8' description='step 1.8' length=187 offset=9251 (+93)
1979-01-03 21:01:07.100001: hash=0418d908951c18fefd261442f77c3195c2bfcb22
user='user1.7' description='step 1.7' length=187 offset=9056 (+93)
1979-01-03 21:01:06.000001: hash=9890b78dd666542a03d29236c59f0e07604618c2
user='user1.6' description='step 1.6' length=187 offset=8861 (+93)
1979-01-03 21:01:04.900001: hash=4eb74b859985a34203df28884752ac779846f8e8
user='user1.5' description='step 1.5' length=187 offset=8666 (+93)
1979-01-03 21:01:03.800001: hash=2a6ecb00068bce7aec7b3fe86e01e74be2304275
user='user1.4' description='step 1.4' length=187 offset=8471 (+93)
1979-01-03 21:01:02.700001: hash=dd57eeec7984452cf83ea92f5ef1971dab21dab7
user='user1.3' description='step 1.3' length=187 offset=8276 (+93)
1979-01-03 21:01:01.600001: hash=91807ee2469781ff1ab3190d9315ffc4376ef456
user='user1.2' description='step 1.2' length=187 offset=8081 (+93)
1979-01-03 21:01:00.500001: hash=200d3846826c608b580d940ccce3993d026fd5d4
user='user1.1' description='step 1.1' length=187 offset=7886 (+93)
1979-01-03 21:00:59.400001: hash=8731a3aedc212671194b3b1283aa97822e5d2e1c
user='user1.0' description='step 1.0' length=187 offset=7691 (+93)
1979-01-03 21:00:45.100001: hash=f09c9050d5e5bff8b7d14c7b0909a574825bfcc7
user="root0\nYour\nRoyal\nMagesty' \x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f" description='delete 0\nalpha beta gamma\'delta"lambda\n\nqqq ...' length=240 offset=7443 (+190)
1979-01-03 21:00:44.000001: hash=d9b220897f846e886da76735f68dd935ace92c4b
user='' description='predelete 7' length=401 offset=7034 (+34)
1979-01-03 21:00:42.900001: hash=cd47f9f155d5e5699d8a039b5d5bfe87b5269996
user='root0.1\nYour\nMagesty ' description='undo 0.1\nmore detailed description\n\nzzz ...\t' length=209 offset=6817 (+159)
1979-01-03 21:00:41.800001: hash=11b63b0eb9d3da7480882da9641279b26d1ba6e8
user='root0.0\nYour\nMagesty ' description='undo 0.0\nmore detailed description\n\nzzz ...' length=208 offset=6601 (+158)
1979-01-03 21:00:40.700001: hash=09f89c9aabd271e61e9b8659f5a433de453d8dbe
user='user0.24' description='step 0.24' length=190 offset=6403 (+95)
1979-01-03 21:00:39.600001: hash=8faa12a66b7bea90ed50c3718cefb66f3d51efa1
user='user0.23' description='step 0.23' length=190 offset=6205 (+95)
1979-01-03 21:00:38.500001: hash=80e78a0c9f6a4df6488d83c976ffef7ca2bde4a6
user='user0.22' description='step 0.22' length=464 offset=5733 (+95)
1979-01-03 21:00:37.400001: hash=ff8650ead93eebb87eb6b3eda9739c038e8f1f6d
user='user0.21' description='step 0.21' length=190 offset=5535 (+95)
1979-01-03 21:00:36.300001: hash=157bcb480d13190aba47f77745b3a228a2fe47ee
user='user0.20' description='step 0.20' length=190 offset=5337 (+95)
1979-01-03 21:00:35.200001: hash=65f947a791d6db121504812661a4f3f7b7f59df1
user='user0.19' description='step 0.19' length=190 offset=5139 (+95)
1979-01-03 21:00:34.100001: hash=734ecdb6b80fad959d57c6335f6766574f85bd5a
user='user0.18' description='step 0.18' length=190 offset=4941 (+95)
1979-01-03 21:00:33.000001: hash=af345f3f6264a22fe07f9593640ade8f6eb0f1e5
user='user0.17' description='step 0.17' length=190 offset=4743 (+95)
1979-01-03 21:00:31.900001: hash=e62086be7154c9da3a99ddcdc5d40eebfad73423
user='user0.16' description='step 0.16' length=190 offset=4545 (+95)
1979-01-03 21:00:30.800001: hash=60880e954e9c43f4f6cd66f348e1258d5a72bfcc
user='user0.15' description='step 0.15' length=190 offset=4347 (+95)
1979-01-03 21:00:29.700001: hash=4fafec0da6d66941a66f2034abc54707d2aef9a0
user='user0.14' description='step 0.14' length=190 offset=4149 (+95)
1979-01-03 21:00:28.600001: hash=58d64fdc19a3990a9bcd5b1642d1a31e2fcf0e68
user='user0.13' description='step 0.13' length=190 offset=3951 (+95)
1979-01-03 21:00:27.500001: hash=9e23abe95e8519f96b207dc227cc81c0e32b350a
user='user0.12' description='step 0.12' length=190 offset=3753 (+95)
1979-01-03 21:00:26.400001: hash=dbfb884fb3c8d41c62a25b08682997a3b994ae27
user='user0.11' description='step 0.11' length=190 offset=3555 (+95)
1979-01-03 21:00:25.300001: hash=08d94d9c33ef5b6b298fee1227ad5e793706d97a
user='user0.10' description='step 0.10' length=190 offset=3357 (+95)
1979-01-03 21:00:24.200001: hash=d9526d1e85dac9785bb689781a65ff0b2e6eecc5
user='user0.9' description='step 0.9' length=187 offset=3162 (+93)
1979-01-03 21:00:23.100000: hash=bb402ec5dd9c412adce959b62b5490f5ba97f116
user='user0.8' description='step 0.8' length=442 offset=2712 (+93)
1979-01-03 21:00:22.000000: hash=96877aeb66269349dc15e5108adc1bc3d66cb25b
user='user0.7' description='step 0.7' length=187 offset=2517 (+93)
1979-01-03 21:00:20.900000: hash=ee1c47b451653e98ba04dd24e2c348635201238b
user='user0.6' description='step 0.6' length=187 offset=2322 (+93)
1979-01-03 21:00:19.800000: hash=954218c38364ea2963568221de593a4cfbd3269e
user='user0.5' description='step 0.5' length=423 offset=1891 (+93)
1979-01-03 21:00:18.700000: hash=46814b832d84153c9372f2f80d24d756b2b36c2b
user='user0.4' description='step 0.4' length=404 offset=1479 (+93)
1979-01-03 21:00:17.600000: hash=9b7a1c17f57b2edf602dd940989b2eb622f53727
user='user0.3' description='step 0.3' length=187 offset=1284 (+93)
1979-01-03 21:00:16.500000: hash=6bb00a8cbe03fb054be5e5f9531f5bf32e793645
user='user0.2' description='step 0.2' length=385 offset=891 (+93)
1979-01-03 21:00:15.400000: hash=e323362838d636477bc3efca7fa320a84e379eee
user='user0.1' description='step 0.1' length=366 offset=517 (+93)
1979-01-03 21:00:14.300000: hash=01a03576dde5a9b1bdb0df6ac2746677dc1ebd2a
user='user0.0' description='step 0.0' length=346 offset=163 (+93)
1979-01-03 21:00:08.800000: hash=2838c499aba0cfd9c477d9a313e715c513c71dba
user='' description='initial database creation' length=151 offset=4 (+48)
************************************************************
file identifier: 'FS21'
FS21
\ No newline at end of file
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