influxdb/pkg/fs/fs.go

67 lines
1.2 KiB
Go

package fs
import (
"fmt"
"io"
"os"
"github.com/influxdata/influxdb/v2/pkg/errors"
)
// A FileExistsError is returned when an operation cannot be completed due to a
// file already existing.
type FileExistsError struct {
path string
}
func newFileExistsError(path string) FileExistsError {
return FileExistsError{path: path}
}
func (e FileExistsError) Error() string {
return fmt.Sprintf("operation not allowed, file %q exists", e.path)
}
// DiskStatus is returned by DiskUsage
type DiskStatus struct {
All uint64
Used uint64
Free uint64
Avail uint64
}
func copyFile(src, dst string) (err error) {
in, err := os.Open(src)
if err != nil {
return err
}
out, err := os.Create(dst)
if err != nil {
return err
}
defer errors.Capture(&err, out.Close)()
defer errors.Capture(&err, in.Close)()
if _, err = io.Copy(out, in); err != nil {
return err
}
return out.Sync()
}
// MoveFileWithReplacement copies the file contents at `src` to `dst`.
// and deletes `src` on success.
//
// If the file at `dst` already exists, it will be truncated and its contents
// overwritten.
func MoveFileWithReplacement(src, dst string) error {
if err := copyFile(src, dst); err != nil {
return fmt.Errorf("copy: %w", err)
}
return os.Remove(src)
}