[BugFix] Fix sanity core of __all_virtual_minor_freeze_info
This commit is contained in:
		@ -70,6 +70,7 @@ public:
 | 
				
			|||||||
  void tablet_freeze_for_replace_tablet_meta();
 | 
					  void tablet_freeze_for_replace_tablet_meta();
 | 
				
			||||||
  void insert_and_freeze();
 | 
					  void insert_and_freeze();
 | 
				
			||||||
  void empty_memtable_flush();
 | 
					  void empty_memtable_flush();
 | 
				
			||||||
 | 
					  void all_virtual_minor_freeze_info();
 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
  int insert_thread_num_ = 3;
 | 
					  int insert_thread_num_ = 3;
 | 
				
			||||||
  int insert_num_ = 200000;
 | 
					  int insert_num_ = 200000;
 | 
				
			||||||
@ -141,6 +142,26 @@ void ObMinorFreezeTest::get_tablet_id_and_ls_id()
 | 
				
			|||||||
  ASSERT_EQ(true, ls_id_.is_valid());
 | 
					  ASSERT_EQ(true, ls_id_.is_valid());
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ObMinorFreezeTest::all_virtual_minor_freeze_info()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  int ret = OB_SUCCESS;
 | 
				
			||||||
 | 
					  common::ObMySQLProxy &sql_proxy = get_curr_simple_server().get_sql_proxy();
 | 
				
			||||||
 | 
					  const int64_t start_time = ObTimeUtility::current_time();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  OB_LOG(INFO, "test __all_virtual_minor_freeze_info");
 | 
				
			||||||
 | 
					  while (ObTimeUtility::current_time() - start_time <= freeze_duration_) {
 | 
				
			||||||
 | 
					    ObSqlString sql;
 | 
				
			||||||
 | 
					    ASSERT_EQ(OB_SUCCESS, sql.assign_fmt("select * from oceanbase.__all_virtual_minor_freeze_info where ls_id = %ld", ls_id_.id()));
 | 
				
			||||||
 | 
					    SMART_VAR(ObMySQLProxy::MySQLResult, res) {
 | 
				
			||||||
 | 
					      ASSERT_EQ(OB_SUCCESS, sql_proxy.read(res, sql.ptr()));
 | 
				
			||||||
 | 
					      sqlclient::ObMySQLResult *result = res.get_result();
 | 
				
			||||||
 | 
					      ASSERT_NE(nullptr, result);
 | 
				
			||||||
 | 
					      ASSERT_EQ(OB_SUCCESS, result->next());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ObMinorFreezeTest::get_ls()
 | 
					void ObMinorFreezeTest::get_ls()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  OB_LOG(INFO, "get_ls");
 | 
					  OB_LOG(INFO, "get_ls");
 | 
				
			||||||
 | 
				
			|||||||
@ -108,6 +108,7 @@ int ObAllVirtualMinorFreezeInfo::process_curr_tenant(ObNewRow *&row)
 | 
				
			|||||||
  int ret = OB_SUCCESS;
 | 
					  int ret = OB_SUCCESS;
 | 
				
			||||||
  ObLS *ls = nullptr;
 | 
					  ObLS *ls = nullptr;
 | 
				
			||||||
  ObFreezer *freezer = nullptr;
 | 
					  ObFreezer *freezer = nullptr;
 | 
				
			||||||
 | 
					  ObFreezerStat freeze_stat;
 | 
				
			||||||
  if (NULL == allocator_) {
 | 
					  if (NULL == allocator_) {
 | 
				
			||||||
    ret = OB_NOT_INIT;
 | 
					    ret = OB_NOT_INIT;
 | 
				
			||||||
    SERVER_LOG(WARN, "allocator_ shouldn't be NULL", K(allocator_), K(ret));
 | 
					    SERVER_LOG(WARN, "allocator_ shouldn't be NULL", K(allocator_), K(ret));
 | 
				
			||||||
@ -122,8 +123,10 @@ int ObAllVirtualMinorFreezeInfo::process_curr_tenant(ObNewRow *&row)
 | 
				
			|||||||
    ret = OB_ERR_UNEXPECTED;
 | 
					    ret = OB_ERR_UNEXPECTED;
 | 
				
			||||||
    SERVER_LOG(WARN, "ls shouldn't NULL here", K(ret));
 | 
					    SERVER_LOG(WARN, "ls shouldn't NULL here", K(ret));
 | 
				
			||||||
  } else if (FALSE_IT(freezer = ls->get_freezer())) {
 | 
					  } else if (FALSE_IT(freezer = ls->get_freezer())) {
 | 
				
			||||||
  } else if (freezer->get_stat().is_valid()) {
 | 
					  } else if (!(freezer->get_stat().is_valid())) {
 | 
				
			||||||
    ObFreezerStat& freeze_stat = freezer->get_stat();
 | 
					  } else if (OB_FAIL(freezer->get_stat().deep_copy_to(freeze_stat))) {
 | 
				
			||||||
 | 
					    SERVER_LOG(WARN, "fail to deep copy", K(ret));
 | 
				
			||||||
 | 
					  } else {
 | 
				
			||||||
    int64_t freeze_clock = 0;
 | 
					    int64_t freeze_clock = 0;
 | 
				
			||||||
    const int64_t col_count = output_column_ids_.count();
 | 
					    const int64_t col_count = output_column_ids_.count();
 | 
				
			||||||
    for (int64_t i = 0; OB_SUCC(ret) && i < col_count; ++i) {
 | 
					    for (int64_t i = 0; OB_SUCC(ret) && i < col_count; ++i) {
 | 
				
			||||||
@ -153,37 +156,37 @@ int ObAllVirtualMinorFreezeInfo::process_curr_tenant(ObNewRow *&row)
 | 
				
			|||||||
          break;
 | 
					          break;
 | 
				
			||||||
        case OB_APP_MIN_COLUMN_ID + 4:
 | 
					        case OB_APP_MIN_COLUMN_ID + 4:
 | 
				
			||||||
          // tablet_id
 | 
					          // tablet_id
 | 
				
			||||||
          cur_row_.cells_[i].set_int(freeze_stat.tablet_id_.id());
 | 
					          cur_row_.cells_[i].set_int(freeze_stat.get_tablet_id().id());
 | 
				
			||||||
          break;
 | 
					          break;
 | 
				
			||||||
        case OB_APP_MIN_COLUMN_ID + 5:
 | 
					        case OB_APP_MIN_COLUMN_ID + 5:
 | 
				
			||||||
          // is_force
 | 
					          // is_force
 | 
				
			||||||
          cur_row_.cells_[i].set_varchar(freeze_stat.is_force_ ? "YES" : "NO");
 | 
					          cur_row_.cells_[i].set_varchar(freeze_stat.get_is_force() ? "YES" : "NO");
 | 
				
			||||||
          cur_row_.cells_[i].set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset()));
 | 
					          cur_row_.cells_[i].set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset()));
 | 
				
			||||||
          break;
 | 
					          break;
 | 
				
			||||||
        case OB_APP_MIN_COLUMN_ID + 6:
 | 
					        case OB_APP_MIN_COLUMN_ID + 6:
 | 
				
			||||||
          // freeze_clock
 | 
					          // freeze_clock
 | 
				
			||||||
          freeze_clock = freezer->get_freeze_clock();
 | 
					          freeze_clock = freeze_stat.get_freeze_clock();
 | 
				
			||||||
          cur_row_.cells_[i].set_int(freeze_clock);
 | 
					          cur_row_.cells_[i].set_int(freeze_clock);
 | 
				
			||||||
          break;
 | 
					          break;
 | 
				
			||||||
        case OB_APP_MIN_COLUMN_ID + 7:
 | 
					        case OB_APP_MIN_COLUMN_ID + 7:
 | 
				
			||||||
          // freeze_snapshot_version
 | 
					          // freeze_snapshot_version
 | 
				
			||||||
          cur_row_.cells_[i].set_int(freezer->get_freeze_snapshot_version().get_val_for_inner_table_field());
 | 
					          cur_row_.cells_[i].set_int(freeze_stat.get_freeze_snapshot_version().get_val_for_inner_table_field());
 | 
				
			||||||
          break;
 | 
					          break;
 | 
				
			||||||
        case OB_APP_MIN_COLUMN_ID + 8:
 | 
					        case OB_APP_MIN_COLUMN_ID + 8:
 | 
				
			||||||
          // start_time
 | 
					          // start_time
 | 
				
			||||||
          cur_row_.cells_[i].set_timestamp(freeze_stat.start_time_);
 | 
					          cur_row_.cells_[i].set_timestamp(freeze_stat.get_start_time());
 | 
				
			||||||
          break;
 | 
					          break;
 | 
				
			||||||
        case OB_APP_MIN_COLUMN_ID + 9:
 | 
					        case OB_APP_MIN_COLUMN_ID + 9:
 | 
				
			||||||
          // end_time
 | 
					          // end_time
 | 
				
			||||||
          cur_row_.cells_[i].set_timestamp(freeze_stat.end_time_);
 | 
					          cur_row_.cells_[i].set_timestamp(freeze_stat.get_end_time());
 | 
				
			||||||
          break;
 | 
					          break;
 | 
				
			||||||
        case OB_APP_MIN_COLUMN_ID + 10:
 | 
					        case OB_APP_MIN_COLUMN_ID + 10:
 | 
				
			||||||
          // ret_code
 | 
					          // ret_code
 | 
				
			||||||
          cur_row_.cells_[i].set_int(freeze_stat.ret_code_);
 | 
					          cur_row_.cells_[i].set_int(freeze_stat.get_ret_code());
 | 
				
			||||||
          break;
 | 
					          break;
 | 
				
			||||||
        case OB_APP_MIN_COLUMN_ID + 11:
 | 
					        case OB_APP_MIN_COLUMN_ID + 11:
 | 
				
			||||||
          // state
 | 
					          // state
 | 
				
			||||||
          switch (freeze_stat.state_) {
 | 
					          switch (freeze_stat.get_state()) {
 | 
				
			||||||
            case ObFreezeState::INVALID:
 | 
					            case ObFreezeState::INVALID:
 | 
				
			||||||
              cur_row_.cells_[i].set_varchar("INVALID");
 | 
					              cur_row_.cells_[i].set_varchar("INVALID");
 | 
				
			||||||
              break;
 | 
					              break;
 | 
				
			||||||
 | 
				
			|||||||
@ -100,13 +100,14 @@ ObFreezerStat::ObFreezerStat()
 | 
				
			|||||||
  : tablet_id_(),
 | 
					  : tablet_id_(),
 | 
				
			||||||
    is_force_(false),
 | 
					    is_force_(false),
 | 
				
			||||||
    state_(ObFreezeState::INVALID),
 | 
					    state_(ObFreezeState::INVALID),
 | 
				
			||||||
 | 
					    freeze_clock_(0),
 | 
				
			||||||
    start_time_(0),
 | 
					    start_time_(0),
 | 
				
			||||||
    end_time_(INT64_MAX),
 | 
					    end_time_(INT64_MAX),
 | 
				
			||||||
    ret_code_(-1),
 | 
					    ret_code_(-1),
 | 
				
			||||||
 | 
					    freeze_snapshot_version_(),
 | 
				
			||||||
    diagnose_info_(),
 | 
					    diagnose_info_(),
 | 
				
			||||||
    memtables_info_(),
 | 
					    memtables_info_(),
 | 
				
			||||||
    memtables_info_lock_(),
 | 
					    lock_()
 | 
				
			||||||
    diagnose_info_lock_()
 | 
					 | 
				
			||||||
{}
 | 
					{}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ObFreezerStat::~ObFreezerStat()
 | 
					ObFreezerStat::~ObFreezerStat()
 | 
				
			||||||
@ -116,21 +117,22 @@ ObFreezerStat::~ObFreezerStat()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void ObFreezerStat::reset()
 | 
					void ObFreezerStat::reset()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  ObSpinLockGuard memtables_info_guard(memtables_info_lock_);
 | 
					  ObSpinLockGuard guard(lock_);
 | 
				
			||||||
  ObSpinLockGuard diagnose_info_guard(diagnose_info_lock_);
 | 
					 | 
				
			||||||
  tablet_id_.reset();
 | 
					  tablet_id_.reset();
 | 
				
			||||||
  is_force_ = false;
 | 
					  is_force_ = false;
 | 
				
			||||||
  state_ = ObFreezeState::INVALID;
 | 
					  state_ = ObFreezeState::INVALID;
 | 
				
			||||||
 | 
					  freeze_clock_ = 0;
 | 
				
			||||||
  start_time_ = 0;
 | 
					  start_time_ = 0;
 | 
				
			||||||
  end_time_ = INT64_MAX;
 | 
					  end_time_ = INT64_MAX;
 | 
				
			||||||
  ret_code_ = -1;
 | 
					  ret_code_ = -1;
 | 
				
			||||||
 | 
					  freeze_snapshot_version_.reset();
 | 
				
			||||||
  diagnose_info_.reset();
 | 
					  diagnose_info_.reset();
 | 
				
			||||||
  memtables_info_.reset();
 | 
					  memtables_info_.reset();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool ObFreezerStat::is_valid()
 | 
					bool ObFreezerStat::is_valid()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  return start_time_ > 0 && state_ > ObFreezeState::INVALID;
 | 
					  return get_start_time() > 0 && get_state() > ObFreezeState::INVALID;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int ObFreezerStat::add_memtable_info(const ObTabletID &tablet_id,
 | 
					int ObFreezerStat::add_memtable_info(const ObTabletID &tablet_id,
 | 
				
			||||||
@ -143,7 +145,7 @@ int ObFreezerStat::add_memtable_info(const ObTabletID &tablet_id,
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
  int ret = OB_SUCCESS;
 | 
					  int ret = OB_SUCCESS;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  ObSpinLockGuard guard(memtables_info_lock_);
 | 
					  ObSpinLockGuard guard(lock_);
 | 
				
			||||||
  if (memtables_info_.count() < FROZEN_MEMTABLE_INFO_CNT) {
 | 
					  if (memtables_info_.count() < FROZEN_MEMTABLE_INFO_CNT) {
 | 
				
			||||||
    ObFrozenMemtableInfo memtable_info(tablet_id,
 | 
					    ObFrozenMemtableInfo memtable_info(tablet_id,
 | 
				
			||||||
                                       start_scn,
 | 
					                                       start_scn,
 | 
				
			||||||
@ -164,7 +166,7 @@ int ObFreezerStat::remove_memtable_info(const ObTabletID &tablet_id)
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
  int ret = OB_SUCCESS;
 | 
					  int ret = OB_SUCCESS;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  ObSpinLockGuard guard(memtables_info_lock_);
 | 
					  ObSpinLockGuard guard(lock_);
 | 
				
			||||||
  for (int i = 0; i < memtables_info_.count(); ++i) {
 | 
					  for (int i = 0; i < memtables_info_.count(); ++i) {
 | 
				
			||||||
    if (tablet_id == memtables_info_[i].tablet_id_ && OB_FAIL(memtables_info_.remove(i))) {
 | 
					    if (tablet_id == memtables_info_[i].tablet_id_ && OB_FAIL(memtables_info_.remove(i))) {
 | 
				
			||||||
      TRANS_LOG(WARN, "fail to remove from memtable_info", K(ret), K(tablet_id));
 | 
					      TRANS_LOG(WARN, "fail to remove from memtable_info", K(ret), K(tablet_id));
 | 
				
			||||||
@ -179,7 +181,7 @@ int ObFreezerStat::get_memtables_info(common::ObSArray<ObFrozenMemtableInfo> &me
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
  int ret = OB_SUCCESS;
 | 
					  int ret = OB_SUCCESS;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  ObSpinLockGuard guard(memtables_info_lock_);
 | 
					  ObSpinLockGuard guard(lock_);
 | 
				
			||||||
  if (OB_FAIL(memtables_info.assign(memtables_info_))) {
 | 
					  if (OB_FAIL(memtables_info.assign(memtables_info_))) {
 | 
				
			||||||
    TRANS_LOG(WARN, "fail to assign", K(ret));
 | 
					    TRANS_LOG(WARN, "fail to assign", K(ret));
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
@ -187,17 +189,35 @@ int ObFreezerStat::get_memtables_info(common::ObSArray<ObFrozenMemtableInfo> &me
 | 
				
			|||||||
  return ret;
 | 
					  return ret;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ObFreezerStat::add_diagnose_info(const ObString &str)
 | 
					int ObFreezerStat::set_memtables_info(const common::ObSArray<ObFrozenMemtableInfo> &memtables_info)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  ObSpinLockGuard guard(diagnose_info_lock_);
 | 
					  int ret = OB_SUCCESS;
 | 
				
			||||||
  diagnose_info_.assign(str);
 | 
					
 | 
				
			||||||
 | 
					  ObSpinLockGuard guard(lock_);
 | 
				
			||||||
 | 
					  if (OB_FAIL(memtables_info_.assign(memtables_info))) {
 | 
				
			||||||
 | 
					    TRANS_LOG(WARN, "fail to assign", K(ret));
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return ret;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int ObFreezerStat::add_diagnose_info(const ObString &str)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  int ret = OB_SUCCESS;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  ObSpinLockGuard guard(lock_);
 | 
				
			||||||
 | 
					  if (OB_FAIL(diagnose_info_.assign(str))) {
 | 
				
			||||||
 | 
					    TRANS_LOG(WARN, "fail to add diagnose_info");
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return ret;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int ObFreezerStat::get_diagnose_info(ObStringHolder &diagnose_info)
 | 
					int ObFreezerStat::get_diagnose_info(ObStringHolder &diagnose_info)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  int ret = OB_SUCCESS;
 | 
					  int ret = OB_SUCCESS;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  ObSpinLockGuard guard(diagnose_info_lock_);
 | 
					  ObSpinLockGuard guard(lock_);
 | 
				
			||||||
  if (OB_FAIL(diagnose_info.assign(diagnose_info_))) {
 | 
					  if (OB_FAIL(diagnose_info.assign(diagnose_info_))) {
 | 
				
			||||||
    TRANS_LOG(WARN, "fail to assign diagnose_info", K(ret));
 | 
					    TRANS_LOG(WARN, "fail to assign diagnose_info", K(ret));
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
@ -205,6 +225,122 @@ int ObFreezerStat::get_diagnose_info(ObStringHolder &diagnose_info)
 | 
				
			|||||||
  return ret;
 | 
					  return ret;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ObFreezerStat::set_freeze_clock(const int64_t freeze_clock)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  ObSpinLockGuard guard(lock_);
 | 
				
			||||||
 | 
					  freeze_clock_ = freeze_clock;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int64_t ObFreezerStat::get_freeze_clock()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  ObSpinLockGuard guard(lock_);
 | 
				
			||||||
 | 
					  return freeze_clock_;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ObFreezerStat::set_tablet_id(const ObTabletID &tablet_id)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  ObSpinLockGuard guard(lock_);
 | 
				
			||||||
 | 
					  tablet_id_ = tablet_id;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ObTabletID ObFreezerStat::get_tablet_id()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  ObSpinLockGuard guard(lock_);
 | 
				
			||||||
 | 
					  return tablet_id_;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ObFreezerStat::set_is_force(bool is_force)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  ObSpinLockGuard guard(lock_);
 | 
				
			||||||
 | 
					  is_force_ = is_force;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool ObFreezerStat::get_is_force()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  ObSpinLockGuard guard(lock_);
 | 
				
			||||||
 | 
					  return is_force_;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ObFreezerStat::set_state(int state)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  ObSpinLockGuard guard(lock_);
 | 
				
			||||||
 | 
					  state_ = state;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int ObFreezerStat::get_state()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  ObSpinLockGuard guard(lock_);
 | 
				
			||||||
 | 
					  return state_;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ObFreezerStat::set_start_time(int64_t start_time)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  ObSpinLockGuard guard(lock_);
 | 
				
			||||||
 | 
					  start_time_ = start_time;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int64_t ObFreezerStat::get_start_time()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  ObSpinLockGuard guard(lock_);
 | 
				
			||||||
 | 
					  return start_time_;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ObFreezerStat::set_end_time(int64_t end_time)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  ObSpinLockGuard guard(lock_);
 | 
				
			||||||
 | 
					  end_time_ = end_time;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int64_t ObFreezerStat::get_end_time()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  ObSpinLockGuard guard(lock_);
 | 
				
			||||||
 | 
					  return end_time_;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ObFreezerStat::set_ret_code(int ret_code)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  ObSpinLockGuard guard(lock_);
 | 
				
			||||||
 | 
					  ret_code_ = ret_code;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int ObFreezerStat::get_ret_code()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  ObSpinLockGuard guard(lock_);
 | 
				
			||||||
 | 
					  return ret_code_;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ObFreezerStat::set_freeze_snapshot_version(const share::SCN &freeze_snapshot_version)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  ObSpinLockGuard guard(lock_);
 | 
				
			||||||
 | 
					  freeze_snapshot_version_ = freeze_snapshot_version;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					share::SCN ObFreezerStat::get_freeze_snapshot_version()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  ObSpinLockGuard guard(lock_);
 | 
				
			||||||
 | 
					  return freeze_snapshot_version_;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int ObFreezerStat::deep_copy_to(ObFreezerStat &other)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  int ret = OB_SUCCESS;
 | 
				
			||||||
 | 
					  ObSpinLockGuard guard(lock_);
 | 
				
			||||||
 | 
					  other.set_tablet_id(tablet_id_);
 | 
				
			||||||
 | 
					  other.set_is_force(is_force_);
 | 
				
			||||||
 | 
					  other.set_state(state_);
 | 
				
			||||||
 | 
					  other.set_freeze_clock(freeze_clock_);
 | 
				
			||||||
 | 
					  other.set_start_time(start_time_);
 | 
				
			||||||
 | 
					  other.set_end_time(end_time_);
 | 
				
			||||||
 | 
					  other.set_ret_code(ret_code_);
 | 
				
			||||||
 | 
					  other.set_freeze_snapshot_version(freeze_snapshot_version_);
 | 
				
			||||||
 | 
					  if (OB_FAIL(other.add_diagnose_info(diagnose_info_.get_ob_string()))) {
 | 
				
			||||||
 | 
					    TRANS_LOG(WARN, "fail to add diagnose_info", K(ret));
 | 
				
			||||||
 | 
					  } else if (OB_FAIL(other.set_memtables_info(memtables_info_))) {
 | 
				
			||||||
 | 
					    TRANS_LOG(WARN, "fail to set memtables_info", K(ret));
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  return ret;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ObFreezer::ObFreezer()
 | 
					ObFreezer::ObFreezer()
 | 
				
			||||||
  : freeze_flag_(0),
 | 
					  : freeze_flag_(0),
 | 
				
			||||||
    freeze_snapshot_version_(),
 | 
					    freeze_snapshot_version_(),
 | 
				
			||||||
@ -317,9 +453,7 @@ int ObFreezer::logstream_freeze(ObFuture<int> *result)
 | 
				
			|||||||
  SCN max_decided_scn;
 | 
					  SCN max_decided_scn;
 | 
				
			||||||
  share::ObLSID ls_id = get_ls_id();
 | 
					  share::ObLSID ls_id = get_ls_id();
 | 
				
			||||||
  FLOG_INFO("[Freezer] logstream_freeze start", K(ret), K(ls_id));
 | 
					  FLOG_INFO("[Freezer] logstream_freeze start", K(ret), K(ls_id));
 | 
				
			||||||
  stat_.reset();
 | 
					  int64_t start_time = ObTimeUtility::current_time();
 | 
				
			||||||
  stat_.start_time_ = ObTimeUtility::current_time();
 | 
					 | 
				
			||||||
  stat_.state_ = ObFreezeState::NOT_SET_FREEZE_FLAG;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  ObLSFreezeGuard guard(*this);
 | 
					  ObLSFreezeGuard guard(*this);
 | 
				
			||||||
  if (IS_NOT_INIT) {
 | 
					  if (IS_NOT_INIT) {
 | 
				
			||||||
@ -341,7 +475,11 @@ int ObFreezer::logstream_freeze(ObFuture<int> *result)
 | 
				
			|||||||
  } else if (FALSE_IT(max_decided_scn_ = max_decided_scn)) {
 | 
					  } else if (FALSE_IT(max_decided_scn_ = max_decided_scn)) {
 | 
				
			||||||
  } else if (FALSE_IT(freeze_snapshot_version_ = freeze_snapshot_version)) {
 | 
					  } else if (FALSE_IT(freeze_snapshot_version_ = freeze_snapshot_version)) {
 | 
				
			||||||
  } else if (FALSE_IT(set_need_resubmit_log(false))) {
 | 
					  } else if (FALSE_IT(set_need_resubmit_log(false))) {
 | 
				
			||||||
  } else if (FALSE_IT(stat_.state_ = ObFreezeState::NOT_SUBMIT_LOG)) {
 | 
					  } else if (FALSE_IT(stat_.reset())) {
 | 
				
			||||||
 | 
					  } else if (FALSE_IT(stat_.set_freeze_clock(get_freeze_clock()))) {
 | 
				
			||||||
 | 
					  } else if (FALSE_IT(stat_.set_start_time(start_time))) {
 | 
				
			||||||
 | 
					  } else if (FALSE_IT(stat_.set_state(ObFreezeState::NOT_SUBMIT_LOG))) {
 | 
				
			||||||
 | 
					  } else if (FALSE_IT(stat_.set_freeze_snapshot_version(freeze_snapshot_version))) {
 | 
				
			||||||
  } else if (OB_FAIL(inner_logstream_freeze(result))) {
 | 
					  } else if (OB_FAIL(inner_logstream_freeze(result))) {
 | 
				
			||||||
    TRANS_LOG(WARN, "[Freezer] logstream_freeze failure", K(ret), K(ls_id));
 | 
					    TRANS_LOG(WARN, "[Freezer] logstream_freeze failure", K(ret), K(ls_id));
 | 
				
			||||||
    undo_freeze_();
 | 
					    undo_freeze_();
 | 
				
			||||||
@ -407,9 +545,9 @@ int ObFreezer::ls_freeze_task()
 | 
				
			|||||||
  stat_.add_diagnose_info("logstream_freeze success");
 | 
					  stat_.add_diagnose_info("logstream_freeze success");
 | 
				
			||||||
  FLOG_INFO("[Freezer] logstream_freeze success", K(ls_id), K(freeze_clock));
 | 
					  FLOG_INFO("[Freezer] logstream_freeze success", K(ls_id), K(freeze_clock));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  stat_.state_ = ObFreezeState::FINISH;
 | 
					  stat_.set_state(ObFreezeState::FINISH);
 | 
				
			||||||
  stat_.end_time_ = ObTimeUtility::current_time();
 | 
					  stat_.set_end_time(ObTimeUtility::current_time());
 | 
				
			||||||
  stat_.ret_code_ = ret;
 | 
					  stat_.set_ret_code(ret);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  unset_freeze_();
 | 
					  unset_freeze_();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -457,10 +595,7 @@ int ObFreezer::freeze_normal_tablet_(const ObTabletID &tablet_id, ObFuture<int>
 | 
				
			|||||||
  ObTableHandleV2 frozen_memtable_handle;
 | 
					  ObTableHandleV2 frozen_memtable_handle;
 | 
				
			||||||
  SCN freeze_snapshot_version;
 | 
					  SCN freeze_snapshot_version;
 | 
				
			||||||
  FLOG_INFO("[Freezer] tablet_freeze start", K(ret), K(ls_id), K(tablet_id));
 | 
					  FLOG_INFO("[Freezer] tablet_freeze start", K(ret), K(ls_id), K(tablet_id));
 | 
				
			||||||
  stat_.reset();
 | 
					  int64_t start_time = ObTimeUtility::current_time();
 | 
				
			||||||
  stat_.start_time_ = ObTimeUtility::current_time();
 | 
					 | 
				
			||||||
  stat_.state_ = ObFreezeState::NOT_SET_FREEZE_FLAG;
 | 
					 | 
				
			||||||
  stat_.tablet_id_ = tablet_id;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  ObTabletFreezeGuard guard(*this, true /* try guard */);
 | 
					  ObTabletFreezeGuard guard(*this, true /* try guard */);
 | 
				
			||||||
  if (IS_NOT_INIT) {
 | 
					  if (IS_NOT_INIT) {
 | 
				
			||||||
@ -475,7 +610,6 @@ int ObFreezer::freeze_normal_tablet_(const ObTabletID &tablet_id, ObFuture<int>
 | 
				
			|||||||
  } else if (OB_FAIL(set_freeze_flag_without_inc_freeze_clock())) {
 | 
					  } else if (OB_FAIL(set_freeze_flag_without_inc_freeze_clock())) {
 | 
				
			||||||
    ret = OB_SUCCESS;
 | 
					    ret = OB_SUCCESS;
 | 
				
			||||||
    FLOG_INFO("[Freezer] freeze is running", K(ret), K(ls_id), K(tablet_id));
 | 
					    FLOG_INFO("[Freezer] freeze is running", K(ret), K(ls_id), K(tablet_id));
 | 
				
			||||||
  } else if (FALSE_IT(stat_.state_ = ObFreezeState::NOT_SUBMIT_LOG)) {
 | 
					 | 
				
			||||||
  } else {
 | 
					  } else {
 | 
				
			||||||
    // succeed to set freeze flag
 | 
					    // succeed to set freeze flag
 | 
				
			||||||
    if (OB_FAIL(get_ls_weak_read_scn(freeze_snapshot_version))) {
 | 
					    if (OB_FAIL(get_ls_weak_read_scn(freeze_snapshot_version))) {
 | 
				
			||||||
@ -486,6 +620,12 @@ int ObFreezer::freeze_normal_tablet_(const ObTabletID &tablet_id, ObFuture<int>
 | 
				
			|||||||
      LOG_WARN("[Freezer] weak read service not inited", K(ret), K(ls_id));
 | 
					      LOG_WARN("[Freezer] weak read service not inited", K(ret), K(ls_id));
 | 
				
			||||||
    } else if (FALSE_IT(freeze_snapshot_version_ = freeze_snapshot_version)) {
 | 
					    } else if (FALSE_IT(freeze_snapshot_version_ = freeze_snapshot_version)) {
 | 
				
			||||||
    } else if (FALSE_IT(set_need_resubmit_log(false))) {
 | 
					    } else if (FALSE_IT(set_need_resubmit_log(false))) {
 | 
				
			||||||
 | 
					    } else if (FALSE_IT(stat_.reset())) {
 | 
				
			||||||
 | 
					    } else if (FALSE_IT(stat_.set_freeze_clock(get_freeze_clock()))) {
 | 
				
			||||||
 | 
					    } else if (FALSE_IT(stat_.set_freeze_snapshot_version(freeze_snapshot_version))) {
 | 
				
			||||||
 | 
					    } else if (FALSE_IT(stat_.set_start_time(start_time))) {
 | 
				
			||||||
 | 
					    } else if (FALSE_IT(stat_.set_state(ObFreezeState::NOT_SUBMIT_LOG))) {
 | 
				
			||||||
 | 
					    } else if (FALSE_IT(stat_.set_tablet_id(tablet_id))) {
 | 
				
			||||||
    } else if (OB_FAIL(get_ls_tablet_svr()->get_tablet(tablet_id,
 | 
					    } else if (OB_FAIL(get_ls_tablet_svr()->get_tablet(tablet_id,
 | 
				
			||||||
                                                       handle,
 | 
					                                                       handle,
 | 
				
			||||||
                                                       ObTabletCommon::NO_CHECK_GET_TABLET_TIMEOUT_US))) {
 | 
					                                                       ObTabletCommon::NO_CHECK_GET_TABLET_TIMEOUT_US))) {
 | 
				
			||||||
@ -512,9 +652,9 @@ int ObFreezer::freeze_normal_tablet_(const ObTabletID &tablet_id, ObFuture<int>
 | 
				
			|||||||
      TRANS_LOG(INFO, "[Freezer] succeed to start tablet_freeze_task", K(ret), K(ls_id), K(tablet_id));
 | 
					      TRANS_LOG(INFO, "[Freezer] succeed to start tablet_freeze_task", K(ret), K(ls_id), K(tablet_id));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if (OB_FAIL(ret) || !frozen_memtable_handle.is_valid()) {
 | 
					    if (OB_FAIL(ret) || !frozen_memtable_handle.is_valid()) {
 | 
				
			||||||
      stat_.state_ = ObFreezeState::FINISH;
 | 
					      stat_.set_state(ObFreezeState::FINISH);
 | 
				
			||||||
      stat_.end_time_ = ObTimeUtility::current_time();
 | 
					      stat_.set_end_time(ObTimeUtility::current_time());
 | 
				
			||||||
      stat_.ret_code_ = ret;
 | 
					      stat_.set_ret_code(ret);
 | 
				
			||||||
      print_freezer_statistics();
 | 
					      print_freezer_statistics();
 | 
				
			||||||
      unset_freeze_();
 | 
					      unset_freeze_();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -545,11 +685,7 @@ int ObFreezer::force_tablet_freeze(const ObTabletID &tablet_id)
 | 
				
			|||||||
  ObTableHandleV2 frozen_memtable_handle;
 | 
					  ObTableHandleV2 frozen_memtable_handle;
 | 
				
			||||||
  SCN freeze_snapshot_version;
 | 
					  SCN freeze_snapshot_version;
 | 
				
			||||||
  FLOG_INFO("[Freezer] force_tablet_freeze start", K(ret), K(ls_id), K(tablet_id));
 | 
					  FLOG_INFO("[Freezer] force_tablet_freeze start", K(ret), K(ls_id), K(tablet_id));
 | 
				
			||||||
  stat_.reset();
 | 
					  int64_t start_time = ObTimeUtility::current_time();
 | 
				
			||||||
  stat_.start_time_ = ObTimeUtility::current_time();
 | 
					 | 
				
			||||||
  stat_.state_ = ObFreezeState::NOT_SET_FREEZE_FLAG;
 | 
					 | 
				
			||||||
  stat_.tablet_id_ = tablet_id;
 | 
					 | 
				
			||||||
  stat_.is_force_ = true;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  ObTabletFreezeGuard guard(*this);
 | 
					  ObTabletFreezeGuard guard(*this);
 | 
				
			||||||
  if (IS_NOT_INIT) {
 | 
					  if (IS_NOT_INIT) {
 | 
				
			||||||
@ -560,7 +696,6 @@ int ObFreezer::force_tablet_freeze(const ObTabletID &tablet_id)
 | 
				
			|||||||
    LOG_WARN("freezer is offline, can not freeze now", K(ret), K(ls_id));
 | 
					    LOG_WARN("freezer is offline, can not freeze now", K(ret), K(ls_id));
 | 
				
			||||||
  } else if (OB_FAIL(loop_set_freeze_flag())) {
 | 
					  } else if (OB_FAIL(loop_set_freeze_flag())) {
 | 
				
			||||||
    TRANS_LOG(WARN, "[Freezer] failed to set freeze_flag", K(ret), K(ls_id), K(tablet_id));
 | 
					    TRANS_LOG(WARN, "[Freezer] failed to set freeze_flag", K(ret), K(ls_id), K(tablet_id));
 | 
				
			||||||
  } else if (FALSE_IT(stat_.state_ = ObFreezeState::NOT_SUBMIT_LOG)) {
 | 
					 | 
				
			||||||
  } else {
 | 
					  } else {
 | 
				
			||||||
    // succeed to set freeze flag
 | 
					    // succeed to set freeze flag
 | 
				
			||||||
    if (OB_FAIL(get_ls_weak_read_scn(freeze_snapshot_version))) {
 | 
					    if (OB_FAIL(get_ls_weak_read_scn(freeze_snapshot_version))) {
 | 
				
			||||||
@ -571,6 +706,12 @@ int ObFreezer::force_tablet_freeze(const ObTabletID &tablet_id)
 | 
				
			|||||||
      LOG_WARN("[Freezer] weak read service not inited", K(ret), K(ls_id));
 | 
					      LOG_WARN("[Freezer] weak read service not inited", K(ret), K(ls_id));
 | 
				
			||||||
    } else if (FALSE_IT(freeze_snapshot_version_ = freeze_snapshot_version)) {
 | 
					    } else if (FALSE_IT(freeze_snapshot_version_ = freeze_snapshot_version)) {
 | 
				
			||||||
    } else if (FALSE_IT(set_need_resubmit_log(false))) {
 | 
					    } else if (FALSE_IT(set_need_resubmit_log(false))) {
 | 
				
			||||||
 | 
					    } else if (FALSE_IT(stat_.reset())) {
 | 
				
			||||||
 | 
					    } else if (FALSE_IT(stat_.set_freeze_clock(get_freeze_clock()))) {
 | 
				
			||||||
 | 
					    } else if (FALSE_IT(stat_.set_freeze_snapshot_version(freeze_snapshot_version))) {
 | 
				
			||||||
 | 
					    } else if (FALSE_IT(stat_.set_state(ObFreezeState::NOT_SUBMIT_LOG))) {
 | 
				
			||||||
 | 
					    } else if (FALSE_IT(stat_.set_tablet_id(tablet_id))) {
 | 
				
			||||||
 | 
					    } else if (FALSE_IT(stat_.set_is_force(true))) {
 | 
				
			||||||
    } else if (OB_FAIL(get_ls_tablet_svr()->get_tablet(tablet_id,
 | 
					    } else if (OB_FAIL(get_ls_tablet_svr()->get_tablet(tablet_id,
 | 
				
			||||||
                                                       handle,
 | 
					                                                       handle,
 | 
				
			||||||
                                                       ObTabletCommon::NO_CHECK_GET_TABLET_TIMEOUT_US))) {
 | 
					                                                       ObTabletCommon::NO_CHECK_GET_TABLET_TIMEOUT_US))) {
 | 
				
			||||||
@ -597,9 +738,9 @@ int ObFreezer::force_tablet_freeze(const ObTabletID &tablet_id)
 | 
				
			|||||||
      TRANS_LOG(INFO, "[Freezer] succeed to start force_tablet_freeze_task", K(ret), K(ls_id), K(tablet_id));
 | 
					      TRANS_LOG(INFO, "[Freezer] succeed to start force_tablet_freeze_task", K(ret), K(ls_id), K(tablet_id));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if (OB_FAIL(ret) || !frozen_memtable_handle.is_valid()) {
 | 
					    if (OB_FAIL(ret) || !frozen_memtable_handle.is_valid()) {
 | 
				
			||||||
      stat_.state_ = ObFreezeState::FINISH;
 | 
					      stat_.set_state(ObFreezeState::FINISH);
 | 
				
			||||||
      stat_.end_time_ = ObTimeUtility::current_time();
 | 
					      stat_.set_end_time(ObTimeUtility::current_time());
 | 
				
			||||||
      stat_.ret_code_ = ret;
 | 
					      stat_.set_ret_code(ret);
 | 
				
			||||||
      print_freezer_statistics();
 | 
					      print_freezer_statistics();
 | 
				
			||||||
      unset_freeze_();
 | 
					      unset_freeze_();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -639,9 +780,9 @@ int ObFreezer::tablet_freeze_task(ObTableHandleV2 handle)
 | 
				
			|||||||
        FLOG_INFO("[Freezer] tablet_freeze_task success", K(ret), K(ls_id), KPC(memtable));
 | 
					        FLOG_INFO("[Freezer] tablet_freeze_task success", K(ret), K(ls_id), KPC(memtable));
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    stat_.state_ = ObFreezeState::FINISH;
 | 
					    stat_.set_state(ObFreezeState::FINISH);
 | 
				
			||||||
    stat_.end_time_ = ObTimeUtility::current_time();
 | 
					    stat_.set_end_time(ObTimeUtility::current_time());
 | 
				
			||||||
    stat_.ret_code_ = ret;
 | 
					    stat_.set_ret_code(ret);
 | 
				
			||||||
    print_freezer_statistics();
 | 
					    print_freezer_statistics();
 | 
				
			||||||
    unset_freeze_();
 | 
					    unset_freeze_();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
@ -693,10 +834,7 @@ int ObFreezer::tablet_freeze_for_replace_tablet_meta(const ObTabletID &tablet_id
 | 
				
			|||||||
  ObTabletMemtableMgr *memtable_mgr = nullptr;
 | 
					  ObTabletMemtableMgr *memtable_mgr = nullptr;
 | 
				
			||||||
  SCN freeze_snapshot_version;
 | 
					  SCN freeze_snapshot_version;
 | 
				
			||||||
  FLOG_INFO("[Freezer] tablet_freeze_for_replace_tablet_meta start", K(ret), K(ls_id), K(tablet_id));
 | 
					  FLOG_INFO("[Freezer] tablet_freeze_for_replace_tablet_meta start", K(ret), K(ls_id), K(tablet_id));
 | 
				
			||||||
  stat_.reset();
 | 
					  int64_t start_time = ObTimeUtility::current_time();
 | 
				
			||||||
  stat_.start_time_ = ObTimeUtility::current_time();
 | 
					 | 
				
			||||||
  stat_.state_ = ObFreezeState::NOT_SET_FREEZE_FLAG;
 | 
					 | 
				
			||||||
  stat_.tablet_id_ = tablet_id;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  ObTabletFreezeGuard guard(*this, true /* try guard */);
 | 
					  ObTabletFreezeGuard guard(*this, true /* try guard */);
 | 
				
			||||||
  if (IS_NOT_INIT) {
 | 
					  if (IS_NOT_INIT) {
 | 
				
			||||||
@ -710,7 +848,6 @@ int ObFreezer::tablet_freeze_for_replace_tablet_meta(const ObTabletID &tablet_id
 | 
				
			|||||||
    FLOG_INFO("[Freezer] ls freeze is running, no need freeze again", K(ret), K(ls_id), K(tablet_id));
 | 
					    FLOG_INFO("[Freezer] ls freeze is running, no need freeze again", K(ret), K(ls_id), K(tablet_id));
 | 
				
			||||||
  } else if (OB_FAIL(loop_set_freeze_flag())) {
 | 
					  } else if (OB_FAIL(loop_set_freeze_flag())) {
 | 
				
			||||||
    FLOG_INFO("[Freezer] freeze is running", K(ret), K(ls_id), K(tablet_id));
 | 
					    FLOG_INFO("[Freezer] freeze is running", K(ret), K(ls_id), K(tablet_id));
 | 
				
			||||||
  } else if (FALSE_IT(stat_.state_ = ObFreezeState::NOT_SUBMIT_LOG)) {
 | 
					 | 
				
			||||||
  } else {
 | 
					  } else {
 | 
				
			||||||
    // succeed to set freeze flag
 | 
					    // succeed to set freeze flag
 | 
				
			||||||
    if (OB_FAIL(get_ls_weak_read_scn(freeze_snapshot_version))) {
 | 
					    if (OB_FAIL(get_ls_weak_read_scn(freeze_snapshot_version))) {
 | 
				
			||||||
@ -721,6 +858,11 @@ int ObFreezer::tablet_freeze_for_replace_tablet_meta(const ObTabletID &tablet_id
 | 
				
			|||||||
      LOG_WARN("[Freezer] weak read service not inited", K(ret), K(ls_id));
 | 
					      LOG_WARN("[Freezer] weak read service not inited", K(ret), K(ls_id));
 | 
				
			||||||
    } else if (FALSE_IT(freeze_snapshot_version_ = freeze_snapshot_version)) {
 | 
					    } else if (FALSE_IT(freeze_snapshot_version_ = freeze_snapshot_version)) {
 | 
				
			||||||
    } else if (FALSE_IT(set_need_resubmit_log(false))) {
 | 
					    } else if (FALSE_IT(set_need_resubmit_log(false))) {
 | 
				
			||||||
 | 
					    } else if (FALSE_IT(stat_.reset())) {
 | 
				
			||||||
 | 
					    } else if (FALSE_IT(stat_.set_freeze_clock(get_freeze_clock()))) {
 | 
				
			||||||
 | 
					    } else if (FALSE_IT(stat_.set_freeze_snapshot_version(freeze_snapshot_version))) {
 | 
				
			||||||
 | 
					    } else if (FALSE_IT(stat_.set_state(ObFreezeState::NOT_SUBMIT_LOG))) {
 | 
				
			||||||
 | 
					    } else if (FALSE_IT(stat_.set_tablet_id(tablet_id))) {
 | 
				
			||||||
    } else if (OB_FAIL(get_ls_tablet_svr()->get_tablet(tablet_id,
 | 
					    } else if (OB_FAIL(get_ls_tablet_svr()->get_tablet(tablet_id,
 | 
				
			||||||
                                                  handle,
 | 
					                                                  handle,
 | 
				
			||||||
                                                  ObTabletCommon::NO_CHECK_GET_TABLET_TIMEOUT_US))) {
 | 
					                                                  ObTabletCommon::NO_CHECK_GET_TABLET_TIMEOUT_US))) {
 | 
				
			||||||
@ -741,9 +883,9 @@ int ObFreezer::tablet_freeze_for_replace_tablet_meta(const ObTabletID &tablet_id
 | 
				
			|||||||
      }
 | 
					      }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if (OB_FAIL(ret) || !frozen_memtable_handle.is_valid()) {
 | 
					    if (OB_FAIL(ret) || !frozen_memtable_handle.is_valid()) {
 | 
				
			||||||
      stat_.state_ = ObFreezeState::FINISH;
 | 
					      stat_.set_state(ObFreezeState::FINISH);
 | 
				
			||||||
      stat_.end_time_ = ObTimeUtility::current_time();
 | 
					      stat_.set_end_time(ObTimeUtility::current_time());
 | 
				
			||||||
      stat_.ret_code_ = ret;
 | 
					      stat_.set_ret_code(ret);
 | 
				
			||||||
      print_freezer_statistics();
 | 
					      print_freezer_statistics();
 | 
				
			||||||
      unset_freeze_();
 | 
					      unset_freeze_();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -772,9 +914,9 @@ int ObFreezer::handle_frozen_memtable_for_replace_tablet_meta(const ObTabletID &
 | 
				
			|||||||
      stat_.add_diagnose_info("tablet_freeze_for_replace_tablet_meta success");
 | 
					      stat_.add_diagnose_info("tablet_freeze_for_replace_tablet_meta success");
 | 
				
			||||||
      FLOG_INFO("[Freezer] tablet_freeze_for_replace_tablet_meta success", K(ret), K(ls_id), K(tablet_id));
 | 
					      FLOG_INFO("[Freezer] tablet_freeze_for_replace_tablet_meta success", K(ret), K(ls_id), K(tablet_id));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    stat_.state_ = ObFreezeState::FINISH;
 | 
					    stat_.set_state(ObFreezeState::FINISH);
 | 
				
			||||||
    stat_.end_time_ = ObTimeUtility::current_time();
 | 
					    stat_.set_end_time(ObTimeUtility::current_time());
 | 
				
			||||||
    stat_.ret_code_ = ret;
 | 
					    stat_.set_ret_code(ret);
 | 
				
			||||||
    print_freezer_statistics();
 | 
					    print_freezer_statistics();
 | 
				
			||||||
    unset_freeze_();
 | 
					    unset_freeze_();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
@ -845,7 +987,7 @@ int ObFreezer::submit_log_for_freeze()
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  stat_.state_ = ObFreezeState::WAIT_READY_FOR_FLUSH;
 | 
					  stat_.set_state(ObFreezeState::WAIT_READY_FOR_FLUSH);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  return ret;
 | 
					  return ret;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -161,22 +161,39 @@ public:
 | 
				
			|||||||
                        const int64_t current_right_boundary);
 | 
					                        const int64_t current_right_boundary);
 | 
				
			||||||
  int remove_memtable_info(const ObTabletID &tablet_id);
 | 
					  int remove_memtable_info(const ObTabletID &tablet_id);
 | 
				
			||||||
  int get_memtables_info(common::ObSArray<ObFrozenMemtableInfo> &memtables_info);
 | 
					  int get_memtables_info(common::ObSArray<ObFrozenMemtableInfo> &memtables_info);
 | 
				
			||||||
  void add_diagnose_info(const ObString &str);
 | 
					  int set_memtables_info(const common::ObSArray<ObFrozenMemtableInfo> &memtables_info);
 | 
				
			||||||
 | 
					  int add_diagnose_info(const ObString &str);
 | 
				
			||||||
  int get_diagnose_info(ObStringHolder &diagnose_info);
 | 
					  int get_diagnose_info(ObStringHolder &diagnose_info);
 | 
				
			||||||
 | 
					  void set_tablet_id(const ObTabletID &tablet_id);
 | 
				
			||||||
 | 
					  ObTabletID get_tablet_id();
 | 
				
			||||||
 | 
					  void set_is_force(bool is_force);
 | 
				
			||||||
 | 
					  bool get_is_force();
 | 
				
			||||||
 | 
					  void set_state(int state);
 | 
				
			||||||
 | 
					  int get_state();
 | 
				
			||||||
 | 
					  void set_freeze_clock(const int64_t freeze_clock);
 | 
				
			||||||
 | 
					  int64_t get_freeze_clock();
 | 
				
			||||||
 | 
					  void set_start_time(int64_t start_time);
 | 
				
			||||||
 | 
					  int64_t get_start_time();
 | 
				
			||||||
 | 
					  void set_end_time(int64_t end_time);
 | 
				
			||||||
 | 
					  int64_t get_end_time();
 | 
				
			||||||
 | 
					  void set_ret_code(int ret_code);
 | 
				
			||||||
 | 
					  int get_ret_code();
 | 
				
			||||||
 | 
					  void set_freeze_snapshot_version(const share::SCN &freeze_snapshot_version);
 | 
				
			||||||
 | 
					  share::SCN get_freeze_snapshot_version();
 | 
				
			||||||
 | 
					  int deep_copy_to(ObFreezerStat &other);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public:
 | 
					private:
 | 
				
			||||||
  ObTabletID tablet_id_;
 | 
					  ObTabletID tablet_id_;
 | 
				
			||||||
  bool is_force_;
 | 
					  bool is_force_;
 | 
				
			||||||
  int state_;
 | 
					  int state_;
 | 
				
			||||||
 | 
					  int64_t freeze_clock_;
 | 
				
			||||||
  int64_t start_time_;
 | 
					  int64_t start_time_;
 | 
				
			||||||
  int64_t end_time_;
 | 
					  int64_t end_time_;
 | 
				
			||||||
  int ret_code_;
 | 
					  int ret_code_;
 | 
				
			||||||
 | 
					  share::SCN freeze_snapshot_version_;
 | 
				
			||||||
  ObStringHolder diagnose_info_;
 | 
					  ObStringHolder diagnose_info_;
 | 
				
			||||||
 | 
					 | 
				
			||||||
private:
 | 
					 | 
				
			||||||
  common::ObSArray<ObFrozenMemtableInfo> memtables_info_;
 | 
					  common::ObSArray<ObFrozenMemtableInfo> memtables_info_;
 | 
				
			||||||
  ObSpinLock memtables_info_lock_;
 | 
					  ObSpinLock lock_;
 | 
				
			||||||
  ObSpinLock diagnose_info_lock_;
 | 
					 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class ObFreezer
 | 
					class ObFreezer
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user