5.6.23-72.1
This commit is contained in:
parent
14a142fca6
commit
a4416abdde
@ -2522,15 +2522,15 @@ btr_cur_pess_upd_restore_supremum(
|
|||||||
Check if the total length of the modified blob for the row is within 10%
|
Check if the total length of the modified blob for the row is within 10%
|
||||||
of the total redo log size. This constraint on the blob length is to
|
of the total redo log size. This constraint on the blob length is to
|
||||||
avoid overwriting the redo logs beyond the last checkpoint lsn.
|
avoid overwriting the redo logs beyond the last checkpoint lsn.
|
||||||
@return DB_SUCCESS or DB_TOO_BIG_RECORD. */
|
@return DB_SUCCESS or DB_TOO_BIG_FOR_REDO. */
|
||||||
static
|
static
|
||||||
dberr_t
|
dberr_t
|
||||||
btr_check_blob_limit(const big_rec_t* big_rec_vec)
|
btr_check_blob_limit(const big_rec_t* big_rec_vec)
|
||||||
{
|
{
|
||||||
const ib_uint64_t redo_size = srv_n_log_files * srv_log_file_size
|
const ib_uint64_t redo_size = srv_n_log_files * srv_log_file_size
|
||||||
* UNIV_PAGE_SIZE;
|
* UNIV_PAGE_SIZE;
|
||||||
const ulint redo_10p = redo_size / 10;
|
const ib_uint64_t redo_10p = redo_size / 10;
|
||||||
ulint total_blob_len = 0;
|
ib_uint64_t total_blob_len = 0;
|
||||||
dberr_t err = DB_SUCCESS;
|
dberr_t err = DB_SUCCESS;
|
||||||
|
|
||||||
/* Calculate the total number of bytes for blob data */
|
/* Calculate the total number of bytes for blob data */
|
||||||
@ -2540,11 +2540,11 @@ btr_check_blob_limit(const big_rec_t* big_rec_vec)
|
|||||||
|
|
||||||
if (total_blob_len > redo_10p) {
|
if (total_blob_len > redo_10p) {
|
||||||
ib_logf(IB_LOG_LEVEL_ERROR, "The total blob data"
|
ib_logf(IB_LOG_LEVEL_ERROR, "The total blob data"
|
||||||
" length (" ULINTPF ") is greater than"
|
" length (" UINT64PF ") is greater than"
|
||||||
" 10%% of the total redo log size (" UINT64PF
|
" 10%% of the total redo log size (" UINT64PF
|
||||||
"). Please increase total redo log size.",
|
"). Please increase total redo log size.",
|
||||||
total_blob_len, redo_size);
|
total_blob_len, redo_size);
|
||||||
err = DB_TOO_BIG_RECORD;
|
err = DB_TOO_BIG_FOR_REDO;
|
||||||
}
|
}
|
||||||
|
|
||||||
return(err);
|
return(err);
|
||||||
@ -4613,7 +4613,7 @@ Stores the fields in big_rec_vec to the tablespace and puts pointers to
|
|||||||
them in rec. The extern flags in rec will have to be set beforehand.
|
them in rec. The extern flags in rec will have to be set beforehand.
|
||||||
The fields are stored on pages allocated from leaf node
|
The fields are stored on pages allocated from leaf node
|
||||||
file segment of the index tree.
|
file segment of the index tree.
|
||||||
@return DB_SUCCESS or DB_OUT_OF_FILE_SPACE */
|
@return DB_SUCCESS or DB_OUT_OF_FILE_SPACE or DB_TOO_BIG_FOR_REDO */
|
||||||
UNIV_INTERN
|
UNIV_INTERN
|
||||||
dberr_t
|
dberr_t
|
||||||
btr_store_big_rec_extern_fields(
|
btr_store_big_rec_extern_fields(
|
||||||
|
@ -2423,10 +2423,10 @@ too_big:
|
|||||||
dict_mem_index_free(new_index);
|
dict_mem_index_free(new_index);
|
||||||
dict_mem_index_free(index);
|
dict_mem_index_free(index);
|
||||||
return(DB_TOO_BIG_RECORD);
|
return(DB_TOO_BIG_RECORD);
|
||||||
} else {
|
} else if (current_thd != NULL) {
|
||||||
|
/* Avoid the warning to be printed
|
||||||
|
during recovery. */
|
||||||
ib_warn_row_too_big(table);
|
ib_warn_row_too_big(table);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -296,6 +296,9 @@ dict_mem_table_col_rename_low(
|
|||||||
ut_ad(from_len <= NAME_LEN);
|
ut_ad(from_len <= NAME_LEN);
|
||||||
ut_ad(to_len <= NAME_LEN);
|
ut_ad(to_len <= NAME_LEN);
|
||||||
|
|
||||||
|
char from[NAME_LEN];
|
||||||
|
strncpy(from, s, NAME_LEN);
|
||||||
|
|
||||||
if (from_len == to_len) {
|
if (from_len == to_len) {
|
||||||
/* The easy case: simply replace the column name in
|
/* The easy case: simply replace the column name in
|
||||||
table->col_names. */
|
table->col_names. */
|
||||||
@ -363,14 +366,53 @@ dict_mem_table_col_rename_low(
|
|||||||
|
|
||||||
foreign = *it;
|
foreign = *it;
|
||||||
|
|
||||||
for (unsigned f = 0; f < foreign->n_fields; f++) {
|
if (foreign->foreign_index == NULL) {
|
||||||
/* These can point straight to
|
/* We may go here when we set foreign_key_checks to 0,
|
||||||
table->col_names, because the foreign key
|
and then try to rename a column and modify the
|
||||||
constraints will be freed at the same time
|
corresponding foreign key constraint. The index
|
||||||
when the table object is freed. */
|
would have been dropped, we have to find an equivalent
|
||||||
foreign->foreign_col_names[f]
|
one */
|
||||||
= dict_index_get_nth_field(
|
for (unsigned f = 0; f < foreign->n_fields; f++) {
|
||||||
foreign->foreign_index, f)->name;
|
if (strcmp(foreign->foreign_col_names[f], from)
|
||||||
|
== 0) {
|
||||||
|
|
||||||
|
char** rc = const_cast<char**>(
|
||||||
|
foreign->foreign_col_names
|
||||||
|
+ f);
|
||||||
|
|
||||||
|
if (to_len <= strlen(*rc)) {
|
||||||
|
memcpy(*rc, to, to_len + 1);
|
||||||
|
} else {
|
||||||
|
*rc = static_cast<char*>(
|
||||||
|
mem_heap_dup(
|
||||||
|
foreign->heap,
|
||||||
|
to,
|
||||||
|
to_len + 1));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
dict_index_t* new_index = dict_foreign_find_index(
|
||||||
|
foreign->foreign_table, NULL,
|
||||||
|
foreign->foreign_col_names,
|
||||||
|
foreign->n_fields, NULL, true, false);
|
||||||
|
/* There must be an equivalent index in this case. */
|
||||||
|
ut_ad(new_index != NULL);
|
||||||
|
|
||||||
|
foreign->foreign_index = new_index;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
for (unsigned f = 0; f < foreign->n_fields; f++) {
|
||||||
|
/* These can point straight to
|
||||||
|
table->col_names, because the foreign key
|
||||||
|
constraints will be freed at the same time
|
||||||
|
when the table object is freed. */
|
||||||
|
foreign->foreign_col_names[f]
|
||||||
|
= dict_index_get_nth_field(
|
||||||
|
foreign->foreign_index,
|
||||||
|
f)->name;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -380,6 +422,8 @@ dict_mem_table_col_rename_low(
|
|||||||
|
|
||||||
foreign = *it;
|
foreign = *it;
|
||||||
|
|
||||||
|
ut_ad(foreign->referenced_index != NULL);
|
||||||
|
|
||||||
for (unsigned f = 0; f < foreign->n_fields; f++) {
|
for (unsigned f = 0; f < foreign->n_fields; f++) {
|
||||||
/* foreign->referenced_col_names[] need to be
|
/* foreign->referenced_col_names[] need to be
|
||||||
copies, because the constraint may become
|
copies, because the constraint may become
|
||||||
|
@ -694,3 +694,51 @@ fts_ast_string_print(
|
|||||||
|
|
||||||
printf("\n");
|
printf("\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef UNIV_DEBUG
|
||||||
|
const char*
|
||||||
|
fts_ast_oper_name_get(fts_ast_oper_t oper)
|
||||||
|
{
|
||||||
|
switch(oper) {
|
||||||
|
case FTS_NONE:
|
||||||
|
return("FTS_NONE");
|
||||||
|
case FTS_IGNORE:
|
||||||
|
return("FTS_IGNORE");
|
||||||
|
case FTS_EXIST:
|
||||||
|
return("FTS_EXIST");
|
||||||
|
case FTS_NEGATE:
|
||||||
|
return("FTS_NEGATE");
|
||||||
|
case FTS_INCR_RATING:
|
||||||
|
return("FTS_INCR_RATING");
|
||||||
|
case FTS_DECR_RATING:
|
||||||
|
return("FTS_DECR_RATING");
|
||||||
|
case FTS_DISTANCE:
|
||||||
|
return("FTS_DISTANCE");
|
||||||
|
case FTS_IGNORE_SKIP:
|
||||||
|
return("FTS_IGNORE_SKIP");
|
||||||
|
case FTS_EXIST_SKIP:
|
||||||
|
return("FTS_EXIST_SKIP");
|
||||||
|
}
|
||||||
|
ut_ad(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
const char*
|
||||||
|
fts_ast_node_type_get(fts_ast_type_t type)
|
||||||
|
{
|
||||||
|
switch (type) {
|
||||||
|
case FTS_AST_OPER:
|
||||||
|
return("FTS_AST_OPER");
|
||||||
|
case FTS_AST_NUMB:
|
||||||
|
return("FTS_AST_NUMB");
|
||||||
|
case FTS_AST_TERM:
|
||||||
|
return("FTS_AST_TERM");
|
||||||
|
case FTS_AST_TEXT:
|
||||||
|
return("FTS_AST_TEXT");
|
||||||
|
case FTS_AST_LIST:
|
||||||
|
return("FTS_AST_LIST");
|
||||||
|
case FTS_AST_SUBEXP_LIST:
|
||||||
|
return("FTS_AST_SUBEXP_LIST");
|
||||||
|
}
|
||||||
|
ut_ad(0);
|
||||||
|
}
|
||||||
|
#endif /* UNIV_DEBUG */
|
||||||
|
@ -2577,8 +2577,6 @@ fts_optimize_add_table(
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ut_ad(table->cached && table->fts != NULL);
|
|
||||||
|
|
||||||
/* Make sure table with FTS index cannot be evicted */
|
/* Make sure table with FTS index cannot be evicted */
|
||||||
if (table->can_be_evicted) {
|
if (table->can_be_evicted) {
|
||||||
dict_table_move_from_lru_to_non_lru(table);
|
dict_table_move_from_lru_to_non_lru(table);
|
||||||
|
@ -1534,7 +1534,8 @@ fts_merge_doc_ids(
|
|||||||
{
|
{
|
||||||
const ib_rbt_node_t* node;
|
const ib_rbt_node_t* node;
|
||||||
|
|
||||||
ut_a(!rbt_empty(doc_ids));
|
DBUG_ENTER("fts_merge_doc_ids");
|
||||||
|
|
||||||
ut_a(!query->intersection);
|
ut_a(!query->intersection);
|
||||||
|
|
||||||
/* To process FTS_EXIST operation (intersection), we need
|
/* To process FTS_EXIST operation (intersection), we need
|
||||||
@ -1559,7 +1560,7 @@ fts_merge_doc_ids(
|
|||||||
query, ranking->doc_id, ranking->rank);
|
query, ranking->doc_id, ranking->rank);
|
||||||
|
|
||||||
if (query->error != DB_SUCCESS) {
|
if (query->error != DB_SUCCESS) {
|
||||||
return(query->error);
|
DBUG_RETURN(query->error);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Merge words. Don't need to take operator into account. */
|
/* Merge words. Don't need to take operator into account. */
|
||||||
@ -1578,7 +1579,7 @@ fts_merge_doc_ids(
|
|||||||
query->intersection = NULL;
|
query->intersection = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
return(DB_SUCCESS);
|
DBUG_RETURN(DB_SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************//**
|
/*****************************************************************//**
|
||||||
@ -2838,11 +2839,11 @@ fts_query_visitor(
|
|||||||
fts_query_t* query = static_cast<fts_query_t*>(arg);
|
fts_query_t* query = static_cast<fts_query_t*>(arg);
|
||||||
|
|
||||||
ut_a(node);
|
ut_a(node);
|
||||||
|
DBUG_ENTER("fts_query_visitor");
|
||||||
|
DBUG_PRINT("fts", ("nodetype: %s", fts_ast_node_type_get(node->type)));
|
||||||
|
|
||||||
token.f_n_char = 0;
|
token.f_n_char = 0;
|
||||||
|
|
||||||
query->oper = oper;
|
query->oper = oper;
|
||||||
|
|
||||||
query->cur_node = node;
|
query->cur_node = node;
|
||||||
|
|
||||||
switch (node->type) {
|
switch (node->type) {
|
||||||
@ -2904,7 +2905,7 @@ fts_query_visitor(
|
|||||||
query->multi_exist = true;
|
query->multi_exist = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return(query->error);
|
DBUG_RETURN(query->error);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************//**
|
/*****************************************************************//**
|
||||||
@ -2928,6 +2929,8 @@ fts_ast_visit_sub_exp(
|
|||||||
bool will_be_ignored = false;
|
bool will_be_ignored = false;
|
||||||
bool multi_exist;
|
bool multi_exist;
|
||||||
|
|
||||||
|
DBUG_ENTER("fts_ast_visit_sub_exp");
|
||||||
|
|
||||||
ut_a(node->type == FTS_AST_SUBEXP_LIST);
|
ut_a(node->type == FTS_AST_SUBEXP_LIST);
|
||||||
|
|
||||||
cur_oper = query->oper;
|
cur_oper = query->oper;
|
||||||
@ -2956,14 +2959,14 @@ fts_ast_visit_sub_exp(
|
|||||||
/* Merge the sub-expression result with the parent result set. */
|
/* Merge the sub-expression result with the parent result set. */
|
||||||
subexpr_doc_ids = query->doc_ids;
|
subexpr_doc_ids = query->doc_ids;
|
||||||
query->doc_ids = parent_doc_ids;
|
query->doc_ids = parent_doc_ids;
|
||||||
if (error == DB_SUCCESS && !rbt_empty(subexpr_doc_ids)) {
|
if (error == DB_SUCCESS) {
|
||||||
error = fts_merge_doc_ids(query, subexpr_doc_ids);
|
error = fts_merge_doc_ids(query, subexpr_doc_ids);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Free current result set. Result already merged into parent. */
|
/* Free current result set. Result already merged into parent. */
|
||||||
fts_query_free_doc_ids(query, subexpr_doc_ids);
|
fts_query_free_doc_ids(query, subexpr_doc_ids);
|
||||||
|
|
||||||
return(error);
|
DBUG_RETURN(error);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
@ -3439,8 +3442,10 @@ fts_retrieve_ranking(
|
|||||||
ib_rbt_bound_t parent;
|
ib_rbt_bound_t parent;
|
||||||
fts_ranking_t new_ranking;
|
fts_ranking_t new_ranking;
|
||||||
|
|
||||||
|
DBUG_ENTER("fts_retrieve_ranking");
|
||||||
|
|
||||||
if (!result || !result->rankings_by_id) {
|
if (!result || !result->rankings_by_id) {
|
||||||
return(0);
|
DBUG_RETURN(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
new_ranking.doc_id = doc_id;
|
new_ranking.doc_id = doc_id;
|
||||||
@ -3451,10 +3456,10 @@ fts_retrieve_ranking(
|
|||||||
|
|
||||||
ranking = rbt_value(fts_ranking_t, parent.last);
|
ranking = rbt_value(fts_ranking_t, parent.last);
|
||||||
|
|
||||||
return(ranking->rank);
|
DBUG_RETURN(ranking->rank);
|
||||||
}
|
}
|
||||||
|
|
||||||
return(0);
|
DBUG_RETURN(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************//**
|
/*****************************************************************//**
|
||||||
@ -3471,6 +3476,8 @@ fts_query_prepare_result(
|
|||||||
const ib_rbt_node_t* node;
|
const ib_rbt_node_t* node;
|
||||||
bool result_is_null = false;
|
bool result_is_null = false;
|
||||||
|
|
||||||
|
DBUG_ENTER("fts_query_prepare_result");
|
||||||
|
|
||||||
if (result == NULL) {
|
if (result == NULL) {
|
||||||
result = static_cast<fts_result_t*>(ut_malloc(sizeof(*result)));
|
result = static_cast<fts_result_t*>(ut_malloc(sizeof(*result)));
|
||||||
|
|
||||||
@ -3519,7 +3526,7 @@ fts_query_prepare_result(
|
|||||||
if (query->total_size > fts_result_cache_limit) {
|
if (query->total_size > fts_result_cache_limit) {
|
||||||
query->error = DB_FTS_EXCEED_RESULT_CACHE_LIMIT;
|
query->error = DB_FTS_EXCEED_RESULT_CACHE_LIMIT;
|
||||||
fts_query_free_result(result);
|
fts_query_free_result(result);
|
||||||
return(NULL);
|
DBUG_RETURN(NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3542,7 +3549,7 @@ fts_query_prepare_result(
|
|||||||
ranking->rank * word_freq->idf * word_freq->idf);
|
ranking->rank * word_freq->idf * word_freq->idf);
|
||||||
}
|
}
|
||||||
|
|
||||||
return(result);
|
DBUG_RETURN(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
ut_a(rbt_size(query->doc_ids) > 0);
|
ut_a(rbt_size(query->doc_ids) > 0);
|
||||||
@ -3569,7 +3576,7 @@ fts_query_prepare_result(
|
|||||||
if (query->total_size > fts_result_cache_limit) {
|
if (query->total_size > fts_result_cache_limit) {
|
||||||
query->error = DB_FTS_EXCEED_RESULT_CACHE_LIMIT;
|
query->error = DB_FTS_EXCEED_RESULT_CACHE_LIMIT;
|
||||||
fts_query_free_result(result);
|
fts_query_free_result(result);
|
||||||
return(NULL);
|
DBUG_RETURN(NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3581,7 +3588,7 @@ fts_query_prepare_result(
|
|||||||
query->doc_ids = NULL;
|
query->doc_ids = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
return(result);
|
DBUG_RETURN(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************//**
|
/*****************************************************************//**
|
||||||
@ -3593,6 +3600,8 @@ fts_query_get_result(
|
|||||||
fts_query_t* query, /*!< in: query instance */
|
fts_query_t* query, /*!< in: query instance */
|
||||||
fts_result_t* result) /*!< in: result */
|
fts_result_t* result) /*!< in: result */
|
||||||
{
|
{
|
||||||
|
DBUG_ENTER("fts_query_get_result");
|
||||||
|
|
||||||
if (rbt_size(query->doc_ids) > 0 || query->flags == FTS_OPT_RANKING) {
|
if (rbt_size(query->doc_ids) > 0 || query->flags == FTS_OPT_RANKING) {
|
||||||
/* Copy the doc ids to the result. */
|
/* Copy the doc ids to the result. */
|
||||||
result = fts_query_prepare_result(query, result);
|
result = fts_query_prepare_result(query, result);
|
||||||
@ -3602,7 +3611,7 @@ fts_query_get_result(
|
|||||||
memset(result, 0, sizeof(*result));
|
memset(result, 0, sizeof(*result));
|
||||||
}
|
}
|
||||||
|
|
||||||
return(result);
|
DBUG_RETURN(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************//**
|
/*****************************************************************//**
|
||||||
@ -3680,6 +3689,7 @@ fts_query_parse(
|
|||||||
int error;
|
int error;
|
||||||
fts_ast_state_t state;
|
fts_ast_state_t state;
|
||||||
bool mode = query->boolean_mode;
|
bool mode = query->boolean_mode;
|
||||||
|
DBUG_ENTER("fts_query_parse");
|
||||||
|
|
||||||
memset(&state, 0x0, sizeof(state));
|
memset(&state, 0x0, sizeof(state));
|
||||||
|
|
||||||
@ -3698,7 +3708,7 @@ fts_query_parse(
|
|||||||
query->root = state.root;
|
query->root = state.root;
|
||||||
}
|
}
|
||||||
|
|
||||||
return(state.root);
|
DBUG_RETURN(state.root);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*******************************************************************//**
|
/*******************************************************************//**
|
||||||
|
@ -1774,6 +1774,15 @@ convert_error_code_to_mysql(
|
|||||||
return(HA_ERR_TO_BIG_ROW);
|
return(HA_ERR_TO_BIG_ROW);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
case DB_TOO_BIG_FOR_REDO:
|
||||||
|
my_printf_error(ER_TOO_BIG_ROWSIZE, "%s" , MYF(0),
|
||||||
|
"The size of BLOB/TEXT data inserted"
|
||||||
|
" in one transaction is greater than"
|
||||||
|
" 10% of redo log size. Increase the"
|
||||||
|
" redo log size using innodb_log_file_size.");
|
||||||
|
return(HA_ERR_TO_BIG_ROW);
|
||||||
|
|
||||||
case DB_TOO_BIG_INDEX_COL:
|
case DB_TOO_BIG_INDEX_COL:
|
||||||
my_error(ER_INDEX_COLUMN_TOO_LONG, MYF(0),
|
my_error(ER_INDEX_COLUMN_TOO_LONG, MYF(0),
|
||||||
DICT_MAX_FIELD_LEN_BY_FORMAT_FLAG(flags));
|
DICT_MAX_FIELD_LEN_BY_FORMAT_FLAG(flags));
|
||||||
@ -14215,10 +14224,8 @@ ha_innobase::cmp_ref(
|
|||||||
len1 = innobase_read_from_2_little_endian(ref1);
|
len1 = innobase_read_from_2_little_endian(ref1);
|
||||||
len2 = innobase_read_from_2_little_endian(ref2);
|
len2 = innobase_read_from_2_little_endian(ref2);
|
||||||
|
|
||||||
ref1 += 2;
|
|
||||||
ref2 += 2;
|
|
||||||
result = ((Field_blob*) field)->cmp(
|
result = ((Field_blob*) field)->cmp(
|
||||||
ref1, len1, ref2, len2);
|
ref1 + 2, len1, ref2 + 2, len2);
|
||||||
} else {
|
} else {
|
||||||
result = field->key_cmp(ref1, ref2);
|
result = field->key_cmp(ref1, ref2);
|
||||||
}
|
}
|
||||||
|
@ -4372,11 +4372,15 @@ err_exit:
|
|||||||
rename_foreign:
|
rename_foreign:
|
||||||
trx->op_info = "renaming column in SYS_FOREIGN_COLS";
|
trx->op_info = "renaming column in SYS_FOREIGN_COLS";
|
||||||
|
|
||||||
|
std::list<dict_foreign_t*> fk_evict;
|
||||||
|
bool foreign_modified;
|
||||||
|
|
||||||
for (dict_foreign_set::iterator it = user_table->foreign_set.begin();
|
for (dict_foreign_set::iterator it = user_table->foreign_set.begin();
|
||||||
it != user_table->foreign_set.end();
|
it != user_table->foreign_set.end();
|
||||||
++it) {
|
++it) {
|
||||||
|
|
||||||
dict_foreign_t* foreign = *it;
|
dict_foreign_t* foreign = *it;
|
||||||
|
foreign_modified = false;
|
||||||
|
|
||||||
for (unsigned i = 0; i < foreign->n_fields; i++) {
|
for (unsigned i = 0; i < foreign->n_fields; i++) {
|
||||||
if (strcmp(foreign->foreign_col_names[i], from)) {
|
if (strcmp(foreign->foreign_col_names[i], from)) {
|
||||||
@ -4404,6 +4408,11 @@ rename_foreign:
|
|||||||
if (error != DB_SUCCESS) {
|
if (error != DB_SUCCESS) {
|
||||||
goto err_exit;
|
goto err_exit;
|
||||||
}
|
}
|
||||||
|
foreign_modified = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (foreign_modified) {
|
||||||
|
fk_evict.push_back(foreign);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4412,7 +4421,9 @@ rename_foreign:
|
|||||||
it != user_table->referenced_set.end();
|
it != user_table->referenced_set.end();
|
||||||
++it) {
|
++it) {
|
||||||
|
|
||||||
|
foreign_modified = false;
|
||||||
dict_foreign_t* foreign = *it;
|
dict_foreign_t* foreign = *it;
|
||||||
|
|
||||||
for (unsigned i = 0; i < foreign->n_fields; i++) {
|
for (unsigned i = 0; i < foreign->n_fields; i++) {
|
||||||
if (strcmp(foreign->referenced_col_names[i], from)) {
|
if (strcmp(foreign->referenced_col_names[i], from)) {
|
||||||
continue;
|
continue;
|
||||||
@ -4439,7 +4450,17 @@ rename_foreign:
|
|||||||
if (error != DB_SUCCESS) {
|
if (error != DB_SUCCESS) {
|
||||||
goto err_exit;
|
goto err_exit;
|
||||||
}
|
}
|
||||||
|
foreign_modified = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (foreign_modified) {
|
||||||
|
fk_evict.push_back(foreign);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (new_clustered) {
|
||||||
|
std::for_each(fk_evict.begin(), fk_evict.end(),
|
||||||
|
dict_foreign_remove_from_cache);
|
||||||
}
|
}
|
||||||
|
|
||||||
trx->op_info = "";
|
trx->op_info = "";
|
||||||
|
@ -3931,7 +3931,7 @@ check_watch:
|
|||||||
{
|
{
|
||||||
buf_page_t* bpage;
|
buf_page_t* bpage;
|
||||||
buf_pool_t* buf_pool = buf_pool_get(space, page_no);
|
buf_pool_t* buf_pool = buf_pool_get(space, page_no);
|
||||||
bpage = buf_page_hash_get(buf_pool, space, page_no);
|
bpage = buf_page_get_also_watch(buf_pool, space, page_no);
|
||||||
|
|
||||||
if (UNIV_LIKELY_NULL(bpage)) {
|
if (UNIV_LIKELY_NULL(bpage)) {
|
||||||
/* A buffer pool watch has been set or the
|
/* A buffer pool watch has been set or the
|
||||||
|
@ -1271,7 +1271,7 @@ page_hash lock is acquired in the specified lock mode. Otherwise,
|
|||||||
mode value is ignored. It is up to the caller to release the
|
mode value is ignored. It is up to the caller to release the
|
||||||
lock. If the block is found and the lock is NULL then the page_hash
|
lock. If the block is found and the lock is NULL then the page_hash
|
||||||
lock is released by this function.
|
lock is released by this function.
|
||||||
@return block, NULL if not found */
|
@return block, NULL if not found, or watch sentinel (if watch is true) */
|
||||||
UNIV_INLINE
|
UNIV_INLINE
|
||||||
buf_page_t*
|
buf_page_t*
|
||||||
buf_page_hash_get_locked(
|
buf_page_hash_get_locked(
|
||||||
@ -1287,9 +1287,11 @@ buf_page_hash_get_locked(
|
|||||||
found. NULL otherwise. If NULL
|
found. NULL otherwise. If NULL
|
||||||
is passed then the hash_lock
|
is passed then the hash_lock
|
||||||
is released by this function */
|
is released by this function */
|
||||||
ulint lock_mode); /*!< in: RW_LOCK_EX or
|
ulint lock_mode, /*!< in: RW_LOCK_EX or
|
||||||
RW_LOCK_SHARED. Ignored if
|
RW_LOCK_SHARED. Ignored if
|
||||||
lock == NULL */
|
lock == NULL */
|
||||||
|
bool watch = false); /*!< in: if true, return watch
|
||||||
|
sentinel also. */
|
||||||
/******************************************************************//**
|
/******************************************************************//**
|
||||||
Returns the control block of a file page, NULL if not found.
|
Returns the control block of a file page, NULL if not found.
|
||||||
If the block is found and lock is not NULL then the appropriate
|
If the block is found and lock is not NULL then the appropriate
|
||||||
@ -1329,6 +1331,8 @@ buf_page_hash_get_low() function.
|
|||||||
buf_page_hash_get_locked(b, s, o, l, RW_LOCK_EX)
|
buf_page_hash_get_locked(b, s, o, l, RW_LOCK_EX)
|
||||||
#define buf_page_hash_get(b, s, o) \
|
#define buf_page_hash_get(b, s, o) \
|
||||||
buf_page_hash_get_locked(b, s, o, NULL, 0)
|
buf_page_hash_get_locked(b, s, o, NULL, 0)
|
||||||
|
#define buf_page_get_also_watch(b, s, o) \
|
||||||
|
buf_page_hash_get_locked(b, s, o, NULL, 0, true)
|
||||||
|
|
||||||
#define buf_block_hash_get_s_locked(b, s, o, l) \
|
#define buf_block_hash_get_s_locked(b, s, o, l) \
|
||||||
buf_block_hash_get_locked(b, s, o, l, RW_LOCK_SHARED)
|
buf_block_hash_get_locked(b, s, o, l, RW_LOCK_SHARED)
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
|
|
||||||
Copyright (c) 1995, 2013, Oracle and/or its affiliates. All Rights Reserved.
|
Copyright (c) 1995, 2014, Oracle and/or its affiliates. All Rights Reserved.
|
||||||
Copyright (c) 2008, Google Inc.
|
Copyright (c) 2008, Google Inc.
|
||||||
|
|
||||||
Portions of this file contain modifications contributed and copyrighted by
|
Portions of this file contain modifications contributed and copyrighted by
|
||||||
@ -1193,7 +1193,7 @@ page_hash lock is acquired in the specified lock mode. Otherwise,
|
|||||||
mode value is ignored. It is up to the caller to release the
|
mode value is ignored. It is up to the caller to release the
|
||||||
lock. If the block is found and the lock is NULL then the page_hash
|
lock. If the block is found and the lock is NULL then the page_hash
|
||||||
lock is released by this function.
|
lock is released by this function.
|
||||||
@return block, NULL if not found */
|
@return block, NULL if not found, or watch sentinel (if watch is true) */
|
||||||
UNIV_INLINE
|
UNIV_INLINE
|
||||||
buf_page_t*
|
buf_page_t*
|
||||||
buf_page_hash_get_locked(
|
buf_page_hash_get_locked(
|
||||||
@ -1209,9 +1209,11 @@ buf_page_hash_get_locked(
|
|||||||
found. NULL otherwise. If NULL
|
found. NULL otherwise. If NULL
|
||||||
is passed then the hash_lock
|
is passed then the hash_lock
|
||||||
is released by this function */
|
is released by this function */
|
||||||
ulint lock_mode) /*!< in: RW_LOCK_EX or
|
ulint lock_mode, /*!< in: RW_LOCK_EX or
|
||||||
RW_LOCK_SHARED. Ignored if
|
RW_LOCK_SHARED. Ignored if
|
||||||
lock == NULL */
|
lock == NULL */
|
||||||
|
bool watch) /*!< in: if true, return watch
|
||||||
|
sentinel also. */
|
||||||
{
|
{
|
||||||
buf_page_t* bpage = NULL;
|
buf_page_t* bpage = NULL;
|
||||||
ulint fold;
|
ulint fold;
|
||||||
@ -1242,7 +1244,9 @@ buf_page_hash_get_locked(
|
|||||||
bpage = buf_page_hash_get_low(buf_pool, space, offset, fold);
|
bpage = buf_page_hash_get_low(buf_pool, space, offset, fold);
|
||||||
|
|
||||||
if (!bpage || buf_pool_watch_is_sentinel(buf_pool, bpage)) {
|
if (!bpage || buf_pool_watch_is_sentinel(buf_pool, bpage)) {
|
||||||
bpage = NULL;
|
if (!watch) {
|
||||||
|
bpage = NULL;
|
||||||
|
}
|
||||||
goto unlock_and_exit;
|
goto unlock_and_exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
|
|
||||||
Copyright (c) 1996, 2012, Oracle and/or its affiliates. All Rights Reserved.
|
Copyright (c) 1996, 2014, Oracle and/or its affiliates. All Rights Reserved.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it under
|
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
|
the terms of the GNU General Public License as published by the Free Software
|
||||||
@ -130,7 +130,8 @@ enum dberr_t {
|
|||||||
DB_TEMP_FILE_WRITE_FAILURE, /*!< Temp file write failure */
|
DB_TEMP_FILE_WRITE_FAILURE, /*!< Temp file write failure */
|
||||||
DB_FTS_TOO_MANY_WORDS_IN_PHRASE,
|
DB_FTS_TOO_MANY_WORDS_IN_PHRASE,
|
||||||
/*< Too many words in a phrase */
|
/*< Too many words in a phrase */
|
||||||
|
DB_TOO_BIG_FOR_REDO, /* Record length greater than 10%
|
||||||
|
of redo log */
|
||||||
/* The following are partial failure codes */
|
/* The following are partial failure codes */
|
||||||
DB_FAIL = 1000,
|
DB_FAIL = 1000,
|
||||||
DB_OVERFLOW,
|
DB_OVERFLOW,
|
||||||
|
@ -329,4 +329,11 @@ struct fts_ast_state_t {
|
|||||||
tokenization */
|
tokenization */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#ifdef UNIV_DEBUG
|
||||||
|
const char*
|
||||||
|
fts_ast_oper_name_get(fts_ast_oper_t oper);
|
||||||
|
const char*
|
||||||
|
fts_ast_node_type_get(fts_ast_type_t type);
|
||||||
|
#endif /* UNIV_DEBUG */
|
||||||
|
|
||||||
#endif /* INNOBASE_FSTS0AST_H */
|
#endif /* INNOBASE_FSTS0AST_H */
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
|
|
||||||
Copyright (c) 2006, 2013, Oracle and/or its affiliates. All Rights Reserved.
|
Copyright (c) 2006, 2014, Oracle and/or its affiliates. All Rights Reserved.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it under
|
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
|
the terms of the GNU General Public License as published by the Free Software
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
|
|
||||||
Copyright (c) 1995, 2013, Oracle and/or its affiliates. All Rights Reserved.
|
Copyright (c) 1995, 2014, Oracle and/or its affiliates. All Rights Reserved.
|
||||||
Copyright (c) 2009, Percona Inc.
|
Copyright (c) 2009, Percona Inc.
|
||||||
|
|
||||||
Portions of this file contain modifications contributed and copyrighted
|
Portions of this file contain modifications contributed and copyrighted
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
|
|
||||||
Copyright (c) 2005, 2013, Oracle and/or its affiliates. All Rights Reserved.
|
Copyright (c) 2005, 2014, Oracle and/or its affiliates. All Rights Reserved.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it under
|
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
|
the terms of the GNU General Public License as published by the Free Software
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
|
|
||||||
Copyright (c) 1996, 2012, Oracle and/or its affiliates. All Rights Reserved.
|
Copyright (c) 1996, 2014, Oracle and/or its affiliates. All Rights Reserved.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it under
|
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
|
the terms of the GNU General Public License as published by the Free Software
|
||||||
@ -33,6 +33,8 @@ Created 3/26/1996 Heikki Tuuri
|
|||||||
#include "mtr0mtr.h"
|
#include "mtr0mtr.h"
|
||||||
#include "trx0sys.h"
|
#include "trx0sys.h"
|
||||||
|
|
||||||
|
extern bool trx_rollback_or_clean_is_active;
|
||||||
|
|
||||||
/*******************************************************************//**
|
/*******************************************************************//**
|
||||||
Determines if this transaction is rolling back an incomplete transaction
|
Determines if this transaction is rolling back an incomplete transaction
|
||||||
in crash recovery.
|
in crash recovery.
|
||||||
|
@ -47,7 +47,7 @@ Created 1/20/1994 Heikki Tuuri
|
|||||||
#define INNODB_VERSION_BUGFIX MYSQL_VERSION_PATCH
|
#define INNODB_VERSION_BUGFIX MYSQL_VERSION_PATCH
|
||||||
|
|
||||||
#ifndef PERCONA_INNODB_VERSION
|
#ifndef PERCONA_INNODB_VERSION
|
||||||
#define PERCONA_INNODB_VERSION 72.0
|
#define PERCONA_INNODB_VERSION 72.1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Enable UNIV_LOG_ARCHIVE in XtraDB */
|
/* Enable UNIV_LOG_ARCHIVE in XtraDB */
|
||||||
|
@ -2047,7 +2047,8 @@ lock_rec_add_to_queue(
|
|||||||
|
|
||||||
ut_ad(lock_mutex_own());
|
ut_ad(lock_mutex_own());
|
||||||
ut_ad(caller_owns_trx_mutex == trx_mutex_own(trx));
|
ut_ad(caller_owns_trx_mutex == trx_mutex_own(trx));
|
||||||
ut_ad(dict_index_is_clust(index) || !dict_index_is_online_ddl(index));
|
ut_ad(dict_index_is_clust(index)
|
||||||
|
|| dict_index_get_online_status(index) != ONLINE_INDEX_CREATION);
|
||||||
#ifdef UNIV_DEBUG
|
#ifdef UNIV_DEBUG
|
||||||
switch (type_mode & LOCK_MODE_MASK) {
|
switch (type_mode & LOCK_MODE_MASK) {
|
||||||
case LOCK_X:
|
case LOCK_X:
|
||||||
@ -5375,7 +5376,7 @@ loop:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!srv_print_innodb_lock_monitor && !srv_show_locks_held) {
|
if (!srv_print_innodb_lock_monitor || !srv_show_locks_held) {
|
||||||
nth_trx++;
|
nth_trx++;
|
||||||
goto loop;
|
goto loop;
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
|
|
||||||
Copyright (c) 1995, 2013, Oracle and/or its affiliates. All Rights Reserved.
|
Copyright (c) 1995, 2014, Oracle and/or its affiliates. All Rights Reserved.
|
||||||
Copyright (c) 2009, Google Inc.
|
Copyright (c) 2009, Google Inc.
|
||||||
|
|
||||||
Portions of this file contain modifications contributed and copyrighted by
|
Portions of this file contain modifications contributed and copyrighted by
|
||||||
@ -48,6 +48,7 @@ Created 12/9/1995 Heikki Tuuri
|
|||||||
#include "srv0start.h"
|
#include "srv0start.h"
|
||||||
#include "trx0sys.h"
|
#include "trx0sys.h"
|
||||||
#include "trx0trx.h"
|
#include "trx0trx.h"
|
||||||
|
#include "trx0roll.h"
|
||||||
#include "srv0mon.h"
|
#include "srv0mon.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -3392,6 +3393,12 @@ logs_empty_and_mark_files_at_shutdown(void)
|
|||||||
|
|
||||||
ib_logf(IB_LOG_LEVEL_INFO, "Starting shutdown...");
|
ib_logf(IB_LOG_LEVEL_INFO, "Starting shutdown...");
|
||||||
|
|
||||||
|
while (srv_fast_shutdown == 0 && trx_rollback_or_clean_is_active) {
|
||||||
|
/* we should wait until rollback after recovery end
|
||||||
|
for slow shutdown */
|
||||||
|
os_thread_sleep(100000);
|
||||||
|
}
|
||||||
|
|
||||||
/* Wait until the master thread and all other operations are idle: our
|
/* Wait until the master thread and all other operations are idle: our
|
||||||
algorithm only works if the server is idle at shutdown */
|
algorithm only works if the server is idle at shutdown */
|
||||||
|
|
||||||
|
@ -3573,6 +3573,7 @@ recv_recovery_rollback_active(void)
|
|||||||
/* Rollback the uncommitted transactions which have no user
|
/* Rollback the uncommitted transactions which have no user
|
||||||
session */
|
session */
|
||||||
|
|
||||||
|
trx_rollback_or_clean_is_active = true;
|
||||||
os_thread_create(trx_rollback_or_clean_all_recovered, 0, 0);
|
os_thread_create(trx_rollback_or_clean_all_recovered, 0, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
|
|
||||||
Copyright (c) 1995, 2013, Oracle and/or its affiliates. All Rights Reserved.
|
Copyright (c) 1995, 2014, Oracle and/or its affiliates. All Rights Reserved.
|
||||||
Copyright (c) 2009, Percona Inc.
|
Copyright (c) 2009, Percona Inc.
|
||||||
|
|
||||||
Portions of this file contain modifications contributed and copyrighted
|
Portions of this file contain modifications contributed and copyrighted
|
||||||
@ -2806,13 +2806,18 @@ try_again:
|
|||||||
ret = os_file_pread(file, buf, n, offset, trx);
|
ret = os_file_pread(file, buf, n, offset, trx);
|
||||||
|
|
||||||
if ((ulint) ret == n) {
|
if ((ulint) ret == n) {
|
||||||
|
|
||||||
return(TRUE);
|
return(TRUE);
|
||||||
|
} else if (ret == -1) {
|
||||||
|
ib_logf(IB_LOG_LEVEL_ERROR,
|
||||||
|
"Error in system call pread(). The operating"
|
||||||
|
" system error number is %lu.",(ulint) errno);
|
||||||
|
} else {
|
||||||
|
/* Partial read occured */
|
||||||
|
ib_logf(IB_LOG_LEVEL_ERROR,
|
||||||
|
"Tried to read " ULINTPF " bytes at offset "
|
||||||
|
UINT64PF ". Was only able to read %ld.",
|
||||||
|
n, offset, (lint) ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
ib_logf(IB_LOG_LEVEL_ERROR,
|
|
||||||
"Tried to read " ULINTPF " bytes at offset " UINT64PF ". "
|
|
||||||
"Was only able to read %ld.", n, offset, (lint) ret);
|
|
||||||
#endif /* __WIN__ */
|
#endif /* __WIN__ */
|
||||||
#ifdef __WIN__
|
#ifdef __WIN__
|
||||||
error_handling:
|
error_handling:
|
||||||
@ -2933,8 +2938,17 @@ try_again:
|
|||||||
ret = os_file_pread(file, buf, n, offset, NULL);
|
ret = os_file_pread(file, buf, n, offset, NULL);
|
||||||
|
|
||||||
if ((ulint) ret == n) {
|
if ((ulint) ret == n) {
|
||||||
|
|
||||||
return(TRUE);
|
return(TRUE);
|
||||||
|
} else if (ret == -1) {
|
||||||
|
ib_logf(IB_LOG_LEVEL_ERROR,
|
||||||
|
"Error in system call pread(). The operating"
|
||||||
|
" system error number is %lu.",(ulint) errno);
|
||||||
|
} else {
|
||||||
|
/* Partial read occured */
|
||||||
|
ib_logf(IB_LOG_LEVEL_ERROR,
|
||||||
|
"Tried to read " ULINTPF " bytes at offset "
|
||||||
|
UINT64PF ". Was only able to read %ld.",
|
||||||
|
n, offset, (lint) ret);
|
||||||
}
|
}
|
||||||
#endif /* __WIN__ */
|
#endif /* __WIN__ */
|
||||||
#ifdef __WIN__
|
#ifdef __WIN__
|
||||||
@ -3135,18 +3149,26 @@ retry:
|
|||||||
|
|
||||||
ut_print_timestamp(stderr);
|
ut_print_timestamp(stderr);
|
||||||
|
|
||||||
fprintf(stderr,
|
if(ret == -1) {
|
||||||
" InnoDB: Error: Write to file %s failed"
|
ib_logf(IB_LOG_LEVEL_ERROR,
|
||||||
" at offset " UINT64PF ".\n"
|
"Failure of system call pwrite(). Operating"
|
||||||
"InnoDB: %lu bytes should have been written,"
|
" system error number is %lu.",
|
||||||
" only %ld were written.\n"
|
(ulint) errno);
|
||||||
"InnoDB: Operating system error number %lu.\n"
|
} else {
|
||||||
"InnoDB: Check that your OS and file system"
|
fprintf(stderr,
|
||||||
" support files of this size.\n"
|
" InnoDB: Error: Write to file %s failed"
|
||||||
"InnoDB: Check also that the disk is not full"
|
" at offset " UINT64PF ".\n"
|
||||||
" or a disk quota exceeded.\n",
|
"InnoDB: %lu bytes should have been written,"
|
||||||
name, offset, n, (lint) ret,
|
" only %ld were written.\n"
|
||||||
(ulint) errno);
|
"InnoDB: Operating system error number %lu.\n"
|
||||||
|
"InnoDB: Check that your OS and file system"
|
||||||
|
" support files of this size.\n"
|
||||||
|
"InnoDB: Check also that the disk is not full"
|
||||||
|
" or a disk quota exceeded.\n",
|
||||||
|
name, offset, n, (lint) ret,
|
||||||
|
(ulint) errno);
|
||||||
|
}
|
||||||
|
|
||||||
if (strerror(errno) != NULL) {
|
if (strerror(errno) != NULL) {
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"InnoDB: Error number %d means '%s'.\n",
|
"InnoDB: Error number %d means '%s'.\n",
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
|
|
||||||
Copyright (c) 2010, 2013, Oracle and/or its affiliates. All Rights Reserved.
|
Copyright (c) 2010, 2014, Oracle and/or its affiliates. All Rights Reserved.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it under
|
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
|
the terms of the GNU General Public License as published by the Free Software
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
|
|
||||||
Copyright (c) 2005, 2013, Oracle and/or its affiliates. All Rights Reserved.
|
Copyright (c) 2005, 2014, Oracle and/or its affiliates. All Rights Reserved.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it under
|
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
|
the terms of the GNU General Public License as published by the Free Software
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
|
|
||||||
Copyright (c) 2000, 2014, Oracle and/or its affiliates. All Rights Reserved.
|
Copyright (c) 2000, 2015, Oracle and/or its affiliates. All Rights Reserved.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it under
|
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
|
the terms of the GNU General Public License as published by the Free Software
|
||||||
@ -611,6 +611,7 @@ handle_new_error:
|
|||||||
case DB_DUPLICATE_KEY:
|
case DB_DUPLICATE_KEY:
|
||||||
case DB_FOREIGN_DUPLICATE_KEY:
|
case DB_FOREIGN_DUPLICATE_KEY:
|
||||||
case DB_TOO_BIG_RECORD:
|
case DB_TOO_BIG_RECORD:
|
||||||
|
case DB_TOO_BIG_FOR_REDO:
|
||||||
case DB_UNDO_RECORD_TOO_BIG:
|
case DB_UNDO_RECORD_TOO_BIG:
|
||||||
case DB_ROW_IS_REFERENCED:
|
case DB_ROW_IS_REFERENCED:
|
||||||
case DB_NO_REFERENCED_ROW:
|
case DB_NO_REFERENCED_ROW:
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
|
|
||||||
Copyright (c) 2012, 2013, Oracle and/or its affiliates. All Rights Reserved.
|
Copyright (c) 2012, 2014, Oracle and/or its affiliates. All Rights Reserved.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it under
|
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
|
the terms of the GNU General Public License as published by the Free Software
|
||||||
@ -680,7 +680,6 @@ row_quiesce_set_state(
|
|||||||
|
|
||||||
switch (state) {
|
switch (state) {
|
||||||
case QUIESCE_START:
|
case QUIESCE_START:
|
||||||
ut_a(table->quiesce == QUIESCE_NONE);
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case QUIESCE_COMPLETE:
|
case QUIESCE_COMPLETE:
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
|
|
||||||
Copyright (c) 2010, 2013, Oracle and/or its affiliates. All Rights Reserved.
|
Copyright (c) 2010, 2014, Oracle and/or its affiliates. All Rights Reserved.
|
||||||
Copyright (c) 2012, Facebook Inc.
|
Copyright (c) 2012, Facebook Inc.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it under
|
This program is free software; you can redistribute it and/or modify it under
|
||||||
@ -925,7 +925,8 @@ static monitor_info_t innodb_counter_info[] =
|
|||||||
|
|
||||||
{"adaptive_hash_searches_btree", "adaptive_hash_index",
|
{"adaptive_hash_searches_btree", "adaptive_hash_index",
|
||||||
"Number of searches using B-tree on an index search",
|
"Number of searches using B-tree on an index search",
|
||||||
MONITOR_NONE,
|
static_cast<monitor_type_t>(
|
||||||
|
MONITOR_EXISTING | MONITOR_DEFAULT_ON),
|
||||||
MONITOR_DEFAULT_START, MONITOR_OVLD_ADAPTIVE_HASH_SEARCH_BTREE},
|
MONITOR_DEFAULT_START, MONITOR_OVLD_ADAPTIVE_HASH_SEARCH_BTREE},
|
||||||
|
|
||||||
{"adaptive_hash_pages_added", "adaptive_hash_index",
|
{"adaptive_hash_pages_added", "adaptive_hash_index",
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
|
|
||||||
Copyright (c) 1995, 2013, Oracle and/or its affiliates. All Rights Reserved.
|
Copyright (c) 1995, 2014, Oracle and/or its affiliates. All Rights Reserved.
|
||||||
Copyright (c) 2008, 2009 Google Inc.
|
Copyright (c) 2008, 2009 Google Inc.
|
||||||
Copyright (c) 2009, Percona Inc.
|
Copyright (c) 2009, Percona Inc.
|
||||||
|
|
||||||
@ -3217,7 +3217,9 @@ srv_do_purge(
|
|||||||
|
|
||||||
*n_total_purged += n_pages_purged;
|
*n_total_purged += n_pages_purged;
|
||||||
|
|
||||||
} while (!srv_purge_should_exit(n_pages_purged) && n_pages_purged > 0);
|
} while (!srv_purge_should_exit(n_pages_purged)
|
||||||
|
&& n_pages_purged > 0
|
||||||
|
&& purge_sys->state == PURGE_STATE_RUN);
|
||||||
|
|
||||||
return(rseg_history_len);
|
return(rseg_history_len);
|
||||||
}
|
}
|
||||||
|
@ -50,6 +50,9 @@ Created 3/26/1996 Heikki Tuuri
|
|||||||
rollback */
|
rollback */
|
||||||
#define TRX_ROLL_TRUNC_THRESHOLD 1
|
#define TRX_ROLL_TRUNC_THRESHOLD 1
|
||||||
|
|
||||||
|
/** true if trx_rollback_or_clean_all_recovered() thread is active */
|
||||||
|
bool trx_rollback_or_clean_is_active;
|
||||||
|
|
||||||
/** In crash recovery, the current trx to be rolled back; NULL otherwise */
|
/** In crash recovery, the current trx to be rolled back; NULL otherwise */
|
||||||
static const trx_t* trx_roll_crash_recv_trx = NULL;
|
static const trx_t* trx_roll_crash_recv_trx = NULL;
|
||||||
|
|
||||||
@ -805,6 +808,8 @@ DECLARE_THREAD(trx_rollback_or_clean_all_recovered)(
|
|||||||
|
|
||||||
trx_rollback_or_clean_recovered(TRUE);
|
trx_rollback_or_clean_recovered(TRUE);
|
||||||
|
|
||||||
|
trx_rollback_or_clean_is_active = false;
|
||||||
|
|
||||||
/* We count the number of threads in os_thread_exit(). A created
|
/* We count the number of threads in os_thread_exit(). A created
|
||||||
thread should always use that to exit and not use return() to exit. */
|
thread should always use that to exit and not use return() to exit. */
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
|
|
||||||
Copyright (c) 1994, 2012, Oracle and/or its affiliates. All Rights Reserved.
|
Copyright (c) 1994, 2014, Oracle and/or its affiliates. All Rights Reserved.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify it under
|
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
|
the terms of the GNU General Public License as published by the Free Software
|
||||||
@ -823,6 +823,8 @@ ut_strerr(
|
|||||||
return("Temp file write failure");
|
return("Temp file write failure");
|
||||||
case DB_FTS_TOO_MANY_WORDS_IN_PHRASE:
|
case DB_FTS_TOO_MANY_WORDS_IN_PHRASE:
|
||||||
return("Too many words in a FTS phrase or proximity search");
|
return("Too many words in a FTS phrase or proximity search");
|
||||||
|
case DB_TOO_BIG_FOR_REDO:
|
||||||
|
return("BLOB record length is greater than 10%% of redo log");
|
||||||
|
|
||||||
/* do not add default: in order to produce a warning if new code
|
/* do not add default: in order to produce a warning if new code
|
||||||
is added to the enum but not added here */
|
is added to the enum but not added here */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user