mirror of
https://github.com/MariaDB/server.git
synced 2025-01-21 22:34:18 +01:00
f9cc391863
This only merges MDEV-12253, adapting it to MDEV-12602 which is already present in 10.2 but not yet in the 10.1 revision that is being merged. TODO: Error handling in crash recovery needs to be improved. If a page cannot be decrypted (or read), we should cleanly abort the startup. If innodb_force_recovery is specified, we should ignore the problematic page and apply redo log to other pages. Currently, the test encryption.innodb-redo-badkey randomly fails like this (the last messages are from cmake -DWITH_ASAN): 2017-05-05 10:19:40 140037071685504 [Note] InnoDB: Starting crash recovery from checkpoint LSN=1635994 2017-05-05 10:19:40 140037071685504 [ERROR] InnoDB: Missing MLOG_FILE_NAME or MLOG_FILE_DELETE before MLOG_CHECKPOINT for tablespace 1 2017-05-05 10:19:40 140037071685504 [ERROR] InnoDB: Plugin initialization aborted at srv0start.cc[2201] with error Data structure corruption 2017-05-05 10:19:41 140037071685504 [Note] InnoDB: Starting shutdown... i================================================================= ==5226==ERROR: AddressSanitizer: attempting free on address which was not malloc()-ed: 0x612000018588 in thread T0 #0 0x736750 in operator delete(void*) (/mariadb/server/build/sql/mysqld+0x736750) #1 0x1e4833f in LatchCounter::~LatchCounter() /mariadb/server/storage/innobase/include/sync0types.h:599:4 #2 0x1e480b8 in LatchMeta<LatchCounter>::~LatchMeta() /mariadb/server/storage/innobase/include/sync0types.h:786:17 #3 0x1e35509 in sync_latch_meta_destroy() /mariadb/server/storage/innobase/sync/sync0debug.cc:1622:3 #4 0x1e35314 in sync_check_close() /mariadb/server/storage/innobase/sync/sync0debug.cc:1839:2 #5 0x1dfdc18 in innodb_shutdown() /mariadb/server/storage/innobase/srv/srv0start.cc:2888:2 #6 0x197e5e6 in innobase_init(void*) /mariadb/server/storage/innobase/handler/ha_innodb.cc:4475:3
180 lines
6.4 KiB
C
180 lines
6.4 KiB
C
/*****************************************************************************
|
|
|
|
Copyright (c) 1996, 2016, Oracle and/or its affiliates. All Rights Reserved.
|
|
Copyright (c) 2015, 2017, MariaDB Corporation.
|
|
|
|
This program is free software; you can redistribute it and/or modify it under
|
|
the terms of the GNU General Public License as published by the Free Software
|
|
Foundation; version 2 of the License.
|
|
|
|
This program is distributed in the hope that it will be useful, but WITHOUT
|
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License along with
|
|
this program; if not, write to the Free Software Foundation, Inc.,
|
|
51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA
|
|
|
|
*****************************************************************************/
|
|
|
|
/**************************************************//**
|
|
@file include/db0err.h
|
|
Global error codes for the database
|
|
|
|
Created 5/24/1996 Heikki Tuuri
|
|
*******************************************************/
|
|
|
|
#ifndef db0err_h
|
|
#define db0err_h
|
|
|
|
/* Do not include univ.i because univ.i includes this. */
|
|
|
|
enum dberr_t {
|
|
DB_SUCCESS_LOCKED_REC = 9, /*!< like DB_SUCCESS, but a new
|
|
explicit record lock was created */
|
|
DB_SUCCESS = 10,
|
|
|
|
/* The following are error codes */
|
|
DB_ERROR,
|
|
DB_INTERRUPTED,
|
|
DB_OUT_OF_MEMORY,
|
|
DB_OUT_OF_FILE_SPACE,
|
|
DB_LOCK_WAIT,
|
|
DB_DEADLOCK,
|
|
DB_ROLLBACK,
|
|
DB_DUPLICATE_KEY,
|
|
DB_QUE_THR_SUSPENDED,
|
|
DB_MISSING_HISTORY, /*!< required history data has been
|
|
deleted due to lack of space in
|
|
rollback segment */
|
|
DB_CLUSTER_NOT_FOUND = 30,
|
|
DB_TABLE_NOT_FOUND,
|
|
DB_MUST_GET_MORE_FILE_SPACE, /*!< the database has to be stopped
|
|
and restarted with more file space */
|
|
DB_TABLE_IS_BEING_USED,
|
|
DB_TOO_BIG_RECORD, /*!< a record in an index would not fit
|
|
on a compressed page, or it would
|
|
become bigger than 1/2 free space in
|
|
an uncompressed page frame */
|
|
DB_LOCK_WAIT_TIMEOUT, /*!< lock wait lasted too long */
|
|
DB_NO_REFERENCED_ROW, /*!< referenced key value not found
|
|
for a foreign key in an insert or
|
|
update of a row */
|
|
DB_ROW_IS_REFERENCED, /*!< cannot delete or update a row
|
|
because it contains a key value
|
|
which is referenced */
|
|
DB_CANNOT_ADD_CONSTRAINT, /*!< adding a foreign key constraint
|
|
to a table failed */
|
|
DB_CORRUPTION, /*!< data structure corruption
|
|
noticed */
|
|
DB_CANNOT_DROP_CONSTRAINT, /*!< dropping a foreign key constraint
|
|
from a table failed */
|
|
DB_NO_SAVEPOINT, /*!< no savepoint exists with the given
|
|
name */
|
|
DB_TABLESPACE_EXISTS, /*!< we cannot create a new single-table
|
|
tablespace because a file of the same
|
|
name already exists */
|
|
DB_TABLESPACE_DELETED, /*!< tablespace was deleted or is
|
|
being dropped right now */
|
|
DB_TABLESPACE_NOT_FOUND, /*<! Attempt to delete a tablespace
|
|
instance that was not found in the
|
|
tablespace hash table */
|
|
DB_LOCK_TABLE_FULL, /*!< lock structs have exhausted the
|
|
buffer pool (for big transactions,
|
|
InnoDB stores the lock structs in the
|
|
buffer pool) */
|
|
DB_FOREIGN_DUPLICATE_KEY, /*!< foreign key constraints
|
|
activated by the operation would
|
|
lead to a duplicate key in some
|
|
table */
|
|
DB_TOO_MANY_CONCURRENT_TRXS, /*!< when InnoDB runs out of the
|
|
preconfigured undo slots, this can
|
|
only happen when there are too many
|
|
concurrent transactions */
|
|
DB_UNSUPPORTED, /*!< when InnoDB sees any artefact or
|
|
a feature that it can't recoginize or
|
|
work with e.g., FT indexes created by
|
|
a later version of the engine. */
|
|
|
|
DB_INVALID_NULL, /*!< a NOT NULL column was found to
|
|
be NULL during table rebuild */
|
|
|
|
DB_STATS_DO_NOT_EXIST, /*!< an operation that requires the
|
|
persistent storage, used for recording
|
|
table and index statistics, was
|
|
requested but this storage does not
|
|
exist itself or the stats for a given
|
|
table do not exist */
|
|
DB_FOREIGN_EXCEED_MAX_CASCADE, /*!< Foreign key constraint related
|
|
cascading delete/update exceeds
|
|
maximum allowed depth */
|
|
DB_CHILD_NO_INDEX, /*!< the child (foreign) table does
|
|
not have an index that contains the
|
|
foreign keys as its prefix columns */
|
|
DB_PARENT_NO_INDEX, /*!< the parent table does not
|
|
have an index that contains the
|
|
foreign keys as its prefix columns */
|
|
DB_TOO_BIG_INDEX_COL, /*!< index column size exceeds
|
|
maximum limit */
|
|
DB_INDEX_CORRUPT, /*!< we have corrupted index */
|
|
DB_UNDO_RECORD_TOO_BIG, /*!< the undo log record is too big */
|
|
DB_READ_ONLY, /*!< Update operation attempted in
|
|
a read-only transaction */
|
|
DB_FTS_INVALID_DOCID, /* FTS Doc ID cannot be zero */
|
|
DB_TABLE_IN_FK_CHECK, /* table is being used in foreign
|
|
key check */
|
|
DB_ONLINE_LOG_TOO_BIG, /*!< Modification log grew too big
|
|
during online index creation */
|
|
|
|
DB_IDENTIFIER_TOO_LONG, /*!< Identifier name too long */
|
|
DB_FTS_EXCEED_RESULT_CACHE_LIMIT, /*!< FTS query memory
|
|
exceeds result cache limit */
|
|
DB_TEMP_FILE_WRITE_FAIL, /*!< Temp file write failure */
|
|
DB_CANT_CREATE_GEOMETRY_OBJECT, /*!< Cannot create specified Geometry
|
|
data object */
|
|
DB_CANNOT_OPEN_FILE, /*!< Cannot open a file */
|
|
DB_FTS_TOO_MANY_WORDS_IN_PHRASE,
|
|
/*< Too many words in a phrase */
|
|
|
|
DB_TABLESPACE_TRUNCATED, /*!< tablespace was truncated */
|
|
|
|
DB_DECRYPTION_FAILED, /* Tablespace encrypted and
|
|
decrypt operation failed because
|
|
of missing key management plugin,
|
|
or missing or incorrect key or
|
|
incorret AES method or algorithm. */
|
|
|
|
DB_IO_ERROR = 100, /*!< Generic IO error */
|
|
|
|
DB_IO_PARTIAL_FAILED, /*!< Partial IO request failed */
|
|
|
|
DB_FORCED_ABORT, /*!< Transaction was forced to rollback
|
|
by a higher priority transaction */
|
|
|
|
DB_TABLE_CORRUPT, /*!< Table/clustered index is
|
|
corrupted */
|
|
|
|
DB_COMPUTE_VALUE_FAILED, /*!< Compute generated value failed */
|
|
|
|
DB_NO_FK_ON_S_BASE_COL, /*!< Cannot add foreign constrain
|
|
placed on the base column of
|
|
stored column */
|
|
|
|
DB_IO_NO_PUNCH_HOLE, /*!< Punch hole not supported by
|
|
file system. */
|
|
|
|
DB_PAGE_CORRUPTED, /* Page read from tablespace is
|
|
corrupted. */
|
|
/* The following are partial failure codes */
|
|
DB_FAIL = 1000,
|
|
DB_OVERFLOW,
|
|
DB_UNDERFLOW,
|
|
DB_STRONG_FAIL,
|
|
DB_ZIP_OVERFLOW,
|
|
DB_RECORD_NOT_FOUND = 1500,
|
|
DB_END_OF_INDEX,
|
|
DB_NOT_FOUND, /*!< Generic error code for "Not found"
|
|
type of errors */
|
|
};
|
|
|
|
#endif
|