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(fd FileDesc) bool
FileDescOk returns true if fd is a valid 'file descriptor'.
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 (e *ErrCorrupted) Error() string
FileDesc is a 'file descriptor'.
type FileDesc struct { Type FileType Num int64 }
func (fd FileDesc) String() string
func (fd FileDesc) Zero() bool
Zero returns true if fd == (FileDesc{}).
FileType represent a file type.
type FileType int
File types.
const ( TypeManifest FileType = 1 << iota TypeJournal TypeTable TypeTemp TypeAll = TypeManifest | TypeJournal | TypeTable | TypeTemp )
func (t FileType) String() string
Locker is the interface that wraps Unlock method.
type Locker interface { Unlock() }
Reader is the interface that groups the basic Read, Seek, ReadAt and Close methods.
type Reader interface { io.ReadSeeker io.ReaderAt io.Closer }
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() Storage
NewMemStorage returns a new memory-backed storage implementation.
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.
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 }
Writer is the interface that groups the basic Write, Sync and Close methods.
type Writer interface { io.WriteCloser Syncer }