提交 58517850 编写于 作者: O obdev 提交者: wangzelin.wzl

BUGFIX: prevent frequent freeze if ls freeze stuck

上级 169c793d
...@@ -602,8 +602,6 @@ public: ...@@ -602,8 +602,6 @@ public:
// ObFreezer interface: // ObFreezer interface:
// logstream freeze // logstream freeze
// @param [in] null // @param [in] null
// int logstream_freeze();
// DELEGATE_WITH_RET(ls_freezer_, logstream_freeze, int);
int logstream_freeze(); int logstream_freeze();
// tablet freeze // tablet freeze
// @param [in] tablet_id // @param [in] tablet_id
......
...@@ -186,6 +186,24 @@ bool ObTenantFreezer::exist_ls_freezing() ...@@ -186,6 +186,24 @@ bool ObTenantFreezer::exist_ls_freezing()
return exist_ls_freezing_; return exist_ls_freezing_;
} }
int ObTenantFreezer::ls_freeze_(ObLS *ls)
{
int ret = OB_SUCCESS;
const int64_t SLEEP_TS = 1000 * 1000; // 1s
int64_t retry_times = 0;
// wait if there is a freeze is doing
do {
retry_times++;
if (OB_FAIL(ls->logstream_freeze()) && OB_ENTRY_EXIST == ret) {
ob_usleep(SLEEP_TS);
}
if (retry_times % 10 == 0) {
LOG_WARN("wait ls freeze finished cost too much time", K(retry_times));
}
} while (ret == OB_ENTRY_EXIST);
return ret;
}
int ObTenantFreezer::tenant_freeze() int ObTenantFreezer::tenant_freeze()
{ {
int ret = OB_SUCCESS; int ret = OB_SUCCESS;
...@@ -203,7 +221,9 @@ int ObTenantFreezer::tenant_freeze() ...@@ -203,7 +221,9 @@ int ObTenantFreezer::tenant_freeze()
ObLS *ls = nullptr; ObLS *ls = nullptr;
int ls_cnt = 0; int ls_cnt = 0;
for (; OB_SUCC(iter->get_next(ls)); ++ls_cnt) { for (; OB_SUCC(iter->get_next(ls)); ++ls_cnt) {
if (OB_FAIL(ls->logstream_freeze())) { // wait until this ls freeze finished to make sure not freeze frequently because
// of this ls freeze stuck.
if (OB_FAIL(ls_freeze_(ls))) {
if (OB_SUCCESS == first_fail_ret) { if (OB_SUCCESS == first_fail_ret) {
first_fail_ret = ret; first_fail_ret = ret;
} }
......
...@@ -128,6 +128,7 @@ public: ...@@ -128,6 +128,7 @@ public:
ObServerConfig *get_config() { return config_; } ObServerConfig *get_config() { return config_; }
bool exist_ls_freezing(); bool exist_ls_freezing();
private: private:
int ls_freeze_(ObLS *ls);
int64_t get_freeze_trigger_percentage_() const; int64_t get_freeze_trigger_percentage_() const;
int post_freeze_request_(const storage::ObFreezeType freeze_type, int post_freeze_request_(const storage::ObFreezeType freeze_type,
const int64_t try_frozen_version); const int64_t try_frozen_version);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册