...

Package storage

import "github.com/syndtr/goleveldb/leveldb/storage"
Overview
Index

Overview ▾

Package storage provides storage abstraction for LevelDB.

Variables

Common error.

var (
    ErrInvalidFile = errors.New("leveldb/storage: invalid file for argument")
    ErrLocked      = errors.New("leveldb/storage: already locked")
    ErrClosed      = errors.New("leveldb/storage: closed")
)

func FileDescOk

func FileDescOk(fd FileDesc) bool

FileDescOk returns true if fd is a valid 'file descriptor'.

type ErrCorrupted

ErrCorrupted is the type that wraps errors that indicate corruption of a file. Package storage has its own type instead of using errors.ErrCorrupted to prevent circular import.

type ErrCorrupted struct {
    Fd  FileDesc
    Err error
}

func (*ErrCorrupted) Error

func (e *ErrCorrupted) Error() string

type FileDesc

FileDesc is a 'file descriptor'.

type FileDesc struct {
    Type FileType
    Num  int64
}

func (FileDesc) String

func (fd FileDesc) String() string

func (FileDesc) Zero

func (fd FileDesc) Zero() bool

Zero returns true if fd == (FileDesc{}).

type FileType

FileType represent a file type.

type FileType int

File types.

const (
    TypeManifest FileType = 1 << iota
    TypeJournal
    TypeTable
    TypeTemp

    TypeAll = TypeManifest | TypeJournal | TypeTable | TypeTemp
)

func (FileType) String

func (t FileType) String() string

type Locker

Locker is the interface that wraps Unlock method.

type Locker interface {
    Unlock()
}

type Reader

Reader is the interface that groups the basic Read, Seek, ReadAt and Close methods.

type Reader interface {
    io.ReadSeeker
    io.ReaderAt
    io.Closer
}

type Storage

Storage is the storage. A storage instance must be safe for concurrent use.

type Storage interface {
    // Lock locks the storage. Any subsequent attempt to call Lock will fail
    // until the last lock released.
    // Caller should call Unlock method after use.
    Lock() (Locker, error)

    // Log logs a string. This is used for logging.
    // An implementation may write to a file, stdout or simply do nothing.
    Log(str string)

    // SetMeta store 'file descriptor' that can later be acquired using GetMeta
    // method. The 'file descriptor' should point to a valid file.
    // SetMeta should be implemented in such way that changes should happen
    // atomically.
    SetMeta(fd FileDesc) error

    // GetMeta returns 'file descriptor' stored in meta. The 'file descriptor'
    // can be updated using SetMeta method.
    // Returns os.ErrNotExist if meta doesn't store any 'file descriptor', or
    // 'file descriptor' point to nonexistent file.
    GetMeta() (FileDesc, error)

    // List returns file descriptors that match the given file types.
    // The file types may be OR'ed together.
    List(ft FileType) ([]FileDesc, error)

    // Open opens file with the given 'file descriptor' read-only.
    // Returns os.ErrNotExist error if the file does not exist.
    // Returns ErrClosed if the underlying storage is closed.
    Open(fd FileDesc) (Reader, error)

    // Create creates file with the given 'file descriptor', truncate if already
    // exist and opens write-only.
    // Returns ErrClosed if the underlying storage is closed.
    Create(fd FileDesc) (Writer, error)

    // Remove removes file with the given 'file descriptor'.
    // Returns ErrClosed if the underlying storage is closed.
    Remove(fd FileDesc) error

    // Rename renames file from oldfd to newfd.
    // Returns ErrClosed if the underlying storage is closed.
    Rename(oldfd, newfd FileDesc) error

    // Close closes the storage.
    // It is valid to call Close multiple times. Other methods should not be
    // called after the storage has been closed.
    Close() error
}

func NewMemStorage

func NewMemStorage() Storage

NewMemStorage returns a new memory-backed storage implementation.

func OpenFile

func OpenFile(path string, readOnly bool) (Storage, error)

OpenFile returns a new filesystem-backed storage implementation with the given path. This also acquire a file lock, so any subsequent attempt to open the same path will fail.

The storage must be closed after use, by calling Close method.

type Syncer

Syncer is the interface that wraps basic Sync method.

type Syncer interface {
    // Sync commits the current contents of the file to stable storage.
    Sync() error
}

type Writer

Writer is the interface that groups the basic Write, Sync and Close methods.

type Writer interface {
    io.WriteCloser
    Syncer
}