Documentation ¶
Index ¶
- Constants
- Variables
- func LoadJSON(meta Metadata, object interface{}, filename string) error
- func RandomSuffix() string
- func RemoveFile(filename string) error
- func SaveJSON(meta Metadata, object interface{}, filename string) error
- type AppendOnlyPersist
- type BoltDatabase
- type FixedMetadata
- type Logger
- type Metadata
Constants ¶
const ( // DefaultDiskPermissionsTest when creating files or directories in tests. DefaultDiskPermissionsTest = 0750 // FixedMetadataSize is the size of the FixedMetadata header in bytes FixedMetadataSize = 32 )
const ( // MetadataPageSize is the number of bytes set aside for the metadata page // on disk. It is the length of a disk sector so that we can ensure that a // metadata disk write is ACID with one write and sync and we don't have to // worry about the persist data ever crossing the first disk sector. MetadataPageSize uint64 = 4096 )
Variables ¶
var ( // ErrWrongHeader is the wrong header error. ErrWrongHeader = errors.New("wrong header") // ErrWrongVersion is the wrong version error. ErrWrongVersion = errors.New("wrong version") )
var ( // ErrBadFilenameSuffix indicates that SaveJSON or LoadJSON was called using // a filename that has a bad suffix. This prevents users from trying to use // this package to manage the temp files - this package will manage them // automatically. ErrBadFilenameSuffix = errors.New("filename suffix not allowed") // ErrBadHeader indicates that the file opened is not the file that was // expected. ErrBadHeader = errors.New("wrong header") // ErrBadVersion indicates that the version number of the file is not // compatible with the current codebase. ErrBadVersion = errors.New("incompatible version") // ErrFileInUse is returned if SaveJSON or LoadJSON is called on a file // that's already being manipulated in another thread by the persist // package. ErrFileInUse = errors.New("another thread is saving or loading this file") )
Functions ¶
func RandomSuffix ¶ added in v1.0.0
func RandomSuffix() string
RandomSuffix returns a 20 character base32 suffix for a filename. There are 100 bits of entropy, and a very low probability of colliding with existing files unintentionally.
func RemoveFile ¶ added in v1.3.1
RemoveFile removes an atomic file from disk, along with any uncommitted or temporary files.
func SaveJSON ¶ added in v1.2.1
SaveJSON will save a json object to disk in a durable, atomic way. The resulting file will have a checksum of the data as the third line. If manually editing files, the checksum line can be replaced with the 8 characters "manual". This will cause the reader to accept the checksum even though the file has been changed.
Types ¶
type AppendOnlyPersist ¶ added in v1.4.9
type AppendOnlyPersist struct {
// contains filtered or unexported fields
}
AppendOnlyPersist is the object responsible for creating, loading, and updating append-only persist files.
func NewAppendOnlyPersist ¶ added in v1.4.9
func NewAppendOnlyPersist(dir, file string, metadataHeader, metadataVersion types.Specifier) (*AppendOnlyPersist, io.Reader, error)
NewAppendOnlyPersist creates a new AppendOnlyPersist object and initializes the persistence file.
func (*AppendOnlyPersist) Close ¶ added in v1.4.9
func (aop *AppendOnlyPersist) Close() error
Close closes the persist file, freeing the resource and preventing further writes.
func (*AppendOnlyPersist) FilePath ¶ added in v1.4.9
func (aop *AppendOnlyPersist) FilePath() string
FilePath returns the filepath of the persist file.
func (*AppendOnlyPersist) PersistLength ¶ added in v1.4.9
func (aop *AppendOnlyPersist) PersistLength() uint64
PersistLength returns the length of the persist data.
type BoltDatabase ¶ added in v1.0.0
BoltDatabase is a persist-level wrapper for the bolt database, providing extra information such as a version number.
func OpenDatabase ¶ added in v1.0.0
func OpenDatabase(md Metadata, filename string) (*BoltDatabase, error)
OpenDatabase opens a database and validates its metadata.
func (*BoltDatabase) Close ¶ added in v1.0.0
func (db *BoltDatabase) Close() error
Close closes the database.
type FixedMetadata ¶ added in v1.4.2
FixedMetadata contains the header and version of the data being stored as a fixed-length byte-array.
func VerifyMetadataHeader ¶ added in v1.4.2
func VerifyMetadataHeader(r io.Reader, expected FixedMetadata) (FixedMetadata, error)
VerifyMetadataHeader will take in a reader and an expected metadata header, if the file's header has a different header or version it will return the corresponding error and the actual metadata header
type Logger ¶ added in v1.0.0
Logger is a wrapper for the standard library logger that enforces logging with the Sia-standard settings. It also supports a Close method, which attempts to close the underlying io.Writer.
func NewFileLogger ¶ added in v1.0.0
NewFileLogger returns a logger that logs to logFilename. The file is opened in append mode, and created if it does not exist.
func NewLogger ¶ added in v1.0.0
NewLogger returns a logger that can be closed. Calls should not be made to the logger after 'Close' has been called.
func (*Logger) Close ¶ added in v1.0.0
Close logs a shutdown message and closes the Logger's underlying io.Writer, if it is also an io.Closer.
func (*Logger) Critical ¶ added in v1.0.0
func (l *Logger) Critical(v ...interface{})
Critical logs a message with a CRITICAL prefix that guides the user to the Sia github tracker. If debug mode is enabled, it will also write the message to os.Stderr and panic. Critical should only be called if there has been a developer error, otherwise Severe should be called.
func (*Logger) Debug ¶ added in v1.0.0
func (l *Logger) Debug(v ...interface{})
Debug is equivalent to Logger.Print when build.DEBUG is true. Otherwise it is a no-op.
func (*Logger) Debugf ¶ added in v1.0.0
Debugf is equivalent to Logger.Printf when build.DEBUG is true. Otherwise it is a no-op.
func (*Logger) Debugln ¶ added in v1.0.0
func (l *Logger) Debugln(v ...interface{})
Debugln is equivalent to Logger.Println when build.DEBUG is true. Otherwise it is a no-op.
func (*Logger) Severe ¶ added in v1.0.3
func (l *Logger) Severe(v ...interface{})
Severe logs a message with a SEVERE prefix. If debug mode is enabled, it will also write the message to os.Stderr and panic. Severe should be called if there is a severe problem with the user's machine or setup that should be addressed ASAP but does not necessarily require that the machine crash or exit.