fix loop bug
This commit is contained in:
		@ -129,6 +129,7 @@ public:
 | 
				
			|||||||
  share::SCN get_min_scn() const { return min_scn_; }
 | 
					  share::SCN get_min_scn() const { return min_scn_; }
 | 
				
			||||||
  share::SCN get_freeze_scn() const { return freeze_scn_; }
 | 
					  share::SCN get_freeze_scn() const { return freeze_scn_; }
 | 
				
			||||||
  share::SCN get_ddl_start_scn() const { return ddl_start_scn_; }
 | 
					  share::SCN get_ddl_start_scn() const { return ddl_start_scn_; }
 | 
				
			||||||
 | 
					  share::SCN get_start_scn() const { return last_freezed_scn_; }
 | 
				
			||||||
  int64_t get_macro_block_cnt() const { return block_meta_tree_.get_macro_block_cnt(); }
 | 
					  int64_t get_macro_block_cnt() const { return block_meta_tree_.get_macro_block_cnt(); }
 | 
				
			||||||
  void inc_pending_cnt(); // used by ddl kv pending guard
 | 
					  void inc_pending_cnt(); // used by ddl kv pending guard
 | 
				
			||||||
  void dec_pending_cnt();
 | 
					  void dec_pending_cnt();
 | 
				
			||||||
 | 
				
			|||||||
@ -955,13 +955,13 @@ void ObTabletDDLKvMgr::try_get_ddl_kv_unlock(const SCN &scn, ObTableHandleV2 &kv
 | 
				
			|||||||
  int ret = OB_SUCCESS;
 | 
					  int ret = OB_SUCCESS;
 | 
				
			||||||
  kv_handle.reset();
 | 
					  kv_handle.reset();
 | 
				
			||||||
  if (get_count() > 0) {
 | 
					  if (get_count() > 0) {
 | 
				
			||||||
    for (int64_t i = tail_ - 1; OB_SUCC(ret) && i >= head_ && !kv_handle.is_valid(); ++i) {
 | 
					    for (int64_t i = tail_ - 1; OB_SUCC(ret) && i >= head_ && !kv_handle.is_valid(); --i) {
 | 
				
			||||||
      ObTableHandleV2 &tmp_kv_handle = ddl_kv_handles_[get_idx(i)];
 | 
					      ObTableHandleV2 &tmp_kv_handle = ddl_kv_handles_[get_idx(i)];
 | 
				
			||||||
      ObDDLKV *tmp_kv = static_cast<ObDDLKV *>(tmp_kv_handle.get_table());
 | 
					      ObDDLKV *tmp_kv = static_cast<ObDDLKV *>(tmp_kv_handle.get_table());
 | 
				
			||||||
      if (OB_ISNULL(tmp_kv)) {
 | 
					      if (OB_ISNULL(tmp_kv)) {
 | 
				
			||||||
        ret = OB_ERR_UNEXPECTED;
 | 
					        ret = OB_ERR_UNEXPECTED;
 | 
				
			||||||
        LOG_WARN("ddl kv is null", K(ret), K(ls_id_), K(tablet_id_), KP(tmp_kv), K(i), K(head_), K(tail_));
 | 
					        LOG_WARN("ddl kv is null", K(ret), K(ls_id_), K(tablet_id_), KP(tmp_kv), K(i), K(head_), K(tail_));
 | 
				
			||||||
      } else if (scn <= tmp_kv->get_freeze_scn()) {
 | 
					      } else if (scn > tmp_kv->get_start_scn() && scn <= tmp_kv->get_freeze_scn()) {
 | 
				
			||||||
        kv_handle = tmp_kv_handle;
 | 
					        kv_handle = tmp_kv_handle;
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user