remotestore

package module
v0.0.0-...-4122661 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 24, 2024 License: MIT Imports: 22 Imported by: 0

Documentation

Overview

Package filestore implements a Blockstore which is able to read certain blocks of data directly from its original location in the filesystem.

In a Filestore, object leaves are stored as FilestoreNodes. FilestoreNodes include a filesystem path and an offset, allowing a Blockstore dealing with such blocks to avoid storing the whole contents and reading them from their filesystem location instead.

Index

Constants

This section is empty.

Variables

View Source
var RemotestorePrefix = ds.NewKey("remotestore")

RemotestorePrefix identifies the key prefix for FileManager blocks.

Functions

func IsRawNodeCid

func IsRawNodeCid(c cid.Cid) bool

func ListAll

func ListAll(ctx context.Context, fs *Remotestore, fileOrder bool) (func(context.Context) *ListRes, error)

ListAll returns a function as an iterator which, once invoked, returns one by one each block in the Filestore's FileManager. ListAll does not verify that the references are valid or whether the raw data is accessible. See VerifyAll().

func VerifyAll

func VerifyAll(ctx context.Context, fs *Remotestore, fileOrder bool) (func(context.Context) *ListRes, error)

VerifyAll returns a function as an iterator which, once invoked, returns one by one each block in the Filestore's FileManager. VerifyAll checks that the reference is valid and that the block data can be read.

Types

type CorruptReferenceError

type CorruptReferenceError struct {
	Code Status
	Err  error
}

CorruptReferenceError implements the error interface. It is used to indicate that the block contents pointed by the referencing blocks cannot be retrieved (i.e. the file is not found, or the data changed as it was being read).

func (CorruptReferenceError) Error

func (c CorruptReferenceError) Error() string

Error() returns the error message in the CorruptReferenceError as a string.

type ListRes

type ListRes struct {
	Status   Status
	ErrorMsg string
	Key      cid.Cid
	FilePath string
	Offset   uint64
	Size     uint64
}

ListRes wraps the response of the List*() functions, which allows to obtain and verify blocks stored by the FileManager of a Filestore. It includes information about the referenced block.

func List

func List(ctx context.Context, fs *Remotestore, key cid.Cid) *ListRes

List fetches the block with the given key from the Filemanager of the given Filestore and returns a ListRes object with the information. List does not verify that the reference is valid or whether the raw data is accesible. See Verify().

func Verify

func Verify(ctx context.Context, fs *Remotestore, key cid.Cid) *ListRes

Verify fetches the block with the given key from the Filemanager of the given Filestore and returns a ListRes object with the information. Verify makes sure that the reference is valid and the block data can be read.

func (*ListRes) FormatLong

func (r *ListRes) FormatLong(enc func(cid.Cid) string) string

FormatLong returns a human readable string for a ListRes object

type MockFileInfo

type MockFileInfo struct {
	io.ReadCloser
	MockFileStat *MockFileStat
	MockAbspath  string
}

func (*MockFileInfo) AbsPath

func (m *MockFileInfo) AbsPath() string

func (*MockFileInfo) Size

func (m *MockFileInfo) Size() (int64, error)

func (*MockFileInfo) Stat

func (m *MockFileInfo) Stat() os.FileInfo

type MockFileStat

type MockFileStat struct {
	MockName string
	MockSize int64
}

func (*MockFileStat) IsDir

func (m *MockFileStat) IsDir() bool

func (*MockFileStat) ModTime

func (m *MockFileStat) ModTime() time.Time

func (*MockFileStat) Mode

func (m *MockFileStat) Mode() fs.FileMode

func (*MockFileStat) Name

func (m *MockFileStat) Name() string

func (*MockFileStat) Size

func (m *MockFileStat) Size() int64

func (*MockFileStat) Sys

func (m *MockFileStat) Sys() any

type RemoteManager

type RemoteManager struct {
	// contains filtered or unexported fields
}

RemoteManager is a blockstore implementation which stores special blocks FilestoreNode type. These nodes only contain a reference to the actual location of the block data in the filesystem (a path and an offset).

func NewRemoteManager

func NewRemoteManager(ds ds.Batching, source RemoteSource) *RemoteManager

NewRemoteManager initializes a new file manager with the given datastore and root. All FilestoreNodes paths are relative to the root path given here, which is prepended for any operations.

func (*RemoteManager) AllKeysChan

func (f *RemoteManager) AllKeysChan(ctx context.Context) (<-chan cid.Cid, error)

AllKeysChan returns a channel from which to read the keys stored in the FileManager. If the given context is cancelled the channel will be closed.

All CIDs returned are of type Raw.

func (*RemoteManager) DeleteBlock

func (f *RemoteManager) DeleteBlock(ctx context.Context, c cid.Cid) error

DeleteBlock deletes the reference-block from the underlying datastore. It does not touch the referenced data.

func (*RemoteManager) Get

func (f *RemoteManager) Get(ctx context.Context, c cid.Cid) (blocks.Block, error)

Get reads a block from the datastore. Reading a block is done in two steps: the first step retrieves the reference block from the datastore. The second step uses the stored path and offsets to read the raw block data directly from disk.

func (*RemoteManager) GetSize

func (f *RemoteManager) GetSize(ctx context.Context, c cid.Cid) (int, error)

GetSize gets the size of the block from the datastore.

This method may successfully return the size even if returning the block would fail because the associated file is no longer available.

func (*RemoteManager) Has

func (f *RemoteManager) Has(ctx context.Context, c cid.Cid) (bool, error)

Has returns if the FileManager is storing a block reference. It does not validate the data, nor checks if the reference is valid.

func (*RemoteManager) Put

Put adds a new reference block to the FileManager. It does not check that the reference is valid.

func (*RemoteManager) PutMany

func (f *RemoteManager) PutMany(ctx context.Context, bs []*posinfo.FilestoreNode) error

PutMany is like Put() but takes a slice of blocks instead, allowing it to create a batch transaction.

type RemoteSource

type RemoteSource interface {
	Get(ctx context.Context, key string, offset uint64, size uint64) (io.ReadCloser, error)
}

type Remotestore

type Remotestore struct {
	// contains filtered or unexported fields
}

Remotestore implements a Blockstore by combining a standard Blockstore to store regular blocks and a special Blockstore called FileManager to store blocks which data exists in an external file.

func NewRemotestore

func NewRemotestore(bs blockstore.Blockstore, fm *RemoteManager) *Remotestore

NewRemotestore creates one using the given Blockstore and FileManager.

func (*Remotestore) AllKeysChan

func (f *Remotestore) AllKeysChan(ctx context.Context) (<-chan cid.Cid, error)

AllKeysChan returns a channel from which to read the keys stored in the blockstore. If the given context is cancelled the channel will be closed.

func (*Remotestore) DeleteBlock

func (f *Remotestore) DeleteBlock(ctx context.Context, c cid.Cid) error

DeleteBlock deletes the block with the given key from the blockstore. As expected, in the case of FileManager blocks, only the reference is deleted, not its contents. It may return ErrNotFound when the block is not stored.

func (*Remotestore) Get

func (f *Remotestore) Get(ctx context.Context, c cid.Cid) (blocks.Block, error)

Get retrieves the block with the given Cid. It may return ErrNotFound when the block is not stored.

func (*Remotestore) GetSize

func (f *Remotestore) GetSize(ctx context.Context, c cid.Cid) (int, error)

GetSize returns the size of the requested block. It may return ErrNotFound when the block is not stored.

func (*Remotestore) Has

func (f *Remotestore) Has(ctx context.Context, c cid.Cid) (bool, error)

Has returns true if the block with the given Cid is stored in the Filestore.

func (*Remotestore) HashOnRead

func (f *Remotestore) HashOnRead(enabled bool)

HashOnRead calls blockstore.HashOnRead.

func (*Remotestore) MainBlockstore

func (f *Remotestore) MainBlockstore() blockstore.Blockstore

MainBlockstore returns the standard Blockstore in the Filestore.

func (*Remotestore) Put

func (f *Remotestore) Put(ctx context.Context, b blocks.Block) error

Put stores a block in the Filestore. For blocks of underlying type FilestoreNode, the operation is delegated to the FileManager, while the rest of blocks are handled by the regular blockstore.

func (*Remotestore) PutMany

func (f *Remotestore) PutMany(ctx context.Context, bs []blocks.Block) error

PutMany is like Put(), but takes a slice of blocks, allowing the underlying blockstore to perform batch transactions.

func (*Remotestore) RemoteManager

func (f *Remotestore) RemoteManager() *RemoteManager

RemoteManager returns the RemoteManager in Filestore.

type Status

type Status int32

Status is used to identify the state of the block data referenced by a FilestoreNode. Among other places, it is used by CorruptReferenceError.

const (
	StatusOk           Status = 0
	StatusFileError    Status = 10 // Backing File Error
	StatusFileNotFound Status = 11 // Backing File Not Found
	StatusFileChanged  Status = 12 // Contents of the file changed
	StatusOtherError   Status = 20 // Internal Error, likely corrupt entry
	StatusKeyNotFound  Status = 30
)

These are the supported Status codes.

func (Status) Format

func (s Status) Format() string

Format returns the status formatted as a string with leading 0s.

func (Status) String

func (s Status) String() string

String provides a human-readable representation for Status codes.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL