Получение EOF при чтении данных с помощью cap'n'proto - PullRequest
0 голосов
/ 08 июня 2018

Шаги:

func viewAll(db *badger.DB) {
txn := db.NewTransaction(false)
defer txn.Discard()
iterOpts := badger.IteratorOptions{false, 0, false, true}
itr := txn.NewIterator(iterOpts)
defer itr.Close()
b := state.NewBucket(state.BucketRecords)
multiBuffer := capn.NewSingleSegmentMultiBuffer()
for itr.Seek(b.NewKey(nil).Bytes()); itr.Valid(); itr.Next() {
    value, err := itr.Item().Value()
    if err != nil {
        log.Fatalln(err)
    }

    read, err := capn.ReadFromMemoryZeroCopyNoAlloc(value, multiBuffer)
    if err != nil {
        log.Fatalln(err) // EOF error
    } else if read != int64(len(value)) {
        panic(fmt.Sprintf("wrong read: %d != %d", read, len(value)))
    }
    vv := proto.ReadRootRecord(multiBuffer.Segments[0])
    out, err := vv.MarshalCapLit()
    if err != nil {
        log.Fatalln(err)
    }
    err = ioutil.WriteFile("cmd/db/content.out", out, 0777|os.ModeAppend)
    if err != nil {
        log.Fatalln("toFile", err)
    }
}

}

результат:

EOF

В результате content.out содержит только первое (возможно, первое)кусок данных.Что я делаю неправильно?Спасибо!

Сведения не доступны.

...