aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/github.com/blevesearch/zapx/v12/build.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/blevesearch/zapx/v12/build.go')
-rw-r--r--vendor/github.com/blevesearch/zapx/v12/build.go56
1 files changed, 43 insertions, 13 deletions
diff --git a/vendor/github.com/blevesearch/zapx/v12/build.go b/vendor/github.com/blevesearch/zapx/v12/build.go
index eec4dde08c..de8265c140 100644
--- a/vendor/github.com/blevesearch/zapx/v12/build.go
+++ b/vendor/github.com/blevesearch/zapx/v12/build.go
@@ -16,6 +16,8 @@ package zap
import (
"bufio"
+ "fmt"
+ "io"
"math"
"os"
@@ -32,6 +34,16 @@ func (sb *SegmentBase) Persist(path string) error {
return PersistSegmentBase(sb, path)
}
+// WriteTo is an implementation of io.WriterTo interface.
+func (sb *SegmentBase) WriteTo(w io.Writer) (int64, error) {
+ if w == nil {
+ return 0, fmt.Errorf("invalid writer found")
+ }
+
+ n, err := persistSegmentBaseToWriter(sb, w)
+ return int64(n), err
+}
+
// PersistSegmentBase persists SegmentBase in the zap file format.
func PersistSegmentBase(sb *SegmentBase, path string) error {
flag := os.O_RDWR | os.O_CREATE
@@ -46,40 +58,58 @@ func PersistSegmentBase(sb *SegmentBase, path string) error {
_ = os.Remove(path)
}
- br := bufio.NewWriter(f)
-
- _, err = br.Write(sb.mem)
+ _, err = persistSegmentBaseToWriter(sb, f)
if err != nil {
cleanup()
return err
}
- err = persistFooter(sb.numDocs, sb.storedIndexOffset, sb.fieldsIndexOffset, sb.docValueOffset,
- sb.chunkMode, sb.memCRC, br)
+ err = f.Sync()
if err != nil {
cleanup()
return err
}
- err = br.Flush()
+ err = f.Close()
if err != nil {
cleanup()
return err
}
- err = f.Sync()
+ return err
+}
+
+type bufWriter struct {
+ w *bufio.Writer
+ n int
+}
+
+func (br *bufWriter) Write(in []byte) (int, error) {
+ n, err := br.w.Write(in)
+ br.n += n
+ return n, err
+}
+
+func persistSegmentBaseToWriter(sb *SegmentBase, w io.Writer) (int, error) {
+ br := &bufWriter{w: bufio.NewWriter(w)}
+
+ _, err := br.Write(sb.mem)
if err != nil {
- cleanup()
- return err
+ return 0, err
}
- err = f.Close()
+ err = persistFooter(sb.numDocs, sb.storedIndexOffset, sb.fieldsIndexOffset,
+ sb.docValueOffset, sb.chunkMode, sb.memCRC, br)
if err != nil {
- cleanup()
- return err
+ return 0, err
+ }
+
+ err = br.w.Flush()
+ if err != nil {
+ return 0, err
}
- return nil
+ return br.n, nil
}
func persistStoredFieldValues(fieldID int,