Files
oceanbase/src/share/parameter/ob_parameter_attr.h
2023-02-06 17:50:29 +08:00

95 lines
4.0 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_SHARE_PARAMETER_OB_PARAMETER_ATTR_H_
#define OCEANBASE_SHARE_PARAMETER_OB_PARAMETER_ATTR_H_
#include "lib/utility/ob_macro_utils.h"
namespace oceanbase {
namespace common {
#define DECL_EVAL_MACRO(macro, args...) macro(args)
#define DECL_ATTR_LIST(M) \
DECL_EVAL_MACRO(M, Section, ROOT_SERVICE, LOAD_BALANCE, DAILY_MERGE, LOCATION_CACHE, \
SSTABLE, LOGSERVICE, CACHE, TRANS, TENANT, RPC, OBPROXY, OBSERVER, RESOURCE_LIMIT); \
DECL_EVAL_MACRO(M, Scope, CLUSTER, TENANT); \
DECL_EVAL_MACRO(M, Source, DEFAULT, FILE, OBADMIN, CMDLINE, CLUSTER, TENANT); \
DECL_EVAL_MACRO(M, Session, NO, YES); \
DECL_EVAL_MACRO(M, VisibleLevel, SYS, COMMON, INVISIBLE); \
DECL_EVAL_MACRO(M, EditLevel, READONLY, STATIC_EFFECTIVE, DYNAMIC_EFFECTIVE); \
DECL_EVAL_MACRO(M, CompatMode, MYSQL, ORACLE, COMMON);
#define _ENUM_EXP(arg) arg
#define DECL_ATTR(ATTR_CLS, args...) \
typedef struct ATTR_CLS { \
enum ATTR_CLS ## Info { \
LST_DO(_ENUM_EXP, (,), args) \
}; \
static const char *VALUES[]; \
} ATTR_CLS;
DECL_ATTR_LIST(DECL_ATTR);
// TODO: whether we need this
struct InfluencePlan {};
struct NeedSerialize {};
class ObParameterAttr
{
public:
ObParameterAttr() : section_(Section::OBSERVER),
scope_(Scope::CLUSTER),
source_(Source::DEFAULT),
session_(Session::NO),
visible_level_(VisibleLevel::COMMON),
edit_level_(EditLevel::DYNAMIC_EFFECTIVE),
compat_mode_(CompatMode::COMMON) {}
// constructor without scope, session, visible_level and compat_mode
ObParameterAttr(Section::SectionInfo section_info,
Source::SourceInfo source_info,
EditLevel::EditLevelInfo edit_level_info)
: section_(section_info), scope_(Scope::CLUSTER),
source_(source_info), session_(Session::NO),
visible_level_(VisibleLevel::COMMON),
edit_level_(edit_level_info),
compat_mode_(CompatMode::COMMON) {}
void set_scope(Scope::ScopeInfo scope_info) { scope_ = scope_info; }
const char *get_section() const { return Section::VALUES[section_]; }
const char *get_scope() const { return Scope::VALUES[scope_]; }
const char *get_source() const { return Source::VALUES[source_]; }
const char *get_session() const { return Session::VALUES[session_]; }
const char *get_visible_level() const { return VisibleLevel::VALUES[visible_level_]; }
const char *get_edit_level() const { return EditLevel::VALUES[edit_level_]; }
const char *get_compat_mode() const { return CompatMode::VALUES[compat_mode_]; }
bool is_static() const;
bool is_readonly() const;
bool is_invisible() const;
private:
Section::SectionInfo section_;
Scope::ScopeInfo scope_;
Source::SourceInfo source_;
Session::SessionInfo session_;
VisibleLevel::VisibleLevelInfo visible_level_;
EditLevel::EditLevelInfo edit_level_;
CompatMode::CompatModeInfo compat_mode_;
};
} // common
} // oceanbase
#endif