[scn] scn for memtable

This commit is contained in:
Handora
2022-11-28 02:02:38 +00:00
committed by ob-robot
parent a4c9f3e4d4
commit e77375018e
38 changed files with 416 additions and 507 deletions

View File

@ -328,7 +328,9 @@ TEST_F(TestMemtable, mt_set)
print(mvcc_row);
EXPECT_EQ(2, rg.mem_ctx_.trans_mgr_.get_main_list_length());
EXPECT_EQ(OB_SUCCESS, rg.mem_ctx_.do_trans_end(true, 1000, 1000, 0));
palf::SCN val_1000;
val_1000.convert_for_lsn_allocator(1000);
EXPECT_EQ(OB_SUCCESS, rg.mem_ctx_.do_trans_end(true, val_1000, val_1000, 0));
print(mvcc_row);
}
@ -347,13 +349,17 @@ TEST_F(TestMemtable, conflict)
EXPECT_EQ(OB_SUCCESS, rg2.init(2, this));
EXPECT_EQ(OB_ERR_EXCLUSIVE_LOCK_CONFLICT, rg2.write(1, 3, mt));
EXPECT_EQ(OB_SUCCESS, rg.mem_ctx_.do_trans_end(true, 1000, 1000, 0));
palf::SCN val_1000;
val_1000.convert_for_lsn_allocator(1000);
EXPECT_EQ(OB_SUCCESS, rg.mem_ctx_.do_trans_end(true, val_1000, val_1000, 0));
EXPECT_EQ(OB_TRANSACTION_SET_VIOLATION, rg2.write(1, 3, mt, 900));
EXPECT_EQ(OB_SUCCESS, rg2.write(1, 3, mt, 1000));
EXPECT_EQ(OB_SUCCESS, rg2.write(1, 4, mt, 1001));
EXPECT_EQ(OB_SUCCESS, rg2.mem_ctx_.do_trans_end(true, 1002, 1002, 0));
palf::SCN val_1002;
val_1002.convert_for_lsn_allocator(1002);
EXPECT_EQ(OB_SUCCESS, rg2.mem_ctx_.do_trans_end(true, val_1002, val_1002, 0));
print(mvcc_row);
}
@ -367,22 +373,24 @@ TEST_F(TestMemtable, except)
EXPECT_EQ(OB_SUCCESS, rg.init(1, this));
ObMvccRow *mvcc_row = nullptr;
EXPECT_EQ(OB_SUCCESS, rg.write(1, 2, mt, mvcc_row, 1000));
EXPECT_EQ(OB_SUCCESS, rg.mem_ctx_.do_trans_end(true, 900, 900, 0));
palf::SCN val_900;
val_900.convert_for_lsn_allocator(900);
EXPECT_EQ(OB_SUCCESS, rg.write(1, 2, mt, mvcc_row, 1000));
EXPECT_EQ(OB_SUCCESS, rg.mem_ctx_.do_trans_end(true, val_900, val_900, 0));
RunCtxGuard rg2;
EXPECT_EQ(OB_SUCCESS, rg2.init(2, this));
EXPECT_EQ(OB_SUCCESS, rg2.write(1, 3, mt, 1000));
EXPECT_EQ(OB_SUCCESS, rg2.mem_ctx_.do_trans_end(true, 900, 900, 0));
EXPECT_EQ(OB_SUCCESS, rg2.mem_ctx_.do_trans_end(true, val_900, val_900, 0));
print(mvcc_row);
RunCtxGuard rg3;
EXPECT_EQ(OB_SUCCESS, rg3.init(3, this));
EXPECT_EQ(OB_SUCCESS, rg3.write(1, 4, mt, 900));
EXPECT_EQ(OB_SUCCESS, rg3.mem_ctx_.do_trans_end(true, 900, 900, 0));
EXPECT_EQ(OB_SUCCESS, rg3.mem_ctx_.do_trans_end(true, val_900, val_900, 0));
print(mvcc_row);
}
@ -395,11 +403,14 @@ TEST_F(TestMemtable, multi_key)
RunCtxGuard rg;
EXPECT_EQ(OB_SUCCESS, rg.init(1, this));
palf::SCN val_900;
val_900.convert_for_lsn_allocator(900);
ObMvccRow *mvcc_row = nullptr;
ObMvccRow *mvcc_row2 = nullptr;
EXPECT_EQ(OB_SUCCESS, rg.write(1, 10, mt, mvcc_row, 1000));
EXPECT_EQ(OB_SUCCESS, rg.write(2, 20, mt, mvcc_row2, 1000));
EXPECT_EQ(OB_SUCCESS, rg.mem_ctx_.do_trans_end(true, 900, 900, 0));
EXPECT_EQ(OB_SUCCESS, rg.mem_ctx_.do_trans_end(true, val_900, val_900, 0));
print(mvcc_row);
print(mvcc_row2);
@ -409,7 +420,7 @@ TEST_F(TestMemtable, multi_key)
EXPECT_EQ(OB_SUCCESS, rg2.write(1, 100, mt, 1000));
EXPECT_EQ(OB_SUCCESS, rg2.write(2, 200, mt, 1000));
EXPECT_EQ(OB_SUCCESS, rg2.mem_ctx_.do_trans_end(true, 900, 900, 0));
EXPECT_EQ(OB_SUCCESS, rg2.mem_ctx_.do_trans_end(true, val_900, val_900, 0));
print(mvcc_row);
print(mvcc_row2);
}

View File

@ -305,7 +305,9 @@ int TestCompactionPolicy::mock_memtable(
LOG_WARN("add to data_checkpoint failed", K(ret), KPC(memtable));
mt_mgr->clean_tail_memtable_();
} else if (palf::OB_MAX_SCN_TS_NS != end_border) { // frozen memtable
memtable->snapshot_version_ = snapshot_version;
palf::SCN snapshot_scn;
snapshot_scn.convert_for_lsn_allocator(snapshot_version);
memtable->snapshot_version_ = snapshot_scn;
memtable->write_ref_cnt_ = 0;
memtable->unsynced_cnt_ = 0;
memtable->is_tablet_freeze_ = true;

View File

@ -218,16 +218,16 @@ int TestDmlCommon::create_data_tablet(
} else {
transaction::ObMulSourceDataNotifyArg trans_flags;
trans_flags.tx_id_ = 123;
trans_flags.log_ts_ = -1;
trans_flags.scn_ = palf::SCN::invalid_scn();
trans_flags.for_replay_ = false;
ObLS *ls = ls_handle.get_ls();
if (OB_FAIL(ls->get_tablet_svr()->on_prepare_create_tablets(arg, trans_flags))) {
STORAGE_LOG(WARN, "failed to prepare create tablets", K(ret), K(arg));
} else if (FALSE_IT(trans_flags.log_ts_ = INT64_MAX - 100)) {
} else if (FALSE_IT(trans_flags.scn_ = palf::SCN::minus(palf::SCN::max_scn(), 100))) {
} else if (OB_FAIL(ls->get_tablet_svr()->on_redo_create_tablets(arg, trans_flags))) {
STORAGE_LOG(WARN, "failed to redo create tablets", K(ret), K(arg));
} else if (FALSE_IT(++trans_flags.log_ts_)) {
} else if (FALSE_IT(trans_flags.scn_ = palf::SCN::plus(trans_flags.scn_, 1))) {
} else if (OB_FAIL(ls->get_tablet_svr()->on_commit_create_tablets(arg, trans_flags))) {
STORAGE_LOG(WARN, "failed to commit create tablets", K(ret), K(arg));
}

View File

@ -77,16 +77,16 @@ int TestLobCommon::create_data_tablet(
} else {
transaction::ObMulSourceDataNotifyArg trans_flags;
trans_flags.tx_id_ = 123;
trans_flags.log_ts_ = -1;
trans_flags.scn_ = palf::SCN::invalid_scn();
trans_flags.for_replay_ = false;
ObLS *ls = ls_handle.get_ls();
if (OB_FAIL(ls->get_tablet_svr()->on_prepare_create_tablets(arg, trans_flags))) {
STORAGE_LOG(WARN, "failed to prepare create tablets", K(ret), K(arg));
} else if (FALSE_IT(trans_flags.log_ts_ = INT64_MAX - 100)) {
} else if (FALSE_IT(trans_flags.scn_ = palf::SCN::minus(palf::SCN::max_scn(), 100))) {
} else if (OB_FAIL(ls->get_tablet_svr()->on_redo_create_tablets(arg, trans_flags))) {
STORAGE_LOG(WARN, "failed to redo create tablets", K(ret), K(arg));
} else if (FALSE_IT(++trans_flags.log_ts_)) {
} else if (FALSE_IT(trans_flags.scn_ = palf::SCN::plus(trans_flags.scn_, 1))) {
} else if (OB_FAIL(ls->get_tablet_svr()->on_commit_create_tablets(arg, trans_flags))) {
STORAGE_LOG(WARN, "failed to commit create tablets", K(ret), K(arg));
}

View File

@ -36,15 +36,15 @@ int TestTabletHelper::create_tablet(ObLSTabletService &ls_tablet_svr, obrpc::ObB
int ret = common::OB_SUCCESS;
transaction::ObMulSourceDataNotifyArg trans_flags;
trans_flags.tx_id_ = 123;
trans_flags.log_ts_ = -1;
trans_flags.scn_ = palf::SCN::invalid_scn();
trans_flags.for_replay_ = false;
if (OB_FAIL(ls_tablet_svr.on_prepare_create_tablets(arg, trans_flags))) {
STORAGE_LOG(WARN, "failed to prepare create tablets", K(ret), K(arg));
} else if (FALSE_IT(trans_flags.log_ts_ = palf::OB_MAX_SCN_TS_NS - 100)) {
} else if (FALSE_IT(trans_flags.scn_ = palf::SCN::minus(palf::SCN::max_scn(), 100))) {
} else if (OB_FAIL(ls_tablet_svr.on_redo_create_tablets(arg, trans_flags))) {
STORAGE_LOG(WARN, "failed to redo create tablets", K(ret), K(arg));
} else if (FALSE_IT(++trans_flags.log_ts_)) {
} else if (FALSE_IT(trans_flags.scn_ = palf::SCN::plus(trans_flags.scn_, 1))) {
} else if (OB_FAIL(ls_tablet_svr.on_commit_create_tablets(arg, trans_flags))) {
STORAGE_LOG(WARN, "failed to commit create tablets", K(ret), K(arg));
}