Created
April 22, 2021 18:12
-
-
Save spetrunia/1e145f99ac159c082cbc7c87b75e7613 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc | |
index 496b920208b..e1d0a83dc95 100644 | |
--- a/storage/rocksdb/ha_rocksdb.cc | |
+++ b/storage/rocksdb/ha_rocksdb.cc | |
@@ -7758,7 +7758,7 @@ int ha_rocksdb::create_table(const std::string &table_name, | |
goto error; | |
} | |
- save_table_version(batch, table_arg->s->path.str, 0); | |
+ save_table_version(batch, table_name.c_str(), 0); | |
err = dict_manager.commit(batch); | |
if (err != HA_EXIT_SUCCESS) { | |
dict_manager.unlock(); | |
@@ -11711,12 +11711,13 @@ int ha_rocksdb::delete_table(Rdb_tbl_def *const tbl) { | |
std::string path = std::string("./") + tbl->base_dbname() + | |
"/" + tbl->base_tablename(); | |
+ std::string save_fullname= tbl->full_tablename(); | |
/* | |
Remove the table entry in data dictionary (this will also remove it from | |
the persistent data dictionary). | |
*/ | |
ddl_manager.remove(tbl, batch, true); | |
- delete_table_version(batch, path.c_str()); | |
+ delete_table_version(batch, save_fullname.c_str()); | |
int err = dict_manager.commit(batch); | |
if (err) { | |
@@ -11868,6 +11869,10 @@ int ha_rocksdb::rename_table(const char *const from, const char *const to) { | |
if (ddl_manager.rename(from_str, to_str, batch)) { | |
rc = HA_ERR_NO_SUCH_TABLE; | |
} else { | |
+ ulonglong table_ver = get_table_version(from_str.c_str()); | |
+ delete_table_version(batch, from_str.c_str()); | |
+ save_table_version(batch, to_str.c_str(), table_ver); | |
+ | |
rc = dict_manager.commit(batch); | |
} | |
dict_manager.unlock(); | |
@@ -13063,9 +13068,9 @@ bool ha_rocksdb::commit_inplace_alter_table( | |
/* | |
Increment the table version. | |
*/ | |
- ulonglong table_ver = get_table_version(table->s->path.str); | |
+ ulonglong table_ver = get_table_version(m_tbl_def->full_tablename().c_str()); | |
table_ver++; | |
- save_table_version(batch, table->s->path.str, table_ver); | |
+ save_table_version(batch, m_tbl_def->full_tablename().c_str(), table_ver); | |
if (dict_manager.commit(batch)) { | |
/* | |
@@ -14607,6 +14612,9 @@ void ha_rocksdb::print_error(int error, myf errflag) { | |
std::string make_table_version_lookup_key(const char *path) { | |
std::string res; | |
+ char buf[Rdb_key_def::INDEX_NUMBER_SIZE]; | |
+ rdb_netbuf_store_index((uchar*)buf, Rdb_key_def::TABLE_VERSION); | |
+ res.append(buf, Rdb_key_def::INDEX_NUMBER_SIZE); | |
res.append("MariaDB:table-version:"); | |
res.append(path); | |
return res; | |
@@ -14632,7 +14640,7 @@ void save_table_version(rocksdb::WriteBatch *wb, const char *path, | |
/* | |
@brief Read table's version from the data dictionary | |
- @param path The table's path, "./db_name/table_name" | |
+ @param path The table's full name, db_name.table_name[#P#partition_name] | |
@return | |
number TTable version as stored in the data dictionary | |
diff --git a/storage/rocksdb/rdb_datadic.h b/storage/rocksdb/rdb_datadic.h | |
index 903cecdc379..fb368a17fba 100644 | |
--- a/storage/rocksdb/rdb_datadic.h | |
+++ b/storage/rocksdb/rdb_datadic.h | |
@@ -505,6 +505,8 @@ class Rdb_key_def { | |
MAX_INDEX_ID = 7, | |
DDL_CREATE_INDEX_ONGOING = 8, | |
AUTO_INC = 9, | |
+ // MariaDB: 10 through 12 are already taken in upstream | |
+ TABLE_VERSION = 20, // MariaDB: table version record | |
END_DICT_INDEX_ID = 255 | |
}; | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment