mirror of
https://github.com/hanzoai/traces.git
synced 2026-10-30 18:20:41 +00:00
64 lines
2.1 KiB
Go
64 lines
2.1 KiB
Go
package backend
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"io"
|
|
)
|
|
|
|
type UpdateFn func(current io.ReadCloser) ([]byte, error)
|
|
|
|
type Version string
|
|
|
|
const (
|
|
// VersionNew is a placeholder version for a new file
|
|
VersionNew Version = "0"
|
|
)
|
|
|
|
var (
|
|
ErrVersionDoesNotMatch = errors.New("version does not match")
|
|
ErrVersionInvalid = errors.New("version is not valid")
|
|
)
|
|
|
|
// VersionedReaderWriter is a collection of methods to read and write data from tempodb backends with
|
|
// versioning enabled.
|
|
type VersionedReaderWriter interface {
|
|
RawReader
|
|
|
|
// WriteVersioned data to an object, if the version does not match the request will fail with
|
|
// ErrVersionDoesNotMatch. If the operation will create a new file, pass VersionNew.
|
|
WriteVersioned(ctx context.Context, name string, keypath KeyPath, data io.Reader, size int64, version Version) (Version, error)
|
|
|
|
// DeleteVersioned an object, if the version does not match the request will fail with
|
|
// ErrVersionDoesNotMatch.
|
|
DeleteVersioned(ctx context.Context, name string, keypath KeyPath, version Version) error
|
|
|
|
// ReadVersioned data from an object and returns the current version.
|
|
ReadVersioned(ctx context.Context, name string, keypath KeyPath) (io.ReadCloser, Version, error)
|
|
}
|
|
|
|
type FakeVersionedReaderWriter struct {
|
|
RawReader
|
|
RawWriter
|
|
}
|
|
|
|
var _ VersionedReaderWriter = (*FakeVersionedReaderWriter)(nil)
|
|
|
|
func NewFakeVersionedReaderWriter(r RawReader, w RawWriter) *FakeVersionedReaderWriter {
|
|
return &FakeVersionedReaderWriter{r, w}
|
|
}
|
|
|
|
func (f *FakeVersionedReaderWriter) WriteVersioned(ctx context.Context, name string, keypath KeyPath, data io.Reader, size int64, _ Version) (Version, error) {
|
|
err := f.Write(ctx, name, keypath, data, size, nil)
|
|
return VersionNew, err
|
|
}
|
|
|
|
func (f *FakeVersionedReaderWriter) ReadVersioned(ctx context.Context, name string, keypath KeyPath) (io.ReadCloser, Version, error) {
|
|
readCloser, _, err := f.Read(ctx, name, keypath, nil)
|
|
return readCloser, VersionNew, err
|
|
}
|
|
|
|
func (f *FakeVersionedReaderWriter) DeleteVersioned(ctx context.Context, name string, keypath KeyPath, _ Version) error {
|
|
return f.Delete(ctx, name, keypath, nil)
|
|
}
|