summaryrefslogtreecommitdiff
path: root/storage
diff options
context:
space:
mode:
authorVasil Dimov <vasil.dimov@galeracluster.com>2018-06-15 20:30:42 +0200
committerJan Lindström <jan.lindstrom@mariadb.com>2018-10-10 13:02:25 +0300
commit6aa578ec5a4009e33757d91d15947f51c98a5c88 (patch)
tree591792c87f3d396ce3844cc07c53faad601eb558 /storage
parentbfc9aca1f546490de72497c5289f80a8ae54ee41 (diff)
downloadmariadb-git-6aa578ec5a4009e33757d91d15947f51c98a5c88.tar.gz
Generalize "bool shared/exclusive" argument to enum
wsrep_append_foreign_key() and wsrep_append_key() used to take a boolean argument denoting whether the relevant certification key type is shared (assuming it is exclusive if the argument is false). Change that argument to the enum wsrep_key_type from wsrep_api.h, so that eventually other types can also be passed (like WSREP_KEY_SEMI). This is a non-functional change. (cherry picked from commit 360bf36dbb9378b36ef57921c725a9505e19e0d9)
Diffstat (limited to 'storage')
-rw-r--r--storage/innobase/handler/ha_innodb.cc69
-rw-r--r--storage/innobase/handler/ha_innodb.h6
-rw-r--r--storage/innobase/row/row0ins.c12
-rw-r--r--storage/xtradb/handler/ha_innodb.cc68
-rw-r--r--storage/xtradb/handler/ha_innodb.h6
-rw-r--r--storage/xtradb/row/row0ins.c14
6 files changed, 123 insertions, 52 deletions
diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc
index 7aab200fed1..e6689f68704 100644
--- a/storage/innobase/handler/ha_innodb.cc
+++ b/storage/innobase/handler/ha_innodb.cc
@@ -110,6 +110,7 @@ enum_tx_isolation thd_get_trx_isolation(const THD* thd);
# endif /* MYSQL_PLUGIN_IMPORT */
#ifdef WITH_WSREP
+#include "../../../wsrep/wsrep_api.h"
#include <wsrep_mysqld.h>
#include <my_md5.h>
extern my_bool wsrep_certify_nonPK;
@@ -6019,7 +6020,8 @@ report_error:
BINLOG_FORMAT_ROW)) {
*/
- if (wsrep_append_keys(user_thd, false, record, NULL)) {
+ if (wsrep_append_keys(user_thd, WSREP_KEY_EXCLUSIVE, record,
+ NULL)) {
DBUG_PRINT("wsrep", ("row key failed"));
error_result = HA_ERR_INTERNAL_ERROR;
goto wsrep_error;
@@ -6391,7 +6393,8 @@ ha_innobase::update_row(
DBUG_PRINT("wsrep", ("update row key"));
- if (wsrep_append_keys(user_thd, false, old_row, new_row)) {
+ if (wsrep_append_keys(user_thd, WSREP_KEY_EXCLUSIVE, old_row,
+ new_row)) {
DBUG_PRINT("wsrep", ("row key failed"));
error = HA_ERR_INTERNAL_ERROR;
goto wsrep_error;
@@ -6446,7 +6449,8 @@ ha_innobase::delete_row(
if (!error && wsrep_thd_exec_mode(user_thd) == LOCAL_STATE &&
wsrep_on(user_thd)) {
- if (wsrep_append_keys(user_thd, false, record, NULL)) {
+ if (wsrep_append_keys(user_thd, WSREP_KEY_EXCLUSIVE, record,
+ NULL)) {
DBUG_PRINT("wsrep", ("delete fail"));
error = HA_ERR_INTERNAL_ERROR;
goto wsrep_error;
@@ -7259,6 +7263,21 @@ wsrep_dict_foreign_find_index(
ibool check_charsets,
ulint check_null);
+inline
+const char*
+wsrep_key_type_to_str(wsrep_key_type type)
+{
+ switch (type) {
+ case WSREP_KEY_SHARED:
+ return "shared";
+ case WSREP_KEY_SEMI:
+ return "semi";
+ case WSREP_KEY_EXCLUSIVE:
+ return "exclusive";
+ };
+ return "unknown";
+}
+
ulint
wsrep_append_foreign_key(
/*===========================*/
@@ -7267,7 +7286,8 @@ wsrep_append_foreign_key(
const rec_t* rec, /*!<in: clustered index record */
dict_index_t* index, /*!<in: clustered index */
ibool referenced, /*!<in: is check for referenced table */
- ibool shared) /*!<in: is shared access */
+ wsrep_key_type key_type) /*!< in: access type of this key
+ (shared, exclusive, semi...) */
{
ut_a(trx);
THD* thd = (THD*)trx->mysql_thd;
@@ -7363,19 +7383,21 @@ wsrep_append_foreign_key(
key[0] = (char)i;
rcode = wsrep_rec_get_foreign_key(
- &key[1], &len, rec, index, idx,
+ &key[1], &len, rec, index, idx,
wsrep_protocol_version > 1);
+
if (rcode != DB_SUCCESS) {
WSREP_ERROR(
- "FK key set failed: %lu (%lu %lu), index: %s %s, %s",
- rcode, referenced, shared,
+ "FK key set failed: %lu (%lu %s), index: %s %s, %s",
+ rcode, referenced, wsrep_key_type_to_str(key_type),
(index && index->name) ? index->name :
- "void index",
- (index && index->table_name) ? index->table_name :
- "void table",
+ "void index",
+ (index && index->table_name) ? index->table_name :
+ "void table",
wsrep_thd_query(thd));
return rcode;
}
+
strncpy(cache_key,
(wsrep_protocol_version > 1) ?
((referenced) ?
@@ -7419,7 +7441,7 @@ wsrep_append_foreign_key(
wsrep_ws_handle(thd, trx),
&wkey,
1,
- shared ? WSREP_KEY_SHARED : WSREP_KEY_EXCLUSIVE,
+ key_type,
copy);
if (rcode) {
DBUG_PRINT("wsrep", ("row key failed: %lu", rcode));
@@ -7442,15 +7464,16 @@ wsrep_append_key(
TABLE *table,
const char* key,
uint16_t key_len,
- bool shared
+ wsrep_key_type key_type /*!< in: access type of this key
+ (shared, exclusive, semi...) */
)
{
DBUG_ENTER("wsrep_append_key");
bool const copy = true;
#ifdef WSREP_DEBUG_PRINT
fprintf(stderr, "%s conn %ld, trx %llu, keylen %d, table %s\n Query: %s ",
- (shared) ? "Shared" : "Exclusive",
- wsrep_thd_thread_id(thd), trx->id, key_len,
+ wsrep_key_type_to_str(key_type),
+ wsrep_thd_thread_id(thd), trx->id, key_len,
table_share->table_name.str, wsrep_thd_query(thd));
for (int i=0; i<key_len; i++) {
fprintf(stderr, "%hhX, ", key[i]);
@@ -7476,7 +7499,7 @@ wsrep_append_key(
wsrep_ws_handle(thd, trx),
&wkey,
1,
- shared ? WSREP_KEY_SHARED : WSREP_KEY_EXCLUSIVE,
+ key_type,
copy);
if (rcode) {
DBUG_PRINT("wsrep", ("row key failed: %d", rcode));
@@ -7492,7 +7515,8 @@ int
ha_innobase::wsrep_append_keys(
/*==================*/
THD *thd,
- bool shared,
+ wsrep_key_type key_type, /*!< in: access type of this key
+ (shared, exclusive, semi...) */
const uchar* record0, /* in: row in MySQL format */
const uchar* record1) /* in: row in MySQL format */
{
@@ -7523,7 +7547,7 @@ ha_innobase::wsrep_append_keys(
if (!is_null) {
int rcode = wsrep_append_key(
thd, trx, table_share, table, keyval,
- len, shared);
+ len, key_type);
if (rcode) DBUG_RETURN(rcode);
}
else
@@ -7579,10 +7603,11 @@ ha_innobase::wsrep_append_keys(
if (!is_null) {
int rcode = wsrep_append_key(
thd, trx, table_share, table,
- keyval0, len+1, shared);
+ keyval0, len+1, key_type);
if (rcode) DBUG_RETURN(rcode);
- if (key_info->flags & HA_NOSAME || shared)
+ if (key_info->flags & HA_NOSAME ||
+ key_type == WSREP_KEY_SHARED)
key_appended = true;
}
else
@@ -7599,7 +7624,7 @@ ha_innobase::wsrep_append_keys(
int rcode = wsrep_append_key(
thd, trx, table_share,
table,
- keyval1, len+1, shared);
+ keyval1, len+1, key_type);
if (rcode) DBUG_RETURN(rcode);
}
}
@@ -7615,7 +7640,7 @@ ha_innobase::wsrep_append_keys(
wsrep_calc_row_hash(digest, record0, table, prebuilt, thd);
if ((rcode = wsrep_append_key(thd, trx, table_share, table,
(const char*) digest, 16,
- shared))) {
+ key_type))) {
DBUG_RETURN(rcode);
}
@@ -7625,7 +7650,7 @@ ha_innobase::wsrep_append_keys(
if ((rcode = wsrep_append_key(thd, trx, table_share,
table,
(const char*) digest,
- 16, shared))) {
+ 16, key_type))) {
DBUG_RETURN(rcode);
}
}
diff --git a/storage/innobase/handler/ha_innodb.h b/storage/innobase/handler/ha_innodb.h
index f5660b79027..c239a3218b1 100644
--- a/storage/innobase/handler/ha_innodb.h
+++ b/storage/innobase/handler/ha_innodb.h
@@ -28,6 +28,10 @@ this program; if not, write to the Free Software Foundation, Inc.,
#pragma interface /* gcc class implementation */
#endif
+#ifdef WITH_WSREP
+#include "../../../wsrep/wsrep_api.h"
+#endif /* WITH_WSREP */
+
/* Structure defines translation table between mysql index and innodb
index structures */
typedef struct innodb_idx_translate_struct {
@@ -115,7 +119,7 @@ class ha_innobase: public handler
int info_low(uint flag, bool called_from_analyze);
#ifdef WITH_WSREP
- int wsrep_append_keys(THD *thd, bool shared,
+ int wsrep_append_keys(THD *thd, wsrep_key_type key_type,
const uchar* record0, const uchar* record1);
#endif
/* Init values for the class: */
diff --git a/storage/innobase/row/row0ins.c b/storage/innobase/row/row0ins.c
index 28cfcc582f3..21e7f1609ff 100644
--- a/storage/innobase/row/row0ins.c
+++ b/storage/innobase/row/row0ins.c
@@ -56,6 +56,10 @@ Created 4/20/1996 Heikki Tuuri
#define ROW_INS_PREV 1
#define ROW_INS_NEXT 2
+#ifdef WITH_WSREP
+#include "../../../wsrep/wsrep_api.h"
+#endif /* WITH_WSREP */
+
/*************************************************************************
IMPORTANT NOTE: Any operation that generates redo MUST check that there
is enough space in the redo log before for that operation. This is
@@ -767,7 +771,7 @@ ulint wsrep_append_foreign_key(trx_t *trx,
const rec_t* clust_rec,
dict_index_t* clust_index,
ibool referenced,
- ibool shared);
+ enum wsrep_key_type key_type);
#endif /* WITH_WSREP */
/*********************************************************************//**
@@ -1088,7 +1092,7 @@ row_ins_foreign_check_on_constraint(
foreign,
clust_rec,
clust_index,
- FALSE, FALSE);
+ FALSE, WSREP_KEY_EXCLUSIVE);
if (err != DB_SUCCESS) {
fprintf(stderr,
"WSREP: foreign key append failed: %lu\n", err);
@@ -1437,7 +1441,9 @@ run_again:
rec,
check_index,
check_ref,
- (upd_node) ? TRUE : FALSE);
+ upd_node != NULL
+ ? WSREP_KEY_SHARED
+ : WSREP_KEY_EXCLUSIVE);
#endif /* WITH_WSREP */
goto end_scan;
} else if (foreign->type != 0) {
diff --git a/storage/xtradb/handler/ha_innodb.cc b/storage/xtradb/handler/ha_innodb.cc
index fca29d50e0a..363f6634c2d 100644
--- a/storage/xtradb/handler/ha_innodb.cc
+++ b/storage/xtradb/handler/ha_innodb.cc
@@ -127,6 +127,7 @@ extern ib_int64_t trx_sys_mysql_relay_log_pos;
# endif /* MYSQL_PLUGIN_IMPORT */
#ifdef WITH_WSREP
+#include "../../../wsrep/wsrep_api.h"
#include <wsrep_mysqld.h>
#include <my_md5.h>
extern my_bool wsrep_certify_nonPK;
@@ -7043,7 +7044,7 @@ report_error:
thd_binlog_format(user_thd) ==
BINLOG_FORMAT_ROW)) {
*/
- if (wsrep_append_keys(user_thd, false, record, NULL)) {
+ if (wsrep_append_keys(user_thd, WSREP_KEY_EXCLUSIVE, record, NULL)) {
DBUG_PRINT("wsrep", ("row key failed"));
error_result = HA_ERR_INTERNAL_ERROR;
goto wsrep_error;
@@ -7437,7 +7438,8 @@ ha_innobase::update_row(
DBUG_PRINT("wsrep", ("update row key"));
- if (wsrep_append_keys(user_thd, false, old_row, new_row)) {
+ if (wsrep_append_keys(user_thd, WSREP_KEY_EXCLUSIVE, old_row,
+ new_row)) {
DBUG_PRINT("wsrep", ("row key failed"));
error = HA_ERR_INTERNAL_ERROR;
goto wsrep_error;
@@ -7506,7 +7508,8 @@ ha_innobase::delete_row(
if (!error && wsrep_thd_exec_mode(user_thd) == LOCAL_STATE &&
wsrep_on(user_thd)) {
- if (wsrep_append_keys(user_thd, false, record, NULL)) {
+ if (wsrep_append_keys(user_thd, WSREP_KEY_EXCLUSIVE, record,
+ NULL)) {
DBUG_PRINT("wsrep", ("delete fail"));
error = HA_ERR_INTERNAL_ERROR;
goto wsrep_error;
@@ -8366,6 +8369,21 @@ wsrep_dict_foreign_find_index(
ibool check_charsets,
ulint check_null);
+inline
+const char*
+wsrep_key_type_to_str(wsrep_key_type type)
+{
+ switch (type) {
+ case WSREP_KEY_SHARED:
+ return "shared";
+ case WSREP_KEY_SEMI:
+ return "semi";
+ case WSREP_KEY_EXCLUSIVE:
+ return "exclusive";
+ };
+ return "unknown";
+}
+
ulint
wsrep_append_foreign_key(
/*===========================*/
@@ -8374,7 +8392,8 @@ wsrep_append_foreign_key(
const rec_t* rec, /*!<in: clustered index record */
dict_index_t* index, /*!<in: clustered index */
ibool referenced, /*!<in: is check for referenced table */
- ibool shared) /*!<in: is shared access */
+ wsrep_key_type key_type) /*!< in: access type of this key
+ (shared, exclusive, semi...) */
{
ut_a(trx);
THD* thd = (THD*)trx->mysql_thd;
@@ -8470,19 +8489,21 @@ wsrep_append_foreign_key(
key[0] = (char)i;
rcode = wsrep_rec_get_foreign_key(
- &key[1], &len, rec, index, idx,
+ &key[1], &len, rec, index, idx,
wsrep_protocol_version > 1);
+
if (rcode != DB_SUCCESS) {
WSREP_ERROR(
- "FK key set failed: %lu (%lu %lu), index: %s %s, %s",
- rcode, referenced, shared,
+ "FK key set failed: %lu (%lu %s), index: %s %s, %s",
+ rcode, referenced, wsrep_key_type_to_str(key_type),
(index && index->name) ? index->name :
- "void index",
- (index && index->table_name) ? index->table_name :
- "void table",
+ "void index",
+ (index && index->table_name) ? index->table_name :
+ "void table",
wsrep_thd_query(thd));
return rcode;
}
+
strncpy(cache_key,
(wsrep_protocol_version > 1) ?
((referenced) ?
@@ -8526,7 +8547,7 @@ wsrep_append_foreign_key(
wsrep_ws_handle(thd, trx),
&wkey,
1,
- shared ? WSREP_KEY_SHARED : WSREP_KEY_EXCLUSIVE,
+ key_type,
copy);
if (rcode) {
DBUG_PRINT("wsrep", ("row key failed: %lu", rcode));
@@ -8549,15 +8570,16 @@ wsrep_append_key(
TABLE *table,
const char* key,
uint16_t key_len,
- bool shared
+ wsrep_key_type key_type /*!< in: access type of this key
+ (shared, exclusive, semi...) */
)
{
DBUG_ENTER("wsrep_append_key");
bool const copy = true;
#ifdef WSREP_DEBUG_PRINT
fprintf(stderr, "%s conn %ld, trx %llu, keylen %d, table %s\n Query: %s ",
- (shared) ? "Shared" : "Exclusive",
- wsrep_thd_thread_id(thd), trx->id, key_len,
+ wsrep_key_type_to_str(key_type),
+ wsrep_thd_thread_id(thd), trx->id, key_len,
table_share->table_name.str, wsrep_thd_query(thd));
for (int i=0; i<key_len; i++) {
fprintf(stderr, "%hhX, ", key[i]);
@@ -8583,7 +8605,7 @@ wsrep_append_key(
wsrep_ws_handle(thd, trx),
&wkey,
1,
- shared ? WSREP_KEY_SHARED : WSREP_KEY_EXCLUSIVE,
+ key_type,
copy);
if (rcode) {
DBUG_PRINT("wsrep", ("row key failed: %d", rcode));
@@ -8599,7 +8621,8 @@ int
ha_innobase::wsrep_append_keys(
/*==================*/
THD *thd,
- bool shared,
+ wsrep_key_type key_type, /*!< in: access type of this key
+ (shared, exclusive, semi...) */
const uchar* record0, /* in: row in MySQL format */
const uchar* record1) /* in: row in MySQL format */
{
@@ -8630,7 +8653,7 @@ ha_innobase::wsrep_append_keys(
if (!is_null) {
int rcode = wsrep_append_key(
thd, trx, table_share, table, keyval,
- len, shared);
+ len, key_type);
if (rcode) DBUG_RETURN(rcode);
}
else
@@ -8686,10 +8709,11 @@ ha_innobase::wsrep_append_keys(
if (!is_null) {
int rcode = wsrep_append_key(
thd, trx, table_share, table,
- keyval0, len+1, shared);
+ keyval0, len+1, key_type);
if (rcode) DBUG_RETURN(rcode);
- if (key_info->flags & HA_NOSAME || shared)
+ if (key_info->flags & HA_NOSAME ||
+ key_type == WSREP_KEY_SHARED)
key_appended = true;
}
else
@@ -8706,7 +8730,7 @@ ha_innobase::wsrep_append_keys(
int rcode = wsrep_append_key(
thd, trx, table_share,
table,
- keyval1, len+1, shared);
+ keyval1, len+1, key_type);
if (rcode) DBUG_RETURN(rcode);
}
}
@@ -8722,7 +8746,7 @@ ha_innobase::wsrep_append_keys(
wsrep_calc_row_hash(digest, record0, table, prebuilt, thd);
if ((rcode = wsrep_append_key(thd, trx, table_share, table,
(const char*) digest, 16,
- shared))) {
+ key_type))) {
DBUG_RETURN(rcode);
}
@@ -8732,7 +8756,7 @@ ha_innobase::wsrep_append_keys(
if ((rcode = wsrep_append_key(thd, trx, table_share,
table,
(const char*) digest,
- 16, shared))) {
+ 16, key_type))) {
DBUG_RETURN(rcode);
}
}
diff --git a/storage/xtradb/handler/ha_innodb.h b/storage/xtradb/handler/ha_innodb.h
index f087a2d6ea0..4f177fb7a79 100644
--- a/storage/xtradb/handler/ha_innodb.h
+++ b/storage/xtradb/handler/ha_innodb.h
@@ -28,6 +28,10 @@ this program; if not, write to the Free Software Foundation, Inc.,
#pragma interface /* gcc class implementation */
#endif
+#ifdef WITH_WSREP
+#include "../../../wsrep/wsrep_api.h"
+#endif /* WITH_WSREP */
+
/* Structure defines translation table between mysql index and innodb
index structures */
typedef struct innodb_idx_translate_struct {
@@ -116,7 +120,7 @@ class ha_innobase: public handler
int info_low(uint flag, bool called_from_analyze);
#ifdef WITH_WSREP
- int wsrep_append_keys(THD *thd, bool shared,
+ int wsrep_append_keys(THD *thd, wsrep_key_type key_type,
const uchar* record0, const uchar* record1);
#endif
/* Init values for the class: */
diff --git a/storage/xtradb/row/row0ins.c b/storage/xtradb/row/row0ins.c
index 6187a1149f8..f0cea9e847d 100644
--- a/storage/xtradb/row/row0ins.c
+++ b/storage/xtradb/row/row0ins.c
@@ -56,6 +56,10 @@ Created 4/20/1996 Heikki Tuuri
#define ROW_INS_PREV 1
#define ROW_INS_NEXT 2
+#ifdef WITH_WSREP
+#include "../../../wsrep/wsrep_api.h"
+#endif /* WITH_WSREP */
+
/*************************************************************************
IMPORTANT NOTE: Any operation that generates redo MUST check that there
is enough space in the redo log before for that operation. This is
@@ -768,7 +772,7 @@ ulint wsrep_append_foreign_key(trx_t *trx,
const rec_t* clust_rec,
dict_index_t* clust_index,
ibool referenced,
- ibool shared);
+ enum wsrep_key_type key_type);
#endif /* WITH_WSREP */
/*********************************************************************//**
@@ -1090,7 +1094,9 @@ row_ins_foreign_check_on_constraint(
clust_rec,
clust_index,
FALSE,
- (node) ? TRUE : FALSE);
+ node != NULL
+ ? WSREP_KEY_SHARED
+ : WSREP_KEY_EXCLUSIVE);
if (err != DB_SUCCESS) {
fprintf(stderr,
"WSREP: foreign key append failed: %lu\n", err);
@@ -1445,7 +1451,9 @@ run_again:
rec,
check_index,
check_ref,
- (upd_node) ? TRUE : FALSE);
+ upd_node != NULL
+ ? WSREP_KEY_SHARED
+ : WSREP_KEY_EXCLUSIVE);
#endif /* WITH_WSREP */
goto end_scan;
} else if (foreign->type != 0) {