Files
oceanbase/src/archive/ob_archive_file_utils.h
gm 4a92b6d7df reformat source code
according to code styles, 'AccessModifierOffset' should be -2.
2021-06-17 10:40:36 +08:00

105 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_ARCHIVE_OB_ARCHIVE_FILE_UTILS_H_
#define OCEANBASE_ARCHIVE_OB_ARCHIVE_FILE_UTILS_H_
#include "common/ob_partition_key.h"
#include "ob_log_archive_struct.h"
#include "clog/ob_log_entry.h"
#include "clog/ob_log_type.h"
namespace oceanbase {
namespace archive {
using oceanbase::clog::ObLogArchiveInnerLog;
using oceanbase::common::ObPGKey;
using oceanbase::common::ObString;
class ObIArchiveLogFileStore;
class ObArchiveFileUtils {
static const int64_t MAX_PATH_LENGTH = OB_MAX_ARCHIVE_PATH_LENGTH;
public:
// parameter below:
// uri: pg archive absolute path
// storage_info: authentication info
//
// get min & max file of specified partition
int get_file_range(
const ObString& prefix, const ObString& storage_info, uint64_t& min_file_id, uint64_t& max_file_id);
// get file length of specified file
int get_file_length(const ObString& uri, const ObString& storage_info, int64_t& file_len);
// read whole content of specified file
int read_single_file(
const ObString& uri, const ObString& storage_info, char* buf, const int64_t text_file_length, int64_t& read_size);
// search specified log in an index file with log id
int search_log_in_single_index_file(const ObString& uri, const ObString& storage_info, const uint64_t log_id,
uint64_t& data_file_id, bool& log_exist, ObArchiveIndexFileInfo& max_valid_index_info);
// get the sever start ts of the server, where server start ts is unique for each server
int get_server_start_archive_ts(
const ObString& uri, const ObString& storage_info, int64_t& archive_round, int64_t& start_ts);
// read specified size content of the specified file
int range_read(const ObString& uri, const ObString& storage_info, char* buf, const int64_t buf_size,
const int64_t offset, int64_t& read_size);
// check file if exist or not
int check_file_exist(const ObString& uri, const ObString& storage_info, bool& file_exist);
// create empty file with specified uri
int create_file(const ObString& uri, const ObString& storage_info);
// get the max data file id with listing method
int get_max_data_file_when_index_not_exist(const ObString& prefix, const ObString& storage_info, uint64_t& file_id);
// get the max archived info from an index file
// archived info include max archived log id/submit_ts/checkpoint ts/epoch_id/acc_checksum
int get_max_archived_info_in_single_index_file(
const ObString& uri, const ObString& storage_info, MaxArchivedIndexInfo& info);
//
int get_first_log(const ObPGKey& pg_key, const uint64_t file_id, ObIArchiveLogFileStore* file_store, uint64_t& log_id,
clog::ObLogType& log_type);
int extract_first_log_in_data_file(const ObPGKey& pg_key, const uint64_t file_id, ObIArchiveLogFileStore* file_store,
ObArchiveBlockMeta& block_meta, clog::ObLogEntry& log_entry, ObLogArchiveInnerLog& inner_log);
int extract_last_log_in_data_file(const ObPGKey& pg_key, const uint64_t file_id, ObIArchiveLogFileStore* file_store,
const ObString& uri, const ObString& storage_info, ObArchiveBlockMeta& block_meta, clog::ObLogEntry& log_entry,
ObLogArchiveInnerLog& inner_log);
int get_max_index_info_in_single_file(
const ObString& uri, const ObString& storage_info, ObArchiveIndexFileInfo& info, bool& exist);
int get_max_safe_data_file_id(const ObString& uri, const ObString& storage_info, const uint64_t log_id,
const int64_t log_ts, const bool by_log_id, uint64_t& data_file_id);
private:
int extract_file_id_(const ObString& file_name, uint64_t& file_id, bool& match);
int locate_log_in_single_index_file_(const uint64_t log_id, char* data, const int64_t data_len, uint64_t& file_id,
bool& log_exist, ObArchiveIndexFileInfo& max_valid_index_info);
int read_max_archived_info_(char* buf, const int64_t buf_len, MaxArchivedIndexInfo& archive_info);
int extract_log_info_from_specific_block_(const ObPGKey& pg_key, const uint64_t file_id,
ObIArchiveLogFileStore* file_store, const int64_t offset, ObArchiveBlockMeta& block_meta,
clog::ObLogEntry& log_entry, ObLogArchiveInnerLog& inner_log);
};
} // namespace archive
} // namespace oceanbase
#endif /* OCEANBASE_ARCHIVE_OB_ARCHIVE_FILE_UTILS_H_ */