From 35e7cb158aed8f04c202487faebd9c2c30815156 Mon Sep 17 00:00:00 2001 From: obdev Date: Wed, 18 Sep 2024 09:29:04 +0000 Subject: [PATCH] fix about meta tree log print --- .../tmp_file/test_tmp_file_meta_tree.cpp | 179 ++++++-- .../tmp_file/ob_shared_nothing_tmp_file.cpp | 2 +- .../tmp_file/ob_tmp_file_meta_tree.cpp | 414 +++++++++--------- src/storage/tmp_file/ob_tmp_file_meta_tree.h | 4 +- 4 files changed, 348 insertions(+), 251 deletions(-) diff --git a/mittest/mtlenv/storage/tmp_file/test_tmp_file_meta_tree.cpp b/mittest/mtlenv/storage/tmp_file/test_tmp_file_meta_tree.cpp index f62c8ef67..b1b3ff7cf 100644 --- a/mittest/mtlenv/storage/tmp_file/test_tmp_file_meta_tree.cpp +++ b/mittest/mtlenv/storage/tmp_file/test_tmp_file_meta_tree.cpp @@ -330,8 +330,10 @@ TEST_F(TestSNTmpFileMetaTree, test_tree_insert) ASSERT_EQ(OB_SUCCESS, callback_allocator.init(lib::ObMallocAllocator::get_instance(), OB_MALLOC_MIDDLE_BLOCK_SIZE, ObMemAttr(MTL_ID(), "TmpFileCallback", ObCtxIds::DEFAULT_CTX_ID))); + ObTmpFileBlockManager block_manager; + ASSERT_EQ(OB_SUCCESS, block_manager.init(MTL_ID(), 15 * 1024L * 1024L * 1024L)); ObTmpFileTestMetaTree meta_tree_; - ASSERT_EQ(OB_SUCCESS, meta_tree_.init(1, &wbp, &callback_allocator)); + ASSERT_EQ(OB_SUCCESS, meta_tree_.init(1, &wbp, &callback_allocator, &block_manager)); meta_tree_.set_max_array_item_cnt(2); meta_tree_.set_max_page_item_cnt(3); const int64_t item_num = 30; @@ -390,8 +392,10 @@ TEST_F(TestSNTmpFileMetaTree, test_tree_insert_fail) ASSERT_EQ(OB_SUCCESS, callback_allocator.init(lib::ObMallocAllocator::get_instance(), OB_MALLOC_MIDDLE_BLOCK_SIZE, ObMemAttr(MTL_ID(), "TmpFileCallback", ObCtxIds::DEFAULT_CTX_ID))); + ObTmpFileBlockManager block_manager; + ASSERT_EQ(OB_SUCCESS, block_manager.init(MTL_ID(), 15 * 1024L * 1024L * 1024L)); ObTmpFileTestMetaTree meta_tree_; - ASSERT_EQ(OB_SUCCESS, meta_tree_.init(1, &wbp, &callback_allocator)); + ASSERT_EQ(OB_SUCCESS, meta_tree_.init(1, &wbp, &callback_allocator, &block_manager)); meta_tree_.set_max_array_item_cnt(2); meta_tree_.set_max_page_item_cnt(3); const int64_t item_num = 750; @@ -437,8 +441,10 @@ TEST_F(TestSNTmpFileMetaTree, test_tree_read) ASSERT_EQ(OB_SUCCESS, callback_allocator.init(lib::ObMallocAllocator::get_instance(), OB_MALLOC_MIDDLE_BLOCK_SIZE, ObMemAttr(MTL_ID(), "TmpFileCallback", ObCtxIds::DEFAULT_CTX_ID))); + ObTmpFileBlockManager block_manager; + ASSERT_EQ(OB_SUCCESS, block_manager.init(MTL_ID(), 15 * 1024L * 1024L * 1024L)); ObTmpFileTestMetaTree meta_tree_; - ASSERT_EQ(OB_SUCCESS, meta_tree_.init(1, &wbp, &callback_allocator)); + ASSERT_EQ(OB_SUCCESS, meta_tree_.init(1, &wbp, &callback_allocator, &block_manager)); meta_tree_.set_max_array_item_cnt(2); meta_tree_.set_max_page_item_cnt(3); const int64_t item_num = 25; @@ -494,8 +500,10 @@ TEST_F(TestSNTmpFileMetaTree, test_tree_flush) ASSERT_EQ(OB_SUCCESS, callback_allocator.init(lib::ObMallocAllocator::get_instance(), OB_MALLOC_MIDDLE_BLOCK_SIZE, ObMemAttr(MTL_ID(), "TmpFileCallback", ObCtxIds::DEFAULT_CTX_ID))); + ObTmpFileBlockManager block_manager; + ASSERT_EQ(OB_SUCCESS, block_manager.init(MTL_ID(), 15 * 1024L * 1024L * 1024L)); ObTmpFileTestMetaTree meta_tree_; - ASSERT_EQ(OB_SUCCESS, meta_tree_.init(1, &wbp, &callback_allocator)); + ASSERT_EQ(OB_SUCCESS, meta_tree_.init(1, &wbp, &callback_allocator, &block_manager)); meta_tree_.set_max_array_item_cnt(2); meta_tree_.set_max_page_item_cnt(3); const int64_t item_num = 28; @@ -607,8 +615,10 @@ TEST_F(TestSNTmpFileMetaTree, test_tree_flush_with_multi_io) ASSERT_EQ(OB_SUCCESS, callback_allocator.init(lib::ObMallocAllocator::get_instance(), OB_MALLOC_MIDDLE_BLOCK_SIZE, ObMemAttr(MTL_ID(), "TmpFileCallback", ObCtxIds::DEFAULT_CTX_ID))); + ObTmpFileBlockManager block_manager; + ASSERT_EQ(OB_SUCCESS, block_manager.init(MTL_ID(), 15 * 1024L * 1024L * 1024L)); ObTmpFileTestMetaTree meta_tree_; - ASSERT_EQ(OB_SUCCESS, meta_tree_.init(1, &wbp, &callback_allocator)); + ASSERT_EQ(OB_SUCCESS, meta_tree_.init(1, &wbp, &callback_allocator, &block_manager)); meta_tree_.set_max_array_item_cnt(2); meta_tree_.set_max_page_item_cnt(3); const int64_t item_num = 25; @@ -684,8 +694,10 @@ TEST_F(TestSNTmpFileMetaTree, test_tree_major_flush) ASSERT_EQ(OB_SUCCESS, callback_allocator.init(lib::ObMallocAllocator::get_instance(), OB_MALLOC_MIDDLE_BLOCK_SIZE, ObMemAttr(MTL_ID(), "TmpFileCallback", ObCtxIds::DEFAULT_CTX_ID))); + ObTmpFileBlockManager block_manager; + ASSERT_EQ(OB_SUCCESS, block_manager.init(MTL_ID(), 15 * 1024L * 1024L * 1024L)); ObTmpFileTestMetaTree meta_tree_; - ASSERT_EQ(OB_SUCCESS, meta_tree_.init(1, &wbp, &callback_allocator)); + ASSERT_EQ(OB_SUCCESS, meta_tree_.init(1, &wbp, &callback_allocator, &block_manager)); meta_tree_.set_max_array_item_cnt(2); meta_tree_.set_max_page_item_cnt(3); const int64_t item_num = 25; @@ -735,8 +747,10 @@ TEST_F(TestSNTmpFileMetaTree, test_tree_evict) ASSERT_EQ(OB_SUCCESS, callback_allocator.init(lib::ObMallocAllocator::get_instance(), OB_MALLOC_MIDDLE_BLOCK_SIZE, ObMemAttr(MTL_ID(), "TmpFileCallback", ObCtxIds::DEFAULT_CTX_ID))); + ObTmpFileBlockManager block_manager; + ASSERT_EQ(OB_SUCCESS, block_manager.init(MTL_ID(), 15 * 1024L * 1024L * 1024L)); ObTmpFileTestMetaTree meta_tree_; - ASSERT_EQ(OB_SUCCESS, meta_tree_.init(1, &wbp, &callback_allocator)); + ASSERT_EQ(OB_SUCCESS, meta_tree_.init(1, &wbp, &callback_allocator, &block_manager)); meta_tree_.set_max_array_item_cnt(2); meta_tree_.set_max_page_item_cnt(3); const int64_t item_num = 25; @@ -822,8 +836,10 @@ TEST_F(TestSNTmpFileMetaTree, test_tree_clear) ASSERT_EQ(OB_SUCCESS, callback_allocator.init(lib::ObMallocAllocator::get_instance(), OB_MALLOC_MIDDLE_BLOCK_SIZE, ObMemAttr(MTL_ID(), "TmpFileCallback", ObCtxIds::DEFAULT_CTX_ID))); + ObTmpFileBlockManager block_manager; + ASSERT_EQ(OB_SUCCESS, block_manager.init(MTL_ID(), 15 * 1024L * 1024L * 1024L)); ObTmpFileTestMetaTree meta_tree_; - ASSERT_EQ(OB_SUCCESS, meta_tree_.init(1, &wbp, &callback_allocator)); + ASSERT_EQ(OB_SUCCESS, meta_tree_.init(1, &wbp, &callback_allocator, &block_manager)); meta_tree_.set_max_array_item_cnt(2); meta_tree_.set_max_page_item_cnt(3); const int64_t item_num = 25; @@ -857,8 +873,10 @@ TEST_F(TestSNTmpFileMetaTree, test_tree_truncate) ASSERT_EQ(OB_SUCCESS, callback_allocator.init(lib::ObMallocAllocator::get_instance(), OB_MALLOC_MIDDLE_BLOCK_SIZE, ObMemAttr(MTL_ID(), "TmpFileCallback", ObCtxIds::DEFAULT_CTX_ID))); + ObTmpFileBlockManager block_manager; + ASSERT_EQ(OB_SUCCESS, block_manager.init(MTL_ID(), 15 * 1024L * 1024L * 1024L)); ObTmpFileTestMetaTree meta_tree_; - ASSERT_EQ(OB_SUCCESS, meta_tree_.init(1, &wbp, &callback_allocator)); + ASSERT_EQ(OB_SUCCESS, meta_tree_.init(1, &wbp, &callback_allocator, &block_manager)); meta_tree_.set_max_array_item_cnt(5); meta_tree_.set_max_page_item_cnt(5); const int64_t item_num = 75; @@ -935,8 +953,10 @@ TEST_F(TestSNTmpFileMetaTree, test_tree_truncate_with_unfilled_page) ASSERT_EQ(OB_SUCCESS, callback_allocator.init(lib::ObMallocAllocator::get_instance(), OB_MALLOC_MIDDLE_BLOCK_SIZE, ObMemAttr(MTL_ID(), "TmpFileCallback", ObCtxIds::DEFAULT_CTX_ID))); + ObTmpFileBlockManager block_manager; + ASSERT_EQ(OB_SUCCESS, block_manager.init(MTL_ID(), 15 * 1024L * 1024L * 1024L)); ObTmpFileTestMetaTree meta_tree_; - ASSERT_EQ(OB_SUCCESS, meta_tree_.init(1, &wbp, &callback_allocator)); + ASSERT_EQ(OB_SUCCESS, meta_tree_.init(1, &wbp, &callback_allocator, &block_manager)); meta_tree_.set_max_array_item_cnt(5); meta_tree_.set_max_page_item_cnt(5); const int64_t item_num = 75; @@ -1020,8 +1040,10 @@ TEST_F(TestSNTmpFileMetaTree, test_tree_truncate_with_data_item_remove) ASSERT_EQ(OB_SUCCESS, callback_allocator.init(lib::ObMallocAllocator::get_instance(), OB_MALLOC_MIDDLE_BLOCK_SIZE, ObMemAttr(MTL_ID(), "TmpFileCallback", ObCtxIds::DEFAULT_CTX_ID))); + ObTmpFileBlockManager block_manager; + ASSERT_EQ(OB_SUCCESS, block_manager.init(MTL_ID(), 15 * 1024L * 1024L * 1024L)); ObTmpFileTestMetaTree meta_tree_; - ASSERT_EQ(OB_SUCCESS, meta_tree_.init(1, &wbp, &callback_allocator)); + ASSERT_EQ(OB_SUCCESS, meta_tree_.init(1, &wbp, &callback_allocator, &block_manager)); meta_tree_.set_max_array_item_cnt(5); meta_tree_.set_max_page_item_cnt(5); int64_t item_num = 9; @@ -1127,8 +1149,10 @@ TEST_F(TestSNTmpFileMetaTree, test_tree_flush_with_truncate_occurs_between_buf_g ASSERT_EQ(OB_SUCCESS, callback_allocator.init(lib::ObMallocAllocator::get_instance(), OB_MALLOC_MIDDLE_BLOCK_SIZE, ObMemAttr(MTL_ID(), "TmpFileCallback", ObCtxIds::DEFAULT_CTX_ID))); + ObTmpFileBlockManager block_manager; + ASSERT_EQ(OB_SUCCESS, block_manager.init(MTL_ID(), 15 * 1024L * 1024L * 1024L)); ObTmpFileTestMetaTree meta_tree_; - ASSERT_EQ(OB_SUCCESS, meta_tree_.init(1, &wbp, &callback_allocator)); + ASSERT_EQ(OB_SUCCESS, meta_tree_.init(1, &wbp, &callback_allocator, &block_manager)); meta_tree_.set_max_array_item_cnt(5); meta_tree_.set_max_page_item_cnt(5); int64_t item_num = 19; @@ -1256,8 +1280,10 @@ TEST_F(TestSNTmpFileMetaTree, test_tree_flush_with_truncate_occurs_between_buf_g ASSERT_EQ(OB_SUCCESS, callback_allocator.init(lib::ObMallocAllocator::get_instance(), OB_MALLOC_MIDDLE_BLOCK_SIZE, ObMemAttr(MTL_ID(), "TmpFileCallback", ObCtxIds::DEFAULT_CTX_ID))); + ObTmpFileBlockManager block_manager; + ASSERT_EQ(OB_SUCCESS, block_manager.init(MTL_ID(), 15 * 1024L * 1024L * 1024L)); ObTmpFileTestMetaTree meta_tree_; - ASSERT_EQ(OB_SUCCESS, meta_tree_.init(1, &wbp, &callback_allocator)); + ASSERT_EQ(OB_SUCCESS, meta_tree_.init(1, &wbp, &callback_allocator, &block_manager)); meta_tree_.set_max_array_item_cnt(5); meta_tree_.set_max_page_item_cnt(5); int64_t item_num = 19; @@ -1354,8 +1380,10 @@ TEST_F(TestSNTmpFileMetaTree, test_tree_flush_with_truncate_occurs_between_buf_g ASSERT_EQ(OB_SUCCESS, callback_allocator.init(lib::ObMallocAllocator::get_instance(), OB_MALLOC_MIDDLE_BLOCK_SIZE, ObMemAttr(MTL_ID(), "TmpFileCallback", ObCtxIds::DEFAULT_CTX_ID))); + ObTmpFileBlockManager block_manager; + ASSERT_EQ(OB_SUCCESS, block_manager.init(MTL_ID(), 15 * 1024L * 1024L * 1024L)); ObTmpFileTestMetaTree meta_tree_; - ASSERT_EQ(OB_SUCCESS, meta_tree_.init(1, &wbp, &callback_allocator)); + ASSERT_EQ(OB_SUCCESS, meta_tree_.init(1, &wbp, &callback_allocator, &block_manager)); meta_tree_.set_max_array_item_cnt(5); meta_tree_.set_max_page_item_cnt(5); int64_t item_num = 19; @@ -1452,8 +1480,10 @@ void TestSNTmpFileMetaTree::test_tree_flush_with_truncate_occurs_before_update_m ASSERT_EQ(OB_SUCCESS, callback_allocator.init(lib::ObMallocAllocator::get_instance(), OB_MALLOC_MIDDLE_BLOCK_SIZE, ObMemAttr(MTL_ID(), "TmpFileCallback", ObCtxIds::DEFAULT_CTX_ID))); + ObTmpFileBlockManager block_manager; + ASSERT_EQ(OB_SUCCESS, block_manager.init(MTL_ID(), 15 * 1024L * 1024L * 1024L)); ObTmpFileTestMetaTree meta_tree_; - ASSERT_EQ(OB_SUCCESS, meta_tree_.init(1, &wbp, &callback_allocator)); + ASSERT_EQ(OB_SUCCESS, meta_tree_.init(1, &wbp, &callback_allocator, &block_manager)); meta_tree_.set_max_array_item_cnt(5); meta_tree_.set_max_page_item_cnt(5); int64_t item_num = 70; @@ -1605,8 +1635,10 @@ TEST_F(TestSNTmpFileMetaTree, test_array_insert) ASSERT_EQ(OB_SUCCESS, callback_allocator.init(lib::ObMallocAllocator::get_instance(), OB_MALLOC_MIDDLE_BLOCK_SIZE, ObMemAttr(MTL_ID(), "TmpFileCallback", ObCtxIds::DEFAULT_CTX_ID))); + ObTmpFileBlockManager block_manager; + ASSERT_EQ(OB_SUCCESS, block_manager.init(MTL_ID(), 15 * 1024L * 1024L * 1024L)); ObTmpFileTestMetaTree meta_tree_; - ASSERT_EQ(OB_SUCCESS, meta_tree_.init(1, &wbp, &callback_allocator)); + ASSERT_EQ(OB_SUCCESS, meta_tree_.init(1, &wbp, &callback_allocator, &block_manager)); meta_tree_.set_max_array_item_cnt(100); meta_tree_.set_max_page_item_cnt(100); int64_t item_num = 30; @@ -1616,8 +1648,13 @@ TEST_F(TestSNTmpFileMetaTree, test_array_insert) ASSERT_EQ(item_num, data_items.count()); STORAGE_LOG(INFO, "=======================first insert======================="); //insert 30 items (insert a array) - ASSERT_EQ(OB_SUCCESS, meta_tree_.prepare_for_insert_items()); - ASSERT_EQ(OB_SUCCESS, meta_tree_.insert_items(data_items)); + ObSEArray tmp_data_item_arr; + for (int64_t i = 0; i < data_items.count(); i++) { + tmp_data_item_arr.reset(); + ASSERT_EQ(OB_SUCCESS, tmp_data_item_arr.push_back(data_items.at(i))); + ASSERT_EQ(OB_SUCCESS, meta_tree_.prepare_for_insert_items()); + ASSERT_EQ(OB_SUCCESS, meta_tree_.insert_items(tmp_data_item_arr)); + } ASSERT_EQ(30, meta_tree_.data_item_array_.count()); STORAGE_LOG(INFO, "=======================second insert======================="); @@ -1625,8 +1662,12 @@ TEST_F(TestSNTmpFileMetaTree, test_array_insert) generate_data_items(item_num, 30 * 128, data_items_1); ASSERT_EQ(item_num, data_items_1.count()); //insert 71 items (insert one by one) - ASSERT_EQ(OB_SUCCESS, meta_tree_.prepare_for_insert_items()); - ASSERT_EQ(OB_SUCCESS, meta_tree_.insert_items(data_items_1)); + for (int64_t i = 0; i < data_items_1.count(); i++) { + tmp_data_item_arr.reset(); + ASSERT_EQ(OB_SUCCESS, tmp_data_item_arr.push_back(data_items_1.at(i))); + ASSERT_EQ(OB_SUCCESS, meta_tree_.prepare_for_insert_items()); + ASSERT_EQ(OB_SUCCESS, meta_tree_.insert_items(tmp_data_item_arr)); + } ASSERT_EQ(0, meta_tree_.data_item_array_.count()); ASSERT_EQ(2, meta_tree_.level_page_range_array_.count()); @@ -1644,8 +1685,10 @@ TEST_F(TestSNTmpFileMetaTree, test_tree_prepare_for_insert) ASSERT_EQ(OB_SUCCESS, callback_allocator.init(lib::ObMallocAllocator::get_instance(), OB_MALLOC_MIDDLE_BLOCK_SIZE, ObMemAttr(MTL_ID(), "TmpFileCallback", ObCtxIds::DEFAULT_CTX_ID))); + ObTmpFileBlockManager block_manager; + ASSERT_EQ(OB_SUCCESS, block_manager.init(MTL_ID(), 15 * 1024L * 1024L * 1024L)); ObTmpFileTestMetaTree meta_tree_; - ASSERT_EQ(OB_SUCCESS, meta_tree_.init(1, &wbp, &callback_allocator)); + ASSERT_EQ(OB_SUCCESS, meta_tree_.init(1, &wbp, &callback_allocator, &block_manager)); meta_tree_.set_max_array_item_cnt(5); meta_tree_.set_max_page_item_cnt(5); int64_t item_num = 9; @@ -1653,8 +1696,13 @@ TEST_F(TestSNTmpFileMetaTree, test_tree_prepare_for_insert) generate_data_items(item_num, 0/*start virtual page id*/, data_items); ASSERT_EQ(item_num, data_items.count()); STORAGE_LOG(INFO, "=======================first tree insert======================="); - ASSERT_EQ(OB_SUCCESS, meta_tree_.prepare_for_insert_items()); - ASSERT_EQ(OB_SUCCESS, meta_tree_.insert_items(data_items)); + ObSEArray tmp_data_item_arr; + for (int64_t i = 0; i < data_items.count(); i++) { + tmp_data_item_arr.reset(); + ASSERT_EQ(OB_SUCCESS, tmp_data_item_arr.push_back(data_items.at(i))); + ASSERT_EQ(OB_SUCCESS, meta_tree_.prepare_for_insert_items()); + ASSERT_EQ(OB_SUCCESS, meta_tree_.insert_items(tmp_data_item_arr)); + } ASSERT_EQ(2, meta_tree_.level_page_range_array_.count()); STORAGE_LOG(INFO, "level_page_range_array", K(meta_tree_.level_page_range_array_)); @@ -1689,9 +1737,13 @@ TEST_F(TestSNTmpFileMetaTree, test_tree_prepare_for_insert) ObArray data_items_1; generate_data_items(item_num, 9 * 128, data_items_1); ASSERT_EQ(item_num, data_items_1.count()); - ASSERT_EQ(OB_SUCCESS, meta_tree_.prepare_for_insert_items()); - ASSERT_EQ(1, meta_tree_.read_cache_rightmost_pages_.at(0).second); - ASSERT_EQ(OB_SUCCESS, meta_tree_.insert_items(data_items_1)); + for (int64_t i = 0; i < data_items_1.count(); i++) { + tmp_data_item_arr.reset(); + ASSERT_EQ(OB_SUCCESS, tmp_data_item_arr.push_back(data_items_1.at(i))); + ASSERT_EQ(OB_SUCCESS, meta_tree_.prepare_for_insert_items()); + ASSERT_EQ(1, meta_tree_.read_cache_rightmost_pages_.at(0).second); + ASSERT_EQ(OB_SUCCESS, meta_tree_.insert_items(tmp_data_item_arr)); + } ASSERT_EQ(2, meta_tree_.level_page_range_array_.count()); ASSERT_EQ(2, meta_tree_.level_page_range_array_.at(0).cached_page_num_); ASSERT_EQ(1, meta_tree_.level_page_range_array_.at(0).evicted_page_num_); @@ -1730,10 +1782,14 @@ TEST_F(TestSNTmpFileMetaTree, test_tree_prepare_for_insert) ObArray data_items_2; generate_data_items(item_num, 15 * 128, data_items_2); ASSERT_EQ(item_num, data_items_2.count()); - ASSERT_EQ(OB_SUCCESS, meta_tree_.prepare_for_insert_items()); - ASSERT_EQ(1, meta_tree_.read_cache_rightmost_pages_.at(0).second); - ASSERT_EQ(1, meta_tree_.read_cache_rightmost_pages_.at(1).second); - ASSERT_EQ(OB_SUCCESS, meta_tree_.insert_items(data_items_2)); + for (int64_t i = 0; i < data_items_2.count(); i++) { + tmp_data_item_arr.reset(); + ASSERT_EQ(OB_SUCCESS, tmp_data_item_arr.push_back(data_items_2.at(i))); + ASSERT_EQ(OB_SUCCESS, meta_tree_.prepare_for_insert_items()); + ASSERT_EQ(1, meta_tree_.read_cache_rightmost_pages_.at(0).second); + ASSERT_EQ(1, meta_tree_.read_cache_rightmost_pages_.at(1).second); + ASSERT_EQ(OB_SUCCESS, meta_tree_.insert_items(tmp_data_item_arr)); + } ASSERT_EQ(3, meta_tree_.level_page_range_array_.count()); ASSERT_EQ(5, meta_tree_.level_page_range_array_.at(0).cached_page_num_); ASSERT_EQ(2, meta_tree_.level_page_range_array_.at(0).evicted_page_num_); @@ -1754,8 +1810,10 @@ TEST_F(TestSNTmpFileMetaTree, test_tree_prepare_for_insert_fail) ASSERT_EQ(OB_SUCCESS, callback_allocator.init(lib::ObMallocAllocator::get_instance(), OB_MALLOC_MIDDLE_BLOCK_SIZE, ObMemAttr(MTL_ID(), "TmpFileCallback", ObCtxIds::DEFAULT_CTX_ID))); + ObTmpFileBlockManager block_manager; + ASSERT_EQ(OB_SUCCESS, block_manager.init(MTL_ID(), 15 * 1024L * 1024L * 1024L)); ObTmpFileTestMetaTree meta_tree_; - ASSERT_EQ(OB_SUCCESS, meta_tree_.init(1, &wbp, &callback_allocator)); + ASSERT_EQ(OB_SUCCESS, meta_tree_.init(1, &wbp, &callback_allocator, &block_manager)); meta_tree_.set_max_array_item_cnt(2); meta_tree_.set_max_page_item_cnt(2); @@ -1764,8 +1822,13 @@ TEST_F(TestSNTmpFileMetaTree, test_tree_prepare_for_insert_fail) ObArray data_items; generate_data_items(item_num, 0/*start virtual page id*/, data_items); ASSERT_EQ(item_num, data_items.count()); - ASSERT_EQ(OB_SUCCESS, meta_tree_.prepare_for_insert_items()); - ASSERT_EQ(OB_SUCCESS, meta_tree_.insert_items(data_items)); + ObSEArray tmp_data_item_arr; + for (int64_t i = 0; i < data_items.count(); i++) { + tmp_data_item_arr.reset(); + ASSERT_EQ(OB_SUCCESS, tmp_data_item_arr.push_back(data_items.at(i))); + ASSERT_EQ(OB_SUCCESS, meta_tree_.prepare_for_insert_items()); + ASSERT_EQ(OB_SUCCESS, meta_tree_.insert_items(tmp_data_item_arr)); + } ASSERT_EQ(4, meta_tree_.level_page_range_array_.count()); STORAGE_LOG(INFO, "=======================first tree flush and evict========================="); @@ -1802,7 +1865,7 @@ TEST_F(TestSNTmpFileMetaTree, test_tree_prepare_for_insert_fail) STORAGE_LOG(INFO, "=======================build new meta tree======================="); //We build a new meta tree to take up most of the write cache memory ObTmpFileTestMetaTree meta_tree_1_; - ASSERT_EQ(OB_SUCCESS, meta_tree_1_.init(2, &wbp, &callback_allocator)); + ASSERT_EQ(OB_SUCCESS, meta_tree_1_.init(2, &wbp, &callback_allocator, &block_manager)); meta_tree_1_.set_max_array_item_cnt(2); meta_tree_1_.set_max_page_item_cnt(2); @@ -1811,8 +1874,12 @@ TEST_F(TestSNTmpFileMetaTree, test_tree_prepare_for_insert_fail) ObArray data_items_1; generate_data_items(item_num, 0/*start virtual page id*/, data_items_1); ASSERT_EQ(item_num, data_items_1.count()); - ASSERT_EQ(OB_SUCCESS, meta_tree_1_.prepare_for_insert_items()); - ASSERT_EQ(OB_SUCCESS, meta_tree_1_.insert_items(data_items_1)); + for (int64_t i = 0; i < data_items_1.count(); i++) { + tmp_data_item_arr.reset(); + ASSERT_EQ(OB_SUCCESS, tmp_data_item_arr.push_back(data_items_1.at(i))); + ASSERT_EQ(OB_SUCCESS, meta_tree_1_.prepare_for_insert_items()); + ASSERT_EQ(OB_SUCCESS, meta_tree_1_.insert_items(tmp_data_item_arr)); + } ASSERT_EQ(8, meta_tree_1_.level_page_range_array_.count());//252 pages STORAGE_LOG(INFO, "=======================second insert======================="); @@ -1830,8 +1897,12 @@ TEST_F(TestSNTmpFileMetaTree, test_tree_prepare_for_insert_fail) ObArray data_items_2; generate_data_items(item_num, 10 * 128/*start virtual page id*/, data_items_2); ASSERT_EQ(item_num, data_items_2.count()); - ASSERT_EQ(OB_SUCCESS, meta_tree_.prepare_for_insert_items()); - ASSERT_EQ(OB_SUCCESS, meta_tree_.insert_items(data_items_2)); + for(int64_t i = 0; i < data_items_2.count(); i++) { + tmp_data_item_arr.reset(); + ASSERT_EQ(OB_SUCCESS, tmp_data_item_arr.push_back(data_items_2.at(i))); + ASSERT_EQ(OB_SUCCESS, meta_tree_.prepare_for_insert_items()); + ASSERT_EQ(OB_SUCCESS, meta_tree_.insert_items(tmp_data_item_arr)); + } ASSERT_EQ(5, meta_tree_.level_page_range_array_.count()); ASSERT_EQ(6, meta_tree_.level_page_range_array_.at(0).cached_page_num_); ASSERT_EQ(4, meta_tree_.level_page_range_array_.at(0).evicted_page_num_); @@ -1853,8 +1924,10 @@ TEST_F(TestSNTmpFileMetaTree, test_tree_insert_fail_after_array_used) ASSERT_EQ(OB_SUCCESS, callback_allocator.init(lib::ObMallocAllocator::get_instance(), OB_MALLOC_MIDDLE_BLOCK_SIZE, ObMemAttr(MTL_ID(), "TmpFileCallback", ObCtxIds::DEFAULT_CTX_ID))); + ObTmpFileBlockManager block_manager; + ASSERT_EQ(OB_SUCCESS, block_manager.init(MTL_ID(), 15 * 1024L * 1024L * 1024L)); ObTmpFileTestMetaTree meta_tree_; - ASSERT_EQ(OB_SUCCESS, meta_tree_.init(1, &wbp, &callback_allocator)); + ASSERT_EQ(OB_SUCCESS, meta_tree_.init(1, &wbp, &callback_allocator, &block_manager)); meta_tree_.set_max_array_item_cnt(3); meta_tree_.set_max_page_item_cnt(3); STORAGE_LOG(INFO, "=======================first insert======================="); @@ -1903,8 +1976,10 @@ TEST_F(TestSNTmpFileMetaTree, test_tree_insert_fail_after_tree_build) ASSERT_EQ(OB_SUCCESS, callback_allocator.init(lib::ObMallocAllocator::get_instance(), OB_MALLOC_MIDDLE_BLOCK_SIZE, ObMemAttr(MTL_ID(), "TmpFileCallback", ObCtxIds::DEFAULT_CTX_ID))); + ObTmpFileBlockManager block_manager; + ASSERT_EQ(OB_SUCCESS, block_manager.init(MTL_ID(), 15 * 1024L * 1024L * 1024L)); ObTmpFileTestMetaTree meta_tree_; - ASSERT_EQ(OB_SUCCESS, meta_tree_.init(1, &wbp, &callback_allocator)); + ASSERT_EQ(OB_SUCCESS, meta_tree_.init(1, &wbp, &callback_allocator, &block_manager)); meta_tree_.set_max_array_item_cnt(2); meta_tree_.set_max_page_item_cnt(3); STORAGE_LOG(INFO, "=======================first insert======================="); @@ -1957,8 +2032,10 @@ TEST_F(TestSNTmpFileMetaTree, test_array_read) ASSERT_EQ(OB_SUCCESS, callback_allocator.init(lib::ObMallocAllocator::get_instance(), OB_MALLOC_MIDDLE_BLOCK_SIZE, ObMemAttr(MTL_ID(), "TmpFileCallback", ObCtxIds::DEFAULT_CTX_ID))); + ObTmpFileBlockManager block_manager; + ASSERT_EQ(OB_SUCCESS, block_manager.init(MTL_ID(), 15 * 1024L * 1024L * 1024L)); ObTmpFileTestMetaTree meta_tree_; - ASSERT_EQ(OB_SUCCESS, meta_tree_.init(1, &wbp, &callback_allocator)); + ASSERT_EQ(OB_SUCCESS, meta_tree_.init(1, &wbp, &callback_allocator, &block_manager)); meta_tree_.set_max_array_item_cnt(100); meta_tree_.set_max_page_item_cnt(100); STORAGE_LOG(INFO, "=======================first array insert======================="); @@ -2041,8 +2118,10 @@ TEST_F(TestSNTmpFileMetaTree, test_read_fail) ASSERT_EQ(OB_SUCCESS, callback_allocator.init(lib::ObMallocAllocator::get_instance(), OB_MALLOC_MIDDLE_BLOCK_SIZE, ObMemAttr(MTL_ID(), "TmpFileCallback", ObCtxIds::DEFAULT_CTX_ID))); + ObTmpFileBlockManager block_manager; + ASSERT_EQ(OB_SUCCESS, block_manager.init(MTL_ID(), 15 * 1024L * 1024L * 1024L)); ObTmpFileTestMetaTree meta_tree_; - ASSERT_EQ(OB_SUCCESS, meta_tree_.init(1, &wbp, &callback_allocator)); + ASSERT_EQ(OB_SUCCESS, meta_tree_.init(1, &wbp, &callback_allocator, &block_manager)); meta_tree_.set_max_array_item_cnt(3); meta_tree_.set_max_page_item_cnt(5); STORAGE_LOG(INFO, "=======================tree insert======================="); @@ -2087,8 +2166,10 @@ TEST_F(TestSNTmpFileMetaTree, test_array_read_after_truncate) ASSERT_EQ(OB_SUCCESS, callback_allocator.init(lib::ObMallocAllocator::get_instance(), OB_MALLOC_MIDDLE_BLOCK_SIZE, ObMemAttr(MTL_ID(), "TmpFileCallback", ObCtxIds::DEFAULT_CTX_ID))); + ObTmpFileBlockManager block_manager; + ASSERT_EQ(OB_SUCCESS, block_manager.init(MTL_ID(), 15 * 1024L * 1024L * 1024L)); ObTmpFileTestMetaTree meta_tree_; - ASSERT_EQ(OB_SUCCESS, meta_tree_.init(1, &wbp, &callback_allocator)); + ASSERT_EQ(OB_SUCCESS, meta_tree_.init(1, &wbp, &callback_allocator, &block_manager)); meta_tree_.set_max_array_item_cnt(100); meta_tree_.set_max_page_item_cnt(100); STORAGE_LOG(INFO, "=======================array insert======================="); @@ -2133,8 +2214,10 @@ TEST_F(TestSNTmpFileMetaTree, test_write_tail) ASSERT_EQ(OB_SUCCESS, callback_allocator.init(lib::ObMallocAllocator::get_instance(), OB_MALLOC_MIDDLE_BLOCK_SIZE, ObMemAttr(MTL_ID(), "TmpFileCallback", ObCtxIds::DEFAULT_CTX_ID))); + ObTmpFileBlockManager block_manager; + ASSERT_EQ(OB_SUCCESS, block_manager.init(MTL_ID(), 15 * 1024L * 1024L * 1024L)); ObTmpFileTestMetaTree meta_tree_; - ASSERT_EQ(OB_SUCCESS, meta_tree_.init(1, &wbp, &callback_allocator)); + ASSERT_EQ(OB_SUCCESS, meta_tree_.init(1, &wbp, &callback_allocator, &block_manager)); meta_tree_.set_max_array_item_cnt(5); meta_tree_.set_max_page_item_cnt(5); STORAGE_LOG(INFO, "=======================first insert======================="); @@ -2216,8 +2299,10 @@ TEST_F(TestSNTmpFileMetaTree, test_page_is_dirty_again_during_flush) ASSERT_EQ(OB_SUCCESS, callback_allocator.init(lib::ObMallocAllocator::get_instance(), OB_MALLOC_MIDDLE_BLOCK_SIZE, ObMemAttr(MTL_ID(), "TmpFileCallback", ObCtxIds::DEFAULT_CTX_ID))); + ObTmpFileBlockManager block_manager; + ASSERT_EQ(OB_SUCCESS, block_manager.init(MTL_ID(), 15 * 1024L * 1024L * 1024L)); ObTmpFileTestMetaTree meta_tree_; - ASSERT_EQ(OB_SUCCESS, meta_tree_.init(1, &wbp, &callback_allocator)); + ASSERT_EQ(OB_SUCCESS, meta_tree_.init(1, &wbp, &callback_allocator, &block_manager)); meta_tree_.set_max_array_item_cnt(5); meta_tree_.set_max_page_item_cnt(5); STORAGE_LOG(INFO, "=======================first tree insert======================="); @@ -2312,8 +2397,10 @@ TEST_F(TestSNTmpFileMetaTree, test_insert_items_during_flush) ASSERT_EQ(OB_SUCCESS, callback_allocator.init(lib::ObMallocAllocator::get_instance(), OB_MALLOC_MIDDLE_BLOCK_SIZE, ObMemAttr(MTL_ID(), "TmpFileCallback", ObCtxIds::DEFAULT_CTX_ID))); + ObTmpFileBlockManager block_manager; + ASSERT_EQ(OB_SUCCESS, block_manager.init(MTL_ID(), 15 * 1024L * 1024L * 1024L)); ObTmpFileTestMetaTree meta_tree_; - ASSERT_EQ(OB_SUCCESS, meta_tree_.init(1, &wbp, &callback_allocator)); + ASSERT_EQ(OB_SUCCESS, meta_tree_.init(1, &wbp, &callback_allocator, &block_manager)); meta_tree_.set_max_array_item_cnt(5); meta_tree_.set_max_page_item_cnt(5); STORAGE_LOG(INFO, "=======================first tree insert======================="); diff --git a/src/storage/tmp_file/ob_shared_nothing_tmp_file.cpp b/src/storage/tmp_file/ob_shared_nothing_tmp_file.cpp index 757189d15..51bb900ad 100644 --- a/src/storage/tmp_file/ob_shared_nothing_tmp_file.cpp +++ b/src/storage/tmp_file/ob_shared_nothing_tmp_file.cpp @@ -313,7 +313,7 @@ int ObSharedNothingTmpFile::init(const uint64_t tenant_id, const int64_t fd, con } else if (OB_FAIL(page_idx_cache_.init(fd, &pc_ctrl->get_write_buffer_pool(), wbp_index_cache_allocator, wbp_index_cache_bkt_allocator))) { LOG_WARN("fail to init page idx array", KR(ret), K(fd)); - } else if (OB_FAIL(meta_tree_.init(fd, &pc_ctrl->get_write_buffer_pool(), callback_allocator))) { + } else if (OB_FAIL(meta_tree_.init(fd, &pc_ctrl->get_write_buffer_pool(), callback_allocator, block_manager))) { LOG_WARN("fail to init meta tree", KR(ret), K(fd)); } else { is_inited_ = true; diff --git a/src/storage/tmp_file/ob_tmp_file_meta_tree.cpp b/src/storage/tmp_file/ob_tmp_file_meta_tree.cpp index 87466fe1a..761e26f50 100644 --- a/src/storage/tmp_file/ob_tmp_file_meta_tree.cpp +++ b/src/storage/tmp_file/ob_tmp_file_meta_tree.cpp @@ -32,6 +32,9 @@ int16_t ObSharedNothingTmpFileMetaTree::MAX_PAGE_ITEM_COUNT = INT16_MAX; ObSharedNothingTmpFileMetaTree::ObSharedNothingTmpFileMetaTree() : is_inited_(false), fd_(-1), + wbp_(nullptr), + callback_allocator_(nullptr), + block_manager_(nullptr), tree_epoch_(0), root_item_(), data_item_array_(), @@ -56,8 +59,10 @@ void ObSharedNothingTmpFileMetaTree::reset() { is_inited_ = false; fd_ = -1; - wbp_ = NULL; - tree_epoch_ = 0, + wbp_ = nullptr; + callback_allocator_ = nullptr; + block_manager_ = nullptr; + tree_epoch_ = 0; root_item_.reset(); data_item_array_.reset(); level_page_range_array_.reset(); @@ -69,18 +74,22 @@ void ObSharedNothingTmpFileMetaTree::reset() int ObSharedNothingTmpFileMetaTree::init(const int64_t fd, ObTmpWriteBufferPool *wbp, - ObIAllocator *callback_allocator) + ObIAllocator *callback_allocator, + ObTmpFileBlockManager *block_manager) { int ret = OB_SUCCESS; - if (OB_ISNULL(wbp)) { + if (OB_UNLIKELY(NULL == wbp + || NULL == callback_allocator + || NULL == block_manager)) { ret = OB_INVALID_ARGUMENT; - STORAGE_LOG(WARN, "invalid argument", KR(ret), K(fd_), KP(wbp)); + STORAGE_LOG(WARN, "invalid argument", KR(ret), K(fd_), KP(wbp), KP(callback_allocator), KP(block_manager)); } else { data_item_array_.set_attr(ObMemAttr(MTL_ID(), "TFDataItemArr")); level_page_range_array_.set_attr(ObMemAttr(MTL_ID(), "TFTreeLevelArr")); fd_ = fd; wbp_ = wbp; callback_allocator_ = callback_allocator; + block_manager_ = block_manager; is_inited_ = true; } return ret; @@ -108,7 +117,7 @@ int ObSharedNothingTmpFileMetaTree::get_rightmost_leaf_page_for_write_( if (OB_UNLIKELY(is_writing_ || level_page_range_array_.empty())) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected is_writing_ or level_array_", KR(ret), K(fd_), K(is_writing_), K(level_page_range_array_)); + STORAGE_LOG(ERROR, "unexpected is_writing_ or level_array_", KR(ret), K(fd_), K(is_writing_), K(level_page_range_array_)); } else { is_writing_ = true; //need to be protected by lock_ ObSharedNothingTmpFileMetaItem meta_item = root_item_; @@ -127,7 +136,7 @@ int ObSharedNothingTmpFileMetaTree::get_rightmost_leaf_page_for_write_( if (OB_SUCC(ret)) { if (OB_UNLIKELY(0 != meta_item.page_level_)) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected page_level_", KR(ret), K(meta_item)); + STORAGE_LOG(ERROR, "unexpected page_level_", KR(ret), K(meta_item)); } else if (OB_FAIL(cache_page_for_write_(parent_page_id, meta_item))) { STORAGE_LOG(WARN, "fail to cache page for write", KR(ret), K(fd_), K(parent_page_id), K(meta_item)); } else { @@ -159,12 +168,12 @@ int ObSharedNothingTmpFileMetaTree::get_last_item_of_internal_page_( level_page_range_array_[page_info.page_level_].cached_page_num_ - 1; ObTmpFilePageUniqKey page_key(page_info.page_level_, level_page_index); if (OB_FAIL(wbp_->read_page(fd_, page_info.buffer_page_id_, page_key, page_buff, next_page_id))) { - STORAGE_LOG(WARN, "fail to read from write cache", KR(ret), K(fd_), K(page_info), K(page_key), K(level_page_range_array_)); + STORAGE_LOG(ERROR, "fail to read from write cache", KR(ret), K(fd_), K(page_info), K(page_key), K(level_page_range_array_)); } else if (OB_FAIL(read_page_header_(page_buff, page_header))) { STORAGE_LOG(WARN, "fail to read page header", KR(ret), K(fd_), KP(page_buff)); } else if (OB_UNLIKELY(0 >= page_header.item_num_)) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected item_num", KR(ret), K(page_header)); + STORAGE_LOG(ERROR, "unexpected item_num", KR(ret), K(page_header)); } else if (OB_FAIL(read_item_(page_buff, page_header.item_num_ - 1, last_meta_item))) { STORAGE_LOG(WARN, "fail to read item", KR(ret), K(fd_), KP(page_buff), K(page_header)); } @@ -183,7 +192,7 @@ int ObSharedNothingTmpFileMetaTree::insert_items( } else if (OB_UNLIKELY(!data_items.at(0).is_valid() || released_offset_ > data_items.at(0).virtual_page_id_ * ObTmpFileGlobal::PAGE_SIZE)) { ret = OB_INVALID_ARGUMENT; - STORAGE_LOG(WARN, "invalid argument", KR(ret), K(data_items.at(0)), KPC(this)); + STORAGE_LOG(ERROR, "invalid argument", KR(ret), K(data_items.at(0)), KPC(this)); } else { int64_t write_count = 0; const int64_t data_item_count = data_items.count(); @@ -196,7 +205,7 @@ int ObSharedNothingTmpFileMetaTree::insert_items( // so, we need not to worry about end pages of each level will be evicted. if (OB_UNLIKELY(!is_writing_)) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected is_writing_", KR(ret), KPC(this)); + STORAGE_LOG(ERROR, "unexpected is_writing_", KR(ret), KPC(this)); } else if (OB_FAIL(try_to_fill_rightmost_leaf_page_(data_items, level_new_pages, write_count, level_origin_page_write_counts))) { STORAGE_LOG(WARN, "fail to try to fill rightmost leaf page", KR(ret), K(data_items), K(level_new_pages), KPC(this)); @@ -257,13 +266,13 @@ int ObSharedNothingTmpFileMetaTree::try_to_insert_items_to_array_( || MAX_DATA_ITEM_ARRAY_COUNT > MAX_PAGE_ITEM_COUNT || is_writing_)) { ret = OB_INVALID_ARGUMENT; - STORAGE_LOG(WARN, "invalid argument", KR(ret), K(fd_), K(data_items), K(level_page_range_array_), + STORAGE_LOG(ERROR, "invalid argument", KR(ret), K(fd_), K(data_items), K(level_page_range_array_), K(level_new_pages), K(MAX_DATA_ITEM_ARRAY_COUNT), K(MAX_PAGE_ITEM_COUNT), K(is_writing_)); } else if (!data_item_array_.empty()) { const ObSharedNothingTmpFileDataItem &last_item = data_item_array_.at(data_item_array_.count() - 1); if (OB_UNLIKELY(data_items.at(0).virtual_page_id_ != last_item.virtual_page_id_ + last_item.physical_page_num_)) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected data_items or data_item_array_", KR(ret), K(fd_), K(data_items), K(last_item)); + STORAGE_LOG(ERROR, "unexpected data_items or data_item_array_", KR(ret), K(fd_), K(data_items), K(last_item)); } } if (OB_SUCC(ret)) { @@ -282,9 +291,9 @@ int ObSharedNothingTmpFileMetaTree::try_to_insert_items_to_array_( ARRAY_FOREACH_N(data_items, i, cnt) { if (OB_UNLIKELY(!data_items.at(i).is_valid())) { ret = OB_INVALID_ARGUMENT; - STORAGE_LOG(WARN, "invalid argument", KR(ret), K(fd_), K(data_items.at(i))); + STORAGE_LOG(ERROR, "invalid argument", KR(ret), K(fd_), K(data_items.at(i))); } else if (OB_FAIL(data_item_array_.push_back(data_items.at(i)))) { - STORAGE_LOG(WARN, "fail to push back", KR(ret), K(fd_), K(data_items.at(i))); + STORAGE_LOG(ERROR, "fail to push back", KR(ret), K(fd_), K(data_items.at(i))); } } } else { @@ -311,7 +320,7 @@ int ObSharedNothingTmpFileMetaTree::try_to_insert_items_to_array_( OB_FAIL(write_items_(new_page_buff, data_item_array_, 0/*begin_index*/, count))) { STORAGE_LOG(WARN, "fail to write items", KR(ret), K(fd_), K(data_item_array_), KP(new_page_buff)); } else if (OB_FAIL(wbp_->notify_dirty(fd_, new_page_id, leaf_page_offset))) { - STORAGE_LOG(WARN, "fail to notify dirty for meta", KR(ret), K(fd_), K(new_page_id), K(leaf_page_offset)); + STORAGE_LOG(ERROR, "fail to notify dirty for meta", KR(ret), K(fd_), K(new_page_id), K(leaf_page_offset)); } else { level_new_pages.at(0).at(0) = new_page_id; is_writing_ = true; //must be protected by lock @@ -342,10 +351,10 @@ int ObSharedNothingTmpFileMetaTree::try_to_fill_rightmost_leaf_page_( int ret = OB_SUCCESS; write_count = 0; if (OB_UNLIKELY(data_items.empty() || !data_items.at(0).is_valid() - || (level_new_pages.empty() && level_page_range_array_.empty() - || !level_origin_page_write_counts.empty()))) { + || (level_new_pages.empty() && level_page_range_array_.empty()) + || !level_origin_page_write_counts.empty())) { ret = OB_INVALID_ARGUMENT; - STORAGE_LOG(WARN, "invalid argument", KR(ret), K(fd_), K(data_items), K(level_new_pages), + STORAGE_LOG(ERROR, "invalid argument", KR(ret), K(fd_), K(data_items), K(level_new_pages), K(level_page_range_array_), K(level_origin_page_write_counts)); } else { const int16_t MAX_PAGE_DATA_ITEM_NUM = @@ -365,7 +374,7 @@ int ObSharedNothingTmpFileMetaTree::try_to_fill_rightmost_leaf_page_( } ObTmpFilePageUniqKey leaf_page_offset(0, level_page_index); if (OB_FAIL(wbp_->read_page(fd_, page_id, leaf_page_offset, leaf_page_buff, next_page_id))) { - STORAGE_LOG(WARN, "fail to read from write cache", KR(ret), K(fd_), K(page_id), K(leaf_page_offset), + STORAGE_LOG(ERROR, "fail to read from write cache", KR(ret), K(fd_), K(page_id), K(leaf_page_offset), K(level_new_pages), K(level_page_range_array_)); } else if (OB_FAIL(read_page_header_(leaf_page_buff, page_header))) { STORAGE_LOG(WARN, "fail to read header", KR(ret), K(fd_), KP(leaf_page_buff)); @@ -382,17 +391,17 @@ int ObSharedNothingTmpFileMetaTree::try_to_fill_rightmost_leaf_page_( STORAGE_LOG(WARN, "fail to read item", KR(ret), K(fd_), KP(leaf_page_buff), K(page_header)); } else if (OB_UNLIKELY(data_items.at(0).virtual_page_id_ != origin_last_item.virtual_page_id_ + origin_last_item.physical_page_num_)) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected data_items or origin_last_item", KR(ret), K(fd_), K(data_items), K(origin_last_item)); + STORAGE_LOG(ERROR, "unexpected data_items or origin_last_item", KR(ret), K(fd_), K(data_items), K(origin_last_item)); } } if (OB_SUCC(ret)) { if (!level_page_range_array_.empty() && OB_FAIL(level_origin_page_write_counts.push_back(count))) { - STORAGE_LOG(WARN, "fail to push back", KR(ret), K(fd_), KP(leaf_page_buff), K(count)); + STORAGE_LOG(WARN, "fail to push back", KR(ret), K(fd_), K(count)); } else if (page_header.item_num_ < MAX_PAGE_DATA_ITEM_NUM) { if (OB_FAIL(write_items_(leaf_page_buff, data_items, 0, count))) { STORAGE_LOG(WARN, "fail to write items", KR(ret), K(fd_), KP(leaf_page_buff), K(data_items)); } else if (OB_FAIL(wbp_->notify_dirty(fd_, page_id, leaf_page_offset))) { - STORAGE_LOG(WARN, "fail to notify dirty for meta", KR(ret), K(fd_), K(page_id), K(leaf_page_offset)); + STORAGE_LOG(ERROR, "fail to notify dirty for meta", KR(ret), K(fd_), K(page_id), K(leaf_page_offset)); } else { write_count += count; if (!level_page_range_array_.empty()) { @@ -436,10 +445,10 @@ int ObSharedNothingTmpFileMetaTree::add_new_page_and_fill_items_at_leaf_( ObTmpFilePageUniqKey leaf_page_offset(0, level_page_index); if (OB_UNLIKELY(!level_new_pages.empty() && 1 != level_new_pages.count())) { ret = OB_INVALID_ARGUMENT; - STORAGE_LOG(WARN, "invalid argument", KR(ret), K(fd_), K(level_new_pages)); + STORAGE_LOG(ERROR, "invalid argument", KR(ret), K(fd_), K(level_new_pages)); } else if (OB_UNLIKELY(data_items.count() <= write_count || !data_items.at(write_count).is_valid())) { ret = OB_INVALID_ARGUMENT; - STORAGE_LOG(WARN, "invalid argument", KR(ret), K(fd_), K(data_items), K(write_count)); + STORAGE_LOG(ERROR, "invalid argument", KR(ret), K(fd_), K(data_items), K(write_count)); } else if (level_new_pages.empty()) { ObSEArray new_pages; if (OB_FAIL(level_new_pages.push_back(new_pages))) { @@ -457,7 +466,7 @@ int ObSharedNothingTmpFileMetaTree::add_new_page_and_fill_items_at_leaf_( } else if (OB_FAIL(write_items_(new_page_buff, data_items, write_count/*begin_index*/, count))) { STORAGE_LOG(WARN, "fail to write items", KR(ret), K(fd_), KP(new_page_buff), K(data_items), K(write_count)); } else if (OB_FAIL(wbp_->notify_dirty(fd_, new_page_id, leaf_page_offset))) { - STORAGE_LOG(WARN, "fail to notify dirty for meta", KR(ret), K(fd_), K(new_page_id), K(leaf_page_offset)); + STORAGE_LOG(ERROR, "fail to notify dirty for meta", KR(ret), K(fd_), K(new_page_id), K(leaf_page_offset)); } else { meta_item.page_level_ = 0; meta_item.buffer_page_id_ = new_page_id; @@ -486,14 +495,13 @@ int ObSharedNothingTmpFileMetaTree::cascade_modification_at_internal_( if (OB_UNLIKELY(new_leaf_page_infos.empty() || level_new_pages.empty())) { ret = OB_INVALID_ARGUMENT; - STORAGE_LOG(WARN, "invalid argument", KR(ret), K(fd_), K(new_leaf_page_infos), K(level_new_pages)); + STORAGE_LOG(ERROR, "invalid argument", KR(ret), K(fd_), K(new_leaf_page_infos), K(level_new_pages)); } else { ObSEArray prev_meta_items; ObSEArray meta_items; ObSharedNothingTmpFileMetaItem meta_item; const int16_t origin_level_count = level_page_range_array_.count(); int16_t cur_level = 1; - //TODO: time limitation in while loop while (OB_SUCC(ret)) { int64_t write_count = 0; prev_meta_items.reset(); @@ -538,12 +546,12 @@ int ObSharedNothingTmpFileMetaTree::cascade_modification_at_internal_( if (OB_SUCC(ret)) { if (OB_UNLIKELY(origin_level_count == level_new_pages.count())) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected level_new_pages", KR(ret), K(fd_), K(level_new_pages), K(origin_level_count)); + STORAGE_LOG(ERROR, "unexpected level_new_pages", KR(ret), K(fd_), K(level_new_pages), K(origin_level_count)); } else if (origin_level_count < level_new_pages.count()) { if (OB_UNLIKELY(1 != meta_items.count() || 1 != level_new_pages.at(level_new_pages.count() - 1).count())) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected meta_items or level_new_pages", KR(ret), K(fd_), K(meta_items), + STORAGE_LOG(ERROR, "unexpected meta_items or level_new_pages", KR(ret), K(fd_), K(meta_items), K(level_new_pages), K(origin_level_count)); } else { root_item_ = meta_items.at(0); @@ -568,7 +576,7 @@ int ObSharedNothingTmpFileMetaTree::try_to_fill_rightmost_internal_page_( || page_level >= level_page_range_array_.count() || page_level != level_origin_page_write_counts.count())) { ret = OB_INVALID_ARGUMENT; - STORAGE_LOG(WARN, "invalid argument", KR(ret), K(fd_), K(meta_items), K(page_level), K(level_page_range_array_), + STORAGE_LOG(ERROR, "invalid argument", KR(ret), K(fd_), K(meta_items), K(page_level), K(level_page_range_array_), K(level_origin_page_write_counts)); } else { const int16_t MAX_PAGE_META_ITEM_NUM = @@ -583,7 +591,7 @@ int ObSharedNothingTmpFileMetaTree::try_to_fill_rightmost_internal_page_( ObTmpFilePageUniqKey internal_page_offset(page_level, level_page_index); //only a writing thread. if (OB_FAIL(wbp_->read_page(fd_, page_id, internal_page_offset, internal_page_buff, next_page_id))) { - STORAGE_LOG(WARN, "fail to read from write cache", KR(ret), K(fd_), K(page_id), K(internal_page_offset)); + STORAGE_LOG(ERROR, "fail to read from write cache", KR(ret), K(fd_), K(page_id), K(internal_page_offset)); } else if (OB_FAIL(read_page_header_(internal_page_buff, page_header))) { STORAGE_LOG(WARN, "fail to read page header", KR(ret), K(fd_), KP(internal_page_buff)); } else if (OB_FAIL(level_origin_page_write_counts.push_back(count))) { @@ -592,11 +600,11 @@ int ObSharedNothingTmpFileMetaTree::try_to_fill_rightmost_internal_page_( if (page_header.item_num_ <= 0) { //the rightmost page in internal level must has items ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected item_num", KR(ret), K(fd_), K(page_header)); + STORAGE_LOG(ERROR, "unexpected item_num", KR(ret), K(fd_), K(page_header)); } else if (OB_FAIL(write_items_(internal_page_buff, meta_items, 0, count))) { STORAGE_LOG(WARN, "fail to write items", KR(ret), K(fd_), KP(internal_page_buff), K(meta_items)); } else if (OB_FAIL(wbp_->notify_dirty(fd_, page_id, internal_page_offset))) { - STORAGE_LOG(WARN, "fail to notify dirty for meta", KR(ret), K(fd_), K(page_id), K(internal_page_offset)); + STORAGE_LOG(ERROR, "fail to notify dirty for meta", KR(ret), K(fd_), K(page_id), K(internal_page_offset)); } else { write_count += count; level_origin_page_write_counts.at(page_level) = count; @@ -635,11 +643,11 @@ int ObSharedNothingTmpFileMetaTree::add_new_page_and_fill_items_at_internal_( ObTmpFilePageUniqKey internal_page_offset(page_level, level_page_index); if (OB_UNLIKELY(meta_items.count() <= write_count || !meta_items.at(write_count).is_valid())) { ret = OB_INVALID_ARGUMENT; - STORAGE_LOG(WARN, "invalid argument", KR(ret), K(fd_), K(meta_items), K(write_count)); + STORAGE_LOG(ERROR, "invalid argument", KR(ret), K(fd_), K(meta_items), K(write_count)); } else if (OB_UNLIKELY(level_new_pages.count() != page_level && level_new_pages.count() != page_level + 1)) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected level_new_pages", KR(ret), K(fd_), K(page_level), K(level_new_pages)); + STORAGE_LOG(ERROR, "unexpected level_new_pages", KR(ret), K(fd_), K(page_level), K(level_new_pages)); } else if (level_new_pages.count() == page_level) { ObSEArray new_pages; if (OB_FAIL(level_new_pages.push_back(new_pages))) { @@ -647,7 +655,7 @@ int ObSharedNothingTmpFileMetaTree::add_new_page_and_fill_items_at_internal_( } } if (FAILEDx(level_new_pages.at(page_level).push_back(ObTmpFileGlobal::INVALID_PAGE_ID))) { - STORAGE_LOG(WARN, "fail to push back", KR(ret), K(fd_), K(new_page_id)); + STORAGE_LOG(WARN, "fail to push back", KR(ret), K(fd_), K(page_level)); } else if (OB_FAIL(wbp_->alloc_page(fd_, internal_page_offset, new_page_id, new_page_buff))) { STORAGE_LOG(WARN, "fail to alloc page from write cache", KR(ret), K(fd_), K(internal_page_offset)); } else if (FALSE_IT(stat_info_.meta_page_alloc_cnt_++)) { @@ -656,7 +664,7 @@ int ObSharedNothingTmpFileMetaTree::add_new_page_and_fill_items_at_internal_( } else if (OB_FAIL(write_items_(new_page_buff, meta_items, write_count/*begin_index*/, count))) { STORAGE_LOG(WARN, "fail to write items", KR(ret), K(fd_), KP(new_page_buff), K(meta_items), K(write_count)); } else if (OB_FAIL(wbp_->notify_dirty(fd_, new_page_id, internal_page_offset))) { - STORAGE_LOG(WARN, "fail to notify dirty for meta", KR(ret), K(fd_), K(new_page_id), K(internal_page_offset)); + STORAGE_LOG(ERROR, "fail to notify dirty for meta", KR(ret), K(fd_), K(new_page_id), K(internal_page_offset)); } else { meta_item.page_level_ = page_level; meta_item.buffer_page_id_ = new_page_id; @@ -684,7 +692,7 @@ int ObSharedNothingTmpFileMetaTree::finish_insert_( int ret = OB_SUCCESS; if (OB_UNLIKELY(level_origin_page_write_counts.count() > level_page_range_array_.count())) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected new record level page infos", KR(ret), K(fd_), + STORAGE_LOG(ERROR, "unexpected new record level page infos", KR(ret), K(fd_), K(level_origin_page_write_counts), K(level_page_range_array_)); } else if (OB_SUCCESS == return_ret) { if (OB_FAIL(level_page_range_array_.reserve(level_new_pages.count()))) { @@ -696,11 +704,11 @@ int ObSharedNothingTmpFileMetaTree::finish_insert_( if (0 == i && level_page_range_array_.count() <= level) { if (OB_FAIL(level_page_range_array_.push_back( LevelPageRangeInfo(new_page_id, ObTmpFileGlobal::INVALID_PAGE_ID, new_page_id, 1, 0, 0)))) { - STORAGE_LOG(WARN, "fail to push back", KR(ret), K(fd_), K(new_page_id)); + STORAGE_LOG(ERROR, "fail to push back", KR(ret), K(fd_), K(new_page_id)); } } else if (OB_UNLIKELY(level_page_range_array_.count() <= level)) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected level_page_range_array_", KR(ret), K(fd_), K(level_page_range_array_), K(level)); + STORAGE_LOG(ERROR, "unexpected level_page_range_array_", KR(ret), K(fd_), K(level_page_range_array_), K(level)); } else { uint32_t end_page_id_in_array = level_page_range_array_[level].end_page_id_; int32_t level_prev_page_index = level_page_range_array_[level].evicted_page_num_ + @@ -708,7 +716,7 @@ int ObSharedNothingTmpFileMetaTree::finish_insert_( if (ObTmpFileGlobal::INVALID_PAGE_ID != end_page_id_in_array && OB_FAIL(wbp_->link_page(fd_, new_page_id, end_page_id_in_array, ObTmpFilePageUniqKey(level, level_prev_page_index)))) { - STORAGE_LOG(WARN, "fail to link page in write cache", KR(ret), K(fd_), K(level_page_range_array_), + STORAGE_LOG(ERROR, "fail to link page in write cache", KR(ret), K(fd_), K(level_page_range_array_), K(new_page_id), K(level)); } else { if (ObTmpFileGlobal::INVALID_PAGE_ID == end_page_id_in_array) { @@ -735,7 +743,7 @@ int ObSharedNothingTmpFileMetaTree::finish_insert_( level_page_range_array_[i].cached_page_num_ - 1; ObTmpFilePageUniqKey page_key(i, level_page_index); if (OB_FAIL(wbp_->read_page(fd_, end_page_id, page_key, page_buff, next_page_id))) { - STORAGE_LOG(WARN, "fail to read from write cache", KR(ret), K(fd_), K(end_page_id), K(page_key)); + STORAGE_LOG(ERROR, "fail to read from write cache", KR(ret), K(fd_), K(end_page_id), K(page_key)); } else if (OB_FAIL(remove_page_item_from_tail_(page_buff, remove_cnt))) { STORAGE_LOG(WARN, "fail to remove page item from tail", KR(ret), K(fd_), KP(page_buff), K(remove_cnt)); } @@ -753,7 +761,7 @@ int ObSharedNothingTmpFileMetaTree::finish_insert_( uint32_t unused_next_page_id = ObTmpFileGlobal::INVALID_PAGE_ID; ObTmpFilePageUniqKey page_key(level, level_page_index + i); if (OB_FAIL(wbp_->free_page(fd_, new_page_id, page_key, unused_next_page_id))) { - STORAGE_LOG(WARN, "fail to free meta page in write cache", KR(ret), K(fd_), K(new_page_id), K(page_key)); + STORAGE_LOG(ERROR, "fail to free meta page in write cache", KR(ret), K(fd_), K(new_page_id), K(page_key)); } else { stat_info_.meta_page_free_cnt_++; } @@ -764,7 +772,7 @@ int ObSharedNothingTmpFileMetaTree::finish_insert_( if (level_page_range_array_.empty()) { if (OB_UNLIKELY(stat_info_.meta_page_alloc_cnt_ != stat_info_.meta_page_free_cnt_)) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(ERROR, "unexpected stat_info_", KR(ret), K(return_ret), K(stat_info_)); + STORAGE_LOG(ERROR, "unexpected stat_info_", KR(ret), K(fd_), K(return_ret), K(stat_info_)); } else { root_item_.reset(); } @@ -787,9 +795,10 @@ int ObSharedNothingTmpFileMetaTree::search_data_items( const int64_t end_offset = start_offset + read_size; int64_t offset = start_offset; SpinRLockGuard guard(lock_); - if (OB_UNLIKELY(start_offset < released_offset_)) { + if (OB_UNLIKELY(start_offset < released_offset_ + || read_size <= 0)) { ret = OB_INVALID_ARGUMENT; - STORAGE_LOG(WARN, "invalid argument", KR(ret), K(start_offset), KPC(this)); + STORAGE_LOG(ERROR, "invalid argument", KR(ret), K(start_offset), K(read_size), KPC(this)); } else if (!root_item_.is_valid()) { //read from data_item_array_ if (OB_FAIL(search_data_items_from_array_(end_offset, offset, data_items))) { @@ -803,7 +812,6 @@ int ObSharedNothingTmpFileMetaTree::search_data_items( //root page index must be 0 int32_t level_page_index = 0; //we use a array to simulate a stack - //TODO: 初始值的设置 ObSEArray search_path; while (OB_SUCC(ret) && 0 < meta_item.page_level_) { @@ -840,7 +848,7 @@ int ObSharedNothingTmpFileMetaTree::search_data_items( } } else { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected page type", KR(ret), K(meta_item), KPC(this)); + STORAGE_LOG(ERROR, "unexpected page type", KR(ret), K(meta_item), KPC(this)); } } } @@ -858,7 +866,7 @@ int ObSharedNothingTmpFileMetaTree::search_data_items_from_array_( || data_item_array_.empty() || data_item_array_.count() > MAX_DATA_ITEM_ARRAY_COUNT)) { ret = OB_INVALID_ARGUMENT; - STORAGE_LOG(WARN, "invalid argument", KR(ret), K(fd_), K(cur_offset), K(end_offset), K(data_item_array_)); + STORAGE_LOG(ERROR, "invalid argument", KR(ret), K(fd_), K(cur_offset), K(end_offset), K(data_item_array_)); } else { const int64_t target_virtual_page_id = cur_offset / ObTmpFileGlobal::PAGE_SIZE; int16_t index = -1; @@ -866,7 +874,7 @@ int ObSharedNothingTmpFileMetaTree::search_data_items_from_array_( const ObSharedNothingTmpFileDataItem &data_item = data_item_array_.at(i); if (OB_UNLIKELY(!data_item.is_valid())) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected data_item", KR(ret), K(fd_), K(i), K(data_item)); + STORAGE_LOG(ERROR, "unexpected data_item", KR(ret), K(fd_), K(i), K(data_item)); } else if (data_item.virtual_page_id_ <= target_virtual_page_id) { index = i; } else { @@ -875,13 +883,13 @@ int ObSharedNothingTmpFileMetaTree::search_data_items_from_array_( } if (OB_UNLIKELY(0 > index)) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected index", KR(ret), K(fd_), K(index), K(cur_offset), K(data_item_array_)); + STORAGE_LOG(ERROR, "unexpected index", KR(ret), K(fd_), K(index), K(cur_offset), K(data_item_array_)); } else { for (int16_t i = index; OB_SUCC(ret) && i < data_item_array_.count() && cur_offset < end_offset; i++) { const ObSharedNothingTmpFileDataItem &data_item = data_item_array_.at(i); if (OB_UNLIKELY(i > index && cur_offset != data_item.virtual_page_id_ * ObTmpFileGlobal::PAGE_SIZE)) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected virtual_page_id", KR(ret), K(fd_), K(cur_offset), K(i), K(index), K(data_item)); + STORAGE_LOG(ERROR, "unexpected virtual_page_id", KR(ret), K(fd_), K(cur_offset), K(i), K(index), K(data_item)); } else if (OB_FAIL(data_items.push_back(data_item))) { STORAGE_LOG(WARN, "fail to push back", KR(ret), K(fd_), K(data_item)); } else { @@ -891,7 +899,7 @@ int ObSharedNothingTmpFileMetaTree::search_data_items_from_array_( } if (OB_SUCC(ret) && cur_offset < end_offset) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected offset", KR(ret), K(fd_), K(cur_offset), K(end_offset)); + STORAGE_LOG(ERROR, "unexpected offset", KR(ret), K(fd_), K(cur_offset), K(end_offset)); } } return ret; @@ -921,7 +929,7 @@ int ObSharedNothingTmpFileMetaTree::get_items_of_leaf_page_( if (!need_find_index) { if (OB_UNLIKELY(0 != cur_offset % ObTmpFileGlobal::PAGE_SIZE)) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected cur_offset", KR(ret), K(fd_), K(cur_offset)); + STORAGE_LOG(ERROR, "unexpected cur_offset", KR(ret), K(fd_), K(cur_offset)); } else { //read from beginning of the page item_index = 0; @@ -933,7 +941,7 @@ int ObSharedNothingTmpFileMetaTree::get_items_of_leaf_page_( } else if (FALSE_IT(tmp_offset = (data_item.virtual_page_id_ + data_item.physical_page_num_) * ObTmpFileGlobal::PAGE_SIZE)) { } else if (cur_offset >= tmp_offset) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected offset", KR(ret), K(fd_), K(cur_offset), K(tmp_offset), K(data_item)); + STORAGE_LOG(ERROR, "unexpected offset", KR(ret), K(fd_), K(cur_offset), K(tmp_offset), K(data_item)); } else if (OB_FAIL(data_items.push_back(data_item))) { STORAGE_LOG(WARN, "fail to push back", KR(ret), K(fd_), K(data_item)); } else { @@ -955,7 +963,7 @@ int ObSharedNothingTmpFileMetaTree::get_items_of_leaf_page_( ObSharedNothingTmpFileTreePageHeader tmp_page_header; ObArray items; read_page_content_(page_buff, tmp_page_header, items); - STORAGE_LOG(WARN, "unexpected virtual_page_id, dump tree page", KR(ret), K(fd_), KP(page_buff), K(cur_offset), + STORAGE_LOG(ERROR, "unexpected virtual_page_id, dump tree page", KR(ret), K(fd_), KP(page_buff), K(cur_offset), K(item_index), K(data_item), K(target_virtual_page_id), K(tmp_page_header), K(items)); } else if (OB_FAIL(data_items.push_back(data_item))) { STORAGE_LOG(WARN, "fail to push back", KR(ret), K(fd_), K(data_item)); @@ -986,12 +994,12 @@ int ObSharedNothingTmpFileMetaTree::backtrace_search_data_items_( ObIArray &data_items) { int ret = OB_SUCCESS; - //TODO: check last node in search_path must be level_1 page info if (OB_UNLIKELY(search_path.empty() + || 1 != search_path.at(search_path.count() - 1).page_meta_info_.page_level_ || data_items.empty() || offset >= end_offset)) { ret = OB_INVALID_ARGUMENT; - STORAGE_LOG(WARN, "invalid argument", KR(ret), K(fd_), K(search_path), K(data_items), + STORAGE_LOG(ERROR, "invalid argument", KR(ret), K(fd_), K(search_path), K(data_items), K(end_offset), K(offset)); } else { const int16_t FULL_PAGE_META_ITEM_NUM = @@ -1030,7 +1038,7 @@ int ObSharedNothingTmpFileMetaTree::backtrace_search_data_items_( if (OB_SUCC(ret)) { if (OB_UNLIKELY(cnt != i || (!reach_last_item && offset < end_offset))) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected meta_items", KR(ret), K(fd_), K(meta_items), K(i), + STORAGE_LOG(ERROR, "unexpected meta_items", KR(ret), K(fd_), K(meta_items), K(i), K(reach_last_item), K(offset), K(end_offset)); } else { search_path.pop_back(); @@ -1047,16 +1055,16 @@ int ObSharedNothingTmpFileMetaTree::backtrace_search_data_items_( search_path.pop_back(); } else { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected meta_items", KR(ret), K(fd_), K(meta_items)); + STORAGE_LOG(ERROR, "unexpected meta_items", KR(ret), K(fd_), K(meta_items)); } } else { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected page info", KR(ret), K(fd_), K(page_info)); + STORAGE_LOG(ERROR, "unexpected page info", KR(ret), K(fd_), K(page_info)); } } if (OB_SUCC(ret) && end_offset > offset) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected offset", KR(ret), K(fd_), K(end_offset), K(offset)); + STORAGE_LOG(ERROR, "unexpected offset", KR(ret), K(fd_), K(end_offset), K(offset)); } } return ret; @@ -1087,7 +1095,7 @@ int ObSharedNothingTmpFileMetaTree::get_items_of_internal_page_( || item_index > page_header.item_num_ || item_index < 0)) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected page_header", KR(ret), K(fd_), K(page_header), K(item_index)); + STORAGE_LOG(ERROR, "unexpected page_header", KR(ret), K(fd_), K(page_header), K(item_index)); } else { int64_t end_virtual_page_id = upper_align(end_offset, ObTmpFileGlobal::PAGE_SIZE) / ObTmpFileGlobal::PAGE_SIZE; while (OB_SUCC(ret) @@ -1112,7 +1120,6 @@ int ObSharedNothingTmpFileMetaTree::get_items_of_internal_page_( return ret; } -//TODO: how to check whether block_index is valid int ObSharedNothingTmpFileMetaTree::flush_meta_pages_for_block( const int64_t block_index, const ObTmpFileTreeEvictType flush_type, @@ -1130,12 +1137,12 @@ int ObSharedNothingTmpFileMetaTree::flush_meta_pages_for_block( || 0 != write_offset % ObTmpFileGlobal::PAGE_SIZE || level_page_range_array_.count() >= INT16_MAX)) { ret = OB_INVALID_ARGUMENT; - STORAGE_LOG(WARN, "invalid argument", KR(ret), K(block_index), K(flush_type), + STORAGE_LOG(ERROR, "invalid argument", KR(ret), K(block_index), K(flush_type), KP(block_buff), K(write_offset), KPC(this)); } else if (!root_item_.is_valid()) { if (!level_page_range_array_.empty()) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected level_page_range_array_", KR(ret), KPC(this)); + STORAGE_LOG(ERROR, "unexpected level_page_range_array_", KR(ret), KPC(this)); } else { flush_context.is_meta_reach_end_ = true; } @@ -1160,7 +1167,7 @@ int ObSharedNothingTmpFileMetaTree::flush_meta_pages_for_block( if (last_truncate_leaf_info_.is_valid()) { if (OB_UNLIKELY(level_cnt <= level)) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected item_index_arr", KR(ret), K(level), KPC(this)); + STORAGE_LOG(ERROR, "unexpected item_index_arr", KR(ret), K(level), KPC(this)); } else if (flush_context.last_flush_page_index_in_level_ < level_page_range_array_.at(level).evicted_page_num_) { need_flush = false; flush_context.is_meta_reach_end_ = true; @@ -1185,7 +1192,7 @@ int ObSharedNothingTmpFileMetaTree::flush_meta_pages_for_block( //do nothing, we just skip this level. } else if (OB_FAIL(wbp_->get_next_page_id(fd_, flush_context.last_flush_page_id_, page_key, flush_start_page_id))) { - STORAGE_LOG(WARN, "fail to get next meta page id", KR(ret), K(fd_), K(flush_context), K(page_key)); + STORAGE_LOG(ERROR, "fail to get next meta page id", KR(ret), K(fd_), K(flush_context), K(page_key)); } else { level_page_index++; } @@ -1204,7 +1211,7 @@ int ObSharedNothingTmpFileMetaTree::flush_meta_pages_for_block( //we only write rightmost page, so pages before flushed_end_page_id_ can not be dirty. flush_start_page_id = flushed_page_id; } else if (OB_FAIL(wbp_->get_next_page_id(fd_, flushed_page_id, page_key, flush_start_page_id))) { - STORAGE_LOG(WARN, "fail to get next meta page id", KR(ret), K(fd_), K(flushed_page_id), K(page_key)); + STORAGE_LOG(ERROR, "fail to get next meta page id", KR(ret), K(fd_), K(flushed_page_id), K(page_key)); } else { level_page_index++; } @@ -1227,13 +1234,13 @@ int ObSharedNothingTmpFileMetaTree::flush_meta_pages_for_block( STORAGE_LOG(INFO, "no meta page flush in this level", KR(ret), K(fd_), K(level), K(level_page_range_array_)); } else if (OB_UNLIKELY(!tree_io_info.is_valid())) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected tree_io_info", KR(ret), K(tree_io_info), KPC(this)); + STORAGE_LOG(ERROR, "unexpected tree_io_info", KR(ret), K(tree_io_info), KPC(this)); //set the page flush information on the parent node, so that we can flush parent pages in advance. } else if (OB_FAIL(modify_meta_items_at_parent_level_(tree_io_info, level_page_index))) { STORAGE_LOG(WARN, "fail to modify meta items at parent level", KR(ret), K(tree_io_info), K(level_page_index), KPC(this)); } else if (OB_FAIL(tree_io_array.push_back(tree_io_info))) { - STORAGE_LOG(WARN, "fail to push back", KR(ret), K(fd_), K(tree_io_info)); + STORAGE_LOG(ERROR, "fail to push back", KR(ret), K(fd_), K(tree_io_info)); } else { flush_context.tree_epoch_ = tree_epoch_; flush_context.last_flush_level_ = level; @@ -1268,10 +1275,9 @@ int ObSharedNothingTmpFileMetaTree::flush_leaf_pages_( || 0 != write_offset % ObTmpFileGlobal::PAGE_SIZE || level_page_range_array_.empty())) { ret = OB_INVALID_ARGUMENT; - STORAGE_LOG(WARN, "invalid argument", KR(ret), K(fd_), K(flush_start_page_id), K(start_page_index_in_level), + STORAGE_LOG(ERROR, "invalid argument", KR(ret), K(fd_), K(flush_start_page_id), K(start_page_index_in_level), K(write_offset), K(level_page_range_array_)); } else { - //TODO: start page id in block is from 0 tree_io_info.physical_start_page_id_ = write_offset / ObTmpFileGlobal::PAGE_SIZE; tree_io_info.page_level_ = 0; uint32_t cur_page_id = flush_start_page_id; @@ -1286,12 +1292,12 @@ int ObSharedNothingTmpFileMetaTree::flush_leaf_pages_( ObTmpFilePageUniqKey page_key(0, page_index_in_level); if (OB_UNLIKELY(!wbp_->is_dirty(fd_, cur_page_id, page_key))) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected page state", KR(ret), K(fd_), K(cur_page_id)); + STORAGE_LOG(ERROR, "unexpected page state", KR(ret), K(fd_), K(cur_page_id)); } else if (OB_FAIL(wbp_->read_page(fd_, cur_page_id, page_key, page_buff, next_page_id))) { - STORAGE_LOG(WARN, "fail to read from write cache", KR(ret), K(fd_), K(cur_page_id), K(page_key)); + STORAGE_LOG(ERROR, "fail to read from write cache", KR(ret), K(fd_), K(cur_page_id), K(page_key)); //change page state to write back } else if (OB_FAIL(wbp_->notify_write_back(fd_, cur_page_id, page_key))) { - STORAGE_LOG(WARN, "fail to notify write back for meta", KR(ret), K(fd_), K(cur_page_id), K(page_key)); + STORAGE_LOG(ERROR, "fail to notify write back for meta", KR(ret), K(fd_), K(cur_page_id), K(page_key)); } else { ObTmpPageCacheKey cache_key(tree_io_info.block_index_, write_offset / ObTmpFileGlobal::PAGE_SIZE, MTL_ID()); @@ -1323,7 +1329,7 @@ int ObSharedNothingTmpFileMetaTree::calc_and_set_page_checksum_(char* page_buff) int ret = OB_SUCCESS; if (OB_ISNULL(page_buff)) { ret = OB_INVALID_ARGUMENT; - STORAGE_LOG(WARN, "invalid argument", KR(ret), K(fd_), KP(page_buff)); + STORAGE_LOG(ERROR, "invalid argument", KR(ret), K(fd_), KP(page_buff)); } else { ObSharedNothingTmpFileTreePageHeader page_header = *((ObSharedNothingTmpFileTreePageHeader *)(page_buff)); page_header.checksum_ = ob_crc64(page_buff + PAGE_HEADER_SIZE, ObTmpFileGlobal::PAGE_SIZE - PAGE_HEADER_SIZE); @@ -1350,12 +1356,11 @@ int ObSharedNothingTmpFileMetaTree::flush_internal_pages_( || NULL == block_buff || 0 != write_offset % ObTmpFileGlobal::PAGE_SIZE)) { ret = OB_INVALID_ARGUMENT; - STORAGE_LOG(WARN, "invalid argument", KR(ret), K(fd_), K(flush_start_page_id), K(level), K(start_page_index_in_level), + STORAGE_LOG(ERROR, "invalid argument", KR(ret), K(fd_), K(flush_start_page_id), K(level), K(start_page_index_in_level), K(flush_type), KP(block_buff), K(level_page_range_array_), K(write_offset)); } else { const int16_t FULL_PAGE_META_ITEM_NUM = MIN(MAX_PAGE_ITEM_COUNT, (ObTmpFileGlobal::PAGE_SIZE - PAGE_HEADER_SIZE) / sizeof(ObSharedNothingTmpFileMetaItem)); - //TODO: start page id in block is from 0 tree_io_info.physical_start_page_id_ = write_offset / ObTmpFileGlobal::PAGE_SIZE; tree_io_info.page_level_ = level; uint32_t cur_page_id = flush_start_page_id; @@ -1371,9 +1376,9 @@ int ObSharedNothingTmpFileMetaTree::flush_internal_pages_( ObTmpFilePageUniqKey page_key(level, page_index_in_level); if (OB_UNLIKELY(!wbp_->is_dirty(fd_, cur_page_id, page_key))) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected page state", KR(ret), K(fd_), K(cur_page_id)); + STORAGE_LOG(ERROR, "unexpected page state", KR(ret), K(fd_), K(cur_page_id)); } else if (OB_FAIL(wbp_->read_page(fd_, cur_page_id, page_key, page_buff, next_page_id))) { - STORAGE_LOG(WARN, "fail to read from write cache", KR(ret), K(fd_), K(cur_page_id), K(page_key)); + STORAGE_LOG(ERROR, "fail to read from write cache", KR(ret), K(fd_), K(cur_page_id), K(page_key)); } else { //check whether the page is satisfied for flush last_item.reset(); @@ -1383,7 +1388,7 @@ int ObSharedNothingTmpFileMetaTree::flush_internal_pages_( STORAGE_LOG(WARN, "fail to read page header", KR(ret), K(fd_), KP(page_buff)); } else if (page_header.item_num_ <= 0) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected item_num", KR(ret), K(fd_), K(page_header)); + STORAGE_LOG(ERROR, "unexpected item_num", KR(ret), K(fd_), K(page_header)); } else if (OB_FAIL(read_item_(page_buff, page_header.item_num_ - 1/*item_index*/, last_item))) { STORAGE_LOG(WARN, "fail to read item", KR(ret), K(fd_), KP(page_buff), K(page_header)); } else if (FALSE_IT(rightmost_child_page_index = page_index_in_level * FULL_PAGE_META_ITEM_NUM + page_header.item_num_ - 1)) { @@ -1394,7 +1399,7 @@ int ObSharedNothingTmpFileMetaTree::flush_internal_pages_( break; //change page state to write back } else if (OB_FAIL(wbp_->notify_write_back(fd_, cur_page_id, page_key))) { - STORAGE_LOG(WARN, "fail to notify write back for meta", KR(ret), K(fd_), K(cur_page_id), K(page_key)); + STORAGE_LOG(ERROR, "fail to notify write back for meta", KR(ret), K(fd_), K(cur_page_id), K(page_key)); } else { ObTmpPageCacheKey cache_key(tree_io_info.block_index_, write_offset / ObTmpFileGlobal::PAGE_SIZE, MTL_ID()); @@ -1429,7 +1434,7 @@ int ObSharedNothingTmpFileMetaTree::modify_child_pages_location( int ret = OB_SUCCESS; if (OB_ISNULL(page_buff)) { ret = OB_INVALID_ARGUMENT; - STORAGE_LOG(WARN, "invalid argument", KR(ret), K(fd_), KP(page_buff)); + STORAGE_LOG(ERROR, "invalid argument", KR(ret), K(fd_), KP(page_buff)); } else { ObSharedNothingTmpFileTreePageHeader page_header; if (OB_FAIL(read_page_header_(page_buff, page_header))) { @@ -1466,7 +1471,7 @@ int ObSharedNothingTmpFileMetaTree::modify_meta_items_at_parent_level_( if (OB_UNLIKELY(cur_level > level_page_range_array_.count() || !tree_io.is_valid())) { ret = OB_INVALID_ARGUMENT; - STORAGE_LOG(WARN, "invalid argument", KR(ret), K(fd_), K(tree_io), K(level_page_range_array_)); + STORAGE_LOG(ERROR, "invalid argument", KR(ret), K(fd_), K(tree_io), K(level_page_range_array_)); } else if (cur_level == level_page_range_array_.count()) { //this must be the root page being flushed if (OB_UNLIKELY(1 != tree_io.flush_nums_ @@ -1474,7 +1479,7 @@ int ObSharedNothingTmpFileMetaTree::modify_meta_items_at_parent_level_( || tree_io.flush_start_page_id_ != root_item_.buffer_page_id_ || 0 != start_page_index_in_level)) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected tree_io", KR(ret), K(fd_), K(tree_io), K(root_item_), K(start_page_index_in_level)); + STORAGE_LOG(ERROR, "unexpected tree_io", KR(ret), K(fd_), K(tree_io), K(root_item_), K(start_page_index_in_level)); //NOTE: It doesn't matter if we release this page early, because under wlock. } else if (is_page_flushed(root_item_) && OB_FAIL(release_tmp_file_page_(root_item_.block_index_, root_item_.physical_page_id_, 1))) { @@ -1511,12 +1516,12 @@ int ObSharedNothingTmpFileMetaTree::modify_meta_items_at_parent_level_( ObTmpFilePageUniqKey page_key(cur_level, cur_level_page_index); //this upper layer page must be in write cache if (OB_FAIL(wbp_->read_page(fd_, cur_page_id, page_key, page_buff, next_page_id))) { - STORAGE_LOG(WARN, "fail to read from write cache", KR(ret), K(fd_), K(cur_page_id), K(page_key)); + STORAGE_LOG(ERROR, "fail to read from write cache", KR(ret), K(fd_), K(cur_page_id), K(page_key)); } else if (OB_FAIL(read_page_header_(page_buff, page_header))) { STORAGE_LOG(WARN, "fail to read page header", KR(ret), K(fd_), KP(page_buff)); } else if (OB_UNLIKELY(0 >= page_header.item_num_)) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected page_header", KR(ret), K(fd_), K(page_header)); + STORAGE_LOG(ERROR, "unexpected page_header", KR(ret), K(fd_), K(page_header)); } else { while (OB_SUCC(ret) && item_index < page_header.item_num_ @@ -1525,12 +1530,11 @@ int ObSharedNothingTmpFileMetaTree::modify_meta_items_at_parent_level_( if (OB_FAIL(read_item_(page_buff, item_index, meta_item))) { STORAGE_LOG(WARN, "fail to read item", KR(ret), K(fd_), KP(page_buff), K(item_index)); } else { - //TODO: flush_start_page_id_ -> buffer_start_page_id_ if (has_find || cur_level_page_index * FULL_PAGE_META_ITEM_NUM + item_index == child_level_page_index) { if (OB_UNLIKELY((!has_find && tree_io.flush_start_page_id_ != meta_item.buffer_page_id_) || cur_level_page_index * FULL_PAGE_META_ITEM_NUM + item_index != child_level_page_index)) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected meta_item", KR(ret), K(fd_), K(tree_io), K(meta_item), + STORAGE_LOG(ERROR, "unexpected meta_item", KR(ret), K(fd_), K(has_find), K(tree_io), K(meta_item), K(child_level_page_index), K(cur_page_id), K(cur_level_page_index), K(item_index)); } else { has_find = true; @@ -1555,7 +1559,7 @@ int ObSharedNothingTmpFileMetaTree::modify_meta_items_at_parent_level_( } } if (OB_SUCC(ret) && has_find && OB_FAIL(wbp_->notify_dirty(fd_, cur_page_id, page_key))) { - STORAGE_LOG(WARN, "fail to notify dirty for meta", KR(ret), K(fd_), K(cur_page_id), K(page_key)); + STORAGE_LOG(ERROR, "fail to notify dirty for meta", KR(ret), K(fd_), K(cur_page_id), K(page_key)); } cur_page_id = next_page_id; cur_level_page_index++; @@ -1564,7 +1568,7 @@ int ObSharedNothingTmpFileMetaTree::modify_meta_items_at_parent_level_( if (OB_UNLIKELY(!is_end || physical_page_id - tree_io.physical_start_page_id_ != tree_io.flush_nums_)) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected is_end or flush_nums_", KR(ret), K(fd_), + STORAGE_LOG(ERROR, "unexpected is_end or flush_nums_", KR(ret), K(fd_), K(is_end), K(physical_page_id), K(tree_io)); } } @@ -1572,8 +1576,6 @@ int ObSharedNothingTmpFileMetaTree::modify_meta_items_at_parent_level_( return ret; } -//TODO: 或许可以传进来ObIArray* > &tree_io_arrays二维数组 -// check tree io seq int ObSharedNothingTmpFileMetaTree::update_after_flush( const common::ObIArray &tree_io_array) { @@ -1590,13 +1592,13 @@ int ObSharedNothingTmpFileMetaTree::update_after_flush( bool end_page_flush_again = false; if (OB_UNLIKELY(!tree_io.is_valid())) { ret = OB_INVALID_ARGUMENT; - STORAGE_LOG(WARN, "invalid argument", KR(ret), K(tree_io), KPC(this)); + STORAGE_LOG(ERROR, "invalid argument", KR(ret), K(tree_io), KPC(this)); } else if (tree_io.tree_epoch_ != tree_epoch_) { STORAGE_LOG(INFO, "the tree_epoch_ in tree_io is not equal to current tree_epoch_", K(fd_), K(tree_io), K(tree_epoch_)); } else if (tree_io.page_level_ >= level_page_range_array_.count()) { ret = OB_INVALID_ARGUMENT; - STORAGE_LOG(WARN, "invalid argument", KR(ret), K(tree_io), KPC(this)); + STORAGE_LOG(ERROR, "invalid argument", KR(ret), K(tree_io), KPC(this)); } else { const uint32_t flushed_end_page_id_in_array = level_page_range_array_[tree_io.page_level_].flushed_end_page_id_; const uint32_t start_page_id_in_array = level_page_range_array_[tree_io.page_level_].start_page_id_; @@ -1606,11 +1608,16 @@ int ObSharedNothingTmpFileMetaTree::update_after_flush( level_page_index--; ObTmpFilePageUniqKey page_key(tree_io.page_level_, level_page_index); if (OB_FAIL(wbp_->get_next_page_id(fd_, flushed_end_page_id_in_array, page_key, next_page_id_in_array))) { - STORAGE_LOG(WARN, "fail to get next meta page id", KR(ret), K(fd_), K(flushed_end_page_id_in_array), K(page_key)); + STORAGE_LOG(ERROR, "fail to get next meta page id", KR(ret), K(fd_), K(flushed_end_page_id_in_array), K(page_key)); + } else if (OB_UNLIKELY(flushed_end_page_id_in_array != tree_io.flush_start_page_id_ + && !wbp_->is_cached(fd_, flushed_end_page_id_in_array, page_key))) { + ret = OB_ERR_UNEXPECTED; + STORAGE_LOG(ERROR, "unexpected flushed_end_page_id_in_array or tree_io", KR(ret), K(tree_io), + K(flushed_end_page_id_in_array), KPC(this)); } else if (OB_UNLIKELY(flushed_end_page_id_in_array != tree_io.flush_start_page_id_ && next_page_id_in_array != tree_io.flush_start_page_id_)) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected tree_io", KR(ret), K(tree_io), + STORAGE_LOG(ERROR, "unexpected page_id_in_array or tree_io", KR(ret), K(tree_io), K(flushed_end_page_id_in_array), K(next_page_id_in_array), KPC(this)); } else if (flushed_end_page_id_in_array == tree_io.flush_start_page_id_) { end_page_flush_again = true; @@ -1629,7 +1636,7 @@ int ObSharedNothingTmpFileMetaTree::update_after_flush( } } else if (OB_UNLIKELY(start_page_id_in_array != tree_io.flush_start_page_id_)) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected tree_io", KR(ret), K(tree_io), KPC(this)); + STORAGE_LOG(ERROR, "unexpected tree_io", KR(ret), K(tree_io), KPC(this)); } } if (OB_SUCC(ret) && !tree_io_is_empty) { @@ -1643,17 +1650,17 @@ int ObSharedNothingTmpFileMetaTree::update_after_flush( //do nothing STORAGE_LOG(INFO, "page is dirty again, do not change page status", KR(ret), K(fd_), K(cur_page_id)); } else if (OB_FAIL(wbp_->notify_write_back_succ(fd_, cur_page_id, page_key))) { - STORAGE_LOG(WARN, "fail to notify write back succ for meta", KR(ret), K(fd_), K(cur_page_id), K(page_key)); + STORAGE_LOG(ERROR, "fail to notify write back succ for meta", KR(ret), K(fd_), K(cur_page_id), K(page_key)); } if (OB_SUCC(ret)) { num++; if (OB_UNLIKELY(num > tree_io.flush_nums_)) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected num", KR(ret), K(tree_io), K(num), K(cur_page_id), KPC(this)); + STORAGE_LOG(ERROR, "unexpected num", KR(ret), K(tree_io), K(num), K(cur_page_id), KPC(this)); } else if (cur_page_id == tree_io.flush_end_page_id_) { break; } else if (OB_FAIL(wbp_->get_next_page_id(fd_, cur_page_id, page_key, next_page_id))) { - STORAGE_LOG(WARN, "fail to get next meta page id", KR(ret), K(fd_), K(cur_page_id), K(tree_io), K(page_key)); + STORAGE_LOG(ERROR, "fail to get next meta page id", KR(ret), K(fd_), K(cur_page_id), K(tree_io), K(page_key)); } else { cur_page_id = next_page_id; level_page_index++; @@ -1664,7 +1671,7 @@ int ObSharedNothingTmpFileMetaTree::update_after_flush( if (OB_UNLIKELY(tree_io.flush_nums_ != num || cur_page_id != tree_io.flush_end_page_id_)) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected page level or flush num", KR(ret), K(tree_io), K(num), K(cur_page_id), KPC(this)); + STORAGE_LOG(ERROR, "unexpected page level or flush num", KR(ret), K(tree_io), K(num), K(cur_page_id), KPC(this)); } else { level_page_range_array_[tree_io.page_level_].flushed_end_page_id_ = tree_io.flush_end_page_id_; if (end_page_flush_again) { @@ -1692,12 +1699,12 @@ int ObSharedNothingTmpFileMetaTree::prepare_for_write_tail( if (!root_item_.is_valid()) { if (OB_UNLIKELY(data_item_array_.empty())) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected data_item_array_ count", KR(ret), K(fd_), K(data_item_array_)); + STORAGE_LOG(ERROR, "unexpected data_item_array_ count", KR(ret), K(fd_), K(data_item_array_)); } else { last_data_item = data_item_array_.at(data_item_array_.count() - 1); if (OB_UNLIKELY(0 >= last_data_item.physical_page_num_)) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected physical_page_num", KR(ret), K(last_data_item), KPC(this)); + STORAGE_LOG(ERROR, "unexpected physical_page_num", KR(ret), K(last_data_item), KPC(this)); } } } else { @@ -1705,7 +1712,7 @@ int ObSharedNothingTmpFileMetaTree::prepare_for_write_tail( ObSharedNothingTmpFileMetaItem page_info; if (OB_UNLIKELY(level_page_range_array_.empty())) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected level_page_range_array_", KR(ret), KPC(this)); + STORAGE_LOG(ERROR, "unexpected level_page_range_array_", KR(ret), KPC(this)); } else if (OB_FAIL(get_rightmost_leaf_page_for_write_(page_info))) { STORAGE_LOG(WARN, "fail to get rightmost leaf page for write", KR(ret), KPC(this)); } else { @@ -1717,13 +1724,13 @@ int ObSharedNothingTmpFileMetaTree::prepare_for_write_tail( level_page_range_array_.at(0).cached_page_num_ - 1; if (OB_FAIL(wbp_->read_page(fd_, page_info.buffer_page_id_, ObTmpFilePageUniqKey(0, leaf_level_page_index), leaf_page_buff, next_page_id))) { - STORAGE_LOG(WARN, "fail to read from write cache", KR(ret), K(fd_), K(page_info), K(leaf_level_page_index)); + STORAGE_LOG(ERROR, "fail to read from write cache", KR(ret), K(fd_), K(page_info), K(leaf_level_page_index)); } else if (OB_FAIL(read_page_header_(leaf_page_buff, page_header))) { STORAGE_LOG(WARN, "fail to read page header", KR(ret), KP(leaf_page_buff), KPC(this)); } else if (OB_UNLIKELY(0 >= page_header.item_num_)) { //There is no concurrent writing ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected item_num", KR(ret), KP(leaf_page_buff), K(page_header), KPC(this)); + STORAGE_LOG(ERROR, "unexpected item_num", KR(ret), KP(leaf_page_buff), K(page_header), KPC(this)); } else if (OB_FAIL(read_item_(leaf_page_buff, page_header.item_num_ - 1, last_data_item))) { STORAGE_LOG(WARN, "fail to read item", KR(ret), KP(leaf_page_buff), K(page_header), KPC(this)); } else if (OB_UNLIKELY(0 >= last_data_item.physical_page_num_)) { @@ -1733,7 +1740,7 @@ int ObSharedNothingTmpFileMetaTree::prepare_for_write_tail( ObSharedNothingTmpFileTreePageHeader tmp_page_header; ObArray items; read_page_content_(leaf_page_buff, tmp_page_header, items); - STORAGE_LOG(WARN, "unexpected physical_page_num, dump tree page", KR(ret), K(last_data_item), KP(leaf_page_buff), + STORAGE_LOG(ERROR, "unexpected physical_page_num, dump tree page", KR(ret), K(last_data_item), KP(leaf_page_buff), K(page_info), K(leaf_level_page_index), K(tmp_page_header), K(items), KPC(this)); } } @@ -1752,7 +1759,7 @@ int ObSharedNothingTmpFileMetaTree::finish_write_tail( if (OB_UNLIKELY(data_item_array_.empty() || last_data_item != data_item_array_[data_item_array_.count() - 1])) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected data_item_array_ or last_data_item", KR(ret), K(last_data_item), KPC(this)); + STORAGE_LOG(ERROR, "unexpected data_item_array_ or last_data_item", KR(ret), K(last_data_item), KPC(this)); } else if (release_tail_in_disk) { if (0 == --data_item_array_[data_item_array_.count() - 1].physical_page_num_) { data_item_array_.pop_back(); @@ -1762,7 +1769,7 @@ int ObSharedNothingTmpFileMetaTree::finish_write_tail( if (OB_UNLIKELY(level_page_range_array_.empty() || !is_writing_)) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected level_array_ or is_writing_", KR(ret), KPC(this)); + STORAGE_LOG(ERROR, "unexpected level_array_ or is_writing_", KR(ret), KPC(this)); } else if (release_tail_in_disk) { char *leaf_page_buff = NULL; uint32_t next_page_id = ObTmpFileGlobal::INVALID_PAGE_ID; @@ -1773,7 +1780,7 @@ int ObSharedNothingTmpFileMetaTree::finish_write_tail( ObSharedNothingTmpFileDataItem data_item; ObTmpFilePageUniqKey page_key(0, level_page_index); if (OB_FAIL(wbp_->read_page(fd_, page_id, page_key, leaf_page_buff, next_page_id))) { - STORAGE_LOG(WARN, "fail to read from write cache", KR(ret), K(fd_), K(page_id), K(page_key)); + STORAGE_LOG(ERROR, "fail to read from write cache", KR(ret), K(fd_), K(page_id), K(page_key)); } else if (OB_FAIL(read_page_header_(leaf_page_buff, page_header))) { STORAGE_LOG(WARN, "fail to read page header", KR(ret), KP(leaf_page_buff), KPC(this)); } else if (OB_FAIL(read_item_(leaf_page_buff, page_header.item_num_ - 1, data_item))) { @@ -1785,7 +1792,7 @@ int ObSharedNothingTmpFileMetaTree::finish_write_tail( ObSharedNothingTmpFileTreePageHeader tmp_page_header; ObArray items; read_page_content_(leaf_page_buff, tmp_page_header, items); - STORAGE_LOG(WARN, "unexpected virtual_page_id, dump tree page", KR(ret), KP(leaf_page_buff), K(page_id), K(page_key), + STORAGE_LOG(ERROR, "unexpected virtual_page_id, dump tree page", KR(ret), KP(leaf_page_buff), K(page_id), K(page_key), K(last_data_item), K(data_item), K(tmp_page_header), K(items), KPC(this)); } else if (FALSE_IT(data_item.physical_page_num_--)) { } else if (0 == data_item.physical_page_num_) { @@ -1797,7 +1804,7 @@ int ObSharedNothingTmpFileMetaTree::finish_write_tail( K(page_header), K(data_item), KPC(this)); } if (FAILEDx(wbp_->notify_dirty(fd_, page_id, page_key))) { - STORAGE_LOG(WARN, "fail to notify dirty for meta", KR(ret), K(fd_), K(page_id), K(page_key)); + STORAGE_LOG(ERROR, "fail to notify dirty for meta", KR(ret), K(fd_), K(page_id), K(page_key)); } } if (OB_SUCC(ret)) { @@ -1852,7 +1859,7 @@ int ObSharedNothingTmpFileMetaTree::evict_meta_pages( ObTmpFilePageUniqKey page_key(level, level_page_index); if (OB_UNLIKELY(end_evict_page != next_page_id && !wbp_->is_cached(fd_, next_page_id, page_key))) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected next_page_id", KR(ret), K(next_page_id), KPC(this)); + STORAGE_LOG(ERROR, "unexpected next_page_id", KR(ret), K(next_page_id), KPC(this)); } else if (end_evict_page == next_page_id && !wbp_->is_cached(fd_, next_page_id, page_key)) { break; } else if (level > 0) { @@ -1861,7 +1868,7 @@ int ObSharedNothingTmpFileMetaTree::evict_meta_pages( ObSharedNothingTmpFileMetaItem last_item; uint32_t unused_page_id = ObTmpFileGlobal::INVALID_PAGE_ID; if (OB_FAIL(wbp_->read_page(fd_, next_page_id, page_key, page_buff, unused_page_id))) { - STORAGE_LOG(WARN, "fail to read from write cache", KR(ret), K(fd_), K(next_page_id), K(page_key)); + STORAGE_LOG(ERROR, "fail to read from write cache", KR(ret), K(fd_), K(next_page_id), K(page_key)); } else { last_item.reset(); ObSharedNothingTmpFileTreePageHeader page_header; @@ -1869,13 +1876,13 @@ int ObSharedNothingTmpFileMetaTree::evict_meta_pages( STORAGE_LOG(WARN, "fail to read page header", KR(ret), K(fd_), KP(page_buff)); } else if (page_header.item_num_ <= 0) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected item_num", KR(ret), K(page_header), KPC(this)); + STORAGE_LOG(ERROR, "unexpected item_num", KR(ret), K(page_header), KPC(this)); } else if (OB_FAIL(read_item_(page_buff, page_header.item_num_ - 1/*item_index*/, last_item))) { STORAGE_LOG(WARN, "fail to read item", KR(ret), KP(page_buff), K(page_header), KPC(this)); } else if (is_page_in_write_cache(last_item)) { if (OB_UNLIKELY(end_evict_page != next_page_id)) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected next_page", KR(ret), K(next_page_id), K(last_item), KPC(this)); + STORAGE_LOG(ERROR, "unexpected next_page", KR(ret), K(next_page_id), K(last_item), KPC(this)); } else { break; } @@ -1888,7 +1895,7 @@ int ObSharedNothingTmpFileMetaTree::evict_meta_pages( if (OB_FAIL(evict_pages.push_back(cur_page_id))) { STORAGE_LOG(WARN, "fail to push back", KR(ret), K(fd_), K(cur_page_id)); } else if (OB_FAIL(wbp_->get_next_page_id(fd_, cur_page_id, page_key, next_page_id))) { - STORAGE_LOG(WARN, "fail to get next meta page id", KR(ret), K(fd_), K(cur_page_id), K(page_key)); + STORAGE_LOG(ERROR, "fail to get next meta page id", KR(ret), K(fd_), K(cur_page_id), K(page_key)); } else { actual_evict_page_num++; level_page_index++; @@ -1901,7 +1908,7 @@ int ObSharedNothingTmpFileMetaTree::evict_meta_pages( if (OB_SUCC(ret) && !evict_pages.empty()) { if (OB_UNLIKELY(ObTmpFileGlobal::INVALID_PAGE_ID == cur_page_id)) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected cur_page_id", KR(ret), K(cur_page_id), K(level), K(level_page_index), KPC(this)); + STORAGE_LOG(ERROR, "unexpected cur_page_id", KR(ret), K(cur_page_id), K(level), K(level_page_index), KPC(this)); } else if (OB_FAIL(modify_meta_items_during_evict_(evict_pages, level + 1, start_level_page_index))) { STORAGE_LOG(WARN, "fail to modify meta items during evict", KR(ret), K(evict_pages), K(level), K(start_level_page_index), KPC(this)); @@ -1909,10 +1916,9 @@ int ObSharedNothingTmpFileMetaTree::evict_meta_pages( uint32_t unused_next_page_id = ObTmpFileGlobal::INVALID_PAGE_ID; ARRAY_FOREACH_N(evict_pages, i, cnt) { //change page state from flushed/cached to evicted/invalid - //TODO: check whether page state is cached/clean. if (OB_FAIL(wbp_->free_page(fd_, evict_pages.at(i), ObTmpFilePageUniqKey(level, start_level_page_index + i), unused_next_page_id))) { - STORAGE_LOG(WARN, "fail to free meta page in write cache", KR(ret), K(fd_), K(evict_pages.at(i)), + STORAGE_LOG(ERROR, "fail to free meta page in write cache", KR(ret), K(fd_), K(evict_pages.at(i)), K(level), K(start_level_page_index + i)); } else { stat_info_.meta_page_free_cnt_++; @@ -1927,7 +1933,7 @@ int ObSharedNothingTmpFileMetaTree::evict_meta_pages( level_page_range_array_[level].flushed_end_page_id_ = ObTmpFileGlobal::INVALID_PAGE_ID; } else if (OB_UNLIKELY(ObTmpFileGlobal::INVALID_PAGE_ID == next_page_id)) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected next_page_id", KR(ret), K(next_page_id), K(cur_page_id), KPC(this)); + STORAGE_LOG(ERROR, "unexpected next_page_id", KR(ret), K(next_page_id), K(cur_page_id), KPC(this)); } else if (end_evict_page == cur_page_id) { //flushed_end_page is not equal to end_page, // and pages are evicted to flushed_end_page(including flushed_end_page) @@ -1959,7 +1965,7 @@ int ObSharedNothingTmpFileMetaTree::modify_meta_items_during_evict_( if (OB_UNLIKELY(evict_pages.empty() || level > level_page_range_array_.count())) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected evict_pages", KR(ret), K(fd_), K(evict_pages), + STORAGE_LOG(ERROR, "unexpected evict_pages", KR(ret), K(fd_), K(evict_pages), K(level), K(level_page_range_array_)); } else { char *page_buff = NULL; @@ -1979,7 +1985,7 @@ int ObSharedNothingTmpFileMetaTree::modify_meta_items_during_evict_( || ObTmpFileGlobal::INVALID_PAGE_ID == end_page_id || 0 > evict_page_index_in_level)) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected page_id", KR(ret), K(fd_), K(level_page_range_array_), + STORAGE_LOG(ERROR, "unexpected page_id", KR(ret), K(fd_), K(level_page_range_array_), K(level), K(evict_page_index_in_level)); } else { while(OB_SUCC(ret) @@ -1989,7 +1995,7 @@ int ObSharedNothingTmpFileMetaTree::modify_meta_items_during_evict_( char *page_buff = NULL; uint32_t next_page_id = ObTmpFileGlobal::INVALID_PAGE_ID; if (OB_FAIL(wbp_->read_page(fd_, cur_page_id, ObTmpFilePageUniqKey(level, level_page_index), page_buff, next_page_id))) { - STORAGE_LOG(WARN, "fail to read from write cache", KR(ret), K(fd_), K(cur_page_id), K(level), K(level_page_index)); + STORAGE_LOG(ERROR, "fail to read from write cache", KR(ret), K(fd_), K(cur_page_id), K(level), K(level_page_index)); } else if (OB_FAIL(read_page_header_(page_buff, page_header))) { STORAGE_LOG(WARN, "fail to read page header", KR(ret), K(fd_), KP(page_buff)); } else { @@ -2007,7 +2013,7 @@ int ObSharedNothingTmpFileMetaTree::modify_meta_items_during_evict_( || !is_page_in_write_cache(meta_item) || !is_page_flushed(meta_item))) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected meta_item", KR(ret), K(fd_), K(evict_pages), K(array_index), K(meta_item), + STORAGE_LOG(ERROR, "unexpected meta_item", KR(ret), K(fd_), K(evict_pages), K(array_index), K(meta_item), K(evict_page_index_in_level), K(cur_page_id), K(level_page_index), K(item_index)); } else { has_find = true; @@ -2023,7 +2029,7 @@ int ObSharedNothingTmpFileMetaTree::modify_meta_items_during_evict_( item_index++; } } - //TODO: Is it necessary to mark it as dirty? Maybe not. + //it is not necessary to mark it as dirty. cur_page_id = next_page_id; level_page_index++; } @@ -2039,7 +2045,7 @@ int ObSharedNothingTmpFileMetaTree::modify_meta_items_during_evict_( || evict_pages.at(0) != root_item_.buffer_page_id_ || 0 != start_page_index_in_level)) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected root_item_ or evict_pages", KR(ret), K(fd_), K(root_item_), + STORAGE_LOG(ERROR, "unexpected root_item_ or evict_pages", KR(ret), K(fd_), K(root_item_), K(evict_pages), K(start_page_index_in_level)); } else { root_item_.buffer_page_id_ = ObTmpFileGlobal::INVALID_PAGE_ID; @@ -2062,7 +2068,7 @@ int ObSharedNothingTmpFileMetaTree::clear( || is_writing_ || 0 < stat_info_.meta_page_flushing_cnt_)) { ret = OB_INVALID_ARGUMENT; - STORAGE_LOG(WARN, "invalid argument", KR(ret), K(last_truncate_offset), K(total_file_size), KPC(this)); + STORAGE_LOG(ERROR, "invalid argument", KR(ret), K(last_truncate_offset), K(total_file_size), KPC(this)); } else { while (true) { if (OB_FAIL(truncate_(end_truncate_offset))) { @@ -2095,21 +2101,21 @@ int ObSharedNothingTmpFileMetaTree::release_meta_page_( { int ret = OB_SUCCESS; if (OB_UNLIKELY(level_page_range_array_.count() <= page_info.page_level_ - || 0 > page_index_in_level)) { + || 0 > page_index_in_level)) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected level_page_range_array_ or page_info", KR(ret), K(fd_), K(level_page_range_array_), + STORAGE_LOG(ERROR, "unexpected level_page_range_array_ or page_info", KR(ret), K(fd_), K(level_page_range_array_), K(page_info), K(page_index_in_level)); } else if (is_page_in_write_cache(page_info)) { const uint32_t start_page_id_in_array = level_page_range_array_.at(page_info.page_level_).start_page_id_; uint32_t next_page_id = ObTmpFileGlobal::INVALID_PAGE_ID; if (OB_FAIL(wbp_->free_page(fd_, page_info.buffer_page_id_, ObTmpFilePageUniqKey(page_info.page_level_, page_index_in_level), next_page_id))) { - STORAGE_LOG(WARN, "fail to free meta page in write cache", KR(ret), K(fd_), K(page_info), K(page_index_in_level)); + STORAGE_LOG(ERROR, "fail to free meta page in write cache", KR(ret), K(fd_), K(page_info), K(page_index_in_level)); } else if (FALSE_IT(stat_info_.meta_page_free_cnt_++)) { } else if (OB_UNLIKELY(start_page_id_in_array != page_info.buffer_page_id_)) { //NOTE: pages must be released sequentially (from front to back in array) ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected level_page_range_array_", KR(ret), K(fd_), K(level_page_range_array_), K(page_info)); + STORAGE_LOG(ERROR, "unexpected level_page_range_array_", KR(ret), K(fd_), K(level_page_range_array_), K(page_info)); } else { level_page_range_array_.at(page_info.page_level_).start_page_id_ = next_page_id; if (start_page_id_in_array == level_page_range_array_.at(page_info.page_level_).end_page_id_) { @@ -2139,11 +2145,8 @@ int ObSharedNothingTmpFileMetaTree::release_tmp_file_page_( { int ret = OB_SUCCESS; - // TODO - // XXX 最终需要消除对 MTL 的依赖; - ObTmpFileBlockManager &block_manager = MTL(ObTenantTmpFileManager*)->get_sn_file_manager().get_tmp_file_block_manager(); - if (OB_FAIL(block_manager.release_tmp_file_page(block_index, begin_page_id, page_num))) { - STORAGE_LOG(WARN, "fail to release tmp file page", + if (OB_FAIL(block_manager_->release_tmp_file_page(block_index, begin_page_id, page_num))) { + STORAGE_LOG(ERROR, "fail to release tmp file page", KR(ret), K(fd_), K(block_index), K(begin_page_id), K(page_num)); } else { stat_info_.all_type_flush_page_released_cnt_ += page_num; @@ -2163,7 +2166,7 @@ int ObSharedNothingTmpFileMetaTree::truncate( || last_truncate_offset > end_truncate_offset || is_writing_)) { ret = OB_INVALID_ARGUMENT; - STORAGE_LOG(WARN, "invalid argument", KR(ret), K(last_truncate_offset), K(end_truncate_offset), KPC(this)); + STORAGE_LOG(ERROR, "invalid argument", KR(ret), K(last_truncate_offset), K(end_truncate_offset), KPC(this)); } else { while (true) { if (OB_FAIL(truncate_(end_truncate_offset))) { @@ -2195,7 +2198,6 @@ int ObSharedNothingTmpFileMetaTree::truncate_( STORAGE_LOG(WARN, "fail to truncate array", KR(ret), K(fd_), K(end_truncate_offset)); } } else { - //TODO: 可以将FULL_PAGE_META_ITEM_NUM作为类的成员吗? const int16_t FULL_PAGE_META_ITEM_NUM = MIN(MAX_PAGE_ITEM_COUNT, (ObTmpFileGlobal::PAGE_SIZE - PAGE_HEADER_SIZE) / sizeof(ObSharedNothingTmpFileMetaItem)); ObArray> item_index_arr; @@ -2203,7 +2205,7 @@ int ObSharedNothingTmpFileMetaTree::truncate_( STORAGE_LOG(WARN, "fail to calculate truncate index path", KR(ret), K(fd_), K(item_index_arr)); } else if (OB_UNLIKELY(item_index_arr.empty())) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected item_index_arr", KR(ret), K(fd_), K(item_index_arr)); + STORAGE_LOG(ERROR, "unexpected item_index_arr", KR(ret), K(fd_), K(item_index_arr)); } else { ObSharedNothingTmpFileMetaItem meta_item = root_item_; ObSharedNothingTmpFileMetaItem next_level_meta_item; @@ -2219,7 +2221,7 @@ int ObSharedNothingTmpFileMetaTree::truncate_( ObTmpPageValueHandle p_handle; if (OB_UNLIKELY(item_index_arr.count() <= meta_item.page_level_)) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected item_index_arr", KR(ret), K(fd_), K(item_index_arr), K(meta_item)); + STORAGE_LOG(ERROR, "unexpected item_index_arr", KR(ret), K(fd_), K(item_index_arr), K(meta_item)); } else if (FALSE_IT(level_page_index = item_index_arr.at(meta_item.page_level_).first)) { } else if (FALSE_IT(item_index = item_index_arr.at(meta_item.page_level_).second)) { } else if (OB_FAIL(get_page_(meta_item, level_page_index, page_buff, p_handle))) { @@ -2260,7 +2262,7 @@ int ObSharedNothingTmpFileMetaTree::truncate_( } } else { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected page type", KR(ret), K(fd_), K(meta_item)); + STORAGE_LOG(ERROR, "unexpected page type", KR(ret), K(fd_), K(meta_item)); } } for (int16_t i = 0; i < p_handles.count(); i++) { @@ -2278,14 +2280,14 @@ int ObSharedNothingTmpFileMetaTree::truncate_array_( if (OB_UNLIKELY(end_offset < 0 || data_item_array_.count() > MAX_DATA_ITEM_ARRAY_COUNT)) { ret = OB_INVALID_ARGUMENT; - STORAGE_LOG(WARN, "invalid argument", KR(ret), K(fd_), K(end_offset), K(data_item_array_)); + STORAGE_LOG(ERROR, "invalid argument", KR(ret), K(fd_), K(end_offset), K(data_item_array_)); } else if (data_item_array_.empty()) { STORAGE_LOG(INFO, "no data to truncate", KR(ret), K(fd_), K(data_item_array_), K(root_item_)); } else { const ObSharedNothingTmpFileDataItem &last_item = data_item_array_.at(data_item_array_.count() - 1); if (OB_UNLIKELY(!last_item.is_valid())) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected last item", KR(ret), K(fd_), K(last_item)); + STORAGE_LOG(ERROR, "unexpected last item", KR(ret), K(fd_), K(last_item)); } else if (end_offset >= (last_item.virtual_page_id_ + last_item.physical_page_num_) * ObTmpFileGlobal::PAGE_SIZE) { //clear all items ARRAY_FOREACH_N(data_item_array_, i, cnt) { @@ -2308,7 +2310,7 @@ int ObSharedNothingTmpFileMetaTree::truncate_array_( const ObSharedNothingTmpFileDataItem &data_item = data_item_array_.at(i); if (OB_UNLIKELY(!data_item.is_valid())) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected data item", KR(ret), K(fd_), K(data_item)); + STORAGE_LOG(ERROR, "unexpected data item", KR(ret), K(fd_), K(data_item)); } else if (data_item.virtual_page_id_ <= target_virtual_page_id) { index = i; } else { @@ -2325,7 +2327,7 @@ int ObSharedNothingTmpFileMetaTree::truncate_array_( ObSharedNothingTmpFileDataItem &data_item = data_item_array_.at(i); if (OB_UNLIKELY(!data_item.is_valid())) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected data item", KR(ret), K(fd_), K(data_item)); + STORAGE_LOG(ERROR, "unexpected data item", KR(ret), K(fd_), K(data_item)); } else if (OB_FAIL(release_tmp_file_page_(data_item.block_index_, data_item.physical_page_id_, data_item.physical_page_num_))) { @@ -2356,9 +2358,10 @@ int ObSharedNothingTmpFileMetaTree::calculate_truncate_index_path_( ObIArray> &item_index_arr) { int ret = OB_SUCCESS; + item_index_arr.reset(); if (OB_UNLIKELY(!root_item_.is_valid())) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected root_item_", KR(ret), K(fd_), K(root_item_)); + STORAGE_LOG(ERROR, "unexpected root_item_", KR(ret), K(fd_), K(root_item_)); } else { const int16_t FULL_PAGE_META_ITEM_NUM = MIN(MAX_PAGE_ITEM_COUNT, (ObTmpFileGlobal::PAGE_SIZE - PAGE_HEADER_SIZE) / sizeof(ObSharedNothingTmpFileMetaItem)); @@ -2384,7 +2387,7 @@ int ObSharedNothingTmpFileMetaTree::calculate_truncate_index_path_( } if (level_page_index >= level_page_num) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "no data to truncate but root_item_ is valid", KR(ret), K(fd_), + STORAGE_LOG(ERROR, "no data to truncate but root_item_ is valid", KR(ret), K(fd_), K(i), K(level_page_index), K(level_page_num), K(level_page_range_array_)); } else { child_level_page_index = level_page_index; @@ -2419,7 +2422,7 @@ int ObSharedNothingTmpFileMetaTree::release_items_of_leaf_page_( || PAGE_HEADER_SIZE + (begin_release_index + 1) * sizeof(ObSharedNothingTmpFileDataItem) > ObTmpFileGlobal::PAGE_SIZE || begin_release_index >= MAX_PAGE_ITEM_COUNT)) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected release_offset or begin_release_index", KR(ret), K(fd_), K(tmp_release_offset), K(begin_release_index)); + STORAGE_LOG(ERROR, "unexpected release_offset or begin_release_index", KR(ret), K(fd_), K(tmp_release_offset), K(begin_release_index)); } else if (OB_FAIL(get_page_(page_info, level_page_index, page_buff, p_handle))) { STORAGE_LOG(WARN, "fail to get page", KR(ret), K(fd_), K(page_info), K(level_page_index)); } else if (OB_FAIL(read_page_header_(page_buff, page_header))) { @@ -2436,11 +2439,11 @@ int ObSharedNothingTmpFileMetaTree::release_items_of_leaf_page_( STORAGE_LOG(WARN, "fail to read item", KR(ret), K(fd_), KP(page_buff), K(target_virtual_page_id)); } else if (OB_UNLIKELY(!data_item.is_valid())) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected data item", KR(ret), K(fd_), K(data_item)); + STORAGE_LOG(ERROR, "unexpected data item", KR(ret), K(fd_), K(data_item)); } else if (target_virtual_page_id >= data_item.virtual_page_id_ + data_item.physical_page_num_) { if (OB_UNLIKELY(item_index + 1 != page_header.item_num_)) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected item_index", KR(ret), K(fd_), K(item_index)); + STORAGE_LOG(ERROR, "unexpected item_index", KR(ret), K(fd_), K(item_index)); } else { end_release_index = item_index; release_last_item = true; @@ -2457,7 +2460,7 @@ int ObSharedNothingTmpFileMetaTree::release_items_of_leaf_page_( STORAGE_LOG(WARN, "fail to read item", KR(ret), K(fd_), KP(page_buff), K(item_index)); } else if (OB_UNLIKELY(!data_item.is_valid())) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected data item", KR(ret), K(fd_), K(data_item)); + STORAGE_LOG(ERROR, "unexpected data item", KR(ret), K(fd_), K(data_item)); } else if (OB_FAIL(release_tmp_file_page_(data_item.block_index_, data_item.physical_page_id_, data_item.physical_page_num_))) { @@ -2473,7 +2476,7 @@ int ObSharedNothingTmpFileMetaTree::release_items_of_leaf_page_( if (OB_UNLIKELY(tmp_release_offset > end_offset || tmp_release_offset <= released_offset_)) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected release_offset", KR(ret), K(fd_), K(tmp_release_offset), K(end_offset), K(released_offset_)); + STORAGE_LOG(ERROR, "unexpected release_offset", KR(ret), K(fd_), K(tmp_release_offset), K(end_offset), K(released_offset_)); } else { released_offset_ = tmp_release_offset; last_truncate_leaf_info_.page_index_in_leaf_level_ = level_page_index; @@ -2519,10 +2522,11 @@ int ObSharedNothingTmpFileMetaTree::backtrace_truncate_tree_( int16_t cur_item_index = search_path.at(last_node_index).prev_item_index_ + 1; if (OB_UNLIKELY(p_handles.count() != search_path.count())) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected p_handles or search_path", KR(ret), K(fd_), K(p_handles), K(search_path)); + STORAGE_LOG(ERROR, "unexpected p_handles or search_path", KR(ret), K(fd_), K(p_handles), K(search_path)); + //must not fail } else if (OB_FAIL(get_items_of_internal_page_(page_info, level_page_index, cur_item_index, end_offset, reach_last_item, meta_items))) { - STORAGE_LOG(WARN, "fail to get items of internal page", KR(ret), K(fd_), K(page_info), + STORAGE_LOG(ERROR, "fail to get items of internal page", KR(ret), K(fd_), K(page_info), K(level_page_index), K(cur_item_index), K(end_offset)); } else if (1 == page_info.page_level_) { int16_t release_page_cnt = 0; @@ -2587,11 +2591,11 @@ int ObSharedNothingTmpFileMetaTree::backtrace_truncate_tree_( } } else { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected meta_items", KR(ret), K(fd_), K(meta_items)); + STORAGE_LOG(ERROR, "unexpected meta_items", KR(ret), K(fd_), K(meta_items)); } } else { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected page info", KR(ret), K(fd_), K(page_info)); + STORAGE_LOG(ERROR, "unexpected page info", KR(ret), K(fd_), K(page_info)); } } if (OB_SUCC(ret) && !need_finish) { @@ -2623,7 +2627,7 @@ int ObSharedNothingTmpFileMetaTree::check_tree_is_empty_() || ObTmpFileGlobal::INVALID_PAGE_ID != level_page_range_array_.at(i).end_page_id_ || ObTmpFileGlobal::INVALID_PAGE_ID != level_page_range_array_.at(i).flushed_end_page_id_)) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected level_page_range_array_", KR(ret), K(fd_), K(level_page_range_array_), K(i)); + STORAGE_LOG(ERROR, "unexpected level_page_range_array_", KR(ret), K(fd_), K(level_page_range_array_), K(i)); } } return ret; @@ -2645,7 +2649,7 @@ int ObSharedNothingTmpFileMetaTree::get_need_flush_page_num( if (ObTmpFileGlobal::INVALID_PAGE_ID != start_page_id) { if (OB_UNLIKELY(ObTmpFileGlobal::INVALID_PAGE_ID == end_page_id)) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected end_page_id", KR(ret), K(fd_), K(level_page_range_array_), K(level)); + STORAGE_LOG(ERROR, "unexpected end_page_id", KR(ret), K(fd_), K(level_page_range_array_), K(level)); } else { uint32_t cur_page_id = ObTmpFileGlobal::INVALID_PAGE_ID; int32_t level_page_index = level_page_range_array_[level].flushed_page_num_; @@ -2667,7 +2671,7 @@ int ObSharedNothingTmpFileMetaTree::get_need_flush_page_num( } } if (OB_FAIL(wbp_->get_next_page_id(fd_, cur_page_id, page_key, next_page_id))) { - STORAGE_LOG(WARN, "fail to get next meta page id", KR(ret), K(fd_), K(cur_page_id), K(page_key)); + STORAGE_LOG(ERROR, "fail to get next meta page id", KR(ret), K(fd_), K(cur_page_id), K(page_key)); } else { cur_page_id = next_page_id; level_page_index++; @@ -2675,7 +2679,7 @@ int ObSharedNothingTmpFileMetaTree::get_need_flush_page_num( } if (OB_SUCC(ret) && end_page_id != cur_page_id && ObTmpFileGlobal::INVALID_PAGE_ID != cur_page_id) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected cur_page_id", KR(ret), K(fd_), K(cur_page_id), + STORAGE_LOG(ERROR, "unexpected cur_page_id", KR(ret), K(fd_), K(cur_page_id), K(level_page_range_array_), K(level)); } } @@ -2701,7 +2705,7 @@ int ObSharedNothingTmpFileMetaTree::get_need_evict_page_num( if (OB_UNLIKELY(ObTmpFileGlobal::INVALID_PAGE_ID == start_page_id || ObTmpFileGlobal::INVALID_PAGE_ID == end_page_id)) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected start_page_id or end_page_id", KR(ret), K(fd_), K(level_page_range_array_), K(level)); + STORAGE_LOG(ERROR, "unexpected start_page_id or end_page_id", KR(ret), K(fd_), K(level_page_range_array_), K(level)); } else { uint32_t cur_page_id = start_page_id; int32_t level_page_index = level_page_range_array_[level].evicted_page_num_; @@ -2711,7 +2715,7 @@ int ObSharedNothingTmpFileMetaTree::get_need_evict_page_num( ObTmpFilePageUniqKey page_key(level, level_page_index); if (OB_UNLIKELY(flushed_end_page_id != cur_page_id && !wbp_->is_cached(fd_, cur_page_id, page_key))) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected cur_page_id", KR(ret), K(fd_), K(cur_page_id), K(flushed_end_page_id)); + STORAGE_LOG(ERROR, "unexpected cur_page_id", KR(ret), K(fd_), K(cur_page_id), K(flushed_end_page_id)); } else if (!wbp_->is_cached(fd_, cur_page_id, page_key)) { break; } else if (FALSE_IT(total_need_evict_page_num++)) { @@ -2719,7 +2723,7 @@ int ObSharedNothingTmpFileMetaTree::get_need_evict_page_num( } else if (flushed_end_page_id == cur_page_id) { break; } else if (OB_FAIL(wbp_->get_next_page_id(fd_, cur_page_id, page_key, next_page_id))) { - STORAGE_LOG(WARN, "fail to get next meta page id", KR(ret), K(fd_), K(cur_page_id), K(page_key)); + STORAGE_LOG(ERROR, "fail to get next meta page id", KR(ret), K(fd_), K(cur_page_id), K(page_key)); } else { cur_page_id = next_page_id; level_page_index++; @@ -2727,7 +2731,7 @@ int ObSharedNothingTmpFileMetaTree::get_need_evict_page_num( } if (OB_SUCC(ret) && flushed_end_page_id != cur_page_id) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected cur_page_id", KR(ret), K(fd_), K(cur_page_id), + STORAGE_LOG(ERROR, "unexpected cur_page_id", KR(ret), K(fd_), K(cur_page_id), K(level_page_range_array_), K(level)); } } @@ -2746,16 +2750,18 @@ int ObSharedNothingTmpFileMetaTree::get_page_( int ret = OB_SUCCESS; if (OB_UNLIKELY(!page_info.is_valid())) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "invalid argument", KR(ret), K(fd_), K(page_info)); + STORAGE_LOG(ERROR, "invalid argument", KR(ret), K(fd_), K(page_info)); } else { if (!is_page_in_write_cache(page_info)) { + bool need_load_from_disk = false; ObTmpPageCacheKey key(page_info.block_index_, page_info.physical_page_id_, MTL_ID()); if (OB_SUCC(ObTmpPageCache::get_instance().get_page(key, p_handle))) { page_buff = p_handle.value_->get_buffer(); } else if (OB_ENTRY_NOT_EXIST != ret) { - STORAGE_LOG(WARN, "fail to read from read_cache", KR(ret), K(fd_), K(key)); + STORAGE_LOG(ERROR, "fail to read from read_cache", KR(ret), K(fd_), K(key)); } else { ret = OB_SUCCESS; + need_load_from_disk = true; if (OB_FAIL(ObTmpPageCache::get_instance().load_page(key, callback_allocator_, p_handle))) { STORAGE_LOG(WARN, "fail to load page from disk", KR(ret), K(fd_), K(key)); } else { @@ -2763,20 +2769,20 @@ int ObSharedNothingTmpFileMetaTree::get_page_( } } if (FAILEDx(check_page_(page_buff))) { - STORAGE_LOG(WARN, "the page is invalid or corrupted", KR(ret), K(fd_), KP(page_buff)); + STORAGE_LOG(ERROR, "the page is invalid or corrupted", KR(ret), K(fd_), KP(page_buff)); } - STORAGE_LOG(INFO, "load page from disk", KR(ret), K(fd_), K(page_info), K(level_page_index)); + STORAGE_LOG(INFO, "load page from disk", KR(ret), K(fd_), K(need_load_from_disk), K(page_info), K(level_page_index)); } else { //still in write cache uint32_t next_page_id = ObTmpFileGlobal::INVALID_PAGE_ID; ObTmpFilePageUniqKey page_key(page_info.page_level_, level_page_index); if (OB_FAIL(wbp_->read_page(fd_, page_info.buffer_page_id_, page_key, page_buff, next_page_id))) { - STORAGE_LOG(WARN, "fail to read from write cache", KR(ret), K(fd_), K(page_info), K(page_key)); + STORAGE_LOG(ERROR, "fail to read from write cache", KR(ret), K(fd_), K(page_info), K(page_key)); } } if (OB_SUCC(ret) && OB_ISNULL(page_buff)) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected page_buff", KR(ret), K(fd_), KP(page_buff)); + STORAGE_LOG(ERROR, "unexpected page_buff", KR(ret), K(fd_), KP(page_buff)); } } return ret; @@ -2813,9 +2819,10 @@ int ObSharedNothingTmpFileMetaTree::cache_page_for_write_( || (ObTmpFileGlobal::INVALID_PAGE_ID != parent_page_id && page_info.page_level_ + 1 >= level_page_range_array_.count()))) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "invalid argument", KR(ret), K(fd_), K(page_info), K(level_page_range_array_), K(parent_page_id)); + STORAGE_LOG(ERROR, "invalid argument", KR(ret), K(fd_), K(page_info), K(level_page_range_array_), K(parent_page_id)); } else { if (!is_page_in_write_cache(page_info)) { + bool need_load_from_disk = false; uint32_t new_page_id = ObTmpFileGlobal::INVALID_PAGE_ID; char *new_page_buff = NULL; int32_t level_page_index = level_page_range_array_[page_info.page_level_].evicted_page_num_ - 1; @@ -2825,25 +2832,26 @@ int ObSharedNothingTmpFileMetaTree::cache_page_for_write_( || 0 > level_page_index || ObTmpFileGlobal::INVALID_PAGE_ID != level_page_range_array_[page_info.page_level_].end_page_id_)) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected page_info", KR(ret), K(fd_), K(page_info), K(level_page_range_array_)); + STORAGE_LOG(ERROR, "unexpected page_info", KR(ret), K(fd_), K(page_info), K(level_page_range_array_)); } else if (OB_FAIL(wbp_->alloc_page(fd_, page_key, new_page_id, new_page_buff))) { STORAGE_LOG(WARN, "fail to alloc meta page", KR(ret), K(fd_), K(page_info), K(level_page_range_array_)); } else if (FALSE_IT(stat_info_.meta_page_alloc_cnt_++)) { } else if (OB_ISNULL(new_page_buff)) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected null page buff", KR(ret), K(fd_), KP(new_page_buff)); + STORAGE_LOG(ERROR, "unexpected null page buff", KR(ret), K(fd_), KP(new_page_buff)); } else if (OB_FAIL(wbp_->notify_load(fd_, new_page_id, page_key))) { - STORAGE_LOG(WARN, "fail to notify load for meta", KR(ret), K(fd_), K(new_page_id), K(page_key)); + STORAGE_LOG(ERROR, "fail to notify load for meta", KR(ret), K(fd_), K(new_page_id), K(page_key)); } else { ObTmpPageValueHandle p_handle; ObTmpPageCacheKey key(page_info.block_index_, page_info.physical_page_id_, MTL_ID()); if (OB_SUCC(ObTmpPageCache::get_instance().get_page(key, p_handle))) { MEMCPY(new_page_buff, p_handle.value_->get_buffer(), ObTmpFileGlobal::PAGE_SIZE); } else if (OB_ENTRY_NOT_EXIST != ret) { - STORAGE_LOG(WARN, "fail to read from read_cache", KR(ret), K(fd_), K(key)); + STORAGE_LOG(ERROR, "fail to read from read_cache", KR(ret), K(fd_), K(key)); } else { ret = OB_SUCCESS; p_handle.reset(); + need_load_from_disk = true; if (OB_FAIL(ObTmpPageCache::get_instance().load_page(key, callback_allocator_, p_handle))) { STORAGE_LOG(WARN, "fail to load page from disk", KR(ret), K(fd_), K(key)); } else { @@ -2851,18 +2859,18 @@ int ObSharedNothingTmpFileMetaTree::cache_page_for_write_( } } if (FAILEDx(check_page_(new_page_buff))) { - STORAGE_LOG(WARN, "the page is invalid or corrupted", KR(ret), K(fd_), KP(new_page_buff)); + STORAGE_LOG(ERROR, "the page is invalid or corrupted", KR(ret), K(fd_), KP(new_page_buff)); } if (OB_SUCC(ret)) { //change page state to cached if (OB_FAIL(wbp_->notify_load_succ(fd_, new_page_id, page_key))) { - STORAGE_LOG(WARN, "fail to notify load succ for meta", KR(ret), K(fd_), K(new_page_id), K(page_key)); + STORAGE_LOG(ERROR, "fail to notify load succ for meta", KR(ret), K(fd_), K(new_page_id), K(page_key)); } } else { int tmp_ret = OB_SUCCESS; //change page state to invalid if (OB_TMP_FAIL(wbp_->notify_load_fail(fd_, new_page_id, page_key))) { - STORAGE_LOG(WARN, "fail to notify load fail for meta", KR(tmp_ret), K(fd_), K(new_page_id), K(page_key)); + STORAGE_LOG(ERROR, "fail to notify load fail for meta", KR(tmp_ret), K(fd_), K(new_page_id), K(page_key)); } } p_handle.reset(); @@ -2883,19 +2891,19 @@ int ObSharedNothingTmpFileMetaTree::cache_page_for_write_( + level_page_range_array_[page_info.page_level_ + 1].cached_page_num_ - 1; ObTmpFilePageUniqKey parent_page_offset(page_info.page_level_ + 1, parent_level_page_index); if (OB_FAIL(wbp_->read_page(fd_, parent_page_id, parent_page_offset, parent_page_buff, next_page_id))) { - STORAGE_LOG(WARN, "fail to read from write cache", KR(ret), K(fd_), K(parent_page_id), K(parent_page_offset)); + STORAGE_LOG(ERROR, "fail to read from write cache", KR(ret), K(fd_), K(parent_page_id), K(parent_page_offset)); } else if (OB_FAIL(read_page_header_(parent_page_buff, page_header))) { STORAGE_LOG(WARN, "fail to read page header", KR(ret), K(fd_), KP(parent_page_buff)); } else if (OB_FAIL(rewrite_item_(parent_page_buff, page_header.item_num_ - 1, page_info))) { STORAGE_LOG(WARN, "fail to rewrite item", KR(ret), K(fd_), K(page_header), K(page_info), KP(parent_page_buff)); } else if (OB_FAIL(wbp_->notify_dirty(fd_, parent_page_id, parent_page_offset))) { - STORAGE_LOG(WARN, "fail to notify dirty for meta", KR(ret), K(fd_), K(parent_page_id), K(parent_page_offset)); + STORAGE_LOG(ERROR, "fail to notify dirty for meta", KR(ret), K(fd_), K(parent_page_id), K(parent_page_offset)); } } if (OB_SUCC(ret)) { int16_t page_level = page_info.page_level_; if (OB_FAIL(wbp_->notify_dirty(fd_, new_page_id, page_key))) { - STORAGE_LOG(WARN, "fail to notify dirty", KR(ret), K(fd_), K(new_page_id), K(page_key)); + STORAGE_LOG(ERROR, "fail to notify dirty", KR(ret), K(fd_), K(new_page_id), K(page_key)); } else if (OB_FAIL(release_tmp_file_page_(origin_block_index, origin_physical_page_id, 1))) { STORAGE_LOG(WARN, "fail to release tmp file page", KR(ret), K(fd_), K(origin_block_index), K(origin_physical_page_id)); } else { @@ -2910,12 +2918,12 @@ int ObSharedNothingTmpFileMetaTree::cache_page_for_write_( uint32_t unused_next_page_id = ObTmpFileGlobal::INVALID_PAGE_ID; int tmp_ret = OB_SUCCESS; if (OB_TMP_FAIL(wbp_->free_page(fd_, new_page_id, page_key, unused_next_page_id))) { - STORAGE_LOG(WARN, "fail to free meta page", KR(tmp_ret), K(fd_), K(new_page_id), K(page_key)); + STORAGE_LOG(ERROR, "fail to free meta page", KR(tmp_ret), KR(ret), K(fd_), K(new_page_id), K(page_key)); } else { stat_info_.meta_page_free_cnt_++; } } - STORAGE_LOG(INFO, "load page to write cache", KR(ret), K(fd_), K(page_info), K(page_key)); + STORAGE_LOG(INFO, "load page to write cache", KR(ret), K(fd_), K(need_load_from_disk), K(page_info), K(page_key)); } else { //still in write cache //do nothing @@ -2931,7 +2939,7 @@ int ObSharedNothingTmpFileMetaTree::init_page_header_( int ret = OB_SUCCESS; if (OB_ISNULL(page_buff)) { ret = OB_INVALID_ARGUMENT; - STORAGE_LOG(WARN, "invalid argument", KR(ret), K(fd_), KP(page_buff)); + STORAGE_LOG(ERROR, "invalid argument", KR(ret), K(fd_), KP(page_buff)); } else { ObSharedNothingTmpFileTreePageHeader page_header; page_header.item_num_ = 0; @@ -2949,7 +2957,7 @@ int ObSharedNothingTmpFileMetaTree::read_page_header_( int ret = OB_SUCCESS; if (OB_UNLIKELY(NULL == page_buff)) { ret = OB_INVALID_ARGUMENT; - STORAGE_LOG(WARN, "invalid argument", KR(ret), K(fd_), KP(page_buff)); + STORAGE_LOG(ERROR, "invalid argument", KR(ret), K(fd_), KP(page_buff)); } else { page_header = *((ObSharedNothingTmpFileTreePageHeader *)(page_buff)); } @@ -2964,13 +2972,13 @@ int ObSharedNothingTmpFileMetaTree::remove_page_item_from_tail_( if (OB_UNLIKELY(NULL == page_buff || 0 > remove_item_num)) { ret = OB_INVALID_ARGUMENT; - STORAGE_LOG(WARN, "invalid argument", KR(ret), K(fd_), KP(page_buff), K(remove_item_num)); + STORAGE_LOG(ERROR, "invalid argument", KR(ret), K(fd_), KP(page_buff), K(remove_item_num)); } else { ObSharedNothingTmpFileTreePageHeader page_header = *((ObSharedNothingTmpFileTreePageHeader *)(page_buff)); page_header.item_num_ -= remove_item_num; if (OB_UNLIKELY(page_header.item_num_ < 0)) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected item_num", KR(ret), K(fd_), K(page_header)); + STORAGE_LOG(ERROR, "unexpected item_num", KR(ret), K(fd_), K(page_header)); } else { MEMCPY(page_buff, &page_header, PAGE_HEADER_SIZE); } @@ -2993,11 +3001,11 @@ int ObSharedNothingTmpFileMetaTree::read_item_( if (OB_UNLIKELY(NULL == page_buff || target_virtual_page_id < 0)) { ret = OB_INVALID_ARGUMENT; - STORAGE_LOG(WARN, "invalid argument", KR(ret), K(fd_), KP(page_buff), K(target_virtual_page_id)); + STORAGE_LOG(ERROR, "invalid argument", KR(ret), K(fd_), KP(page_buff), K(target_virtual_page_id)); } else if (OB_UNLIKELY(PAGE_HEADER_SIZE + item_num * sizeof(item) > ObTmpFileGlobal::PAGE_SIZE || item_num > MAX_PAGE_ITEM_COUNT)) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected item_num", KR(ret), K(fd_), K(page_header)); + STORAGE_LOG(ERROR, "unexpected item_num", KR(ret), K(fd_), K(page_header)); } else { int16_t left = 0; int16_t right = item_num - 1; @@ -3008,7 +3016,7 @@ int ObSharedNothingTmpFileMetaTree::read_item_( ItemType mid_item = *((ItemType *)(items_buff + mid * sizeof(item))); if (OB_UNLIKELY(!mid_item.is_valid())) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected mid item", KR(ret), K(fd_), K(mid_item)); + STORAGE_LOG(ERROR, "unexpected mid item", KR(ret), K(fd_), K(mid_item)); } else if (mid_item.virtual_page_id_ <= target_virtual_page_id) { left = mid + 1; } else { @@ -3017,16 +3025,16 @@ int ObSharedNothingTmpFileMetaTree::read_item_( } if (OB_UNLIKELY(right < 0)) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected dichotomy result", KR(ret), K(fd_), K(right)); + STORAGE_LOG(ERROR, "unexpected dichotomy result", KR(ret), K(fd_), K(right)); } else { item_index = right; item = *((ItemType *)(items_buff + item_index * sizeof(item))); if (OB_UNLIKELY(!item.is_valid())) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected item", KR(ret), K(fd_), K(item)); + STORAGE_LOG(ERROR, "unexpected item", KR(ret), K(fd_), K(item)); } else if (item.virtual_page_id_ > target_virtual_page_id) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected virtual_page_id", KR(ret), K(fd_), K(item), K(target_virtual_page_id)); + STORAGE_LOG(ERROR, "unexpected virtual_page_id", KR(ret), K(fd_), K(item), K(target_virtual_page_id)); } } } @@ -3058,7 +3066,7 @@ int ObSharedNothingTmpFileMetaTree::read_item_( || PAGE_HEADER_SIZE + page_header.item_num_ * sizeof(item) > ObTmpFileGlobal::PAGE_SIZE || PAGE_HEADER_SIZE + (item_index + 1) * sizeof(item) > ObTmpFileGlobal::PAGE_SIZE)) { ret = OB_INVALID_ARGUMENT; - STORAGE_LOG(WARN, "invalid argument", KR(ret), K(fd_), KP(page_buff), K(item_index), K(page_header)); + STORAGE_LOG(ERROR, "invalid argument", KR(ret), K(fd_), KP(page_buff), K(item_index), K(page_header)); } else { const char *items_buff = page_buff + PAGE_HEADER_SIZE; item = *((ItemType *)(items_buff + item_index * sizeof(item))); @@ -3078,7 +3086,7 @@ int ObSharedNothingTmpFileMetaTree::rewrite_item_( || PAGE_HEADER_SIZE + (item_index + 1) * sizeof(item) > ObTmpFileGlobal::PAGE_SIZE || !item.is_valid())) { ret = OB_INVALID_ARGUMENT; - STORAGE_LOG(WARN, "invalid argument", KR(ret), K(fd_), KP(page_buff), K(item_index), K(item)); + STORAGE_LOG(ERROR, "invalid argument", KR(ret), K(fd_), KP(page_buff), K(item_index), K(item)); } else { char *items_buff = page_buff + PAGE_HEADER_SIZE; MEMCPY(items_buff + item_index * sizeof(item), &item, sizeof(item)); @@ -3100,7 +3108,7 @@ int ObSharedNothingTmpFileMetaTree::write_items_( || begin_index < 0 || begin_index >= items.count())) { ret = OB_INVALID_ARGUMENT; - STORAGE_LOG(WARN, "invalid argument", KR(ret), K(fd_), KP(page_buff), K(items), K(begin_index)); + STORAGE_LOG(ERROR, "invalid argument", KR(ret), K(fd_), KP(page_buff), K(items), K(begin_index)); } else { ObSharedNothingTmpFileTreePageHeader page_header = *((ObSharedNothingTmpFileTreePageHeader *)(page_buff)); char *items_buff = page_buff + PAGE_HEADER_SIZE; @@ -3172,7 +3180,7 @@ void ObSharedNothingTmpFileMetaTree::read_page_content_( items.reset(); if (OB_ISNULL(page_buff)) { ret = OB_INVALID_ARGUMENT; - STORAGE_LOG(WARN, "invalid argument", KR(ret), K(fd_), KP(page_buff)); + STORAGE_LOG(ERROR, "invalid argument", KR(ret), K(fd_), KP(page_buff)); } else { const char *items_buff = page_buff + PAGE_HEADER_SIZE; int16_t index = 0; @@ -3202,14 +3210,14 @@ void ObSharedNothingTmpFileMetaTree::read_page_simple_content_( last_item.reset(); if (OB_ISNULL(page_buff)) { ret = OB_INVALID_ARGUMENT; - STORAGE_LOG(WARN, "invalid argument", KR(ret), K(fd_), KP(page_buff)); + STORAGE_LOG(ERROR, "invalid argument", KR(ret), K(fd_), KP(page_buff)); } else { const char *items_buff = page_buff + PAGE_HEADER_SIZE; page_header = *((ObSharedNothingTmpFileTreePageHeader *)(page_buff)); if (OB_UNLIKELY(0 > page_header.item_num_ || PAGE_HEADER_SIZE + page_header.item_num_ * sizeof(ItemType) > ObTmpFileGlobal::PAGE_SIZE)) { ret = OB_ERR_UNEXPECTED; - STORAGE_LOG(WARN, "unexpected item_num_", KR(ret), K(fd_), KP(page_buff), K(page_header)); + STORAGE_LOG(ERROR, "unexpected item_num_", KR(ret), K(fd_), KP(page_buff), K(page_header)); } else if (0 == page_header.item_num_) { } else { first_item = *((ItemType *)(items_buff)); diff --git a/src/storage/tmp_file/ob_tmp_file_meta_tree.h b/src/storage/tmp_file/ob_tmp_file_meta_tree.h index 62a602c8b..3a4524608 100644 --- a/src/storage/tmp_file/ob_tmp_file_meta_tree.h +++ b/src/storage/tmp_file/ob_tmp_file_meta_tree.h @@ -24,6 +24,7 @@ namespace tmp_file class ObTmpPageValueHandle; class ObSNTmpFileInfo; +class ObTmpFileBlockManager; struct ObSharedNothingTmpFileMetaItem { @@ -307,7 +308,7 @@ public: ~ObSharedNothingTmpFileMetaTree(); void reset(); public: - int init(const int64_t fd, ObTmpWriteBufferPool *wbp, ObIAllocator *callback_allocator); + int init(const int64_t fd, ObTmpWriteBufferPool *wbp, ObIAllocator *callback_allocator, ObTmpFileBlockManager *block_manager); //append write: We always write the rightmost page of the leaf layer //It happens after a tmp file write request: @@ -524,6 +525,7 @@ private: int64_t fd_; ObTmpWriteBufferPool *wbp_; ObIAllocator *callback_allocator_; + ObTmpFileBlockManager *block_manager_; int64_t tree_epoch_; ObSharedNothingTmpFileMetaItem root_item_; //When the tmp file writes less data, we can use an array instead of a tree to store metadata