dcrd/database/error.go
Donald Adu-Poku 77033596a1 multi: integrate index subscriber.
This removes last set of references to IndexManager and integrates the
IndexSubscriber into the chain. All indexes have now been updated to
subscribe to the index subscriber for updates.
2021-10-12 18:52:50 -05:00

163 lines
6.0 KiB
Go

// Copyright (c) 2015-2016 The btcsuite developers
// Copyright (c) 2016-2020 The Decred developers
// Use of this source code is governed by an ISC
// license that can be found in the LICENSE file.
package database
// ErrorKind identifies a kind of error. It has full support for errors.Is and
// errors.As, so the caller can directly check against an error kind when
// determining the reason for an error.
type ErrorKind string
// These constants are used to identify a specific database Error.
const (
// ------------------------------------------
// Errors related to driver registration.
// ------------------------------------------
// ErrDbTypeRegistered indicates two different database drivers
// attempt to register with the name database type.
ErrDbTypeRegistered = ErrorKind("ErrDbTypeRegistered")
// ------------------------------------------
// Errors related to database functions.
// ------------------------------------------
// ErrDbUnknownType indicates there is no driver registered for
// the specified database type.
ErrDbUnknownType = ErrorKind("ErrDbUnknownType")
// ErrDbDoesNotExist indicates open is called for a database that
// does not exist.
ErrDbDoesNotExist = ErrorKind("ErrDbDoesNotExist")
// ErrDbExists indicates create is called for a database that
// already exists.
ErrDbExists = ErrorKind("ErrDbExists")
// ErrDbNotOpen indicates a database instance is accessed before
// it is opened or after it is closed.
ErrDbNotOpen = ErrorKind("ErrDbNotOpen")
// ErrDbAlreadyOpen indicates open was called on a database that
// is already open.
ErrDbAlreadyOpen = ErrorKind("ErrDbAlreadyOpen")
// ErrInvalid indicates the specified database is not valid.
ErrInvalid = ErrorKind("ErrInvalid")
// ErrCorruption indicates a checksum failure occurred which invariably
// means the database is corrupt.
ErrCorruption = ErrorKind("ErrCorruption")
// ------------------------------------------
// Errors related to database transactions.
// ------------------------------------------
// ErrTxClosed indicates an attempt was made to commit or rollback a
// transaction that has already had one of those operations performed.
ErrTxClosed = ErrorKind("ErrTxClosed")
// ErrTxNotWritable indicates an operation that requires write access to
// the database was attempted against a read-only transaction.
ErrTxNotWritable = ErrorKind("ErrTxNotWritable")
// ------------------------------------------
// Errors related to metadata operations.
// ------------------------------------------
// ErrBucketNotFound indicates an attempt to access a bucket that has
// not been created yet.
ErrBucketNotFound = ErrorKind("ErrBucketNotFound")
// ErrBucketExists indicates an attempt to create a bucket that already
// exists.
ErrBucketExists = ErrorKind("ErrBucketExists")
// ErrBucketNameRequired indicates an attempt to create a bucket with a
// blank name.
ErrBucketNameRequired = ErrorKind("ErrBucketNameRequired")
// ErrKeyRequired indicates at attempt to insert a zero-length key.
ErrKeyRequired = ErrorKind("ErrKeyRequired")
// ErrKeyTooLarge indicates an attempt to insert a key that is larger
// than the max allowed key size. The max key size depends on the
// specific backend driver being used. As a general rule, key sizes
// should be relatively, so this should rarely be an issue.
ErrKeyTooLarge = ErrorKind("ErrKeyTooLarge")
// ErrValueTooLarge indicates an attempt to insert a value that is
// larger than max allowed value size. The max key size depends on the
// specific backend driver being used.
ErrValueTooLarge = ErrorKind("ErrValueTooLarge")
// ErrIncompatibleValue indicates the value in question is invalid for
// the specific requested operation. For example, trying create or
// delete a bucket with an existing non-bucket key, attempting to create
// or delete a non-bucket key with an existing bucket key, or trying to
// delete a value via a cursor when it points to a nested bucket.
ErrIncompatibleValue = ErrorKind("ErrIncompatibleValue")
// ErrValueNotFound indicates no value found for the provided key.
ErrValueNotFound = ErrorKind("ErrValueNotFound")
// ------------------------------------------
// Errors related to block I/O operations.
// ------------------------------------------
// ErrBlockNotFound indicates a block with the provided hash does not
// exist in the database.
ErrBlockNotFound = ErrorKind("ErrBlockNotFound")
// ErrBlockExists indicates a block with the provided hash already
// exists in the database.
ErrBlockExists = ErrorKind("ErrBlockExists")
// ErrBlockRegionInvalid indicates a region that exceeds the bounds of
// the specified block was requested. When the hash provided by the
// region does not correspond to an existing block, the error will be
// ErrBlockNotFound instead.
ErrBlockRegionInvalid = ErrorKind("ErrBlockRegionInvalid")
// ------------------------------------------
// Support for driver-specific errors.
// ------------------------------------------
// ErrDriverSpecific indicates the Err field is a driver-specific error.
// This provides a mechanism for drivers to plug-in their own custom
// errors for any situations which aren't already covered by the error
// codes provided by this package.
ErrDriverSpecific = ErrorKind("ErrDriverSpecific")
)
// Error satisfies the error interface and prints human-readable errors.
func (e ErrorKind) Error() string {
return string(e)
}
// Error identifies an error related to database operation. It has
// full support for errors.Is and errors.As, so the caller can ascertain the
// specific reason for the error by checking the underlying error.
type Error struct {
Err error
RawErr error
Description string
}
// Error satisfies the error interface and prints human-readable errors.
func (e Error) Error() string {
return e.Description
}
// Unwrap returns the underlying wrapped error.
func (e Error) Unwrap() error {
return e.Err
}
// makeError creates an Error given a set of arguments.
func makeError(kind ErrorKind, desc string) Error {
return Error{Err: kind, Description: desc}
}