Commit 8662015c authored by Sergei Petrunia's avatar Sergei Petrunia

MDEV-15304: Server crash in print_keydup_error / key_unpack or unexpected ER_DUP_KEY

Adjust the patch to match the variant accepted into the upstream:
undo the changes in ha_rocksdb::load_hidden_pk_value().
parent 931daaf7
...@@ -5302,17 +5302,8 @@ int ha_rocksdb::load_hidden_pk_value() { ...@@ -5302,17 +5302,8 @@ int ha_rocksdb::load_hidden_pk_value() {
active_index = m_tbl_def->m_key_count - 1; active_index = m_tbl_def->m_key_count - 1;
const uint8 save_table_status = table->status; const uint8 save_table_status = table->status;
/* Rdb_transaction *const tx = get_or_create_tx(table->in_use);
We should read the latest committed value in the database. const bool is_new_snapshot = !tx->has_snapshot();
That is, if we have an open transaction with a snapshot, we should not use
it as we may get old data. Start a new transaction to read the latest
value.
*/
Rdb_transaction *const temp_tx = new Rdb_transaction_impl(table->in_use);
temp_tx->start_tx();
Rdb_transaction *&tx = get_tx_from_thd(table->in_use);
Rdb_transaction *save_tx= tx;
tx= temp_tx;
longlong hidden_pk_id = 1; longlong hidden_pk_id = 1;
// Do a lookup. // Do a lookup.
...@@ -5322,8 +5313,9 @@ int ha_rocksdb::load_hidden_pk_value() { ...@@ -5322,8 +5313,9 @@ int ha_rocksdb::load_hidden_pk_value() {
*/ */
auto err = read_hidden_pk_id_from_rowkey(&hidden_pk_id); auto err = read_hidden_pk_id_from_rowkey(&hidden_pk_id);
if (err) { if (err) {
delete tx; if (is_new_snapshot) {
tx= save_tx; tx->release_snapshot();
}
return err; return err;
} }
...@@ -5335,8 +5327,9 @@ int ha_rocksdb::load_hidden_pk_value() { ...@@ -5335,8 +5327,9 @@ int ha_rocksdb::load_hidden_pk_value() {
!m_tbl_def->m_hidden_pk_val.compare_exchange_weak(old, hidden_pk_id)) { !m_tbl_def->m_hidden_pk_val.compare_exchange_weak(old, hidden_pk_id)) {
} }
delete tx; if (is_new_snapshot) {
tx= save_tx; tx->release_snapshot();
}
table->status = save_table_status; table->status = save_table_status;
active_index = save_active_index; active_index = save_active_index;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment