fix reverse scan with magic row problem
This commit is contained in:
		
							
								
								
									
										37
									
								
								deps/oblib/src/common/ob_store_range.cpp
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										37
									
								
								deps/oblib/src/common/ob_store_range.cpp
									
									
									
									
										vendored
									
									
								
							@ -418,16 +418,15 @@ int ObVersionStoreRangeConversionHelper::store_rowkey_to_multi_version_range(
 | 
				
			|||||||
    COMMON_LOG(WARN, "version_range is not valid", K(ret), K(version_range));
 | 
					    COMMON_LOG(WARN, "version_range is not valid", K(ret), K(version_range));
 | 
				
			||||||
  } else if (OB_FAIL(build_multi_version_store_rowkey(src_rowkey.get_store_rowkey(),
 | 
					  } else if (OB_FAIL(build_multi_version_store_rowkey(src_rowkey.get_store_rowkey(),
 | 
				
			||||||
                 //-version_range.snapshot_version_,
 | 
					                 //-version_range.snapshot_version_,
 | 
				
			||||||
                 -INT64_MAX,
 | 
					                 true,  // min_value
 | 
				
			||||||
                 allocator,
 | 
					                 allocator,
 | 
				
			||||||
                 multi_version_range.get_range().get_start_key()))) {
 | 
					                 multi_version_range.get_range().get_start_key()))) {
 | 
				
			||||||
    COMMON_LOG(WARN, "build multi version store rowkey failed", K(ret), K(src_rowkey), K(version_range));
 | 
					    COMMON_LOG(WARN, "build multi version store rowkey failed", K(ret), K(src_rowkey), K(version_range));
 | 
				
			||||||
  } else if (OB_FAIL(build_multi_version_store_rowkey(src_rowkey.get_store_rowkey(),
 | 
					  } else if (OB_FAIL(build_multi_version_store_rowkey(src_rowkey.get_store_rowkey(),
 | 
				
			||||||
                                                ObVersionRange::MAX_VERSION,
 | 
					                 false,  // min_value
 | 
				
			||||||
                                                allocator,
 | 
					                 allocator,
 | 
				
			||||||
                                                multi_version_range.get_range().get_end_key()))) {
 | 
					                 multi_version_range.get_range().get_end_key()))) {
 | 
				
			||||||
    COMMON_LOG(WARN, "build multi version store rowkey failed",
 | 
					    COMMON_LOG(WARN, "build multi version store rowkey failed", K(ret), K(src_rowkey), K(version_range));
 | 
				
			||||||
                  K(ret), K(src_rowkey), K(version_range));
 | 
					 | 
				
			||||||
  } else if (OB_FAIL(multi_version_range.to_collation_free_range_on_demand_and_cutoff_range(allocator))) {
 | 
					  } else if (OB_FAIL(multi_version_range.to_collation_free_range_on_demand_and_cutoff_range(allocator))) {
 | 
				
			||||||
    COMMON_LOG(WARN, "fail to get colllation free rowkey and range cutoff", K(ret));
 | 
					    COMMON_LOG(WARN, "fail to get colllation free rowkey and range cutoff", K(ret));
 | 
				
			||||||
  } else {
 | 
					  } else {
 | 
				
			||||||
@ -455,15 +454,15 @@ int ObVersionStoreRangeConversionHelper::range_to_multi_version_range(
 | 
				
			|||||||
    ret = OB_INVALID_ARGUMENT;
 | 
					    ret = OB_INVALID_ARGUMENT;
 | 
				
			||||||
    COMMON_LOG(WARN, "version_range is not valid", K(ret), K(version_range));
 | 
					    COMMON_LOG(WARN, "version_range is not valid", K(ret), K(version_range));
 | 
				
			||||||
  } else if (OB_FAIL(build_multi_version_store_rowkey(src_range.get_range().get_start_key(),
 | 
					  } else if (OB_FAIL(build_multi_version_store_rowkey(src_range.get_range().get_start_key(),
 | 
				
			||||||
      include_start ? -INT64_MAX : ObVersionRange::MAX_VERSION,
 | 
					                 include_start,
 | 
				
			||||||
      allocator, multi_version_range.get_range().get_start_key()))) {
 | 
					                 allocator,
 | 
				
			||||||
    COMMON_LOG(WARN, "build multi version store rowkey failed",
 | 
					                 multi_version_range.get_range().get_start_key()))) {
 | 
				
			||||||
              K(ret), K(src_range), K(version_range));
 | 
					    COMMON_LOG(WARN, "build multi version store rowkey failed", K(ret), K(src_range), K(version_range));
 | 
				
			||||||
  } else if (OB_FAIL(build_multi_version_store_rowkey(src_range.get_range().get_end_key(),
 | 
					  } else if (OB_FAIL(build_multi_version_store_rowkey(src_range.get_range().get_end_key(),
 | 
				
			||||||
      include_end ? ObVersionRange::MAX_VERSION : - ObVersionRange::MAX_VERSION,
 | 
					                 !include_end,
 | 
				
			||||||
      allocator, multi_version_range.get_range().get_end_key()))) {
 | 
					                 allocator,
 | 
				
			||||||
    COMMON_LOG(WARN, "build multi version store rowkey failed",
 | 
					                 multi_version_range.get_range().get_end_key()))) {
 | 
				
			||||||
               K(ret), K(src_range), K(version_range));
 | 
					    COMMON_LOG(WARN, "build multi version store rowkey failed", K(ret), K(src_range), K(version_range));
 | 
				
			||||||
  } else if (OB_FAIL(multi_version_range.to_collation_free_range_on_demand_and_cutoff_range(allocator))) {
 | 
					  } else if (OB_FAIL(multi_version_range.to_collation_free_range_on_demand_and_cutoff_range(allocator))) {
 | 
				
			||||||
    COMMON_LOG(WARN, "fail to get collation free rowkey", K(ret));
 | 
					    COMMON_LOG(WARN, "fail to get collation free rowkey", K(ret));
 | 
				
			||||||
  } else {
 | 
					  } else {
 | 
				
			||||||
@ -482,8 +481,8 @@ int ObVersionStoreRangeConversionHelper::range_to_multi_version_range(
 | 
				
			|||||||
  return ret;
 | 
					  return ret;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int ObVersionStoreRangeConversionHelper::build_multi_version_store_rowkey(const ObStoreRowkey& store_rowkey,
 | 
					int ObVersionStoreRangeConversionHelper::build_multi_version_store_rowkey(const ObStoreRowkey &store_rowkey,
 | 
				
			||||||
    const int64_t trans_version, ObIAllocator& allocator, ObStoreRowkey& multi_version_store_rowkey)
 | 
					    const bool min_value, ObIAllocator &allocator, ObStoreRowkey &multi_version_store_rowkey)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  int ret = OB_SUCCESS;
 | 
					  int ret = OB_SUCCESS;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -509,7 +508,11 @@ int ObVersionStoreRangeConversionHelper::build_multi_version_store_rowkey(const
 | 
				
			|||||||
        cells[i] = store_rowkey.get_obj_ptr()[i];
 | 
					        cells[i] = store_rowkey.get_obj_ptr()[i];
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      // FIXME: hard coding
 | 
					      // FIXME: hard coding
 | 
				
			||||||
      cells[i].set_int(trans_version);
 | 
					      if (min_value) {
 | 
				
			||||||
 | 
					        cells[i].set_min_value();
 | 
				
			||||||
 | 
					      } else {
 | 
				
			||||||
 | 
					        cells[i].set_max_value();
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
      multi_version_store_rowkey.assign(cells, cell_cnt);
 | 
					      multi_version_store_rowkey.assign(cells, cell_cnt);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										4
									
								
								deps/oblib/src/common/ob_store_range.h
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								deps/oblib/src/common/ob_store_range.h
									
									
									
									
										vendored
									
									
								
							@ -409,8 +409,8 @@ public:
 | 
				
			|||||||
      ObIAllocator& allocator, ObExtStoreRange& multi_version_range);
 | 
					      ObIAllocator& allocator, ObExtStoreRange& multi_version_range);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
  static int build_multi_version_store_rowkey(const ObStoreRowkey& rowkey, const int64_t trans_version,
 | 
					  static int build_multi_version_store_rowkey(
 | 
				
			||||||
      ObIAllocator& allocator, ObStoreRowkey& multi_version_rowkey);
 | 
					      const ObStoreRowkey &rowkey, const bool min_value, ObIAllocator &allocator, ObStoreRowkey &multi_version_rowkey);
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}  // end namespace common
 | 
					}  // end namespace common
 | 
				
			||||||
 | 
				
			|||||||
@ -2609,16 +2609,168 @@ TEST_F(TestMultiVersionSSTableSingleScan, test_memleak)
 | 
				
			|||||||
  scanner->~ObStoreRowIterator();
 | 
					  scanner->~ObStoreRowIterator();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					TEST_F(TestMultiVersionSSTableSingleScan, test_reverse)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  const int64_t rowkey_cnt = 4;
 | 
				
			||||||
 | 
					  const char *micro_data[5];
 | 
				
			||||||
 | 
					  micro_data[0] = "bigint   var   bigint bigint  bigint   bigint  flag    multi_version_row_flag\n"
 | 
				
			||||||
 | 
					                  "0        var1  -9       0     7        NOP     EXIST   C\n"
 | 
				
			||||||
 | 
					                  "0        var1  -7       0     6        5       EXIST   C\n"
 | 
				
			||||||
 | 
					                  "0        var1  9223372036854775807       9223372036854775807 NOP      NOP     EXIST   LM\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  micro_data[1] = "bigint   var   bigint bigint  bigint   bigint  flag    multi_version_row_flag\n"
 | 
				
			||||||
 | 
					                  "1        var1  -8       0     NOP      2       EXIST   C\n"
 | 
				
			||||||
 | 
					                  "1        var1  -2       0     2        NOP     EXIST   L\n"
 | 
				
			||||||
 | 
					                  "2        var1  -9       0     7        NOP     EXIST   C\n"
 | 
				
			||||||
 | 
					                  "2        var1  -7       0     6        5       EXIST   C\n"
 | 
				
			||||||
 | 
					                  "2        var1  9223372036854775807       9223372036854775807     NOP      NOP     EXIST   LM\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  micro_data[2] = "bigint   var   bigint bigint  bigint   bigint  flag    multi_version_row_flag\n"
 | 
				
			||||||
 | 
					                  "3        var1  -6       0     6        1       EXIST   C\n"
 | 
				
			||||||
 | 
					                  "3        var1  9223372036854775807       9223372036854775807     NOP      NOP     EXIST   LM\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  micro_data[3] = "bigint   var   bigint bigint  bigint   bigint  flag    multi_version_row_flag\n"
 | 
				
			||||||
 | 
					                  "4        var1  -3       0     5        2       EXIST   C\n"
 | 
				
			||||||
 | 
					                  "4        var1  -2       0     5        1       EXIST   C\n"
 | 
				
			||||||
 | 
					                  "4        var1  -1       0     NOP      NOP     EXIST   LM\n"
 | 
				
			||||||
 | 
					                  "5        var1  -2       0     5        1       EXIST   C\n"
 | 
				
			||||||
 | 
					                  "5        var1  -1       0     4        3       EXIST   L\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  micro_data[4] = "bigint   var   bigint bigint  bigint   bigint  flag    multi_version_row_flag\n"
 | 
				
			||||||
 | 
					                  "6        var1  -3       0     5        2       EXIST   C\n"
 | 
				
			||||||
 | 
					                  "6        var1  -2       0     5        1       EXIST   C\n"
 | 
				
			||||||
 | 
					                  "6        var1  -1       0     4        3       EXIST   L\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  prepare_data_start(micro_data, rowkey_cnt, 10, "none", FLAT_ROW_STORE, 0);
 | 
				
			||||||
 | 
					  prepare_one_macro(micro_data, 2, 10, nullptr, nullptr, true);
 | 
				
			||||||
 | 
					  prepare_one_macro(µ_data[2], 1, 10, nullptr, nullptr, true);
 | 
				
			||||||
 | 
					  prepare_one_macro(µ_data[3], 2, 10, nullptr, nullptr, true);
 | 
				
			||||||
 | 
					  // prepare_one_macro(µ_data[2], 1, 10, nullptr, nullptr, true);
 | 
				
			||||||
 | 
					  prepare_data_end();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  ObMockIterator res_iter;
 | 
				
			||||||
 | 
					  ObStoreRowIterator *scanner = NULL;
 | 
				
			||||||
 | 
					  ObExtStoreRange range;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  const char *result1 = "bigint   var   bigint   bigint  flag    multi_version_row_flag\n"
 | 
				
			||||||
 | 
					                        "6        var1  5        2        EXIST   N\n"
 | 
				
			||||||
 | 
					                        "5        var1  5        1        EXIST   N\n"
 | 
				
			||||||
 | 
					                        "4        var1  5        2        EXIST   N\n"
 | 
				
			||||||
 | 
					                        "3        var1  6        1        EXIST N\n";
 | 
				
			||||||
 | 
					  const char *rowkey1 = "bigint   var   bigint flag    multi_version_row_flag\n"
 | 
				
			||||||
 | 
					                        "2        var1  9223372036854775807 EXIST   N\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  ObMockIterator rowkey_iter;
 | 
				
			||||||
 | 
					  ObExtStoreRowkey ext_rowkey;
 | 
				
			||||||
 | 
					  const ObStoreRow *row = NULL;
 | 
				
			||||||
 | 
					  rowkey_iter.reset();
 | 
				
			||||||
 | 
					  OK(rowkey_iter.from(rowkey1));
 | 
				
			||||||
 | 
					  OK(rowkey_iter.get_row(0, row));
 | 
				
			||||||
 | 
					  ASSERT_TRUE(NULL != row);
 | 
				
			||||||
 | 
					  range.get_range().set_whole_range();
 | 
				
			||||||
 | 
					  range.get_range().start_key_.assign(row->row_val_.cells_, rowkey_cnt - 2);
 | 
				
			||||||
 | 
					  range.get_range().set_left_open();
 | 
				
			||||||
 | 
					  OK(range.to_collation_free_range_on_demand_and_cutoff_range(stmt_allocator_));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  ObVersionRange trans_version_range;
 | 
				
			||||||
 | 
					  trans_version_range.base_version_ = 0;
 | 
				
			||||||
 | 
					  trans_version_range.multi_version_start_ = 0;
 | 
				
			||||||
 | 
					  trans_version_range.snapshot_version_ = 100;
 | 
				
			||||||
 | 
					  prepare_query_param(trans_version_range, false, false, true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  res_iter.reset();
 | 
				
			||||||
 | 
					  OK(sstable_.scan(param_, context_, range, scanner));
 | 
				
			||||||
 | 
					  OK(res_iter.from(result1));
 | 
				
			||||||
 | 
					  ASSERT_TRUE(res_iter.equals(*scanner));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  scanner->~ObStoreRowIterator();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					TEST_F(TestMultiVersionSSTableSingleScan, test_reverse2)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  const int64_t rowkey_cnt = 4;
 | 
				
			||||||
 | 
					  const char *micro_data[5];
 | 
				
			||||||
 | 
					  micro_data[0] = "bigint   var   bigint bigint  bigint   bigint  flag    multi_version_row_flag\n"
 | 
				
			||||||
 | 
					                  "0        var1  -9       0     7        NOP     EXIST   C\n"
 | 
				
			||||||
 | 
					                  "0        var1  -7       0     6        5       EXIST   C\n"
 | 
				
			||||||
 | 
					                  "0        var1  9223372036854775807       9223372036854775807 NOP      NOP     EXIST   LM\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  micro_data[1] = "bigint   var   bigint bigint  bigint   bigint  flag    multi_version_row_flag\n"
 | 
				
			||||||
 | 
					                  "1        var1  -8       0     NOP      2       EXIST   C\n"
 | 
				
			||||||
 | 
					                  "1        var1  -2       0     2        NOP     EXIST   L\n"
 | 
				
			||||||
 | 
					                  "2        var1  9223372036854775807       9223372036854775807     NOP      NOP     EXIST   LM\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  micro_data[2] = "bigint   var   bigint bigint  bigint   bigint  flag    multi_version_row_flag\n"
 | 
				
			||||||
 | 
					                  "3        var1  -6       0     6        1       EXIST   C\n"
 | 
				
			||||||
 | 
					                  "3        var1  9223372036854775807       9223372036854775807     NOP      NOP     EXIST   LM\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  micro_data[3] = "bigint   var   bigint bigint  bigint   bigint  flag    multi_version_row_flag\n"
 | 
				
			||||||
 | 
					                  "4        var1  -3       0     5        2       EXIST   C\n"
 | 
				
			||||||
 | 
					                  "4        var1  -2       0     5        1       EXIST   C\n"
 | 
				
			||||||
 | 
					                  "4        var1  -1       0     NOP      NOP     EXIST   LM\n"
 | 
				
			||||||
 | 
					                  "5        var1  -2       0     5        1       EXIST   C\n"
 | 
				
			||||||
 | 
					                  "5        var1  -1       0     4        3       EXIST   L\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  micro_data[4] = "bigint   var   bigint bigint  bigint   bigint  flag    multi_version_row_flag\n"
 | 
				
			||||||
 | 
					                  "6        var1  -3       0     5        2       EXIST   C\n"
 | 
				
			||||||
 | 
					                  "6        var1  -2       0     5        1       EXIST   C\n"
 | 
				
			||||||
 | 
					                  "6        var1  -1       0     4        3       EXIST   L\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  prepare_data_start(micro_data, rowkey_cnt, 10, "none", FLAT_ROW_STORE, 0);
 | 
				
			||||||
 | 
					  prepare_one_macro(micro_data, 2, 10, nullptr, nullptr, true);
 | 
				
			||||||
 | 
					  prepare_one_macro(µ_data[2], 1, 10, nullptr, nullptr, true);
 | 
				
			||||||
 | 
					  prepare_one_macro(µ_data[3], 2, 10, nullptr, nullptr, true);
 | 
				
			||||||
 | 
					  // prepare_one_macro(µ_data[2], 1, 10, nullptr, nullptr, true);
 | 
				
			||||||
 | 
					  prepare_data_end();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  ObMockIterator res_iter;
 | 
				
			||||||
 | 
					  ObStoreRowIterator *scanner = NULL;
 | 
				
			||||||
 | 
					  ObExtStoreRange range;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  const char *result1 = "bigint   var   bigint   bigint  flag    multi_version_row_flag\n"
 | 
				
			||||||
 | 
					                        "6        var1  5        2        EXIST   N\n"
 | 
				
			||||||
 | 
					                        "5        var1  5        1        EXIST   N\n"
 | 
				
			||||||
 | 
					                        "4        var1  5        2        EXIST   N\n"
 | 
				
			||||||
 | 
					                        "3        var1  6        1        EXIST N\n";
 | 
				
			||||||
 | 
					  const char *rowkey1 = "bigint   var   bigint flag    multi_version_row_flag\n"
 | 
				
			||||||
 | 
					                        "1        var1  9223372036854775807 EXIST   N\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  ObMockIterator rowkey_iter;
 | 
				
			||||||
 | 
					  ObExtStoreRowkey ext_rowkey;
 | 
				
			||||||
 | 
					  const ObStoreRow *row = NULL;
 | 
				
			||||||
 | 
					  rowkey_iter.reset();
 | 
				
			||||||
 | 
					  OK(rowkey_iter.from(rowkey1));
 | 
				
			||||||
 | 
					  OK(rowkey_iter.get_row(0, row));
 | 
				
			||||||
 | 
					  ASSERT_TRUE(NULL != row);
 | 
				
			||||||
 | 
					  range.get_range().set_whole_range();
 | 
				
			||||||
 | 
					  range.get_range().start_key_.assign(row->row_val_.cells_, rowkey_cnt - 2);
 | 
				
			||||||
 | 
					  range.get_range().set_left_open();
 | 
				
			||||||
 | 
					  OK(range.to_collation_free_range_on_demand_and_cutoff_range(stmt_allocator_));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  ObVersionRange trans_version_range;
 | 
				
			||||||
 | 
					  trans_version_range.base_version_ = 0;
 | 
				
			||||||
 | 
					  trans_version_range.multi_version_start_ = 0;
 | 
				
			||||||
 | 
					  trans_version_range.snapshot_version_ = 100;
 | 
				
			||||||
 | 
					  prepare_query_param(trans_version_range, false, false, true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  res_iter.reset();
 | 
				
			||||||
 | 
					  OK(sstable_.scan(param_, context_, range, scanner));
 | 
				
			||||||
 | 
					  OK(res_iter.from(result1));
 | 
				
			||||||
 | 
					  ASSERT_TRUE(res_iter.equals(*scanner));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  scanner->~ObStoreRowIterator();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}  // namespace unittest
 | 
					}  // namespace unittest
 | 
				
			||||||
}  // namespace oceanbase
 | 
					}  // namespace oceanbase
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int main(int argc, char** argv)
 | 
					int main(int argc, char** argv)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  GCONF._enable_sparse_row = true;
 | 
					  // GCONF._enable_sparse_row = true;
 | 
				
			||||||
  system("rm -rf test_multi_version_sstable_single_scan.log");
 | 
					  system("rm -rf test_multi_version_sstable_single_scan.log");
 | 
				
			||||||
  OB_LOGGER.set_file_name("test_multi_version_sstable_single_scan.log");
 | 
					  OB_LOGGER.set_file_name("test_multi_version_sstable_single_scan.log");
 | 
				
			||||||
  STORAGE_LOG(INFO, "begin unittest: test_multi_version_sstable_single_scan");
 | 
					  STORAGE_LOG(INFO, "begin unittest: test_multi_version_sstable_single_scan");
 | 
				
			||||||
  oceanbase::common::ObLogger::get_logger().set_log_level("INFO");
 | 
					  oceanbase::common::ObLogger::get_logger().set_log_level("DEBUG");
 | 
				
			||||||
  testing::InitGoogleTest(&argc, argv);
 | 
					  testing::InitGoogleTest(&argc, argv);
 | 
				
			||||||
  return RUN_ALL_TESTS();
 | 
					  return RUN_ALL_TESTS();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user