[WIP] Partial bot skeleton, non-functional though
This commit is contained in:
64
vendor/github.com/cockroachdb/pebble/objstorage/vfs_writable.go
generated
vendored
Normal file
64
vendor/github.com/cockroachdb/pebble/objstorage/vfs_writable.go
generated
vendored
Normal file
@@ -0,0 +1,64 @@
|
||||
// Copyright 2023 The LevelDB-Go and Pebble Authors. All rights reserved. Use
|
||||
// of this source code is governed by a BSD-style license that can be found in
|
||||
// the LICENSE file.
|
||||
|
||||
package objstorage
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
|
||||
"github.com/cockroachdb/pebble/vfs"
|
||||
)
|
||||
|
||||
// NewFileWritable returns a Writable that uses a file as underlying storage.
|
||||
func NewFileWritable(file vfs.File) Writable {
|
||||
return newFileBufferedWritable(file)
|
||||
}
|
||||
|
||||
type fileBufferedWritable struct {
|
||||
file vfs.File
|
||||
bw *bufio.Writer
|
||||
}
|
||||
|
||||
var _ Writable = (*fileBufferedWritable)(nil)
|
||||
|
||||
func newFileBufferedWritable(file vfs.File) *fileBufferedWritable {
|
||||
return &fileBufferedWritable{
|
||||
file: file,
|
||||
bw: bufio.NewWriter(file),
|
||||
}
|
||||
}
|
||||
|
||||
// Write is part of the objstorage.Writable interface.
|
||||
func (w *fileBufferedWritable) Write(p []byte) error {
|
||||
// Ignoring the length written since bufio.Writer.Write is guaranteed to
|
||||
// return an error if the length written is < len(p).
|
||||
_, err := w.bw.Write(p)
|
||||
return err
|
||||
}
|
||||
|
||||
// Finish is part of the objstorage.Writable interface.
|
||||
func (w *fileBufferedWritable) Finish() error {
|
||||
err := w.bw.Flush()
|
||||
if err == nil {
|
||||
err = w.file.Sync()
|
||||
}
|
||||
err = firstError(err, w.file.Close())
|
||||
w.bw = nil
|
||||
w.file = nil
|
||||
return err
|
||||
}
|
||||
|
||||
// Abort is part of the objstorage.Writable interface.
|
||||
func (w *fileBufferedWritable) Abort() {
|
||||
_ = w.file.Close()
|
||||
w.bw = nil
|
||||
w.file = nil
|
||||
}
|
||||
|
||||
func firstError(err0, err1 error) error {
|
||||
if err0 != nil {
|
||||
return err0
|
||||
}
|
||||
return err1
|
||||
}
|
||||
Reference in New Issue
Block a user