晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝) 既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。
| DIR:/usr/include/mysql/server/private/ |
| Current File : //usr/include/mysql/server/private/wsrep_schema.h |
/* Copyright (C) 2015-2024 Codership Oy <info@codership.com>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; version 2 of the License.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
#ifndef WSREP_SCHEMA_H
#define WSREP_SCHEMA_H
/* wsrep-lib */
#include "wsrep_types.h"
#include "mysqld.h"
#include "wsrep_mysqld.h"
/*
Forward decls
*/
class THD;
class Relay_log_info;
struct TABLE;
struct TABLE_LIST;
struct st_mysql_lex_string;
typedef struct st_mysql_lex_string LEX_STRING;
class Gtid_log_event;
/** Name of the table in `wsrep_schema_str` used for storing streaming
replication data. In an InnoDB full format, e.g. "database/tablename". */
extern const char* wsrep_sr_table_name_full;
class Wsrep_schema
{
public:
Wsrep_schema();
~Wsrep_schema();
/*
Initialize wsrep schema. Storage engines must be running before
calling this function.
*/
int init();
/*
Store wsrep view info into wsrep schema.
*/
int store_view(THD*, const Wsrep_view& view);
/*
Restore view info from stable storage.
*/
Wsrep_view restore_view(THD* thd, const Wsrep_id& own_id) const;
/**
Append transaction fragment to fragment storage.
Transaction must have been started for THD before this call.
In order to make changes durable, transaction must be committed
separately after this call.
@param thd THD object
@param server_id Wsrep server identifier
@param transaction_id Transaction identifier
@param flags Flags for the fragment
@param data Fragment data buffer
@return Zero in case of success, non-zero on failure.
*/
int append_fragment(THD* thd,
const wsrep::id& server_id,
wsrep::transaction_id transaction_id,
wsrep::seqno seqno,
int flags,
const wsrep::const_buffer& data);
/**
Update existing fragment meta data. The fragment must have been
inserted before using append_fragment().
@param thd THD object
@param ws_meta Wsrep meta data
@return Zero in case of success, non-zero on failure.
*/
int update_fragment_meta(THD* thd,
const wsrep::ws_meta& ws_meta);
/**
Remove fragments from storage. This method must be called
inside active transaction. Fragment removal will be committed
once the transaction commits.
@param thd Pointer to THD object
@param server_id Identifier of the running server
@param transaction_id Identifier of the current transaction
@param fragments Vector of fragment seqnos to be removed
*/
int remove_fragments(THD* thd,
const wsrep::id& server_id,
wsrep::transaction_id transaction_id,
const std::vector<wsrep::seqno>& fragments);
/**
Replay a transaction from stored fragments. The caller must have
started a transaction for a thd.
@param thd Pointer to THD object
@param ws_meta Write set meta data for commit fragment.
@param fragments Vector of fragments to be replayed
@return Zero on success, non-zero on failure.
*/
int replay_transaction(THD* thd,
Relay_log_info* rli,
const wsrep::ws_meta& ws_meta,
const std::vector<wsrep::seqno>& fragments);
/**
Recover streaming transactions from SR table.
This method should be called after storage enignes are initialized.
It will scan SR table and replay found streaming transactions.
@param orig_thd The THD object of the calling thread.
@return Zero on success, non-zero on failure.
*/
int recover_sr_transactions(THD* orig_thd);
/**
Store GTID-event to mysql.gtid_slave_pos table.
@param thd The THD object of the calling thread.
@param gtid GTID event from binlog.
@return Zero on success, non-zero on failure.
*/
int store_gtid_event(THD* thd, const Gtid_log_event *gtid);
/**
Delete all rows on bootstrap from `wsrep_allowlist` variable
*/
void clear_allowlist();
/**
Store allowlist ip on bootstrap from `wsrep_allowlist` variable
*/
void store_allowlist(std::vector<std::string>& ip_allowlist);
/**
Scan white list table against accepted connection. Allow if ip
is found in table or if table is empty.
@param key Which allowlist column to compare
@param value Value to be checked against allowlist
@return True if found or empty table, false on not found
*/
bool allowlist_check(Wsrep_allowlist_key key, const std::string& val);
private:
/* Non-copyable */
Wsrep_schema(const Wsrep_schema&);
Wsrep_schema& operator=(const Wsrep_schema&);
};
extern Wsrep_schema* wsrep_schema;
extern LEX_CSTRING WSREP_LEX_SCHEMA;
extern LEX_CSTRING WSREP_LEX_STREAMING;
extern LEX_CSTRING WSREP_LEX_CLUSTER;
extern LEX_CSTRING WSREP_LEX_MEMBERS;
extern LEX_CSTRING WSREP_LEX_ALLOWLIST;
#endif /* !WSREP_SCHEMA_H */
|