Enable test_multi_version_sstable_merge test case
This commit is contained in:
		@ -14,7 +14,7 @@ storage_unittest(test_ls_restore_task_mgr)
 | 
			
		||||
storage_dml_unittest(test_index_sstable_estimator)
 | 
			
		||||
storage_dml_unittest(test_index_sstable_multi_estimator)
 | 
			
		||||
storage_dml_unittest(test_multi_version_sstable_single_get)
 | 
			
		||||
#storage_dml_unittest(test_multi_version_sstable_merge)
 | 
			
		||||
storage_dml_unittest(test_multi_version_sstable_merge)
 | 
			
		||||
storage_unittest(test_physical_copy_task test_physical_copy_task.cpp)
 | 
			
		||||
# storage_dml_unittest(test_multi_version_merge_recycle)
 | 
			
		||||
# storage_unittest(test_speed_limit test_speed_limit.cpp)
 | 
			
		||||
 | 
			
		||||
@ -13,6 +13,7 @@
 | 
			
		||||
#include <gtest/gtest.h>
 | 
			
		||||
#define private public
 | 
			
		||||
#define protected public
 | 
			
		||||
#define UNITTEST
 | 
			
		||||
#include "lib/container/ob_iarray.h"
 | 
			
		||||
#include "storage/memtable/ob_memtable_interface.h"
 | 
			
		||||
#include "storage/ob_partition_component_factory.h"
 | 
			
		||||
@ -42,6 +43,7 @@
 | 
			
		||||
#include "storage/tx_table/ob_tx_table.h"
 | 
			
		||||
#include "storage/tx_storage/ob_ls_service.h"
 | 
			
		||||
#include "storage/tx/ob_trans_ctx_mgr_v4.h"
 | 
			
		||||
#include "storage/tx/ob_tx_data_define.h"
 | 
			
		||||
#include "share/scn.h"
 | 
			
		||||
 | 
			
		||||
namespace oceanbase
 | 
			
		||||
@ -60,67 +62,38 @@ using namespace palf;
 | 
			
		||||
namespace storage
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
int ObTxDataTable::check_tx_data_with_cache_once_(const transaction::ObTransID tx_id, ObITxDataCheckFunctor &fn)
 | 
			
		||||
ObSEArray<ObTxData, 8> TX_DATA_ARR;
 | 
			
		||||
 | 
			
		||||
int ObTxTable::insert(ObTxData *&tx_data)
 | 
			
		||||
{
 | 
			
		||||
  int ret = OB_SUCCESS;
 | 
			
		||||
  ret = TX_DATA_ARR.push_back(*tx_data);
 | 
			
		||||
  return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
  ObTxDataGuard tx_data_guard;
 | 
			
		||||
  bool find = false;
 | 
			
		||||
 | 
			
		||||
  if (OB_FAIL(get_tx_data_from_cache_(tx_id, tx_data_guard, find))) {
 | 
			
		||||
    if (OB_EAGAIN != ret) {
 | 
			
		||||
      STORAGE_LOG(WARN, "get tx data from cache failed", KR(ret));
 | 
			
		||||
    }
 | 
			
		||||
  } else {
 | 
			
		||||
    if (find) {
 | 
			
		||||
      /**************** rewrite logic *******************/
 | 
			
		||||
 | 
			
		||||
      ret = fn(*tx_data_guard.tx_data());
 | 
			
		||||
 | 
			
		||||
      /**************** rewrite logic *******************/
 | 
			
		||||
    } else {
 | 
			
		||||
      int64_t memtable_head = -1;
 | 
			
		||||
      int64_t memtable_tail = -1;
 | 
			
		||||
      if (OB_FAIL(get_memtable_mgr_()->get_memtable_range(memtable_head, memtable_tail))) {
 | 
			
		||||
        STORAGE_LOG(WARN, "get memtable range failed", KR(ret));
 | 
			
		||||
      } else if (memtable_head != memtables_cache_.memtable_head_ || memtable_tail != memtables_cache_.memtable_tail_) {
 | 
			
		||||
        ret = OB_EAGAIN;
 | 
			
		||||
      } else {
 | 
			
		||||
        ret = OB_TRANS_CTX_NOT_EXIST;
 | 
			
		||||
int ObTxTable::check_with_tx_data(ObReadTxDataArg &read_tx_data_arg, ObITxDataCheckFunctor &fn)
 | 
			
		||||
{
 | 
			
		||||
  int ret = OB_SUCCESS;
 | 
			
		||||
  for (int i = 0; i < TX_DATA_ARR.count(); i++)
 | 
			
		||||
  {
 | 
			
		||||
    if (read_tx_data_arg.tx_id_ == TX_DATA_ARR.at(i).tx_id_) {
 | 
			
		||||
      ret = fn(TX_DATA_ARR[i]);
 | 
			
		||||
      if (OB_FAIL(ret)) {
 | 
			
		||||
        STORAGE_LOG(ERROR, "check with tx data failed", KR(ret), K(read_tx_data_arg), K(TX_DATA_ARR.at(i)));
 | 
			
		||||
      }
 | 
			
		||||
      break;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int clear_tx_data(ObTxDataTable *tx_data_table)
 | 
			
		||||
int clear_tx_data()
 | 
			
		||||
{
 | 
			
		||||
  int ret = OB_SUCCESS;
 | 
			
		||||
  ObTxDataMemtableMgr *mgr = tx_data_table->memtable_mgr_;
 | 
			
		||||
  ObTxDataMemtableWriteGuard write_guard;
 | 
			
		||||
  ObTxDataMemtable *tx_data_memtable = nullptr;
 | 
			
		||||
  if (OB_FAIL(mgr->get_all_memtables_for_write(write_guard))) {
 | 
			
		||||
    STORAGE_LOG(WARN, "get all memtables for write fail.", KR(ret), KPC(mgr));
 | 
			
		||||
  } else {
 | 
			
		||||
    ObTransID tx_id;
 | 
			
		||||
    ObTableHandleV2 (&memtable_handles)[MAX_TX_DATA_MEMTABLE_CNT] = write_guard.handles_;
 | 
			
		||||
    for (int i = write_guard.size_ - 1; OB_SUCC(ret) && i >= 0; i--) {
 | 
			
		||||
      tx_data_memtable = nullptr;
 | 
			
		||||
      if (OB_FAIL(memtable_handles[i].get_tx_data_memtable(tx_data_memtable))) {
 | 
			
		||||
        ret = OB_ERR_UNEXPECTED;
 | 
			
		||||
        STORAGE_LOG(ERROR, "get tx data memtable from table handles fail.", KR(ret),
 | 
			
		||||
                    K(memtable_handles[i]));
 | 
			
		||||
      } else if (OB_ISNULL(tx_data_memtable)) {
 | 
			
		||||
        ret = OB_ERR_UNEXPECTED;
 | 
			
		||||
        STORAGE_LOG(ERROR, "tx data memtable is nullptr.", KR(ret), K(memtable_handles[i]));
 | 
			
		||||
      } else {
 | 
			
		||||
        tx_data_memtable->TEST_reset_tx_data_map_();
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  return ret;
 | 
			
		||||
  TX_DATA_ARR.reset();
 | 
			
		||||
  return OB_SUCCESS;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class TestMultiVersionMerge : public ObMultiVersionSSTableTest
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
@ -1069,20 +1042,13 @@ TEST_F(TestMultiVersionMerge, test_merge_with_multi_trans)
 | 
			
		||||
  ASSERT_EQ(OB_SUCCESS, ls_svr->get_ls(ls_id, ls_handle, ObLSGetMod::STORAGE_MOD));
 | 
			
		||||
 | 
			
		||||
  ObTxTable *tx_table = nullptr;
 | 
			
		||||
  ObTxDataTable *tx_data_table = nullptr;
 | 
			
		||||
  ObTxTableGuard tx_table_guard;
 | 
			
		||||
  ls_handle.get_ls()->get_tx_table_guard(tx_table_guard);
 | 
			
		||||
  ASSERT_NE(nullptr, tx_table = tx_table_guard.get_tx_table());
 | 
			
		||||
  ASSERT_NE(nullptr, tx_data_table = tx_table->get_tx_data_table());
 | 
			
		||||
 | 
			
		||||
  ObTxData *tx_data = nullptr;
 | 
			
		||||
  transaction::ObTransID tx_id;
 | 
			
		||||
  for (int64_t i = 1; i <= 4; i++) {
 | 
			
		||||
    tx_id = i;
 | 
			
		||||
 | 
			
		||||
    ObTxDataGuard tx_data_guard;
 | 
			
		||||
    ASSERT_EQ(OB_SUCCESS, tx_data_table->alloc_tx_data(tx_data_guard));
 | 
			
		||||
    tx_data = tx_data_guard.tx_data();
 | 
			
		||||
    ObTxData *tx_data = new ObTxData();
 | 
			
		||||
    transaction::ObTransID tx_id = i;
 | 
			
		||||
 | 
			
		||||
    // fill in data
 | 
			
		||||
    tx_data->tx_id_ = tx_id;
 | 
			
		||||
@ -1100,7 +1066,8 @@ TEST_F(TestMultiVersionMerge, test_merge_with_multi_trans)
 | 
			
		||||
      tx_data->add_undo_action(tx_table, undo_action);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    ASSERT_EQ(OB_SUCCESS, tx_data_table->insert(tx_data));
 | 
			
		||||
    ASSERT_EQ(OB_SUCCESS, tx_table->insert(tx_data));
 | 
			
		||||
    delete tx_data;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ObVersionRange trans_version_range;
 | 
			
		||||
@ -1143,7 +1110,7 @@ TEST_F(TestMultiVersionMerge, test_merge_with_multi_trans)
 | 
			
		||||
  ObMockDirectReadIterator sstable_iter;
 | 
			
		||||
  ASSERT_EQ(OB_SUCCESS, sstable_iter.init(scanner, allocator_, full_read_info_));
 | 
			
		||||
  ASSERT_TRUE(res_iter.equals(sstable_iter, true));
 | 
			
		||||
  ASSERT_EQ(OB_SUCCESS, clear_tx_data(tx_data_table));
 | 
			
		||||
  ASSERT_EQ(OB_SUCCESS, clear_tx_data());
 | 
			
		||||
  scanner->~ObStoreRowIterator();
 | 
			
		||||
  handle1.reset();
 | 
			
		||||
  handle2.reset();
 | 
			
		||||
@ -1238,20 +1205,13 @@ TEST_F(TestMultiVersionMerge, test_merge_with_multi_trans_can_compact)
 | 
			
		||||
  ASSERT_EQ(OB_SUCCESS, ls_svr->get_ls(ls_id, ls_handle, ObLSGetMod::STORAGE_MOD));
 | 
			
		||||
 | 
			
		||||
  ObTxTable *tx_table = nullptr;
 | 
			
		||||
  ObTxDataTable *tx_data_table = nullptr;
 | 
			
		||||
  ObTxTableGuard tx_table_guard;
 | 
			
		||||
  ls_handle.get_ls()->get_tx_table_guard(tx_table_guard);
 | 
			
		||||
  ASSERT_NE(nullptr, tx_table = tx_table_guard.get_tx_table());
 | 
			
		||||
  ASSERT_NE(nullptr, tx_data_table = tx_table->get_tx_data_table());
 | 
			
		||||
 | 
			
		||||
  ObTxData *tx_data = nullptr;
 | 
			
		||||
  transaction::ObTransID tx_id;
 | 
			
		||||
  for (int64_t i = 1; i <= 5; i++) {
 | 
			
		||||
    tx_id = i;
 | 
			
		||||
 | 
			
		||||
    ObTxDataGuard tx_data_guard;
 | 
			
		||||
    ASSERT_EQ(OB_SUCCESS, tx_data_table->alloc_tx_data(tx_data_guard));
 | 
			
		||||
    ASSERT_NE(nullptr, tx_data = tx_data_guard.tx_data());
 | 
			
		||||
    ObTxData *tx_data = new ObTxData();
 | 
			
		||||
    transaction::ObTransID tx_id = i;
 | 
			
		||||
 | 
			
		||||
    // fill in data
 | 
			
		||||
    tx_data->tx_id_ = tx_id;
 | 
			
		||||
@ -1269,7 +1229,8 @@ TEST_F(TestMultiVersionMerge, test_merge_with_multi_trans_can_compact)
 | 
			
		||||
      tx_data->add_undo_action(tx_table, undo_action);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    ASSERT_EQ(OB_SUCCESS, tx_data_table->insert(tx_data));
 | 
			
		||||
    ASSERT_EQ(OB_SUCCESS, tx_table->insert(tx_data));
 | 
			
		||||
    delete tx_data;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ObVersionRange trans_version_range;
 | 
			
		||||
@ -1310,7 +1271,7 @@ TEST_F(TestMultiVersionMerge, test_merge_with_multi_trans_can_compact)
 | 
			
		||||
  ObMockDirectReadIterator sstable_iter;
 | 
			
		||||
  ASSERT_EQ(OB_SUCCESS, sstable_iter.init(scanner, allocator_, full_read_info_));
 | 
			
		||||
  ASSERT_TRUE(res_iter.equals(sstable_iter, true));
 | 
			
		||||
  ASSERT_EQ(OB_SUCCESS, clear_tx_data(tx_data_table));
 | 
			
		||||
  ASSERT_EQ(OB_SUCCESS, clear_tx_data());
 | 
			
		||||
  scanner->~ObStoreRowIterator();
 | 
			
		||||
  handle1.reset();
 | 
			
		||||
  handle2.reset();
 | 
			
		||||
@ -1407,20 +1368,13 @@ TEST_F(TestMultiVersionMerge, test_merge_with_multi_trans_can_not_compact)
 | 
			
		||||
  ASSERT_EQ(OB_SUCCESS, ls_svr->get_ls(ls_id, ls_handle, ObLSGetMod::STORAGE_MOD));
 | 
			
		||||
 | 
			
		||||
  ObTxTable *tx_table = nullptr;
 | 
			
		||||
  ObTxDataTable *tx_data_table = nullptr;
 | 
			
		||||
  ObTxTableGuard tx_table_guard;
 | 
			
		||||
  ls_handle.get_ls()->get_tx_table_guard(tx_table_guard);
 | 
			
		||||
  ASSERT_NE(nullptr, tx_table = tx_table_guard.get_tx_table());
 | 
			
		||||
  ASSERT_NE(nullptr, tx_data_table = tx_table->get_tx_data_table());
 | 
			
		||||
 | 
			
		||||
  ObTxData *tx_data = nullptr;
 | 
			
		||||
  transaction::ObTransID tx_id;
 | 
			
		||||
  for (int64_t i = 1; i <= 5; i++) {
 | 
			
		||||
    tx_id = i;
 | 
			
		||||
 | 
			
		||||
    ObTxDataGuard tx_data_guard;
 | 
			
		||||
    ASSERT_EQ(OB_SUCCESS, tx_data_table->alloc_tx_data(tx_data_guard));
 | 
			
		||||
    ASSERT_NE(nullptr, tx_data = tx_data_guard.tx_data());
 | 
			
		||||
    ObTxData *tx_data = new ObTxData();
 | 
			
		||||
    transaction::ObTransID tx_id = i;
 | 
			
		||||
 | 
			
		||||
    // fill in data
 | 
			
		||||
    tx_data->tx_id_ = tx_id;
 | 
			
		||||
@ -1439,7 +1393,8 @@ TEST_F(TestMultiVersionMerge, test_merge_with_multi_trans_can_not_compact)
 | 
			
		||||
;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    ASSERT_EQ(OB_SUCCESS, tx_data_table->insert(tx_data));
 | 
			
		||||
    ASSERT_EQ(OB_SUCCESS, tx_table->insert(tx_data));
 | 
			
		||||
    delete tx_data;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ObVersionRange trans_version_range;
 | 
			
		||||
@ -1483,7 +1438,7 @@ TEST_F(TestMultiVersionMerge, test_merge_with_multi_trans_can_not_compact)
 | 
			
		||||
  ObMockDirectReadIterator sstable_iter;
 | 
			
		||||
  ASSERT_EQ(OB_SUCCESS, sstable_iter.init(scanner, allocator_, full_read_info_));
 | 
			
		||||
  ASSERT_TRUE(res_iter.equals(sstable_iter, true));
 | 
			
		||||
  ASSERT_EQ(OB_SUCCESS, clear_tx_data(tx_data_table));
 | 
			
		||||
  ASSERT_EQ(OB_SUCCESS, clear_tx_data());
 | 
			
		||||
  scanner->~ObStoreRowIterator();
 | 
			
		||||
  handle1.reset();
 | 
			
		||||
  handle2.reset();
 | 
			
		||||
@ -1550,13 +1505,6 @@ TEST_F(TestMultiVersionMerge, test_merge_with_macro_reused_with_shadow)
 | 
			
		||||
  ObLSService *ls_svr = MTL(ObLSService*);
 | 
			
		||||
  ASSERT_EQ(OB_SUCCESS, ls_svr->get_ls(ls_id, ls_handle, ObLSGetMod::STORAGE_MOD));
 | 
			
		||||
 | 
			
		||||
  ObTxTable *tx_table = nullptr;
 | 
			
		||||
  ObTxDataTable *tx_data_table = nullptr;
 | 
			
		||||
  ObTxTableGuard tx_table_guard;
 | 
			
		||||
  ls_handle.get_ls()->get_tx_table_guard(tx_table_guard);
 | 
			
		||||
  ASSERT_NE(nullptr, tx_table = tx_table_guard.get_tx_table());
 | 
			
		||||
  ASSERT_NE(nullptr, tx_data_table = tx_table->get_tx_data_table());
 | 
			
		||||
 | 
			
		||||
  ObVersionRange trans_version_range;
 | 
			
		||||
  trans_version_range.snapshot_version_ = 100;
 | 
			
		||||
  trans_version_range.multi_version_start_ = 1;
 | 
			
		||||
@ -1596,7 +1544,7 @@ TEST_F(TestMultiVersionMerge, test_merge_with_macro_reused_with_shadow)
 | 
			
		||||
  ObMockDirectReadIterator sstable_iter;
 | 
			
		||||
  ASSERT_EQ(OB_SUCCESS, sstable_iter.init(scanner, allocator_, full_read_info_));
 | 
			
		||||
  ASSERT_TRUE(res_iter.equals(sstable_iter, true));
 | 
			
		||||
  ASSERT_EQ(OB_SUCCESS, clear_tx_data(tx_data_table));
 | 
			
		||||
  ASSERT_EQ(OB_SUCCESS, clear_tx_data());
 | 
			
		||||
  scanner->~ObStoreRowIterator();
 | 
			
		||||
  handle1.reset();
 | 
			
		||||
  handle2.reset();
 | 
			
		||||
@ -1663,20 +1611,13 @@ TEST_F(TestMultiVersionMerge, test_merge_with_macro_reused_without_shadow)
 | 
			
		||||
  ASSERT_EQ(OB_SUCCESS, ls_svr->get_ls(ls_id, ls_handle, ObLSGetMod::STORAGE_MOD));
 | 
			
		||||
 | 
			
		||||
  ObTxTable *tx_table = nullptr;
 | 
			
		||||
  ObTxDataTable *tx_data_table = nullptr;
 | 
			
		||||
  ObTxTableGuard tx_table_guard;
 | 
			
		||||
  ls_handle.get_ls()->get_tx_table_guard(tx_table_guard);
 | 
			
		||||
  ASSERT_NE(nullptr, tx_table = tx_table_guard.get_tx_table());
 | 
			
		||||
  ASSERT_NE(nullptr, tx_data_table = tx_table->get_tx_data_table());
 | 
			
		||||
 | 
			
		||||
  ObTxData *tx_data = nullptr;
 | 
			
		||||
  transaction::ObTransID tx_id;
 | 
			
		||||
  for (int64_t i = 1; i <= 4; i++) {
 | 
			
		||||
    tx_id = i;
 | 
			
		||||
 | 
			
		||||
    ObTxDataGuard tx_data_guard;
 | 
			
		||||
    ASSERT_EQ(OB_SUCCESS, tx_data_table->alloc_tx_data(tx_data_guard));
 | 
			
		||||
    ASSERT_NE(nullptr, tx_data = tx_data_guard.tx_data());
 | 
			
		||||
    ObTxData *tx_data = new ObTxData();
 | 
			
		||||
    transaction::ObTransID tx_id = i;
 | 
			
		||||
 | 
			
		||||
    // fill in data
 | 
			
		||||
    tx_data->tx_id_ = tx_id;
 | 
			
		||||
@ -1685,7 +1626,8 @@ TEST_F(TestMultiVersionMerge, test_merge_with_macro_reused_without_shadow)
 | 
			
		||||
    tx_data->end_scn_ = tx_data->commit_version_;
 | 
			
		||||
    tx_data->state_ = ObTxData::COMMIT;
 | 
			
		||||
 | 
			
		||||
    ASSERT_EQ(OB_SUCCESS, tx_data_table->insert(tx_data));
 | 
			
		||||
    ASSERT_EQ(OB_SUCCESS, tx_table->insert(tx_data));
 | 
			
		||||
    delete tx_data;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ObVersionRange trans_version_range;
 | 
			
		||||
@ -1728,7 +1670,7 @@ TEST_F(TestMultiVersionMerge, test_merge_with_macro_reused_without_shadow)
 | 
			
		||||
  ObMockDirectReadIterator sstable_iter;
 | 
			
		||||
  ASSERT_EQ(OB_SUCCESS, sstable_iter.init(scanner, allocator_, full_read_info_));
 | 
			
		||||
  ASSERT_TRUE(res_iter.equals(sstable_iter, true));
 | 
			
		||||
  ASSERT_EQ(OB_SUCCESS, clear_tx_data(tx_data_table));
 | 
			
		||||
  ASSERT_EQ(OB_SUCCESS, clear_tx_data());
 | 
			
		||||
  scanner->~ObStoreRowIterator();
 | 
			
		||||
  handle1.reset();
 | 
			
		||||
  handle2.reset();
 | 
			
		||||
@ -1877,20 +1819,13 @@ TEST_F(TestMultiVersionMerge, test_merge_with_greater_multi_version_and_uncommit
 | 
			
		||||
  ASSERT_EQ(OB_SUCCESS, ls_svr->get_ls(ls_id, ls_handle, ObLSGetMod::STORAGE_MOD));
 | 
			
		||||
 | 
			
		||||
  ObTxTable *tx_table = nullptr;
 | 
			
		||||
  ObTxDataTable *tx_data_table = nullptr;
 | 
			
		||||
  ObTxTableGuard tx_table_guard;
 | 
			
		||||
  ls_handle.get_ls()->get_tx_table_guard(tx_table_guard);
 | 
			
		||||
  ASSERT_NE(nullptr, tx_table = tx_table_guard.get_tx_table());
 | 
			
		||||
  ASSERT_NE(nullptr, tx_data_table = tx_table->get_tx_data_table());
 | 
			
		||||
 | 
			
		||||
  ObTxData *tx_data = nullptr;
 | 
			
		||||
  transaction::ObTransID tx_id;
 | 
			
		||||
  for (int64_t i = 1; i <= 4; i++) {
 | 
			
		||||
    tx_id = i;
 | 
			
		||||
 | 
			
		||||
    ObTxDataGuard tx_data_guard;
 | 
			
		||||
    ASSERT_EQ(OB_SUCCESS, tx_data_table->alloc_tx_data(tx_data_guard));
 | 
			
		||||
    ASSERT_NE(nullptr, tx_data = tx_data_guard.tx_data());
 | 
			
		||||
    ObTxData *tx_data = new ObTxData();
 | 
			
		||||
    transaction::ObTransID tx_id = i;
 | 
			
		||||
 | 
			
		||||
    // fill in data
 | 
			
		||||
    tx_data->tx_id_ = tx_id;
 | 
			
		||||
@ -1899,7 +1834,8 @@ TEST_F(TestMultiVersionMerge, test_merge_with_greater_multi_version_and_uncommit
 | 
			
		||||
    tx_data->end_scn_ = tx_data->commit_version_;
 | 
			
		||||
    tx_data->state_ = ObTxData::COMMIT;
 | 
			
		||||
 | 
			
		||||
    ASSERT_EQ(OB_SUCCESS, tx_data_table->insert(tx_data));
 | 
			
		||||
    ASSERT_EQ(OB_SUCCESS, tx_table->insert(tx_data));
 | 
			
		||||
    delete tx_data;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  prepare_merge_context(MINOR_MERGE, false, trans_version_range, merge_context);
 | 
			
		||||
@ -1929,7 +1865,7 @@ TEST_F(TestMultiVersionMerge, test_merge_with_greater_multi_version_and_uncommit
 | 
			
		||||
  ObMockDirectReadIterator sstable_iter;
 | 
			
		||||
  ASSERT_EQ(OB_SUCCESS, sstable_iter.init(scanner, allocator_, full_read_info_));
 | 
			
		||||
  ASSERT_TRUE(res_iter.equals(sstable_iter, true));
 | 
			
		||||
  ASSERT_EQ(OB_SUCCESS, clear_tx_data(tx_data_table));
 | 
			
		||||
  ASSERT_EQ(OB_SUCCESS, clear_tx_data());
 | 
			
		||||
  scanner->~ObStoreRowIterator();
 | 
			
		||||
  handle1.reset();
 | 
			
		||||
  handle2.reset();
 | 
			
		||||
@ -2006,20 +1942,13 @@ TEST_F(TestMultiVersionMerge, test_merge_with_ghost_row)
 | 
			
		||||
  ASSERT_EQ(OB_SUCCESS, ls_svr->get_ls(ls_id, ls_handle, ObLSGetMod::STORAGE_MOD));
 | 
			
		||||
 | 
			
		||||
  ObTxTable *tx_table = nullptr;
 | 
			
		||||
  ObTxDataTable *tx_data_table = nullptr;
 | 
			
		||||
  ObTxTableGuard tx_table_guard;
 | 
			
		||||
  ls_handle.get_ls()->get_tx_table_guard(tx_table_guard);
 | 
			
		||||
  ASSERT_NE(nullptr, tx_table = tx_table_guard.get_tx_table());
 | 
			
		||||
  ASSERT_NE(nullptr, tx_data_table = tx_table->get_tx_data_table());
 | 
			
		||||
 | 
			
		||||
  ObTxData *tx_data = nullptr;
 | 
			
		||||
  transaction::ObTransID tx_id;
 | 
			
		||||
  for (int64_t i = 1; i <= 4; i++) {
 | 
			
		||||
    tx_id = i;
 | 
			
		||||
 | 
			
		||||
    ObTxDataGuard tx_data_guard;
 | 
			
		||||
    ASSERT_EQ(OB_SUCCESS, tx_data_table->alloc_tx_data(tx_data_guard));
 | 
			
		||||
    ASSERT_NE(nullptr, tx_data = tx_data_guard.tx_data());
 | 
			
		||||
    ObTxData *tx_data = new ObTxData();
 | 
			
		||||
    transaction::ObTransID tx_id = i;
 | 
			
		||||
 | 
			
		||||
    // fill in data
 | 
			
		||||
    tx_data->tx_id_ = tx_id;
 | 
			
		||||
@ -2035,7 +1964,8 @@ TEST_F(TestMultiVersionMerge, test_merge_with_ghost_row)
 | 
			
		||||
      tx_data->state_ = ObTxData::COMMIT;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    ASSERT_EQ(OB_SUCCESS, tx_data_table->insert(tx_data));
 | 
			
		||||
    ASSERT_EQ(OB_SUCCESS, tx_table->insert(tx_data));
 | 
			
		||||
    delete tx_data;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ObVersionRange trans_version_range;
 | 
			
		||||
@ -2070,7 +2000,7 @@ TEST_F(TestMultiVersionMerge, test_merge_with_ghost_row)
 | 
			
		||||
  ObMockDirectReadIterator sstable_iter;
 | 
			
		||||
  ASSERT_EQ(OB_SUCCESS, sstable_iter.init(scanner, allocator_, full_read_info_));
 | 
			
		||||
  ASSERT_TRUE(res_iter.equals(sstable_iter, true));
 | 
			
		||||
  ASSERT_EQ(OB_SUCCESS, clear_tx_data(tx_data_table));
 | 
			
		||||
  ASSERT_EQ(OB_SUCCESS, clear_tx_data());
 | 
			
		||||
  scanner->~ObStoreRowIterator();
 | 
			
		||||
  handle1.reset();
 | 
			
		||||
  handle2.reset();
 | 
			
		||||
@ -2413,20 +2343,13 @@ TEST_F(TestMultiVersionMerge, rowkey_cross_macro_with_last_shadow_version_less_t
 | 
			
		||||
  ASSERT_EQ(OB_SUCCESS, ls_svr->get_ls(ls_id, ls_handle, ObLSGetMod::STORAGE_MOD));
 | 
			
		||||
 | 
			
		||||
  ObTxTable *tx_table = nullptr;
 | 
			
		||||
  ObTxDataTable *tx_data_table = nullptr;
 | 
			
		||||
  ObTxTableGuard tx_table_guard;
 | 
			
		||||
  ls_handle.get_ls()->get_tx_table_guard(tx_table_guard);
 | 
			
		||||
  ASSERT_NE(nullptr, tx_table = tx_table_guard.get_tx_table());
 | 
			
		||||
  ASSERT_NE(nullptr, tx_data_table = tx_table->get_tx_data_table());
 | 
			
		||||
 | 
			
		||||
  ObTxData *tx_data = nullptr;
 | 
			
		||||
  transaction::ObTransID tx_id;
 | 
			
		||||
  for (int64_t i = 1; i < 3; i++) {
 | 
			
		||||
    tx_id = i;
 | 
			
		||||
 | 
			
		||||
    ObTxDataGuard tx_data_guard;
 | 
			
		||||
    ASSERT_EQ(OB_SUCCESS, tx_data_table->alloc_tx_data(tx_data_guard));
 | 
			
		||||
    ASSERT_NE(nullptr, tx_data = tx_data_guard.tx_data());
 | 
			
		||||
    ObTxData *tx_data = new ObTxData();
 | 
			
		||||
    transaction::ObTransID tx_id = i;
 | 
			
		||||
 | 
			
		||||
    // fill in data
 | 
			
		||||
    tx_data->tx_id_ = tx_id;
 | 
			
		||||
@ -2435,7 +2358,8 @@ TEST_F(TestMultiVersionMerge, rowkey_cross_macro_with_last_shadow_version_less_t
 | 
			
		||||
    tx_data->end_scn_ = tx_data->commit_version_;
 | 
			
		||||
    tx_data->state_ = ObTxData::COMMIT;
 | 
			
		||||
 | 
			
		||||
    ASSERT_EQ(OB_SUCCESS, tx_data_table->insert(tx_data));
 | 
			
		||||
    ASSERT_EQ(OB_SUCCESS, tx_table->insert(tx_data));
 | 
			
		||||
    delete tx_data;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ObVersionRange trans_version_range;
 | 
			
		||||
@ -2473,7 +2397,7 @@ TEST_F(TestMultiVersionMerge, rowkey_cross_macro_with_last_shadow_version_less_t
 | 
			
		||||
  ObMockDirectReadIterator sstable_iter;
 | 
			
		||||
  ASSERT_EQ(OB_SUCCESS, sstable_iter.init(scanner, allocator_, full_read_info_));
 | 
			
		||||
  ASSERT_TRUE(res_iter.equals(sstable_iter, true/*cmp multi version row flag*/));
 | 
			
		||||
  ASSERT_EQ(OB_SUCCESS, clear_tx_data(tx_data_table));
 | 
			
		||||
  ASSERT_EQ(OB_SUCCESS, clear_tx_data());
 | 
			
		||||
  scanner->~ObStoreRowIterator();
 | 
			
		||||
  handle1.reset();
 | 
			
		||||
  handle2.reset();
 | 
			
		||||
@ -2643,26 +2567,22 @@ TEST_F(TestMultiVersionMerge, rowkey_cross_macro_without_open_next_macro)
 | 
			
		||||
  ASSERT_EQ(OB_SUCCESS, ls_svr->get_ls(ls_id, ls_handle, ObLSGetMod::STORAGE_MOD));
 | 
			
		||||
 | 
			
		||||
  ObTxTable *tx_table = nullptr;
 | 
			
		||||
  ObTxDataTable *tx_data_table = nullptr;
 | 
			
		||||
  ObTxTableGuard tx_table_guard;
 | 
			
		||||
  ls_handle.get_ls()->get_tx_table_guard(tx_table_guard);
 | 
			
		||||
  ASSERT_NE(nullptr, tx_table = tx_table_guard.get_tx_table());
 | 
			
		||||
  ASSERT_NE(nullptr, tx_data_table = tx_table->get_tx_data_table());
 | 
			
		||||
 | 
			
		||||
  ObTxData *tx_data = nullptr;
 | 
			
		||||
  transaction::ObTransID tx_id;
 | 
			
		||||
  for (int64_t i = 1; i < 3; i++) {
 | 
			
		||||
    tx_id = i;
 | 
			
		||||
    ObTxDataGuard tx_data_guard;
 | 
			
		||||
    ASSERT_EQ(OB_SUCCESS, tx_data_table->alloc_tx_data(tx_data_guard));
 | 
			
		||||
    ASSERT_NE(nullptr, tx_data = tx_data_guard.tx_data());
 | 
			
		||||
    ObTxData *tx_data = new ObTxData();
 | 
			
		||||
    transaction::ObTransID tx_id = i;
 | 
			
		||||
 | 
			
		||||
    // fill in data
 | 
			
		||||
    tx_data->tx_id_ = tx_id;
 | 
			
		||||
    tx_data->commit_version_.convert_for_tx(INT64_MAX);
 | 
			
		||||
    tx_data->start_scn_.convert_for_tx(i);
 | 
			
		||||
    tx_data->end_scn_.convert_for_tx(100);
 | 
			
		||||
    tx_data->state_ = ObTxData::ABORT;
 | 
			
		||||
    ASSERT_EQ(OB_SUCCESS, tx_data_table->insert(tx_data));
 | 
			
		||||
    ASSERT_EQ(OB_SUCCESS, tx_table->insert(tx_data));
 | 
			
		||||
    delete tx_data;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ObVersionRange trans_version_range;
 | 
			
		||||
@ -2700,7 +2620,7 @@ TEST_F(TestMultiVersionMerge, rowkey_cross_macro_without_open_next_macro)
 | 
			
		||||
  ObMockDirectReadIterator sstable_iter;
 | 
			
		||||
  ASSERT_EQ(OB_SUCCESS, sstable_iter.init(scanner, allocator_, full_read_info_));
 | 
			
		||||
  ASSERT_TRUE(res_iter.equals(sstable_iter, true/*cmp multi version row flag*/));
 | 
			
		||||
  ASSERT_EQ(OB_SUCCESS, clear_tx_data(tx_data_table));
 | 
			
		||||
  ASSERT_EQ(OB_SUCCESS, clear_tx_data());
 | 
			
		||||
  scanner->~ObStoreRowIterator();
 | 
			
		||||
  handle1.reset();
 | 
			
		||||
  handle2.reset();
 | 
			
		||||
@ -2889,20 +2809,13 @@ TEST_F(TestMultiVersionMerge, test_merge_base_iter_have_ghost_row)
 | 
			
		||||
  ASSERT_EQ(OB_SUCCESS, ls_svr->get_ls(ls_id, ls_handle, ObLSGetMod::STORAGE_MOD));
 | 
			
		||||
 | 
			
		||||
  ObTxTable *tx_table = nullptr;
 | 
			
		||||
  ObTxDataTable *tx_data_table = nullptr;
 | 
			
		||||
  ObTxTableGuard tx_table_guard;
 | 
			
		||||
  ls_handle.get_ls()->get_tx_table_guard(tx_table_guard);
 | 
			
		||||
  ASSERT_NE(nullptr, tx_table = tx_table_guard.get_tx_table());
 | 
			
		||||
  ASSERT_NE(nullptr, tx_data_table = tx_table->get_tx_data_table());
 | 
			
		||||
 | 
			
		||||
  ObTxData *tx_data = nullptr;
 | 
			
		||||
  transaction::ObTransID tx_id;
 | 
			
		||||
  for (int64_t i = 1; i <= 4; i++) {
 | 
			
		||||
    tx_id = i;
 | 
			
		||||
 | 
			
		||||
    ObTxDataGuard tx_data_guard;
 | 
			
		||||
    ASSERT_EQ(OB_SUCCESS, tx_data_table->alloc_tx_data(tx_data_guard));
 | 
			
		||||
    ASSERT_NE(nullptr, tx_data = tx_data_guard.tx_data());
 | 
			
		||||
    ObTxData *tx_data = new ObTxData();
 | 
			
		||||
    transaction::ObTransID tx_id = i;
 | 
			
		||||
 | 
			
		||||
    // fill in data
 | 
			
		||||
    tx_data->tx_id_ = tx_id;
 | 
			
		||||
@ -2918,7 +2831,9 @@ TEST_F(TestMultiVersionMerge, test_merge_base_iter_have_ghost_row)
 | 
			
		||||
      tx_data->state_ = ObTxData::COMMIT;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    ASSERT_EQ(OB_SUCCESS, tx_data_table->insert(tx_data));
 | 
			
		||||
 | 
			
		||||
    ASSERT_EQ(OB_SUCCESS, tx_table->insert(tx_data));
 | 
			
		||||
    delete tx_data;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ObVersionRange trans_version_range;
 | 
			
		||||
@ -2954,7 +2869,7 @@ TEST_F(TestMultiVersionMerge, test_merge_base_iter_have_ghost_row)
 | 
			
		||||
  ObMockDirectReadIterator sstable_iter;
 | 
			
		||||
  ASSERT_EQ(OB_SUCCESS, sstable_iter.init(scanner, allocator_, full_read_info_));
 | 
			
		||||
  ASSERT_TRUE(res_iter.equals(sstable_iter, true));
 | 
			
		||||
  ASSERT_EQ(OB_SUCCESS, clear_tx_data(tx_data_table));
 | 
			
		||||
  ASSERT_EQ(OB_SUCCESS, clear_tx_data());
 | 
			
		||||
  scanner->~ObStoreRowIterator();
 | 
			
		||||
  handle1.reset();
 | 
			
		||||
  handle2.reset();
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user