Commit 5c5ba580 authored by Kirill Smelkov's avatar Kirill Smelkov

.

parent cb13a9f4
......@@ -148,21 +148,22 @@ func bug(e xerr, format string, a ...interface{}) {
}
// // noEOF returns err, but changes io.EOF -> io.ErrUnexpectedEOF
// func NoEOF(err error) error {
// if err == io.EOF {
// err = io.ErrUnexpectedEOF
// }
// return err
// }
//
// // okEOF returns err, but changes io.EOF -> nil
// func okEOF(err error) error {
// if err == io.EOF {
// err = nil
// }
// return err
// }
// XXX -> xio ?
// noEOF returns err, but changes io.EOF -> io.ErrUnexpectedEOF
func noEOF(err error) error {
if err == io.EOF {
err = io.ErrUnexpectedEOF
}
return err
}
// okEOF returns err, but changes io.EOF -> nil
func okEOF(err error) error {
if err == io.EOF {
err = nil
}
return err
}
// --- Transaction record ---
......@@ -268,7 +269,7 @@ func (txnh *TxnHeader) Load(r io.ReaderAt /* *os.File */, pos int64, flags TxnLo
// EOF after txn header is not good - because at least
// redundant length should be also there
return txnh.err("read", xio.NoEOF(err))
return txnh.err("read", noEOF(err))
}
txnh.Tid = zodb.Tid(binary.BigEndian.Uint64(work[8+0:]))
......@@ -294,7 +295,7 @@ func (txnh *TxnHeader) Load(r io.ReaderAt /* *os.File */, pos int64, flags TxnLo
lext := binary.BigEndian.Uint16(work[8+21:])
lstr := int(luser) + int(ldesc) + int(lext)
if TxnHeaderFixSize + lstr + 8 > txnh.Len {
if TxnHeaderFixSize + int64(lstr) + 8 > txnh.Len {
return decodeErr(txnh, "strings overlap with txn boundary: %v / %v", lstr, txnh.Len)
}
......@@ -331,7 +332,7 @@ func (txnh *TxnHeader) loadStrings(r io.ReaderAt /* *os.File */) error {
// we rely on Load leaving len(workMem) = sum of all strings length ...
_, err := r.ReadAt(txnh.workMem, txnh.Pos + TxnHeaderFixSize)
if err != nil {
return txnh.err("read strings", xio.noEOF(err))
return txnh.err("read strings", noEOF(err))
}
// ... and presetting x to point to appropriate places in .workMem .
......@@ -442,7 +443,7 @@ func (dh *DataHeader) load(r io.ReaderAt /* *os.File */, pos int64, tmpBuf *[Dat
_, err := r.ReadAt(tmpBuf[:], pos)
if err != nil {
return dh.err("read", xio.noEOF(err))
return dh.err("read", noEOF(err))
}
// XXX also check oid.Valid() ?
......@@ -542,7 +543,7 @@ func (dh *DataHeader) LoadBack(r io.ReaderAt /* *os.File */) error {
var xxx [8]byte // XXX escapes ?
_, err := r.ReadAt(xxx[:], dh.Pos + DataHeaderSize)
if err != nil {
return dh.err("read data", xio.noEOF(err))
return dh.err("read data", noEOF(err))
}
backPos := int64(binary.BigEndian.Uint64(xxx[:]))
......@@ -651,7 +652,7 @@ func (dh *DataHeader) LoadData(r io.ReaderAt /* *os.File */, buf *[]byte) error
}
_, err := r.ReadAt(*buf, dh.Pos + DataHeaderSize)
if err != nil {
return dh.err("read data", xio.noEOF(err)) // XXX recheck
return dh.err("read data", noEOF(err)) // XXX recheck
}
return nil
......@@ -945,7 +946,7 @@ func (fs *FileStorage) Iterate(tidMin, tidMax zodb.Tid) zodb.IStorageIterator {
for {
err = iter.NextTxn(LoadNoStrings)
if err != nil {
err = xio.OkEOF(err)
err = okEOF(err)
break
}
}
......
......@@ -37,14 +37,16 @@ type dbEntry struct {
type txnEntry struct {
Header DataHeader
rawData []byte // what is on disk, e.g. it can be backpointer
userData []byte // data client should see on load; nil means same as RawData
userData []byte // data client should see on load; `sameAsRaw` means same as RawData
dataTid zodb.Tid // data tid client should see on iter; 0 means same as Header.Tid
}
var sameAsRaw = []byte{0}
// Data returns data a client should see
func (txe *txnEntry) Data() []byte {
data := txe.userData
if data == nil {
if len(data) > 0 && &data[0] == &sameAsRaw[0] {
data = txe.rawData
}
return data
......@@ -74,7 +76,7 @@ func checkLoad(t *testing.T, fs *FileStorage, xid zodb.Xid, expect oidLoadedOk)
if tid != expect.tid {
t.Errorf("load %v: returned tid unexpected: %v ; want: %v", xid, tid, expect.tid)
}
if !bytes.Equal(data, expect.data) {
if !bytes.Equal(data, expect.data) { // XXX -> reflect.DeepEqual
t.Errorf("load %v: different data:\nhave: %q\nwant: %q", xid, data, expect.data)
}
}
......
......@@ -39,6 +39,7 @@ def xtime():
time.time = xtime
# prepare transaction for a commit
def precommit(user, description, extension):
txn = transaction.get()
txn.user = user
......@@ -50,6 +51,7 @@ def commit(user, description, extension):
txn = precommit(user, description, extension)
txn.commit()
class Object(Persistent):
# .value
def __init__(self, value):
......@@ -201,7 +203,7 @@ def main():
datatid = hex64(drec.data_txn)
else:
rawdata = drec.data
data = "/* same as ^^^ */ nil"
data = "/* same as ^^^ */ sameAsRaw"
datatid = "/* same as ^^^ */ 0"
emit("\t\t\t\t[]byte(%s)," % escapeqq(rawdata))
......
This diff is collapsed.
......@@ -6,7 +6,7 @@ package zodb
import (
"fmt"
"encoding/hex"
//"encoding/hex"
)
func (tid Tid) String() string {
......@@ -39,6 +39,7 @@ func (xid Xid) String() string {
}
/*
func ParseTid(s string) (Tid, error) {
// -> scanf("%016x")
var b[8]byte
......@@ -50,3 +51,4 @@ func ParseTid(s string) (Tid, 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