Documentation
¶
Index ¶
- Constants
- Variables
- func Get[T any](fs FileService, name string) (res T, err error)
- func JoinPath(serviceName string, path string) string
- type Cache
- type CacheConfig
- type CacheKey
- type CacheStats
- type CachingFileService
- type Config
- type DirEntry
- type DiskCache
- type ETLFileService
- type FileLike
- type FileService
- type FileServices
- func (f *FileServices) Delete(ctx context.Context, filePaths ...string) error
- func (f *FileServices) List(ctx context.Context, dirPath string) ([]DirEntry, error)
- func (f *FileServices) Name() string
- func (f *FileServices) Read(ctx context.Context, vector *IOVector) error
- func (f *FileServices) StatFile(ctx context.Context, filePath string) (*DirEntry, error)
- func (f *FileServices) Write(ctx context.Context, vector IOVector) error
- type FileWithChecksum
- func (f *FileWithChecksum[T]) Read(buf []byte) (n int, err error)
- func (f *FileWithChecksum[T]) ReadAt(buf []byte, offset int64) (n int, err error)
- func (f *FileWithChecksum[T]) Seek(offset int64, whence int) (int64, error)
- func (f *FileWithChecksum[T]) Write(buf []byte) (n int, err error)
- func (f *FileWithChecksum[T]) WriteAt(buf []byte, offset int64) (n int, err error)
- type IOEntry
- type IOVector
- type LRU
- type LocalETLFS
- func (l *LocalETLFS) Delete(ctx context.Context, filePaths ...string) error
- func (l *LocalETLFS) ETLCompatible()
- func (l *LocalETLFS) List(ctx context.Context, dirPath string) (ret []DirEntry, err error)
- func (l *LocalETLFS) Name() string
- func (l *LocalETLFS) NewMutator(filePath string) (Mutator, error)
- func (l *LocalETLFS) Read(ctx context.Context, vector *IOVector) error
- func (l *LocalETLFS) StatFile(ctx context.Context, filePath string) (*DirEntry, error)
- func (l *LocalETLFS) Write(ctx context.Context, vector IOVector) error
- type LocalETLFSMutator
- type LocalFS
- func (l *LocalFS) CacheStats() *CacheStats
- func (l *LocalFS) Delete(ctx context.Context, filePaths ...string) error
- func (l *LocalFS) FlushCache()
- func (l *LocalFS) List(ctx context.Context, dirPath string) (ret []DirEntry, err error)
- func (l *LocalFS) Name() string
- func (l *LocalFS) NewMutator(filePath string) (Mutator, error)
- func (l *LocalFS) Read(ctx context.Context, vector *IOVector) (err error)
- func (l *LocalFS) Replace(ctx context.Context, vector IOVector) error
- func (l *LocalFS) StatFile(ctx context.Context, filePath string) (*DirEntry, error)
- func (l *LocalFS) Write(ctx context.Context, vector IOVector) error
- type LocalFSMutator
- type MemCache
- type MemoryFS
- func (m *MemoryFS) Delete(ctx context.Context, filePaths ...string) error
- func (m *MemoryFS) ETLCompatible()
- func (m *MemoryFS) List(ctx context.Context, dirPath string) (entries []DirEntry, err error)
- func (m *MemoryFS) Name() string
- func (m *MemoryFS) Read(ctx context.Context, vector *IOVector) error
- func (m *MemoryFS) Replace(ctx context.Context, vector IOVector) error
- func (m *MemoryFS) StatFile(ctx context.Context, filePath string) (*DirEntry, error)
- func (m *MemoryFS) Write(ctx context.Context, vector IOVector) error
- type MutableFileService
- type Mutator
- type NewFileServicesFunc
- type Path
- type RC
- type ReplaceableFileService
- type S3Config
- type S3FS
- func (s *S3FS) CacheStats() *CacheStats
- func (s *S3FS) Delete(ctx context.Context, filePaths ...string) error
- func (*S3FS) ETLCompatible()
- func (s *S3FS) FlushCache()
- func (s *S3FS) List(ctx context.Context, dirPath string) (entries []DirEntry, err error)
- func (s *S3FS) Name() string
- func (s *S3FS) Read(ctx context.Context, vector *IOVector) (err error)
- func (s *S3FS) StatFile(ctx context.Context, filePath string) (*DirEntry, error)
- func (s *S3FS) Write(ctx context.Context, vector IOVector) error
Constants ¶
const ServiceNameSeparator = ":"
Variables ¶
var (
ErrChecksumNotMatch = moerr.NewInternalErrorNoCtx("checksum not match")
)
Functions ¶
Types ¶
type CacheConfig ¶ added in v0.6.0
type CacheStats ¶ added in v0.6.0
type CachingFileService ¶ added in v0.6.0
type CachingFileService interface {
FileService
// FlushCache flushes cache
FlushCache()
// CacheStats returns cache statistics
CacheStats() *CacheStats
}
CachingFileService is an extension to the FileService
type Config ¶ added in v0.6.0
type Config struct {
// Name name of fileservice, describe what an instance of fileservice is used for
Name string `toml:"name"`
// Backend fileservice backend. [MEM|DISK|DISK-ETL|S3|MINIO]
Backend string `toml:"backend"`
// S3 used to create fileservice using s3 as the backend
S3 S3Config `toml:"s3"`
// Cache specifies configs for cache
Cache CacheConfig `toml:"cache"`
// DataDir used to create fileservice using DISK as the backend
DataDir string `toml:"data-dir"`
}
Config fileService config
type DiskCache ¶ added in v0.7.0
type DiskCache struct {
// contains filtered or unexported fields
}
func NewDiskCache ¶ added in v0.7.0
func (*DiskCache) CacheStats ¶ added in v0.7.0
func (d *DiskCache) CacheStats() *CacheStats
type ETLFileService ¶ added in v0.6.0
type ETLFileService interface {
FileService
// ETLCompatible marks the implementation to be compatible to ETL operations
// implementations must save file contents as-is
ETLCompatible()
}
ETLFileService is an extension to the FileService
func GetForETL ¶ added in v0.6.0
func GetForETL(fs FileService, path string) (res ETLFileService, readPath string, err error)
GetForETL get or creates a FileService instance for ETL operations if service part of path is empty, a LocalETLFS will be created if service part of path is not empty, a ETLFileService typed instance will be extracted from fs argument if service part of path is argumented, a FileService instance will be created dynamically with those arguments supported dynamic file service: s3,<endpoint>,<region>,<bucket>,<key>,<secret>,<prefix> s3-no-key,<endpoint>,<region>,<bucket>,<prefix> minio,<endpoint>,<region>,<bucket>,<key>,<secret>,<prefix> s3-opts,endpoint=<endpoint>,region=<region>,bucket=<bucket>,key=<key>,secret=<secret>,prefix=<prefix>,role-arn=<role arn>,external-id=<external id>
key value pairs can be in any order
type FileService ¶
type FileService interface {
// Name is file service's name
// service name is case-insensitive
Name() string
// Write writes a new file
// returns ErrFileExisted if file already existed
// returns ErrSizeNotMatch if provided size does not match data
// entries in vector should be written atomically. if write failed, following reads must not succeed.
Write(ctx context.Context, vector IOVector) error
// Read reads a file to fill IOEntries
// returns ErrFileNotFound if requested file not found
// returns ErrUnexpectedEOF if less data is read than requested size
// returns ErrEmptyRange if no data at specified offset and size
// returns ErrEmptyVector if no IOEntry is passed
Read(ctx context.Context, vector *IOVector) error
// List lists sub-entries in a dir
List(ctx context.Context, dirPath string) ([]DirEntry, error)
// Delete deletes multi file
// returns ErrFileNotFound if requested file not found
Delete(ctx context.Context, filePaths ...string) error
// Stat returns infomations about a file
// returns ErrFileNotFound if requested file not found
StatFile(ctx context.Context, filePath string) (*DirEntry, error)
}
FileService is a write-once file system
func NewFileService ¶ added in v0.6.0
func NewFileService(cfg Config) (FileService, error)
NewFileService create file service from config
type FileServices ¶ added in v0.6.0
type FileServices struct {
// contains filtered or unexported fields
}
func NewFileServices ¶ added in v0.6.0
func NewFileServices(defaultName string, fss ...FileService) (*FileServices, error)
func (*FileServices) Delete ¶ added in v0.6.0
func (f *FileServices) Delete(ctx context.Context, filePaths ...string) error
func (*FileServices) Name ¶ added in v0.6.0
func (f *FileServices) Name() string
func (*FileServices) Read ¶ added in v0.6.0
func (f *FileServices) Read(ctx context.Context, vector *IOVector) error
type FileWithChecksum ¶ added in v0.6.0
type FileWithChecksum[T FileLike] struct { // contains filtered or unexported fields }
FileWithChecksum maps file contents to blocks with checksum
func NewFileWithChecksum ¶ added in v0.6.0
func NewFileWithChecksum[T FileLike]( underlying T, blockContentSize int, ) *FileWithChecksum[T]
func (*FileWithChecksum[T]) Read ¶ added in v0.6.0
func (f *FileWithChecksum[T]) Read(buf []byte) (n int, err error)
func (*FileWithChecksum[T]) ReadAt ¶ added in v0.6.0
func (f *FileWithChecksum[T]) ReadAt(buf []byte, offset int64) (n int, err error)
func (*FileWithChecksum[T]) Seek ¶ added in v0.6.0
func (f *FileWithChecksum[T]) Seek(offset int64, whence int) (int64, error)
type IOEntry ¶
type IOEntry struct {
// offset in file
// when writing or mutating, offset can be arbitrary value, gaps between provided data are zero-filled
// when reading, valid offsets are in range [0, len(file) - 1]
Offset int64
// number of bytes to read or write, [1, len(file)]
// when reading, pass -1 to read to the end of file
Size int64
// raw content
// when reading, if len(Data) < Size, a new Size-lengthed byte slice will be allocated
Data []byte
// when reading, if Writer is not nil, write data to it instead of setting Data field
WriterForRead io.Writer
// when reading, if ReadCloser is not nil, set an io.ReadCloser instead of setting Data field
ReadCloserForRead *io.ReadCloser
// when writing, if Reader is not nil, read data from it instead of reading Data field
// number of bytes to be read is specified by Size field
// if number of bytes is unknown, set Size field to -1
ReaderForWrite io.Reader
// when reading, if the ToObject field is not nil, the returning object will be set to this field
// caches may choose to cache this object instead of caching []byte
// Data, WriterForRead, ReadCloserForRead may be empty if Object is not null
// if ToObject is provided, caller should always read Object instead of Data, WriterForRead or ReadCloserForRead
Object any
// ToObject constructs an object from entry contents
// reader or data must not be retained after returns
// reader always contains entry contents
// data may contains entry contents if available
// if data is empty, the io.Reader must be fully read before returning nil error
// return an *RC value to make the object pinnable
// cache implementations should not evict an *RC value with non-zero reference
ToObject func(reader io.Reader, data []byte) (object any, objectSize int64, err error)
// ObjectSize indicates the memory bytes to hold the object
// set from ToObject returning value
// used in capacity limited caches
ObjectSize int64
// contains filtered or unexported fields
}
type IOVector ¶
type IOVector struct {
// FilePath indicates where to find the file
// a path has two parts, service name and file name, separated by ':'
// service name is optional, if omitted, the receiver FileService will use the default name of the service
// file name parts are separated by '/'
// valid characters in file name: 0-9 a-z A-Z / ! - _ . * ' ( )
// and all printable non-ASCII characters
// example:
// s3:a/b/c S3:a/b/c represents the same file 'a/b/c' located in 'S3' service
FilePath string
// io entries
// empty Entries is not allowed
// when writing, overlapping Entries is not allowed
Entries []IOEntry
// ExpireAt specifies the expire time of the file
// implementations may or may not delete the file after this time
// zero value means no expire
ExpireAt time.Time
}
type LocalETLFS ¶ added in v0.6.0
LocalETLFS is a FileService implementation backed by local file system and suitable for ETL operations
func NewLocalETLFS ¶ added in v0.6.0
func NewLocalETLFS(name string, rootPath string) (*LocalETLFS, error)
func (*LocalETLFS) Delete ¶ added in v0.6.0
func (l *LocalETLFS) Delete(ctx context.Context, filePaths ...string) error
func (*LocalETLFS) ETLCompatible ¶ added in v0.6.0
func (l *LocalETLFS) ETLCompatible()
func (*LocalETLFS) Name ¶ added in v0.6.0
func (l *LocalETLFS) Name() string
func (*LocalETLFS) NewMutator ¶ added in v0.6.0
func (l *LocalETLFS) NewMutator(filePath string) (Mutator, error)
func (*LocalETLFS) Read ¶ added in v0.6.0
func (l *LocalETLFS) Read(ctx context.Context, vector *IOVector) error
type LocalETLFSMutator ¶ added in v0.6.0
type LocalETLFSMutator struct {
// contains filtered or unexported fields
}
func (*LocalETLFSMutator) Append ¶ added in v0.6.0
func (l *LocalETLFSMutator) Append(ctx context.Context, entries ...IOEntry) error
func (*LocalETLFSMutator) Close ¶ added in v0.6.0
func (l *LocalETLFSMutator) Close() error
type LocalFS ¶
LocalFS is a FileService implementation backed by local file system
func NewLocalFS ¶
func (*LocalFS) CacheStats ¶ added in v0.6.0
func (l *LocalFS) CacheStats() *CacheStats
func (*LocalFS) FlushCache ¶ added in v0.6.0
func (l *LocalFS) FlushCache()
func (*LocalFS) NewMutator ¶ added in v0.6.0
type LocalFSMutator ¶ added in v0.6.0
type LocalFSMutator struct {
// contains filtered or unexported fields
}
func (*LocalFSMutator) Append ¶ added in v0.6.0
func (l *LocalFSMutator) Append(ctx context.Context, entries ...IOEntry) error
func (*LocalFSMutator) Close ¶ added in v0.6.0
func (l *LocalFSMutator) Close() error
type MemCache ¶ added in v0.6.0
type MemCache struct {
// contains filtered or unexported fields
}
func NewMemCache ¶ added in v0.6.0
func (*MemCache) CacheStats ¶ added in v0.6.0
func (m *MemCache) CacheStats() *CacheStats
type MemoryFS ¶
MemoryFS is an in-memory FileService implementation
func NewMemoryFS ¶
func (*MemoryFS) ETLCompatible ¶ added in v0.6.0
func (m *MemoryFS) ETLCompatible()
type MutableFileService ¶
type MutableFileService interface {
FileService
// NewMutator creates a new mutator
NewMutator(filePath string) (Mutator, error)
}
MutableFileService is an extension interface to FileService that allow mutation
type Mutator ¶ added in v0.6.0
type Mutator interface {
// Mutate mutates file contents
Mutate(ctx context.Context, entries ...IOEntry) error
// Append appends data to file
// all IOEntry.Offset is base on the end of file position
// for example, passing IOEntry{Offset: 0, Len:1, Data: []byte("a")} will append "a" to the end of file
Append(ctx context.Context, entries ...IOEntry) error
// Close closes the mutator
// Must be called after finishing mutation
Close() error
}
type NewFileServicesFunc ¶ added in v0.6.0
type NewFileServicesFunc = func(defaultName string) (*FileServices, error)
NewFileServicesFunc creates a new *FileServices
type RC ¶ added in v0.6.0
type RC[T any] struct { Value T // contains filtered or unexported fields }
RC represents a reference counted value that will not evict in LRU if refs is greater than 0
type ReplaceableFileService ¶ added in v0.6.0
type ReplaceableFileService interface {
FileService
Replace(ctx context.Context, vector IOVector) error
}
ReplaceableFileService is an extension interface to FileService that allow replacing a whole file
type S3FS ¶
type S3FS struct {
// contains filtered or unexported fields
}
S3FS is a FileService implementation backed by S3
func NewS3FSOnMinio ¶ added in v0.6.0
func NewS3FSOnMinio( sharedConfigProfile string, name string, endpoint string, bucket string, keyPrefix string, memCacheCapacity int64, diskCacheCapacity int64, diskCachePath string, ) (*S3FS, error)
NewS3FSOnMinio creates S3FS on minio server this is needed because the URL scheme of minio server does not compatible with AWS'
func (*S3FS) CacheStats ¶ added in v0.6.0
func (s *S3FS) CacheStats() *CacheStats
func (*S3FS) ETLCompatible ¶ added in v0.6.0
func (*S3FS) ETLCompatible()
func (*S3FS) FlushCache ¶ added in v0.6.0
func (s *S3FS) FlushCache()
Source Files
¶
- cache.go
- caching_file_service.go
- config.go
- disk_cache.go
- etl_file_service.go
- file_like.go
- file_service.go
- file_services.go
- file_with_checksum.go
- get.go
- io.go
- io_entry.go
- local_etl_fs.go
- local_fs.go
- lru.go
- mem_cache.go
- memory_fs.go
- mutable_file_service.go
- path.go
- rc.go
- replaceable_file_service.go
- s3.go
- s3_fs.go
- utils.go
- vector.go