Co-authored-by: rolandqi <qikai456@126.com> Co-authored-by: yangzhifeng <yangzhifeng83@gmail.com>
		
			
				
	
	
		
			775 lines
		
	
	
		
			29 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			775 lines
		
	
	
		
			29 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/**
 | 
						|
 * Copyright (c) 2023 OceanBase
 | 
						|
 * OceanBase CE is licensed under Mulan PubL v2.
 | 
						|
 * You can use this software according to the terms and conditions of the Mulan PubL v2.
 | 
						|
 * You may obtain a copy of Mulan PubL v2 at:
 | 
						|
 *          http://license.coscl.org.cn/MulanPubL-2.0
 | 
						|
 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
 | 
						|
 * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
 | 
						|
 * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
 | 
						|
 * See the Mulan PubL v2 for more details.
 | 
						|
 */
 | 
						|
 | 
						|
#define USING_LOG_PREFIX SHARE
 | 
						|
#define private public
 | 
						|
#define protected public
 | 
						|
#include "share/ash/ob_active_sess_hist_list.h"
 | 
						|
#undef private
 | 
						|
#undef public
 | 
						|
#include <gtest/gtest.h>
 | 
						|
 | 
						|
namespace oceanbase
 | 
						|
{
 | 
						|
namespace share
 | 
						|
{
 | 
						|
using namespace common;
 | 
						|
 | 
						|
class TestAshIndex : public ::testing::Test
 | 
						|
{
 | 
						|
public:
 | 
						|
  virtual void SetUp();
 | 
						|
  virtual void TearDown();
 | 
						|
  void reset_ash_list()
 | 
						|
  {
 | 
						|
    ObActiveSessHistList::get_instance().write_pos_ = 0;
 | 
						|
    ObActiveSessHistList::get_instance().list_.reset();
 | 
						|
    ASSERT_EQ(OB_SUCCESS, ObActiveSessHistList::get_instance().init());
 | 
						|
  }
 | 
						|
  void reset_ash_list_with_write_pos(int64_t write_pos)
 | 
						|
  {
 | 
						|
    ObActiveSessHistList::get_instance().write_pos_ = 0;
 | 
						|
    ObActiveSessHistList::get_instance().list_.reset();
 | 
						|
    ASSERT_EQ(OB_SUCCESS, ObActiveSessHistList::get_instance().init());
 | 
						|
    ObActiveSessHistList::get_instance().write_pos_ += write_pos;
 | 
						|
  }
 | 
						|
  void push_back_sample_time(int64_t sample_time)
 | 
						|
  {
 | 
						|
    int64_t write_pos = ObActiveSessHistList::get_instance().write_pos();
 | 
						|
    ActiveSessionStat stat;
 | 
						|
    stat.sample_time_ = sample_time;
 | 
						|
    ObActiveSessHistList::get_instance().add(stat);
 | 
						|
    ASSERT_EQ(ObActiveSessHistList::get_instance().write_pos(), write_pos + 1);
 | 
						|
  }
 | 
						|
  int test_body(int64_t write_pos);
 | 
						|
  int check_iter_valid(const ObActiveSessHistList::Iterator &iter);
 | 
						|
};
 | 
						|
 | 
						|
void TestAshIndex::SetUp()
 | 
						|
{
 | 
						|
  ASSERT_EQ(OB_SUCCESS, ObActiveSessHistList::get_instance().init());
 | 
						|
}
 | 
						|
 | 
						|
void TestAshIndex::TearDown()
 | 
						|
{
 | 
						|
  reset_ash_list();
 | 
						|
}
 | 
						|
 | 
						|
int TestAshIndex::check_iter_valid(const ObActiveSessHistList::Iterator &iter)
 | 
						|
{
 | 
						|
  int ret = OB_SUCCESS;
 | 
						|
  if (!(iter.curr_ >= 0 && iter.end_ >= 0)) {
 | 
						|
    if (iter.has_next()) {
 | 
						|
      ret = OB_ERR_UNEXPECTED;
 | 
						|
    }
 | 
						|
  }
 | 
						|
  return ret;
 | 
						|
}
 | 
						|
 | 
						|
TEST_F(TestAshIndex, ash_index)
 | 
						|
{
 | 
						|
  int ret = OB_SUCCESS;
 | 
						|
 | 
						|
  // empty list
 | 
						|
  auto iter = ObActiveSessHistList::get_instance().create_iterator();
 | 
						|
  iter.init_with_sample_time_index(0, 0);
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
  iter.init_with_sample_time_index(-1, -1);
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
  iter.init_with_sample_time_index(999, 999);
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
 | 
						|
  // one node
 | 
						|
  push_back_sample_time(10);
 | 
						|
  iter = ObActiveSessHistList::get_instance().create_iterator();
 | 
						|
  iter.init_with_sample_time_index(0, 0);
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
  iter = ObActiveSessHistList::get_instance().create_iterator();
 | 
						|
  iter.init_with_sample_time_index(10, 10);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(10, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
  iter = ObActiveSessHistList::get_instance().create_iterator();
 | 
						|
  iter.init_with_sample_time_index(9, 10);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(10, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
  iter = ObActiveSessHistList::get_instance().create_iterator();
 | 
						|
  iter.init_with_sample_time_index(10, 11);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(10, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
  iter = ObActiveSessHistList::get_instance().create_iterator();
 | 
						|
  iter.init_with_sample_time_index(9, 12);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(10, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
 | 
						|
  // several node
 | 
						|
  reset_ash_list();
 | 
						|
  push_back_sample_time(8);
 | 
						|
  push_back_sample_time(9);
 | 
						|
  push_back_sample_time(10);
 | 
						|
  push_back_sample_time(10);
 | 
						|
  push_back_sample_time(10);
 | 
						|
  push_back_sample_time(11);
 | 
						|
  push_back_sample_time(12);
 | 
						|
  iter = ObActiveSessHistList::get_instance().create_iterator();
 | 
						|
  iter.init_with_sample_time_index(0, 0);
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
  iter = ObActiveSessHistList::get_instance().create_iterator();
 | 
						|
  iter.init_with_sample_time_index(10, 10);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(10, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(10, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(10, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
  iter = ObActiveSessHistList::get_instance().create_iterator();
 | 
						|
  iter.init_with_sample_time_index(9, 10);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(10, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(10, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(10, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(9, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
  iter = ObActiveSessHistList::get_instance().create_iterator();
 | 
						|
  iter.init_with_sample_time_index(10, 11);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(11, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(10, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(10, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(10, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
  iter = ObActiveSessHistList::get_instance().create_iterator();
 | 
						|
  iter.init_with_sample_time_index(9, 12);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(12, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(11, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(10, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(10, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(10, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(9, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
  iter = ObActiveSessHistList::get_instance().create_iterator();
 | 
						|
  iter.init_with_sample_time_index(7, 9);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(9, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(8, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
  iter = ObActiveSessHistList::get_instance().create_iterator();
 | 
						|
  iter.init_with_sample_time_index(999, 996);
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
  iter.init_with_sample_time_index(-1, -5);
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
  iter.init_with_sample_time_index(-5, -1);
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
 | 
						|
  // timer reverse outcome is false, but should not core.
 | 
						|
  reset_ash_list();
 | 
						|
  push_back_sample_time(8);
 | 
						|
  push_back_sample_time(9);
 | 
						|
  push_back_sample_time(10);
 | 
						|
  push_back_sample_time(10);
 | 
						|
  push_back_sample_time(10);
 | 
						|
  push_back_sample_time(9);
 | 
						|
  push_back_sample_time(7);
 | 
						|
  push_back_sample_time(10);
 | 
						|
  iter = ObActiveSessHistList::get_instance().create_iterator();
 | 
						|
  iter.init_with_sample_time_index(0, 0);
 | 
						|
  ASSERT_EQ(OB_SUCCESS, check_iter_valid(iter));
 | 
						|
  iter = ObActiveSessHistList::get_instance().create_iterator();
 | 
						|
  iter.init_with_sample_time_index(10, 10);
 | 
						|
  ASSERT_EQ(OB_SUCCESS, check_iter_valid(iter));
 | 
						|
  iter = ObActiveSessHistList::get_instance().create_iterator();
 | 
						|
  iter.init_with_sample_time_index(9, 10);
 | 
						|
  ASSERT_EQ(OB_SUCCESS, check_iter_valid(iter));
 | 
						|
  iter = ObActiveSessHistList::get_instance().create_iterator();
 | 
						|
  iter.init_with_sample_time_index(10, 11);
 | 
						|
  ASSERT_EQ(OB_SUCCESS, check_iter_valid(iter));
 | 
						|
  iter = ObActiveSessHistList::get_instance().create_iterator();
 | 
						|
  iter.init_with_sample_time_index(9, 12);
 | 
						|
  ASSERT_EQ(OB_SUCCESS, check_iter_valid(iter));
 | 
						|
}
 | 
						|
 | 
						|
TEST_F(TestAshIndex, ash_index_ring_buffer)
 | 
						|
{
 | 
						|
  int ret = OB_SUCCESS;
 | 
						|
  reset_ash_list_with_write_pos(ObActiveSessHistList::get_instance().size());
 | 
						|
  // empty list
 | 
						|
  auto iter = ObActiveSessHistList::get_instance().create_iterator();
 | 
						|
  iter.init_with_sample_time_index(0, 0);
 | 
						|
  for (int i = 0; i < ObActiveSessHistList::get_instance().size(); i++) {
 | 
						|
    ASSERT_EQ(true, iter.has_next());
 | 
						|
    ASSERT_EQ(0, iter.next().sample_time_);
 | 
						|
  }
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
  iter.init_with_sample_time_index(-1, -1);
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
  iter.init_with_sample_time_index(999, 999);
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
 | 
						|
  // one node
 | 
						|
  reset_ash_list_with_write_pos(ObActiveSessHistList::get_instance().size());
 | 
						|
  push_back_sample_time(10);
 | 
						|
  iter = ObActiveSessHistList::get_instance().create_iterator();
 | 
						|
  iter.init_with_sample_time_index(0, 0);
 | 
						|
  for (int i = 0; i < ObActiveSessHistList::get_instance().size() - 1; i++) {
 | 
						|
    ASSERT_EQ(true, iter.has_next());
 | 
						|
    ASSERT_EQ(0, iter.next().sample_time_);
 | 
						|
  }
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
  iter = ObActiveSessHistList::get_instance().create_iterator();
 | 
						|
  iter.init_with_sample_time_index(10, 10);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(10, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
  iter = ObActiveSessHistList::get_instance().create_iterator();
 | 
						|
  iter.init_with_sample_time_index(9, 10);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(10, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
  iter = ObActiveSessHistList::get_instance().create_iterator();
 | 
						|
  iter.init_with_sample_time_index(10, 11);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(10, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
  iter = ObActiveSessHistList::get_instance().create_iterator();
 | 
						|
  iter.init_with_sample_time_index(9, 12);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(10, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
 | 
						|
  // several node
 | 
						|
  reset_ash_list_with_write_pos(ObActiveSessHistList::get_instance().size());
 | 
						|
  push_back_sample_time(8);
 | 
						|
  push_back_sample_time(9);
 | 
						|
  push_back_sample_time(10);
 | 
						|
  push_back_sample_time(10);
 | 
						|
  push_back_sample_time(10);
 | 
						|
  push_back_sample_time(11);
 | 
						|
  push_back_sample_time(12);
 | 
						|
  iter = ObActiveSessHistList::get_instance().create_iterator();
 | 
						|
  iter.init_with_sample_time_index(0, 0);
 | 
						|
  for (int i = 0; i < ObActiveSessHistList::get_instance().size() - 7; i++) {
 | 
						|
    ASSERT_EQ(true, iter.has_next());
 | 
						|
    ASSERT_EQ(0, iter.next().sample_time_);
 | 
						|
  }
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
  iter = ObActiveSessHistList::get_instance().create_iterator();
 | 
						|
  iter.init_with_sample_time_index(10, 10);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(10, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(10, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(10, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
  iter = ObActiveSessHistList::get_instance().create_iterator();
 | 
						|
  iter.init_with_sample_time_index(9, 10);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(10, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(10, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(10, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(9, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
  iter = ObActiveSessHistList::get_instance().create_iterator();
 | 
						|
  iter.init_with_sample_time_index(10, 11);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(11, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(10, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(10, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(10, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
  iter = ObActiveSessHistList::get_instance().create_iterator();
 | 
						|
  iter.init_with_sample_time_index(9, 12);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(12, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(11, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(10, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(10, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(10, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(9, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
  iter = ObActiveSessHistList::get_instance().create_iterator();
 | 
						|
  iter.init_with_sample_time_index(7, 9);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(9, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(8, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
  iter = ObActiveSessHistList::get_instance().create_iterator();
 | 
						|
  iter.init_with_sample_time_index(999, 996);
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
  iter.init_with_sample_time_index(-1, -5);
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
  iter.init_with_sample_time_index(-5, -1);
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
 | 
						|
  // timer reverse outcome is false, but should not core.
 | 
						|
  reset_ash_list_with_write_pos(ObActiveSessHistList::get_instance().size());
 | 
						|
  push_back_sample_time(8);
 | 
						|
  push_back_sample_time(9);
 | 
						|
  push_back_sample_time(10);
 | 
						|
  push_back_sample_time(10);
 | 
						|
  push_back_sample_time(10);
 | 
						|
  push_back_sample_time(9);
 | 
						|
  push_back_sample_time(7);
 | 
						|
  push_back_sample_time(10);
 | 
						|
  iter = ObActiveSessHistList::get_instance().create_iterator();
 | 
						|
  iter.init_with_sample_time_index(0, 0);
 | 
						|
  ASSERT_EQ(OB_SUCCESS, check_iter_valid(iter));
 | 
						|
  iter = ObActiveSessHistList::get_instance().create_iterator();
 | 
						|
  iter.init_with_sample_time_index(10, 10);
 | 
						|
  ASSERT_EQ(OB_SUCCESS, check_iter_valid(iter));
 | 
						|
  iter = ObActiveSessHistList::get_instance().create_iterator();
 | 
						|
  iter.init_with_sample_time_index(9, 10);
 | 
						|
  ASSERT_EQ(OB_SUCCESS, check_iter_valid(iter));
 | 
						|
  iter = ObActiveSessHistList::get_instance().create_iterator();
 | 
						|
  iter.init_with_sample_time_index(10, 11);
 | 
						|
  ASSERT_EQ(OB_SUCCESS, check_iter_valid(iter));
 | 
						|
  iter = ObActiveSessHistList::get_instance().create_iterator();
 | 
						|
  iter.init_with_sample_time_index(9, 12);
 | 
						|
  ASSERT_EQ(OB_SUCCESS, check_iter_valid(iter));
 | 
						|
}
 | 
						|
 | 
						|
TEST_F(TestAshIndex, ash_overwrite)
 | 
						|
{
 | 
						|
  int ret = OB_SUCCESS;
 | 
						|
 | 
						|
  // empty list
 | 
						|
  auto iter = ObActiveSessHistList::get_instance().create_iterator();
 | 
						|
  push_back_sample_time(0);
 | 
						|
  iter.init_with_sample_time_index(0, 0);
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
  iter.init_with_sample_time_index(-1, -1);
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
  iter.init_with_sample_time_index(999, 999);
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
 | 
						|
  reset_ash_list();
 | 
						|
  iter = ObActiveSessHistList::get_instance().create_iterator();
 | 
						|
  push_back_sample_time(999);
 | 
						|
  iter.init_with_sample_time_index(0, 0);
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
  iter.init_with_sample_time_index(-1, -1);
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
  iter.init_with_sample_time_index(999, 999);
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
 | 
						|
  reset_ash_list_with_write_pos(ObActiveSessHistList::get_instance().size());
 | 
						|
  iter = ObActiveSessHistList::get_instance().create_iterator();
 | 
						|
  push_back_sample_time(0);
 | 
						|
  iter.init_with_sample_time_index(0, 0);
 | 
						|
  for (int i = 0; i < ObActiveSessHistList::get_instance().size() - 1; i++) {
 | 
						|
    ASSERT_EQ(true, iter.has_next()) << "current count:" << i;
 | 
						|
    ASSERT_EQ(0, iter.next().sample_time_);
 | 
						|
  }
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
  iter = ObActiveSessHistList::get_instance().create_iterator();
 | 
						|
  push_back_sample_time(0);
 | 
						|
  iter.init_with_sample_time_index(0, 0);
 | 
						|
  push_back_sample_time(0);
 | 
						|
  for (int i = 0; i < ObActiveSessHistList::get_instance().size() - 2; i++) {
 | 
						|
    ASSERT_EQ(true, iter.has_next()) << "current count:" << i;
 | 
						|
    ASSERT_EQ(0, iter.next().sample_time_);
 | 
						|
  }
 | 
						|
  ASSERT_EQ(false, iter.has_next()) << "write pos:" << iter.list_->write_pos() << " curr:" << iter.curr_;
 | 
						|
  iter.init_with_sample_time_index(-1, -1);
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
  iter.init_with_sample_time_index(999, 999);
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
 | 
						|
  reset_ash_list_with_write_pos(ObActiveSessHistList::get_instance().size());
 | 
						|
  iter = ObActiveSessHistList::get_instance().create_iterator();
 | 
						|
  push_back_sample_time(999);
 | 
						|
  iter.init_with_sample_time_index(0, 0);
 | 
						|
  for (int i = 0; i < ObActiveSessHistList::get_instance().size() - 1; i++) {
 | 
						|
    ASSERT_EQ(true, iter.has_next()) << "current count:" << i;
 | 
						|
    ASSERT_EQ(0, iter.next().sample_time_);
 | 
						|
  }
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
  iter.init_with_sample_time_index(-1, -1);
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
 | 
						|
  iter.init_with_sample_time_index(999, 999);
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
  iter = ObActiveSessHistList::get_instance().create_iterator();
 | 
						|
  iter.init_with_sample_time_index(999, 999);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(999, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
 | 
						|
  // one node
 | 
						|
  reset_ash_list_with_write_pos(ObActiveSessHistList::get_instance().size());
 | 
						|
  iter = ObActiveSessHistList::get_instance().create_iterator();
 | 
						|
  push_back_sample_time(10);
 | 
						|
  iter.init_with_sample_time_index(0, 0);
 | 
						|
  for (int i = 0; i < ObActiveSessHistList::get_instance().size() - 1; i++) {
 | 
						|
    ASSERT_EQ(true, iter.has_next()) << "current count:" << i;
 | 
						|
    ASSERT_EQ(0, iter.next().sample_time_);
 | 
						|
  }
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
  iter = ObActiveSessHistList::get_instance().create_iterator();
 | 
						|
  push_back_sample_time(10);
 | 
						|
  iter.init_with_sample_time_index(10, 10);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(10, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
  iter = ObActiveSessHistList::get_instance().create_iterator();
 | 
						|
  push_back_sample_time(11);
 | 
						|
  iter.init_with_sample_time_index(9, 11);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(10, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(10, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
  iter = ObActiveSessHistList::get_instance().create_iterator();
 | 
						|
  push_back_sample_time(12);
 | 
						|
  iter.init_with_sample_time_index(10, 11);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(11, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(10, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(10, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
  iter = ObActiveSessHistList::get_instance().create_iterator();
 | 
						|
  push_back_sample_time(13);
 | 
						|
  iter.init_with_sample_time_index(9, 12);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(12, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(11, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(10, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(10, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
 | 
						|
  // one node, add after binary search
 | 
						|
  reset_ash_list_with_write_pos(ObActiveSessHistList::get_instance().size());
 | 
						|
  iter = ObActiveSessHistList::get_instance().create_iterator();
 | 
						|
  push_back_sample_time(10);
 | 
						|
  iter.init_with_sample_time_index(0, 0);
 | 
						|
  push_back_sample_time(10);
 | 
						|
  for (int i = 0; i < ObActiveSessHistList::get_instance().size() - 2; i++) {
 | 
						|
    ASSERT_EQ(true, iter.has_next());
 | 
						|
    ASSERT_EQ(0, iter.next().sample_time_);
 | 
						|
  }
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
  iter = ObActiveSessHistList::get_instance().create_iterator();
 | 
						|
  push_back_sample_time(10);
 | 
						|
  iter.init_with_sample_time_index(10, 10);
 | 
						|
  push_back_sample_time(10);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(10, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(10, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
  iter = ObActiveSessHistList::get_instance().create_iterator();
 | 
						|
  push_back_sample_time(11);
 | 
						|
  iter.init_with_sample_time_index(9, 11);
 | 
						|
  push_back_sample_time(11);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(10, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(10, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(10, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(10, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
  iter = ObActiveSessHistList::get_instance().create_iterator();
 | 
						|
  push_back_sample_time(12);
 | 
						|
  iter.init_with_sample_time_index(10, 11);
 | 
						|
  push_back_sample_time(12);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(11, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(11, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(10, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(10, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(10, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(10, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
  iter = ObActiveSessHistList::get_instance().create_iterator();
 | 
						|
  push_back_sample_time(13);
 | 
						|
  iter.init_with_sample_time_index(9, 12);
 | 
						|
  push_back_sample_time(13);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(12, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(12, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(11, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(11, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(10, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(10, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(10, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(10, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
 | 
						|
  // several node
 | 
						|
  reset_ash_list_with_write_pos(ObActiveSessHistList::get_instance().size());
 | 
						|
  push_back_sample_time(8);
 | 
						|
  push_back_sample_time(9);
 | 
						|
  push_back_sample_time(10);
 | 
						|
  push_back_sample_time(10);
 | 
						|
  push_back_sample_time(10);
 | 
						|
  push_back_sample_time(11);
 | 
						|
  push_back_sample_time(12);
 | 
						|
  iter = ObActiveSessHistList::get_instance().create_iterator();
 | 
						|
  push_back_sample_time(12);
 | 
						|
  iter.init_with_sample_time_index(0, 0);
 | 
						|
  push_back_sample_time(12);
 | 
						|
  for (int i = 0; i < ObActiveSessHistList::get_instance().size() - 9; i++) {
 | 
						|
    ASSERT_EQ(true, iter.has_next());
 | 
						|
    ASSERT_EQ(0, iter.next().sample_time_);
 | 
						|
  }
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
  iter = ObActiveSessHistList::get_instance().create_iterator();
 | 
						|
  push_back_sample_time(13);
 | 
						|
  iter.init_with_sample_time_index(12, 13);
 | 
						|
  push_back_sample_time(13);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(12, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(12, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(12, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
  iter = ObActiveSessHistList::get_instance().create_iterator();
 | 
						|
  push_back_sample_time(999);
 | 
						|
  iter.init_with_sample_time_index(996, 999);
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
  iter.init_with_sample_time_index(-1, -5);
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
  iter.init_with_sample_time_index(-5, -1);
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
 | 
						|
  reset_ash_list_with_write_pos(ObActiveSessHistList::get_instance().size());
 | 
						|
  push_back_sample_time(8);
 | 
						|
  push_back_sample_time(9);
 | 
						|
  push_back_sample_time(10);
 | 
						|
  push_back_sample_time(10);
 | 
						|
  push_back_sample_time(10);
 | 
						|
  push_back_sample_time(11);
 | 
						|
  push_back_sample_time(12);
 | 
						|
  iter = ObActiveSessHistList::get_instance().create_iterator();
 | 
						|
  ObActiveSessHistList::get_instance().write_pos_ += ObActiveSessHistList::get_instance().size();
 | 
						|
  iter.init_with_sample_time_index(12, 13);
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
  iter = ObActiveSessHistList::get_instance().create_iterator();
 | 
						|
  ObActiveSessHistList::get_instance().write_pos_ += ObActiveSessHistList::get_instance().size() - 7;
 | 
						|
  iter.init_with_sample_time_index(12, 13);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(12, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
 | 
						|
  reset_ash_list_with_write_pos(ObActiveSessHistList::get_instance().size());
 | 
						|
  push_back_sample_time(8);
 | 
						|
  push_back_sample_time(9);
 | 
						|
  push_back_sample_time(10);
 | 
						|
  push_back_sample_time(10);
 | 
						|
  push_back_sample_time(10);
 | 
						|
  push_back_sample_time(11);
 | 
						|
  push_back_sample_time(12);
 | 
						|
  iter = ObActiveSessHistList::get_instance().create_iterator();
 | 
						|
  iter.init_with_sample_time_index(0, 8);
 | 
						|
  for (int i = 0; i < ObActiveSessHistList::get_instance().size() - 8; i++) {
 | 
						|
    push_back_sample_time(15);
 | 
						|
  }
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(8, iter.next().sample_time_) << "write pos:" << iter.list_->write_pos() << " curr:" << iter.curr_;;
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(0, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
}
 | 
						|
 | 
						|
TEST_F(TestAshIndex, ash_MIN_MAX)
 | 
						|
{
 | 
						|
  int ret = OB_SUCCESS;
 | 
						|
 | 
						|
  // empty list
 | 
						|
  reset_ash_list();
 | 
						|
  auto iter = ObActiveSessHistList::get_instance().create_iterator();
 | 
						|
  iter.init_with_sample_time_index(0, INT64_MAX);
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
  iter = ObActiveSessHistList::get_instance().create_iterator();
 | 
						|
  iter.init_with_sample_time_index(INT64_MAX, 0);
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
 | 
						|
  // one node
 | 
						|
  reset_ash_list();
 | 
						|
  push_back_sample_time(10);
 | 
						|
  iter = ObActiveSessHistList::get_instance().create_iterator();
 | 
						|
  iter.init_with_sample_time_index(0, INT64_MAX);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(10, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
  iter = ObActiveSessHistList::get_instance().create_iterator();
 | 
						|
  iter.init_with_sample_time_index(INT64_MAX, 0);
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
 | 
						|
  // several node
 | 
						|
  reset_ash_list();
 | 
						|
  push_back_sample_time(8);
 | 
						|
  push_back_sample_time(9);
 | 
						|
  push_back_sample_time(10);
 | 
						|
  push_back_sample_time(10);
 | 
						|
  push_back_sample_time(10);
 | 
						|
  push_back_sample_time(11);
 | 
						|
  push_back_sample_time(12);
 | 
						|
  iter = ObActiveSessHistList::get_instance().create_iterator();
 | 
						|
  iter.init_with_sample_time_index(0, INT64_MAX);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(12, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(11, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(10, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(10, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(10, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(9, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(8, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
  iter = ObActiveSessHistList::get_instance().create_iterator();
 | 
						|
  iter.init_with_sample_time_index(INT64_MAX, 0);
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
 | 
						|
  // timer reverse outcome is false, but should not core.
 | 
						|
  reset_ash_list();
 | 
						|
  push_back_sample_time(8);
 | 
						|
  push_back_sample_time(9);
 | 
						|
  push_back_sample_time(10);
 | 
						|
  push_back_sample_time(10);
 | 
						|
  push_back_sample_time(10);
 | 
						|
  push_back_sample_time(9);
 | 
						|
  push_back_sample_time(7);
 | 
						|
  push_back_sample_time(10);
 | 
						|
  iter = ObActiveSessHistList::get_instance().create_iterator();
 | 
						|
  iter.init_with_sample_time_index(0, INT_MAX);
 | 
						|
  ASSERT_EQ(OB_SUCCESS, check_iter_valid(iter));
 | 
						|
  iter = ObActiveSessHistList::get_instance().create_iterator();
 | 
						|
  iter.init_with_sample_time_index(INT64_MAX, 0);
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
  ASSERT_EQ(OB_SUCCESS, check_iter_valid(iter));
 | 
						|
 | 
						|
  // empty list
 | 
						|
  reset_ash_list_with_write_pos(ObActiveSessHistList::get_instance().size());
 | 
						|
  iter = ObActiveSessHistList::get_instance().create_iterator();
 | 
						|
  iter.init_with_sample_time_index(0, INT64_MAX);
 | 
						|
  for (int i = 0; i < ObActiveSessHistList::get_instance().size(); i++) {
 | 
						|
    ASSERT_EQ(true, iter.has_next());
 | 
						|
    ASSERT_EQ(0, iter.next().sample_time_);
 | 
						|
  }
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
  iter = ObActiveSessHistList::get_instance().create_iterator();
 | 
						|
  iter.init_with_sample_time_index(INT64_MAX, 0);
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
 | 
						|
  // one node
 | 
						|
  reset_ash_list_with_write_pos(ObActiveSessHistList::get_instance().size());
 | 
						|
  push_back_sample_time(10);
 | 
						|
  iter = ObActiveSessHistList::get_instance().create_iterator();
 | 
						|
  iter.init_with_sample_time_index(0, INT64_MAX);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(10, iter.next().sample_time_);
 | 
						|
  for (int i = 0; i < ObActiveSessHistList::get_instance().size() - 1; i++) {
 | 
						|
    ASSERT_EQ(true, iter.has_next());
 | 
						|
    ASSERT_EQ(0, iter.next().sample_time_);
 | 
						|
  }
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
  iter = ObActiveSessHistList::get_instance().create_iterator();
 | 
						|
  iter.init_with_sample_time_index(INT64_MAX, 0);
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
 | 
						|
  // several node
 | 
						|
  reset_ash_list_with_write_pos(ObActiveSessHistList::get_instance().size());
 | 
						|
  push_back_sample_time(8);
 | 
						|
  push_back_sample_time(9);
 | 
						|
  push_back_sample_time(10);
 | 
						|
  push_back_sample_time(10);
 | 
						|
  push_back_sample_time(10);
 | 
						|
  push_back_sample_time(11);
 | 
						|
  push_back_sample_time(12);
 | 
						|
  iter = ObActiveSessHistList::get_instance().create_iterator();
 | 
						|
  iter.init_with_sample_time_index(0, INT64_MAX);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(12, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(11, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(10, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(10, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(10, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(9, iter.next().sample_time_);
 | 
						|
  ASSERT_EQ(true, iter.has_next());
 | 
						|
  ASSERT_EQ(8, iter.next().sample_time_);
 | 
						|
  for (int i = 0; i < ObActiveSessHistList::get_instance().size() - 7; i++) {
 | 
						|
    ASSERT_EQ(true, iter.has_next());
 | 
						|
    ASSERT_EQ(0, iter.next().sample_time_);
 | 
						|
  }
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
  iter = ObActiveSessHistList::get_instance().create_iterator();
 | 
						|
  iter.init_with_sample_time_index(INT64_MAX, 0);
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
 | 
						|
  // timer reverse outcome is false, but should not core.
 | 
						|
  reset_ash_list_with_write_pos(ObActiveSessHistList::get_instance().size());
 | 
						|
  push_back_sample_time(8);
 | 
						|
  push_back_sample_time(9);
 | 
						|
  push_back_sample_time(10);
 | 
						|
  push_back_sample_time(10);
 | 
						|
  push_back_sample_time(10);
 | 
						|
  push_back_sample_time(9);
 | 
						|
  push_back_sample_time(7);
 | 
						|
  push_back_sample_time(10);
 | 
						|
  iter = ObActiveSessHistList::get_instance().create_iterator();
 | 
						|
  iter.init_with_sample_time_index(0, INT_MAX);
 | 
						|
  ASSERT_EQ(OB_SUCCESS, check_iter_valid(iter));
 | 
						|
  iter = ObActiveSessHistList::get_instance().create_iterator();
 | 
						|
  iter.init_with_sample_time_index(INT64_MAX, 0);
 | 
						|
  ASSERT_EQ(false, iter.has_next());
 | 
						|
  ASSERT_EQ(OB_SUCCESS, check_iter_valid(iter));
 | 
						|
}
 | 
						|
 | 
						|
} // end namespace share
 | 
						|
} // end namespace oceanbase
 | 
						|
 | 
						|
int main(int argc, char **argv)
 | 
						|
{
 | 
						|
  oceanbase::common::ObLogger::get_logger().set_log_level("INFO");
 | 
						|
  OB_LOGGER.set_log_level("INFO");
 | 
						|
  testing::InitGoogleTest(&argc, argv);
 | 
						|
  return RUN_ALL_TESTS();
 | 
						|
}
 |