Commit b04cd609 authored by Kirill Smelkov's avatar Kirill Smelkov

.

parent 517db5de
...@@ -892,8 +892,74 @@ func (fs *FileStorage) Load(xid zodb.Xid) (data []byte, tid zodb.Tid, err error) ...@@ -892,8 +892,74 @@ func (fs *FileStorage) Load(xid zodb.Xid) (data []byte, tid zodb.Tid, err error)
return data, tid, nil return data, tid, nil
} }
// --- raw iteration ---
// zodb.IStorage iteration // TxnIter is iterator over transaction records
type TxnIter struct {
fsSeq *xbufio.SeqReaderAt
Txnh TxnHeader // current transaction record information
Flags iterFlags // XXX iterate forward (> 0) / backward (< 0) / EOF reached (== 0)
}
// DataIter is iterator over data records inside one transaction
type DataIter struct {
fsSeq *xbufio.SeqReaderAt
Txnh *TxnHeader // header of transaction we are iterating inside
Datah DataHeader // current data record information
}
// Iter is combined 2-level iterator over transaction and data records
type Iter struct {
TxnIter
DataIter
}
// NextTxn iterates to next/previous transaction record according to iteration direction
func (ti *TxnIter) NextTxn(flags TxnLoadFlags) error {
var err error
if ti.Flags & iterDir != 0 {
err = ti.Txnh.LoadNext(ti.fsSeq, flags)
} else {
err = ti.Txnh.LoadPrev(ti.fsSeq, flags)
}
//fmt.Println("loaded:", ti.Txnh.Tid)
return err
}
// NextData iterates to next data record header
func (di *DataIter) NextData() error {
return di.Datah.LoadNext(di.fsSeq, di.Txnh)
}
// NextTxn iterates to next transaction record and resets data iterator to iterate inside it
func (iter *Iter) NextTxn() error {
err := iter.TxnIter.NextTxn()
if err != nil {
return err
}
// set .DataIter to iterate over .TxnIter.Txnh
iter.DataIter.Datah.Pos = fsi.txnIter.Txnh.DataPos()
iter.DataIter.Datah.DataLen = -DataHeaderSize // first iteration will go to first data record
}
// IterateRaw ... XXX
func (fs *FileStorage) IterateRaw(dir/*XXX fwd/back*/) *Iter {
// when iterating use IO optimized for sequential access
fsSeq := xbufio.NewSeqReaderAt(fs.file)
// XXX setup .TxnIter.dir and start
iter.TxnIter.fsSeq = fsSeq
iter.DataIter.fsSeq = fsSeq
iter.DataIter.Txnh = &iter.txnIter.Txnh
return iter
}
// --- zodb.IStorage iteration ---
type iterFlags int type iterFlags int
const ( const (
...@@ -902,61 +968,41 @@ const ( ...@@ -902,61 +968,41 @@ const (
iterPreloaded // data for this iteration was already preloaded iterPreloaded // data for this iteration was already preloaded
) )
// txnIter is iterator over transaction records // zIter is transaction/data-records iterator as specified by zodb.IStorage
type txnIter struct { type zIter struct {
fsSeq *xbufio.SeqReaderAt iter Iter
Txnh TxnHeader // current transaction information
TidStop zodb.Tid // iterate up to tid <= tidStop | tid >= tidStop depending on .dir TidStop zodb.Tid // iterate up to tid <= tidStop | tid >= tidStop depending on .dir
Flags iterFlags // iterate forward (> 0) / backward (< 0) / EOF reached (== 0) Flags iterFlags
}
// dataIter is iterator over data records inside one transaction
type dataIter struct {
fsSeq *xbufio.SeqReaderAt
Txnh *TxnHeader // header of transaction we are iterating inside
Datah DataHeader
// data header for data loading // data header for data loading
// XXX need to use separate dh because x.LoadData() changes x state while going through backpointers. // ( NOTE: need to use separate dh because x.LoadData() changes x state
// XXX here to avoid allocations // while going through backpointers.
//
// here to avoid allocations )
dhLoading DataHeader dhLoading DataHeader
sri zodb.StorageRecordInformation // ptr to this will be returned by NextData sri zodb.StorageRecordInformation // ptr to this will be returned by NextData
dataBuf []byte dataBuf []byte
} }
// iterator is transaction/data-records iterator as specified by zodb.IStorage // NextTxn iterates to next/previous transaction record according to iteration direction
type iterator struct { func (zi *zIter) NextTxn() (*zodb.TxnInfo, zodb.IStorageRecordIterator, error) {
txnIter txnIter
dataIter dataIter
}
func (ti *txnIter) NextTxn(flags TxnLoadFlags) error {
switch { switch {
case ti.Flags & iterEOF != 0: case ti.Flags & iterEOF != 0:
//println("already eof") //println("already eof")
return io.EOF return io.EOF
// XXX needed?
case ti.Flags & iterPreloaded != 0: case ti.Flags & iterPreloaded != 0:
// first element is already there - preloaded by who initialized txnIter // first element is already there - preloaded by who initialized TxnIter
ti.Flags &= ^iterPreloaded ti.Flags &= ^iterPreloaded
//fmt.Println("preloaded:", ti.Txnh.Tid) //fmt.Println("preloaded:", ti.Txnh.Tid)
default: default:
var err error err := zi.iter.NextTxn(LoadAll)
if ti.Flags & iterDir != 0 {
err = ti.Txnh.LoadNext(ti.fsSeq, flags)
} else {
err = ti.Txnh.LoadPrev(ti.fsSeq, flags)
}
// XXX EOF ^^^ is not expected (range pre-cut to valid tids) ? // XXX EOF ^^^ is not expected (range pre-cut to valid tids) ?
//fmt.Println("loaded:", ti.Txnh.Tid)
if err != nil { if err != nil {
return err return err
} }
...@@ -970,48 +1016,51 @@ func (ti *txnIter) NextTxn(flags TxnLoadFlags) error { ...@@ -970,48 +1016,51 @@ func (ti *txnIter) NextTxn(flags TxnLoadFlags) error {
return io.EOF return io.EOF
} }
return nil return &zi.iter.Txnh.TxnInfo, zi, nil
} }
func (di *dataIter) NextData() (*zodb.StorageRecordInformation, error) { // NextData iterates to next data record and loads data content
err := di.Datah.LoadNext(di.fsSeq, di.Txnh) func (zi *zIter) NextData() (*zodb.StorageRecordInformation, error) {
err := zi.iter.NextData()
if err != nil { if err != nil {
return nil, err // XXX recheck return nil, err // XXX recheck
} }
di.sri.Oid = di.Datah.Oid zi.sri.Oid = zi.iter.Datah.Oid
di.sri.Tid = di.Datah.Tid zi.sri.Tid = zi.iter.Datah.Tid
// NOTE dh.LoadData() changes dh state while going through backpointers - // NOTE dh.LoadData() changes dh state while going through backpointers -
// - need to use separate dh because of this // - need to use separate dh because of this
di.dhLoading = di.Datah zi.dhLoading = zi.iter.Datah
di.sri.Data = di.dataBuf zi.sri.Data = zi.dataBuf
err = di.dhLoading.LoadData(di.fsSeq, &di.sri.Data) err = zi.dhLoading.LoadData(zi.iter.DataIter.fsSeq, &zi.sri.Data)
if err != nil { if err != nil {
return nil, err // XXX recheck return nil, err // XXX recheck
} }
// if memory was reallocated - use it next time // if memory was reallocated - use it next time
if cap(di.sri.Data) > cap(di.dataBuf) { if cap(zi.sri.Data) > cap(zi.dataBuf) {
di.dataBuf = di.sri.Data zi.dataBuf = zi.sri.Data
} }
di.sri.DataTid = di.dhLoading.Tid zi.sri.DataTid = zi.dhLoading.Tid
return &di.sri, nil return &zi.sri, nil
} }
func (fsi *iterator) NextTxn() (*zodb.TxnInfo, zodb.IStorageRecordIterator, error) {
err := fsi.txnIter.NextTxn(LoadAll)
if err != nil {
return nil, nil, err // XXX recheck
}
// set .dataIter to iterate over .txnIter.Txnh
fsi.dataIter.Datah.Pos = fsi.txnIter.Txnh.DataPos()
fsi.dataIter.Datah.DataLen = -DataHeaderSize // first iteration will go to first data record
return &fsi.txnIter.Txnh.TxnInfo, &fsi.dataIter, nil // iterStartError is the iterator created when there are preparatory errors
// this way we offload clients, besides handling NextTxn errors, from also
// handling error cases from Iterate.
//
// XXX bad idea? (e.g. it will prevent from devirtualizing what Iterate returns)
type iterStartError struct {
err error
}
func (e *iterStartError) NextTxn(*zodb.TxnInfo, zodb.IStorageIterator, error) {
return nil, nil, e.err
} }
func (fs *FileStorage) Iterate(tidMin, tidMax zodb.Tid) zodb.IStorageIterator { func (fs *FileStorage) Iterate(tidMin, tidMax zodb.Tid) zodb.IStorageIterator {
...@@ -1024,14 +1073,15 @@ func (fs *FileStorage) Iterate(tidMin, tidMax zodb.Tid) zodb.IStorageIterator { ...@@ -1024,14 +1073,15 @@ func (fs *FileStorage) Iterate(tidMin, tidMax zodb.Tid) zodb.IStorageIterator {
tidMax = fs.txnhMax.Tid tidMax = fs.txnhMax.Tid
} }
// XXX naming // XXX naming -> ziter?
Iter := iterator{} ziter := &zIter{iter}
// when iterating use IO optimized for sequential access // when iterating use IO optimized for sequential access
// XXX -> IterateRaw
fsSeq := xbufio.NewSeqReaderAt(fs.file) fsSeq := xbufio.NewSeqReaderAt(fs.file)
Iter.txnIter.fsSeq = fsSeq iter.txnIter.fsSeq = fsSeq
Iter.dataIter.fsSeq = fsSeq iter.dataIter.fsSeq = fsSeq
Iter.dataIter.Txnh = &Iter.txnIter.Txnh iter.dataIter.Txnh = &iter.txnIter.Txnh
if tidMin > tidMax { if tidMin > tidMax {
Iter.txnIter.Flags |= iterEOF // empty Iter.txnIter.Flags |= iterEOF // empty
...@@ -1065,7 +1115,7 @@ func (fs *FileStorage) Iterate(tidMin, tidMax zodb.Tid) zodb.IStorageIterator { ...@@ -1065,7 +1115,7 @@ func (fs *FileStorage) Iterate(tidMin, tidMax zodb.Tid) zodb.IStorageIterator {
} }
if err != nil { if err != nil {
panic(err) // XXX return &iterStartError{err} // XXX err ctx
} }
//fmt.Printf("tidRange: %v..%v -> found %v @%v\n", tidMin, tidMax, iter.Txnh.Tid, iter.Txnh.Pos) //fmt.Printf("tidRange: %v..%v -> found %v @%v\n", tidMin, tidMax, iter.Txnh.Tid, iter.Txnh.Pos)
...@@ -1075,9 +1125,9 @@ func (fs *FileStorage) Iterate(tidMin, tidMax zodb.Tid) zodb.IStorageIterator { ...@@ -1075,9 +1125,9 @@ func (fs *FileStorage) Iterate(tidMin, tidMax zodb.Tid) zodb.IStorageIterator {
iter.Flags &= ^iterEOF iter.Flags &= ^iterEOF
if iter.Flags&iterDir != 0 { if iter.Flags&iterDir != 0 {
// when ^^^ we were searching forward first txn was already found // when ^^^ we were searching forward first txn was already found
err = iter.Txnh.loadStrings(fs.file) // XXX ok? XXX -> move NextTxn() ? err = iter.Txnh.loadStrings(fsSeq) // XXX ok? XXX -> move NextTxn() ?
if err != nil { if err != nil {
panic(err) // XXX return &iterStartError{err}
} }
iter.Flags |= iterPreloaded iter.Flags |= iterPreloaded
} }
......
// 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 -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"
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=57 class=persistent.mapping.PersistentMapping
Trans #00001 tid=0285cbac3d0369e6 time=1979-01-03 21:00:14.300000 offset=250
status=' ' user='user0.0' description='step 0.0'
data #00000 oid=0000000000000000 size=95 class=persistent.mapping.PersistentMapping
data #00001 oid=0000000000000001 size=29 class=__main__.Object
Trans #00002 tid=0285cbac41b4e833 time=1979-01-03 21:00:15.400000 offset=557
status=' ' user='user0.1' description='step 0.1'
data #00000 oid=0000000000000000 size=116 class=persistent.mapping.PersistentMapping
data #00001 oid=0000000000000002 size=29 class=__main__.Object
Trans #00003 tid=0285cbac46666680 time=1979-01-03 21:00:16.500000 offset=885
status=' ' user='user0.2' description='step 0.2'
data #00000 oid=0000000000000000 size=136 class=persistent.mapping.PersistentMapping
data #00001 oid=0000000000000003 size=29 class=__main__.Object
Trans #00004 tid=0285cbac4b17e4cc time=1979-01-03 21:00:17.600000 offset=1233
status=' ' user='user0.3' description='step 0.3'
data #00000 oid=0000000000000002 size=29 class=__main__.Object
Trans #00005 tid=0285cbac4fc96319 time=1979-01-03 21:00:18.700000 offset=1403
status=' ' user='user0.4' description='step 0.4'
data #00000 oid=0000000000000000 size=156 class=persistent.mapping.PersistentMapping
data #00001 oid=0000000000000004 size=29 class=__main__.Object
Trans #00006 tid=0285cbac547ae166 time=1979-01-03 21:00:19.800000 offset=1771
status=' ' user='user0.5' description='step 0.5'
data #00000 oid=0000000000000000 size=176 class=persistent.mapping.PersistentMapping
data #00001 oid=0000000000000005 size=29 class=__main__.Object
Trans #00007 tid=0285cbac592c5fb3 time=1979-01-03 21:00:20.900000 offset=2159
status=' ' user='user0.6' description='step 0.6'
data #00000 oid=0000000000000004 size=29 class=__main__.Object
Trans #00008 tid=0285cbac5dddde00 time=1979-01-03 21:00:22.000000 offset=2329
status=' ' user='user0.7' description='step 0.7'
data #00000 oid=0000000000000005 size=29 class=__main__.Object
Trans #00009 tid=0285cbac628f5c4c time=1979-01-03 21:00:23.100000 offset=2499
status=' ' user='user0.8' description='step 0.8'
data #00000 oid=0000000000000000 size=196 class=persistent.mapping.PersistentMapping
data #00001 oid=0000000000000006 size=29 class=__main__.Object
Trans #00010 tid=0285cbac6740da99 time=1979-01-03 21:00:24.200001 offset=2907
status=' ' user='user0.9' description='step 0.9'
data #00000 oid=0000000000000006 size=29 class=__main__.Object
Trans #00011 tid=0285cbac6bf258e6 time=1979-01-03 21:00:25.300001 offset=3079
status=' ' user='user0.10' description='step 0.10'
data #00000 oid=0000000000000003 size=30 class=__main__.Object
Trans #00012 tid=0285cbac70a3d733 time=1979-01-03 21:00:26.400001 offset=3252
status=' ' user='user0.11' description='step 0.11'
data #00000 oid=0000000000000003 size=30 class=__main__.Object
Trans #00013 tid=0285cbac75555580 time=1979-01-03 21:00:27.500001 offset=3425
status=' ' user='user0.12' description='step 0.12'
data #00000 oid=0000000000000001 size=30 class=__main__.Object
Trans #00014 tid=0285cbac7a06d3cc time=1979-01-03 21:00:28.600001 offset=3598
status=' ' user='user0.13' description='step 0.13'
data #00000 oid=0000000000000005 size=30 class=__main__.Object
Trans #00015 tid=0285cbac7eb85219 time=1979-01-03 21:00:29.700001 offset=3771
status=' ' user='user0.14' description='step 0.14'
data #00000 oid=0000000000000005 size=30 class=__main__.Object
Trans #00016 tid=0285cbac8369d066 time=1979-01-03 21:00:30.800001 offset=3944
status=' ' user='user0.15' description='step 0.15'
data #00000 oid=0000000000000006 size=30 class=__main__.Object
Trans #00017 tid=0285cbac881b4eb3 time=1979-01-03 21:00:31.900001 offset=4117
status=' ' user='user0.16' description='step 0.16'
data #00000 oid=0000000000000005 size=30 class=__main__.Object
Trans #00018 tid=0285cbac8ccccd00 time=1979-01-03 21:00:33.000001 offset=4290
status=' ' user='user0.17' description='step 0.17'
data #00000 oid=0000000000000004 size=30 class=__main__.Object
Trans #00019 tid=0285cbac917e4b4c time=1979-01-03 21:00:34.100001 offset=4463
status=' ' user='user0.18' description='step 0.18'
data #00000 oid=0000000000000004 size=30 class=__main__.Object
Trans #00020 tid=0285cbac962fc999 time=1979-01-03 21:00:35.200001 offset=4636
status=' ' user='user0.19' description='step 0.19'
data #00000 oid=0000000000000005 size=30 class=__main__.Object
Trans #00021 tid=0285cbac9ae147e6 time=1979-01-03 21:00:36.300001 offset=4809
status=' ' user='user0.20' description='step 0.20'
data #00000 oid=0000000000000002 size=30 class=__main__.Object
Trans #00022 tid=0285cbac9f92c633 time=1979-01-03 21:00:37.400001 offset=4982
status=' ' user='user0.21' description='step 0.21'
data #00000 oid=0000000000000002 size=30 class=__main__.Object
Trans #00023 tid=0285cbaca4444480 time=1979-01-03 21:00:38.500001 offset=5155
status=' ' user='user0.22' description='step 0.22'
data #00000 oid=0000000000000000 size=216 class=persistent.mapping.PersistentMapping
data #00001 oid=0000000000000007 size=30 class=__main__.Object
Trans #00024 tid=0285cbaca8f5c2cc time=1979-01-03 21:00:39.600001 offset=5586
status=' ' user='user0.23' description='step 0.23'
data #00000 oid=0000000000000007 size=30 class=__main__.Object
Trans #00025 tid=0285cbacada74119 time=1979-01-03 21:00:40.700001 offset=5759
status=' ' user='user0.24' description='step 0.24'
data #00000 oid=0000000000000003 size=30 class=__main__.Object
Trans #00026 tid=0285cbacb258bf66 time=1979-01-03 21:00:41.800001 offset=5995
status=' ' user='root0.0\nYour\nMagesty ' description='undo 0.0\nmore detailed description\n\nzzz ...'
data #00000 oid=0000000000000007 size=30 class=__main__.Object bp=0285cbaca4444480
Trans #00027 tid=0285cbacb70a3db3 time=1979-01-03 21:00:42.900001 offset=6210
status=' ' user='root0.1\nYour\nMagesty ' description='undo 0.1\nmore detailed description\n\nzzz ...\t'
data #00000 oid=0000000000000003 size=30 class=__main__.Object bp=0285cbac70a3d733
Trans #00028 tid=0285cbacbbbbbc00 time=1979-01-03 21:00:44.000001 offset=6302
status=' ' user='' description='predelete 7'
data #00000 oid=0000000000000000 size=216 class=persistent.mapping.PersistentMapping
data #00001 oid=0000000000000008 size=28 class=__main__.Object
Trans #00029 tid=0285cbacc06d3a4c time=1979-01-03 21:00:45.100001 offset=6826
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=6975
status=' ' user='user1.0' description='step 1.0'
data #00000 oid=0000000000000008 size=29 class=__main__.Object
Trans #00031 tid=0285cbad02222280 time=1979-01-03 21:01:00.500001 offset=7145
status=' ' user='user1.1' description='step 1.1'
data #00000 oid=0000000000000006 size=29 class=__main__.Object
Trans #00032 tid=0285cbad06d3a0cc time=1979-01-03 21:01:01.600001 offset=7315
status=' ' user='user1.2' description='step 1.2'
data #00000 oid=0000000000000004 size=29 class=__main__.Object
Trans #00033 tid=0285cbad0b851f19 time=1979-01-03 21:01:02.700001 offset=7485
status=' ' user='user1.3' description='step 1.3'
data #00000 oid=0000000000000003 size=29 class=__main__.Object
Trans #00034 tid=0285cbad10369d66 time=1979-01-03 21:01:03.800001 offset=7655
status=' ' user='user1.4' description='step 1.4'
data #00000 oid=0000000000000003 size=29 class=__main__.Object
Trans #00035 tid=0285cbad14e81bb3 time=1979-01-03 21:01:04.900001 offset=7825
status=' ' user='user1.5' description='step 1.5'
data #00000 oid=0000000000000008 size=29 class=__main__.Object
Trans #00036 tid=0285cbad19999a00 time=1979-01-03 21:01:06.000001 offset=7995
status=' ' user='user1.6' description='step 1.6'
data #00000 oid=0000000000000001 size=29 class=__main__.Object
Trans #00037 tid=0285cbad1e4b184c time=1979-01-03 21:01:07.100001 offset=8165
status=' ' user='user1.7' description='step 1.7'
data #00000 oid=0000000000000002 size=29 class=__main__.Object
Trans #00038 tid=0285cbad22fc9699 time=1979-01-03 21:01:08.200001 offset=8335
status=' ' user='user1.8' description='step 1.8'
data #00000 oid=0000000000000008 size=29 class=__main__.Object
Trans #00039 tid=0285cbad27ae14e6 time=1979-01-03 21:01:09.300001 offset=8505
status=' ' user='user1.9' description='step 1.9'
data #00000 oid=0000000000000008 size=29 class=__main__.Object
Trans #00040 tid=0285cbad2c5f9333 time=1979-01-03 21:01:10.400002 offset=8677
status=' ' user='user1.10' description='step 1.10'
data #00000 oid=0000000000000006 size=30 class=__main__.Object
Trans #00041 tid=0285cbad31111180 time=1979-01-03 21:01:11.500002 offset=8850
status=' ' user='user1.11' description='step 1.11'
data #00000 oid=0000000000000005 size=30 class=__main__.Object
Trans #00042 tid=0285cbad35c28fcc time=1979-01-03 21:01:12.600002 offset=9023
status=' ' user='user1.12' description='step 1.12'
data #00000 oid=0000000000000008 size=30 class=__main__.Object
Trans #00043 tid=0285cbad3a740e19 time=1979-01-03 21:01:13.700002 offset=9196
status=' ' user='user1.13' description='step 1.13'
data #00000 oid=0000000000000006 size=30 class=__main__.Object
Trans #00044 tid=0285cbad3f258c66 time=1979-01-03 21:01:14.800002 offset=9369
status=' ' user='user1.14' description='step 1.14'
data #00000 oid=0000000000000003 size=30 class=__main__.Object
Trans #00045 tid=0285cbad43d70ab3 time=1979-01-03 21:01:15.900002 offset=9542
status=' ' user='user1.15' description='step 1.15'
data #00000 oid=0000000000000003 size=30 class=__main__.Object
Trans #00046 tid=0285cbad48888900 time=1979-01-03 21:01:17.000002 offset=9715
status=' ' user='user1.16' description='step 1.16'
data #00000 oid=0000000000000002 size=30 class=__main__.Object
Trans #00047 tid=0285cbad4d3a074c time=1979-01-03 21:01:18.100002 offset=9888
status=' ' user='user1.17' description='step 1.17'
data #00000 oid=0000000000000003 size=30 class=__main__.Object
Trans #00048 tid=0285cbad51eb8599 time=1979-01-03 21:01:19.200002 offset=10061
status=' ' user='user1.18' description='step 1.18'
data #00000 oid=0000000000000001 size=30 class=__main__.Object
Trans #00049 tid=0285cbad569d03e6 time=1979-01-03 21:01:20.300002 offset=10234
status=' ' user='user1.19' description='step 1.19'
data #00000 oid=0000000000000005 size=30 class=__main__.Object
Trans #00050 tid=0285cbad5b4e8233 time=1979-01-03 21:01:21.400002 offset=10407
status=' ' user='user1.20' description='step 1.20'
data #00000 oid=0000000000000003 size=30 class=__main__.Object
Trans #00051 tid=0285cbad60000080 time=1979-01-03 21:01:22.500002 offset=10580
status=' ' user='user1.21' description='step 1.21'
data #00000 oid=0000000000000003 size=30 class=__main__.Object
Trans #00052 tid=0285cbad64b17ecc time=1979-01-03 21:01:23.600002 offset=10753
status=' ' user='user1.22' description='step 1.22'
data #00000 oid=0000000000000006 size=30 class=__main__.Object
Trans #00053 tid=0285cbad6962fd19 time=1979-01-03 21:01:24.700002 offset=10926
status=' ' user='user1.23' description='step 1.23'
data #00000 oid=0000000000000005 size=30 class=__main__.Object
Trans #00054 tid=0285cbad6e147b66 time=1979-01-03 21:01:25.800002 offset=11099
status=' ' user='user1.24' description='step 1.24'
data #00000 oid=0000000000000005 size=30 class=__main__.Object
Trans #00055 tid=0285cbad77777800 time=1979-01-03 21:01:28.000002 offset=11336
status=' ' user='root1.0\nYour\nMagesty ' description='undo 1.0\nmore detailed description\n\nzzz ...\t'
data #00000 oid=0000000000000006 size=30 class=__main__.Object bp=0285cbad3a740e19
Trans #00056 tid=0285cbad7c28f64c time=1979-01-03 21:01:29.100002 offset=11552
status=' ' user='root1.1\nYour\nMagesty ' description='undo 1.1\nmore detailed description\n\nzzz ...\t\t'
data #00000 oid=0000000000000005 size=30 class=__main__.Object bp=0285cbad6962fd19
Trans #00057 tid=0285cbad80da7499 time=1979-01-03 21:01:30.200002 offset=11644
status=' ' user='' description='predelete 6'
data #00000 oid=0000000000000000 size=216 class=persistent.mapping.PersistentMapping
data #00001 oid=0000000000000009 size=28 class=__main__.Object
Trans #00058 tid=0285cbad858bf2e6 time=1979-01-03 21:01:31.300002 offset=12168
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: 151
transaction id: 0285cbac258bf266
trec len: 147
status: ' '
user: ''
description: 'initial database creation'
len(extra): 0
------------------------------------------------------------
offset: 52
oid: 0000000000000000
revid: 0285cbac258bf266
previous record offset: 0
transaction offset: 4
len(data): 57
redundant trec len: 147
============================================================
offset: 159
end pos: 458
transaction id: 0285cbac3d0369e6
trec len: 299
status: ' '
user: 'user0.0'
description: 'step 0.0'
len(extra): 53
------------------------------------------------------------
offset: 250
oid: 0000000000000000
revid: 0285cbac3d0369e6
previous record offset: 52
transaction offset: 159
len(data): 95
------------------------------------------------------------
offset: 387
oid: 0000000000000001
revid: 0285cbac3d0369e6
previous record offset: 0
transaction offset: 159
len(data): 29
redundant trec len: 299
============================================================
offset: 466
end pos: 786
transaction id: 0285cbac41b4e833
trec len: 320
status: ' '
user: 'user0.1'
description: 'step 0.1'
len(extra): 53
------------------------------------------------------------
offset: 557
oid: 0000000000000000
revid: 0285cbac41b4e833
previous record offset: 250
transaction offset: 466
len(data): 116
------------------------------------------------------------
offset: 715
oid: 0000000000000002
revid: 0285cbac41b4e833
previous record offset: 0
transaction offset: 466
len(data): 29
redundant trec len: 320
============================================================
offset: 794
end pos: 1134
transaction id: 0285cbac46666680
trec len: 340
status: ' '
user: 'user0.2'
description: 'step 0.2'
len(extra): 53
------------------------------------------------------------
offset: 885
oid: 0000000000000000
revid: 0285cbac46666680
previous record offset: 557
transaction offset: 794
len(data): 136
------------------------------------------------------------
offset: 1063
oid: 0000000000000003
revid: 0285cbac46666680
previous record offset: 0
transaction offset: 794
len(data): 29
redundant trec len: 340
============================================================
offset: 1142
end pos: 1304
transaction id: 0285cbac4b17e4cc
trec len: 162
status: ' '
user: 'user0.3'
description: 'step 0.3'
len(extra): 53
------------------------------------------------------------
offset: 1233
oid: 0000000000000002
revid: 0285cbac4b17e4cc
previous record offset: 715
transaction offset: 1142
len(data): 29
redundant trec len: 162
============================================================
offset: 1312
end pos: 1672
transaction id: 0285cbac4fc96319
trec len: 360
status: ' '
user: 'user0.4'
description: 'step 0.4'
len(extra): 53
------------------------------------------------------------
offset: 1403
oid: 0000000000000000
revid: 0285cbac4fc96319
previous record offset: 885
transaction offset: 1312
len(data): 156
------------------------------------------------------------
offset: 1601
oid: 0000000000000004
revid: 0285cbac4fc96319
previous record offset: 0
transaction offset: 1312
len(data): 29
redundant trec len: 360
============================================================
offset: 1680
end pos: 2060
transaction id: 0285cbac547ae166
trec len: 380
status: ' '
user: 'user0.5'
description: 'step 0.5'
len(extra): 53
------------------------------------------------------------
offset: 1771
oid: 0000000000000000
revid: 0285cbac547ae166
previous record offset: 1403
transaction offset: 1680
len(data): 176
------------------------------------------------------------
offset: 1989
oid: 0000000000000005
revid: 0285cbac547ae166
previous record offset: 0
transaction offset: 1680
len(data): 29
redundant trec len: 380
============================================================
offset: 2068
end pos: 2230
transaction id: 0285cbac592c5fb3
trec len: 162
status: ' '
user: 'user0.6'
description: 'step 0.6'
len(extra): 53
------------------------------------------------------------
offset: 2159
oid: 0000000000000004
revid: 0285cbac592c5fb3
previous record offset: 1601
transaction offset: 2068
len(data): 29
redundant trec len: 162
============================================================
offset: 2238
end pos: 2400
transaction id: 0285cbac5dddde00
trec len: 162
status: ' '
user: 'user0.7'
description: 'step 0.7'
len(extra): 53
------------------------------------------------------------
offset: 2329
oid: 0000000000000005
revid: 0285cbac5dddde00
previous record offset: 1989
transaction offset: 2238
len(data): 29
redundant trec len: 162
============================================================
offset: 2408
end pos: 2808
transaction id: 0285cbac628f5c4c
trec len: 400
status: ' '
user: 'user0.8'
description: 'step 0.8'
len(extra): 53
------------------------------------------------------------
offset: 2499
oid: 0000000000000000
revid: 0285cbac628f5c4c
previous record offset: 1771
transaction offset: 2408
len(data): 196
------------------------------------------------------------
offset: 2737
oid: 0000000000000006
revid: 0285cbac628f5c4c
previous record offset: 0
transaction offset: 2408
len(data): 29
redundant trec len: 400
============================================================
offset: 2816
end pos: 2978
transaction id: 0285cbac6740da99
trec len: 162
status: ' '
user: 'user0.9'
description: 'step 0.9'
len(extra): 53
------------------------------------------------------------
offset: 2907
oid: 0000000000000006
revid: 0285cbac6740da99
previous record offset: 2737
transaction offset: 2816
len(data): 29
redundant trec len: 162
============================================================
offset: 2986
end pos: 3151
transaction id: 0285cbac6bf258e6
trec len: 165
status: ' '
user: 'user0.10'
description: 'step 0.10'
len(extra): 53
------------------------------------------------------------
offset: 3079
oid: 0000000000000003
revid: 0285cbac6bf258e6
previous record offset: 1063
transaction offset: 2986
len(data): 30
redundant trec len: 165
============================================================
offset: 3159
end pos: 3324
transaction id: 0285cbac70a3d733
trec len: 165
status: ' '
user: 'user0.11'
description: 'step 0.11'
len(extra): 53
------------------------------------------------------------
offset: 3252
oid: 0000000000000003
revid: 0285cbac70a3d733
previous record offset: 3079
transaction offset: 3159
len(data): 30
redundant trec len: 165
============================================================
offset: 3332
end pos: 3497
transaction id: 0285cbac75555580
trec len: 165
status: ' '
user: 'user0.12'
description: 'step 0.12'
len(extra): 53
------------------------------------------------------------
offset: 3425
oid: 0000000000000001
revid: 0285cbac75555580
previous record offset: 387
transaction offset: 3332
len(data): 30
redundant trec len: 165
============================================================
offset: 3505
end pos: 3670
transaction id: 0285cbac7a06d3cc
trec len: 165
status: ' '
user: 'user0.13'
description: 'step 0.13'
len(extra): 53
------------------------------------------------------------
offset: 3598
oid: 0000000000000005
revid: 0285cbac7a06d3cc
previous record offset: 2329
transaction offset: 3505
len(data): 30
redundant trec len: 165
============================================================
offset: 3678
end pos: 3843
transaction id: 0285cbac7eb85219
trec len: 165
status: ' '
user: 'user0.14'
description: 'step 0.14'
len(extra): 53
------------------------------------------------------------
offset: 3771
oid: 0000000000000005
revid: 0285cbac7eb85219
previous record offset: 3598
transaction offset: 3678
len(data): 30
redundant trec len: 165
============================================================
offset: 3851
end pos: 4016
transaction id: 0285cbac8369d066
trec len: 165
status: ' '
user: 'user0.15'
description: 'step 0.15'
len(extra): 53
------------------------------------------------------------
offset: 3944
oid: 0000000000000006
revid: 0285cbac8369d066
previous record offset: 2907
transaction offset: 3851
len(data): 30
redundant trec len: 165
============================================================
offset: 4024
end pos: 4189
transaction id: 0285cbac881b4eb3
trec len: 165
status: ' '
user: 'user0.16'
description: 'step 0.16'
len(extra): 53
------------------------------------------------------------
offset: 4117
oid: 0000000000000005
revid: 0285cbac881b4eb3
previous record offset: 3771
transaction offset: 4024
len(data): 30
redundant trec len: 165
============================================================
offset: 4197
end pos: 4362
transaction id: 0285cbac8ccccd00
trec len: 165
status: ' '
user: 'user0.17'
description: 'step 0.17'
len(extra): 53
------------------------------------------------------------
offset: 4290
oid: 0000000000000004
revid: 0285cbac8ccccd00
previous record offset: 2159
transaction offset: 4197
len(data): 30
redundant trec len: 165
============================================================
offset: 4370
end pos: 4535
transaction id: 0285cbac917e4b4c
trec len: 165
status: ' '
user: 'user0.18'
description: 'step 0.18'
len(extra): 53
------------------------------------------------------------
offset: 4463
oid: 0000000000000004
revid: 0285cbac917e4b4c
previous record offset: 4290
transaction offset: 4370
len(data): 30
redundant trec len: 165
============================================================
offset: 4543
end pos: 4708
transaction id: 0285cbac962fc999
trec len: 165
status: ' '
user: 'user0.19'
description: 'step 0.19'
len(extra): 53
------------------------------------------------------------
offset: 4636
oid: 0000000000000005
revid: 0285cbac962fc999
previous record offset: 4117
transaction offset: 4543
len(data): 30
redundant trec len: 165
============================================================
offset: 4716
end pos: 4881
transaction id: 0285cbac9ae147e6
trec len: 165
status: ' '
user: 'user0.20'
description: 'step 0.20'
len(extra): 53
------------------------------------------------------------
offset: 4809
oid: 0000000000000002
revid: 0285cbac9ae147e6
previous record offset: 1233
transaction offset: 4716
len(data): 30
redundant trec len: 165
============================================================
offset: 4889
end pos: 5054
transaction id: 0285cbac9f92c633
trec len: 165
status: ' '
user: 'user0.21'
description: 'step 0.21'
len(extra): 53
------------------------------------------------------------
offset: 4982
oid: 0000000000000002
revid: 0285cbac9f92c633
previous record offset: 4809
transaction offset: 4889
len(data): 30
redundant trec len: 165
============================================================
offset: 5062
end pos: 5485
transaction id: 0285cbaca4444480
trec len: 423
status: ' '
user: 'user0.22'
description: 'step 0.22'
len(extra): 53
------------------------------------------------------------
offset: 5155
oid: 0000000000000000
revid: 0285cbaca4444480
previous record offset: 2499
transaction offset: 5062
len(data): 216
------------------------------------------------------------
offset: 5413
oid: 0000000000000007
revid: 0285cbaca4444480
previous record offset: 0
transaction offset: 5062
len(data): 30
redundant trec len: 423
============================================================
offset: 5493
end pos: 5658
transaction id: 0285cbaca8f5c2cc
trec len: 165
status: ' '
user: 'user0.23'
description: 'step 0.23'
len(extra): 53
------------------------------------------------------------
offset: 5586
oid: 0000000000000007
revid: 0285cbaca8f5c2cc
previous record offset: 5413
transaction offset: 5493
len(data): 30
redundant trec len: 165
============================================================
offset: 5666
end pos: 5831
transaction id: 0285cbacada74119
trec len: 165
status: ' '
user: 'user0.24'
description: 'step 0.24'
len(extra): 53
------------------------------------------------------------
offset: 5759
oid: 0000000000000003
revid: 0285cbacada74119
previous record offset: 3252
transaction offset: 5666
len(data): 30
redundant trec len: 165
============================================================
offset: 5839
end pos: 6045
transaction id: 0285cbacb258bf66
trec len: 206
status: ' '
user: 'root0.0\nYour\nMagesty '
description: 'undo 0.0\nmore detailed description\n\nzzz ...'
len(extra): 69
------------------------------------------------------------
offset: 5995
oid: 0000000000000007
revid: 0285cbacb258bf66
previous record offset: 5586
transaction offset: 5839
len(data): 0
backpointer: 5413
redundant trec len: 206
============================================================
offset: 6053
end pos: 6260
transaction id: 0285cbacb70a3db3
trec len: 207
status: ' '
user: 'root0.1\nYour\nMagesty '
description: 'undo 0.1\nmore detailed description\n\nzzz ...\t'
len(extra): 69
------------------------------------------------------------
offset: 6210
oid: 0000000000000003
revid: 0285cbacb70a3db3
previous record offset: 5759
transaction offset: 6053
len(data): 0
backpointer: 3252
redundant trec len: 207
============================================================
offset: 6268
end pos: 6630
transaction id: 0285cbacbbbbbc00
trec len: 362
status: ' '
user: ''
description: 'predelete 7'
len(extra): 0
------------------------------------------------------------
offset: 6302
oid: 0000000000000000
revid: 0285cbacbbbbbc00
previous record offset: 5155
transaction offset: 6268
len(data): 216
------------------------------------------------------------
offset: 6560
oid: 0000000000000008
revid: 0285cbacbbbbbc00
previous record offset: 0
transaction offset: 6268
len(data): 28
redundant trec len: 362
============================================================
offset: 6638
end pos: 6876
transaction id: 0285cbacc06d3a4c
trec len: 238
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): 60
------------------------------------------------------------
offset: 6826
oid: 0000000000000007
revid: 0285cbacc06d3a4c
previous record offset: 5995
transaction offset: 6638
len(data): 0
backpointer: 0
redundant trec len: 238
============================================================
offset: 6884
end pos: 7046
transaction id: 0285cbacfd70a433
trec len: 162
status: ' '
user: 'user1.0'
description: 'step 1.0'
len(extra): 53
------------------------------------------------------------
offset: 6975
oid: 0000000000000008
revid: 0285cbacfd70a433
previous record offset: 6560
transaction offset: 6884
len(data): 29
redundant trec len: 162
============================================================
offset: 7054
end pos: 7216
transaction id: 0285cbad02222280
trec len: 162
status: ' '
user: 'user1.1'
description: 'step 1.1'
len(extra): 53
------------------------------------------------------------
offset: 7145
oid: 0000000000000006
revid: 0285cbad02222280
previous record offset: 3944
transaction offset: 7054
len(data): 29
redundant trec len: 162
============================================================
offset: 7224
end pos: 7386
transaction id: 0285cbad06d3a0cc
trec len: 162
status: ' '
user: 'user1.2'
description: 'step 1.2'
len(extra): 53
------------------------------------------------------------
offset: 7315
oid: 0000000000000004
revid: 0285cbad06d3a0cc
previous record offset: 4463
transaction offset: 7224
len(data): 29
redundant trec len: 162
============================================================
offset: 7394
end pos: 7556
transaction id: 0285cbad0b851f19
trec len: 162
status: ' '
user: 'user1.3'
description: 'step 1.3'
len(extra): 53
------------------------------------------------------------
offset: 7485
oid: 0000000000000003
revid: 0285cbad0b851f19
previous record offset: 6210
transaction offset: 7394
len(data): 29
redundant trec len: 162
============================================================
offset: 7564
end pos: 7726
transaction id: 0285cbad10369d66
trec len: 162
status: ' '
user: 'user1.4'
description: 'step 1.4'
len(extra): 53
------------------------------------------------------------
offset: 7655
oid: 0000000000000003
revid: 0285cbad10369d66
previous record offset: 7485
transaction offset: 7564
len(data): 29
redundant trec len: 162
============================================================
offset: 7734
end pos: 7896
transaction id: 0285cbad14e81bb3
trec len: 162
status: ' '
user: 'user1.5'
description: 'step 1.5'
len(extra): 53
------------------------------------------------------------
offset: 7825
oid: 0000000000000008
revid: 0285cbad14e81bb3
previous record offset: 6975
transaction offset: 7734
len(data): 29
redundant trec len: 162
============================================================
offset: 7904
end pos: 8066
transaction id: 0285cbad19999a00
trec len: 162
status: ' '
user: 'user1.6'
description: 'step 1.6'
len(extra): 53
------------------------------------------------------------
offset: 7995
oid: 0000000000000001
revid: 0285cbad19999a00
previous record offset: 3425
transaction offset: 7904
len(data): 29
redundant trec len: 162
============================================================
offset: 8074
end pos: 8236
transaction id: 0285cbad1e4b184c
trec len: 162
status: ' '
user: 'user1.7'
description: 'step 1.7'
len(extra): 53
------------------------------------------------------------
offset: 8165
oid: 0000000000000002
revid: 0285cbad1e4b184c
previous record offset: 4982
transaction offset: 8074
len(data): 29
redundant trec len: 162
============================================================
offset: 8244
end pos: 8406
transaction id: 0285cbad22fc9699
trec len: 162
status: ' '
user: 'user1.8'
description: 'step 1.8'
len(extra): 53
------------------------------------------------------------
offset: 8335
oid: 0000000000000008
revid: 0285cbad22fc9699
previous record offset: 7825
transaction offset: 8244
len(data): 29
redundant trec len: 162
============================================================
offset: 8414
end pos: 8576
transaction id: 0285cbad27ae14e6
trec len: 162
status: ' '
user: 'user1.9'
description: 'step 1.9'
len(extra): 53
------------------------------------------------------------
offset: 8505
oid: 0000000000000008
revid: 0285cbad27ae14e6
previous record offset: 8335
transaction offset: 8414
len(data): 29
redundant trec len: 162
============================================================
offset: 8584
end pos: 8749
transaction id: 0285cbad2c5f9333
trec len: 165
status: ' '
user: 'user1.10'
description: 'step 1.10'
len(extra): 53
------------------------------------------------------------
offset: 8677
oid: 0000000000000006
revid: 0285cbad2c5f9333
previous record offset: 7145
transaction offset: 8584
len(data): 30
redundant trec len: 165
============================================================
offset: 8757
end pos: 8922
transaction id: 0285cbad31111180
trec len: 165
status: ' '
user: 'user1.11'
description: 'step 1.11'
len(extra): 53
------------------------------------------------------------
offset: 8850
oid: 0000000000000005
revid: 0285cbad31111180
previous record offset: 4636
transaction offset: 8757
len(data): 30
redundant trec len: 165
============================================================
offset: 8930
end pos: 9095
transaction id: 0285cbad35c28fcc
trec len: 165
status: ' '
user: 'user1.12'
description: 'step 1.12'
len(extra): 53
------------------------------------------------------------
offset: 9023
oid: 0000000000000008
revid: 0285cbad35c28fcc
previous record offset: 8505
transaction offset: 8930
len(data): 30
redundant trec len: 165
============================================================
offset: 9103
end pos: 9268
transaction id: 0285cbad3a740e19
trec len: 165
status: ' '
user: 'user1.13'
description: 'step 1.13'
len(extra): 53
------------------------------------------------------------
offset: 9196
oid: 0000000000000006
revid: 0285cbad3a740e19
previous record offset: 8677
transaction offset: 9103
len(data): 30
redundant trec len: 165
============================================================
offset: 9276
end pos: 9441
transaction id: 0285cbad3f258c66
trec len: 165
status: ' '
user: 'user1.14'
description: 'step 1.14'
len(extra): 53
------------------------------------------------------------
offset: 9369
oid: 0000000000000003
revid: 0285cbad3f258c66
previous record offset: 7655
transaction offset: 9276
len(data): 30
redundant trec len: 165
============================================================
offset: 9449
end pos: 9614
transaction id: 0285cbad43d70ab3
trec len: 165
status: ' '
user: 'user1.15'
description: 'step 1.15'
len(extra): 53
------------------------------------------------------------
offset: 9542
oid: 0000000000000003
revid: 0285cbad43d70ab3
previous record offset: 9369
transaction offset: 9449
len(data): 30
redundant trec len: 165
============================================================
offset: 9622
end pos: 9787
transaction id: 0285cbad48888900
trec len: 165
status: ' '
user: 'user1.16'
description: 'step 1.16'
len(extra): 53
------------------------------------------------------------
offset: 9715
oid: 0000000000000002
revid: 0285cbad48888900
previous record offset: 8165
transaction offset: 9622
len(data): 30
redundant trec len: 165
============================================================
offset: 9795
end pos: 9960
transaction id: 0285cbad4d3a074c
trec len: 165
status: ' '
user: 'user1.17'
description: 'step 1.17'
len(extra): 53
------------------------------------------------------------
offset: 9888
oid: 0000000000000003
revid: 0285cbad4d3a074c
previous record offset: 9542
transaction offset: 9795
len(data): 30
redundant trec len: 165
============================================================
offset: 9968
end pos: 10133
transaction id: 0285cbad51eb8599
trec len: 165
status: ' '
user: 'user1.18'
description: 'step 1.18'
len(extra): 53
------------------------------------------------------------
offset: 10061
oid: 0000000000000001
revid: 0285cbad51eb8599
previous record offset: 7995
transaction offset: 9968
len(data): 30
redundant trec len: 165
============================================================
offset: 10141
end pos: 10306
transaction id: 0285cbad569d03e6
trec len: 165
status: ' '
user: 'user1.19'
description: 'step 1.19'
len(extra): 53
------------------------------------------------------------
offset: 10234
oid: 0000000000000005
revid: 0285cbad569d03e6
previous record offset: 8850
transaction offset: 10141
len(data): 30
redundant trec len: 165
============================================================
offset: 10314
end pos: 10479
transaction id: 0285cbad5b4e8233
trec len: 165
status: ' '
user: 'user1.20'
description: 'step 1.20'
len(extra): 53
------------------------------------------------------------
offset: 10407
oid: 0000000000000003
revid: 0285cbad5b4e8233
previous record offset: 9888
transaction offset: 10314
len(data): 30
redundant trec len: 165
============================================================
offset: 10487
end pos: 10652
transaction id: 0285cbad60000080
trec len: 165
status: ' '
user: 'user1.21'
description: 'step 1.21'
len(extra): 53
------------------------------------------------------------
offset: 10580
oid: 0000000000000003
revid: 0285cbad60000080
previous record offset: 10407
transaction offset: 10487
len(data): 30
redundant trec len: 165
============================================================
offset: 10660
end pos: 10825
transaction id: 0285cbad64b17ecc
trec len: 165
status: ' '
user: 'user1.22'
description: 'step 1.22'
len(extra): 53
------------------------------------------------------------
offset: 10753
oid: 0000000000000006
revid: 0285cbad64b17ecc
previous record offset: 9196
transaction offset: 10660
len(data): 30
redundant trec len: 165
============================================================
offset: 10833
end pos: 10998
transaction id: 0285cbad6962fd19
trec len: 165
status: ' '
user: 'user1.23'
description: 'step 1.23'
len(extra): 53
------------------------------------------------------------
offset: 10926
oid: 0000000000000005
revid: 0285cbad6962fd19
previous record offset: 10234
transaction offset: 10833
len(data): 30
redundant trec len: 165
============================================================
offset: 11006
end pos: 11171
transaction id: 0285cbad6e147b66
trec len: 165
status: ' '
user: 'user1.24'
description: 'step 1.24'
len(extra): 53
------------------------------------------------------------
offset: 11099
oid: 0000000000000005
revid: 0285cbad6e147b66
previous record offset: 10926
transaction offset: 11006
len(data): 30
redundant trec len: 165
============================================================
offset: 11179
end pos: 11386
transaction id: 0285cbad77777800
trec len: 207
status: ' '
user: 'root1.0\nYour\nMagesty '
description: 'undo 1.0\nmore detailed description\n\nzzz ...\t'
len(extra): 69
------------------------------------------------------------
offset: 11336
oid: 0000000000000006
revid: 0285cbad77777800
previous record offset: 10753
transaction offset: 11179
len(data): 0
backpointer: 9196
redundant trec len: 207
============================================================
offset: 11394
end pos: 11602
transaction id: 0285cbad7c28f64c
trec len: 208
status: ' '
user: 'root1.1\nYour\nMagesty '
description: 'undo 1.1\nmore detailed description\n\nzzz ...\t\t'
len(extra): 69
------------------------------------------------------------
offset: 11552
oid: 0000000000000005
revid: 0285cbad7c28f64c
previous record offset: 11099
transaction offset: 11394
len(data): 0
backpointer: 10926
redundant trec len: 208
============================================================
offset: 11610
end pos: 11972
transaction id: 0285cbad80da7499
trec len: 362
status: ' '
user: ''
description: 'predelete 6'
len(extra): 0
------------------------------------------------------------
offset: 11644
oid: 0000000000000000
revid: 0285cbad80da7499
previous record offset: 6302
transaction offset: 11610
len(data): 216
------------------------------------------------------------
offset: 11902
oid: 0000000000000009
revid: 0285cbad80da7499
previous record offset: 0
transaction offset: 11610
len(data): 28
redundant trec len: 362
============================================================
offset: 11980
end pos: 12218
transaction id: 0285cbad858bf2e6
trec len: 238
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): 60
------------------------------------------------------------
offset: 12168
oid: 0000000000000006
revid: 0285cbad858bf2e6
previous record offset: 11336
transaction offset: 11980
len(data): 0
backpointer: 0
redundant trec len: 238
...@@ -165,6 +165,7 @@ type IStorage interface { ...@@ -165,6 +165,7 @@ type IStorage interface {
// tpc_finish(txn, callback) XXX clarify about callback // tpc_finish(txn, callback) XXX clarify about callback
// tpc_abort(txn) // tpc_abort(txn)
// XXX text
Iterate(tidMin, tidMax Tid) IStorageIterator // XXX , error ? Iterate(tidMin, tidMax Tid) IStorageIterator // XXX , error ?
} }
......
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