156 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			156 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/**
 | 
						|
 * Copyright (c) 2021 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.
 | 
						|
 */
 | 
						|
 | 
						|
#ifndef OCEANBASE_FAKE_PARTITION_UTILS_H_
 | 
						|
#define OCEANBASE_FAKE_PARTITION_UTILS_H_
 | 
						|
 | 
						|
#include "mock_ob_partition_service.h"
 | 
						|
#include "mock_ob_partition.h"
 | 
						|
#include "mock_ob_partition_storage.h"
 | 
						|
#include "storage/ob_partition_log.h"
 | 
						|
#include "storage/ob_partition_component_factory.h"
 | 
						|
 | 
						|
using namespace oceanbase::common;
 | 
						|
using namespace oceanbase::blocksstable;
 | 
						|
 | 
						|
namespace oceanbase {
 | 
						|
namespace storage {
 | 
						|
 | 
						|
class FakePartition;
 | 
						|
class FakePartitionStorage : public storage::MockObIPartitionStorage {
 | 
						|
public:
 | 
						|
  FakePartitionStorage(FakePartition& holder) : holder_(holder)
 | 
						|
  {}
 | 
						|
  virtual ~FakePartitionStorage()
 | 
						|
  {}
 | 
						|
  virtual int get_macro_block_list(blocksstable::ObSelfBufferWriter& list);
 | 
						|
  virtual int halt_prewarm() override
 | 
						|
  {
 | 
						|
    return OB_SUCCESS;
 | 
						|
  }
 | 
						|
  virtual int purge_retire_stores(uint64_t& last_replay_log_id)
 | 
						|
  {
 | 
						|
    UNUSED(last_replay_log_id);
 | 
						|
    return OB_SUCCESS;
 | 
						|
  }
 | 
						|
  virtual int get_all_version_stores(ObTablesHandle& stores_handle)
 | 
						|
  {
 | 
						|
    UNUSED(stores_handle);
 | 
						|
    return OB_SUCCESS;
 | 
						|
  }
 | 
						|
  virtual int query_range_to_macros(ObIAllocator& allocator, const ObIArray<ObStoreRange>& ranges, const int64_t type,
 | 
						|
      uint64_t* macros_count, const int64_t* total_task_count, ObIArray<ObStoreRange>* splitted_ranges,
 | 
						|
      ObIArray<int64_t>* split_index)
 | 
						|
  {
 | 
						|
    UNUSED(allocator);
 | 
						|
    UNUSED(ranges);
 | 
						|
    UNUSED(type);
 | 
						|
    UNUSED(macros_count);
 | 
						|
    UNUSED(total_task_count);
 | 
						|
    UNUSED(splitted_ranges);
 | 
						|
    UNUSED(split_index);
 | 
						|
    return common::OB_SUCCESS;
 | 
						|
  }
 | 
						|
  int get_saved_storage_info(ObSavedStorageInfo& info, common::ObVersion& version)
 | 
						|
  {
 | 
						|
    UNUSED(info);
 | 
						|
    UNUSED(version);
 | 
						|
    return common::OB_SUCCESS;
 | 
						|
  }
 | 
						|
  int retire_warmup_store(const bool is_disk_full)
 | 
						|
  {
 | 
						|
    UNUSED(is_disk_full);
 | 
						|
    return common::OB_SUCCESS;
 | 
						|
  }
 | 
						|
  int halt_prewarm_store()
 | 
						|
  {
 | 
						|
    return common::OB_SUCCESS;
 | 
						|
  }
 | 
						|
  int append_sstable(const share::ObBuildIndexAppendSSTableParam& param, common::ObNewRowIterator& iter)
 | 
						|
  {
 | 
						|
    UNUSED(param);
 | 
						|
    UNUSED(iter);
 | 
						|
    return common::OB_SUCCESS;
 | 
						|
  }
 | 
						|
 | 
						|
private:
 | 
						|
  FakePartition& holder_;
 | 
						|
};
 | 
						|
 | 
						|
class FakePartition : public storage::MockObIPartition, public blocksstable::ObIBaseStorageLogEntry {
 | 
						|
public:
 | 
						|
  FakePartition() : pmeta_(), smeta_(), arena_(ObModIds::OB_PARTITION_SERVICE), storage_(*this)
 | 
						|
  {}
 | 
						|
  virtual ~FakePartition()
 | 
						|
  {}
 | 
						|
  int set(const blocksstable::ObPartitionMeta& meta);
 | 
						|
  int add_macro_block(MacroBlockId macro_id);
 | 
						|
  virtual bool is_valid() const
 | 
						|
  {
 | 
						|
    return pmeta_.is_valid() && smeta_.is_valid();
 | 
						|
  }
 | 
						|
  // write ssstore objects @version tree to data file , used by write_check_point
 | 
						|
  virtual int serialize(char* buf, const int64_t buf_len, int64_t& pos) const;
 | 
						|
  // read ssstore objects from data file to construct partition storage's version tree.
 | 
						|
  virtual int deserialize(const char* buf, const int64_t buf_len, int64_t& pos);
 | 
						|
  virtual int64_t get_serialize_size() const;
 | 
						|
  virtual ObIPartitionStorage* get_storage()
 | 
						|
  {
 | 
						|
    return &storage_;
 | 
						|
  }
 | 
						|
  virtual int64_t to_string(char* buf, const int64_t buf_len) const
 | 
						|
  {
 | 
						|
    int64_t pos = 0;
 | 
						|
    J_KV(K_(pmeta), K_(smeta));
 | 
						|
    return pos;
 | 
						|
  }
 | 
						|
 | 
						|
public:
 | 
						|
  blocksstable::ObPartitionMeta pmeta_;
 | 
						|
  blocksstable::ObSSTableMeta smeta_;
 | 
						|
  ObArenaAllocator arena_;
 | 
						|
  FakePartitionStorage storage_;
 | 
						|
};
 | 
						|
 | 
						|
class FakePartitionService : public MockObIPartitionService {
 | 
						|
public:
 | 
						|
  FakePartitionService() : partition_list_(), cp_fty_(NULL), arena_(ObModIds::OB_PARTITION_SERVICE)
 | 
						|
  {
 | 
						|
    init();
 | 
						|
  }
 | 
						|
  virtual ~FakePartitionService()
 | 
						|
  {}
 | 
						|
  ObPartitionComponentFactory* get_component_factory() const
 | 
						|
  {
 | 
						|
    return cp_fty_;
 | 
						|
  }
 | 
						|
  int init();
 | 
						|
  int destroy();
 | 
						|
  int add_partition(storage::ObIPartition* partition);
 | 
						|
  FakePartition* create_partition(const blocksstable::ObPartitionMeta& meta);
 | 
						|
  virtual int get_all_partitions(ObIPartitionArrayGuard& partitions);
 | 
						|
  virtual int revert_partition(storage::ObIPartitionGroup* partition);
 | 
						|
  virtual int load_partition(const char* buf, const int64_t buf_len, int64_t& pos);
 | 
						|
  virtual int replay_base_storage_log(
 | 
						|
      const int64_t log_seq_num, const int64_t subcmd, const char* buf, const int64_t len, int64_t& pos);
 | 
						|
 | 
						|
private:
 | 
						|
  ObSEArray<ObIPartitionGroup*, 4096> partition_list_;
 | 
						|
  ObPartitionComponentFactory* cp_fty_;
 | 
						|
  ObArenaAllocator arena_;
 | 
						|
};
 | 
						|
 | 
						|
}  // namespace storage
 | 
						|
}  // namespace oceanbase
 | 
						|
 | 
						|
#endif
 |