Skip to content

Instantly share code, notes, and snippets.

@spetrunia
Created April 22, 2021 18:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save spetrunia/1e145f99ac159c082cbc7c87b75e7613 to your computer and use it in GitHub Desktop.
Save spetrunia/1e145f99ac159c082cbc7c87b75e7613 to your computer and use it in GitHub Desktop.
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