[FIX] virtual tx data table iterate an empty logstream
This commit is contained in:
@ -154,7 +154,7 @@ int ObAllVirtualTxDataTable::get_next_tx_data_table_(ObITable *&tx_data_table)
|
|||||||
// memtable_array_pos_ < 0 && sstable_array_pos_ < 0 means all the tx data memtables of this logstream have been
|
// memtable_array_pos_ < 0 && sstable_array_pos_ < 0 means all the tx data memtables of this logstream have been
|
||||||
// disposed or the first time get_next_tx_data_memtable() is invoked, when get_next_tx_data_table_ is invoked the
|
// disposed or the first time get_next_tx_data_memtable() is invoked, when get_next_tx_data_table_ is invoked the
|
||||||
// first time, memtable_array_pos_ and memtable_array_.count() are both -1
|
// first time, memtable_array_pos_ and memtable_array_.count() are both -1
|
||||||
if (memtable_array_pos_ < 0 && sstable_array_pos_ < 0) {
|
while (OB_SUCC(ret) && memtable_array_pos_ < 0 && sstable_array_pos_ < 0) {
|
||||||
ObLS *ls = nullptr;
|
ObLS *ls = nullptr;
|
||||||
ObTablet *tablet = nullptr;
|
ObTablet *tablet = nullptr;
|
||||||
ObIMemtableMgr *memtable_mgr = nullptr;
|
ObIMemtableMgr *memtable_mgr = nullptr;
|
||||||
@ -180,14 +180,22 @@ int ObAllVirtualTxDataTable::get_next_tx_data_table_(ObITable *&tx_data_table)
|
|||||||
} else if (FALSE_IT(tablet = tablet_handle_.get_obj())) {
|
} else if (FALSE_IT(tablet = tablet_handle_.get_obj())) {
|
||||||
} else if (OB_FAIL(tablet->fetch_table_store(table_store_wrapper_))) {
|
} else if (OB_FAIL(tablet->fetch_table_store(table_store_wrapper_))) {
|
||||||
SERVER_LOG(WARN, "fail to fetch table store", K(ret));
|
SERVER_LOG(WARN, "fail to fetch table store", K(ret));
|
||||||
} else if (OB_FAIL(
|
} else if (OB_FAIL(table_store_wrapper_.get_member()->get_minor_sstables().get_all_tables(sstable_handles_))) {
|
||||||
table_store_wrapper_.get_member()->get_minor_sstables().get_all_tables(sstable_handles_))) {
|
|
||||||
SERVER_LOG(WARN, "fail to get sstable handles", KR(ret));
|
SERVER_LOG(WARN, "fail to get sstable handles", KR(ret));
|
||||||
} else {
|
} else {
|
||||||
// iterate from the newest memtable in memtable handles
|
// iterate from the newest memtable in memtable handles
|
||||||
memtable_array_pos_ = memtable_handles_.count() - 1;
|
memtable_array_pos_ = memtable_handles_.count() - 1;
|
||||||
// iterate from the newest sstable in sstable handles
|
// iterate from the newest sstable in sstable handles
|
||||||
sstable_array_pos_ = sstable_handles_.count() - 1;
|
sstable_array_pos_ = sstable_handles_.count() - 1;
|
||||||
|
if (memtable_array_pos_ < 0 && sstable_array_pos_ < 0) {
|
||||||
|
SERVER_LOG(INFO,
|
||||||
|
"empty logstream. may be offlined",
|
||||||
|
KR(ret),
|
||||||
|
K(ls_id_),
|
||||||
|
K(addr_),
|
||||||
|
K(memtable_array_pos_),
|
||||||
|
K(sstable_array_pos_));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -197,11 +205,9 @@ int ObAllVirtualTxDataTable::get_next_tx_data_table_(ObITable *&tx_data_table)
|
|||||||
} else if (sstable_array_pos_ >= 0) {
|
} else if (sstable_array_pos_ >= 0) {
|
||||||
tx_data_table = sstable_handles_[sstable_array_pos_--];
|
tx_data_table = sstable_handles_[sstable_array_pos_--];
|
||||||
} else {
|
} else {
|
||||||
ret = OB_ERR_UNEXPECTED;
|
ret = OB_ITER_END;
|
||||||
SERVER_LOG(WARN, "get next tx data table failed.", KR(ret), K(ls_id_), K(addr_));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user