mirror of
				https://source.quilibrium.com/quilibrium/ceremonyclient.git
				synced 2025-11-04 00:27:41 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			66 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			66 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
// 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 objstorageprovider
 | 
						|
 | 
						|
import (
 | 
						|
	"bufio"
 | 
						|
 | 
						|
	"github.com/cockroachdb/pebble/objstorage"
 | 
						|
	"github.com/cockroachdb/pebble/vfs"
 | 
						|
)
 | 
						|
 | 
						|
// NewFileWritable returns a Writable that uses a file as underlying storage.
 | 
						|
func NewFileWritable(file vfs.File) objstorage.Writable {
 | 
						|
	return newFileBufferedWritable(file)
 | 
						|
}
 | 
						|
 | 
						|
type fileBufferedWritable struct {
 | 
						|
	file vfs.File
 | 
						|
	bw   *bufio.Writer
 | 
						|
}
 | 
						|
 | 
						|
var _ objstorage.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
 | 
						|
}
 |