Merge branch '2.3' into 2.4
This commit is contained in:
@ -40,10 +40,6 @@ Config::Config(MXS_CONFIG_PARAMETER* conf)
|
||||
ignore_match_data = pcre2_match_data_create_from_pattern(ignore_regex, NULL);
|
||||
}
|
||||
|
||||
ignored_dbs.insert("mysql");
|
||||
ignored_dbs.insert("information_schema");
|
||||
ignored_dbs.insert("performance_schema");
|
||||
|
||||
std::string ignored_dbs_str = conf->get_string(CN_IGNORE_TABLES);
|
||||
if (ignored_dbs_str.empty())
|
||||
{
|
||||
@ -59,7 +55,7 @@ Config::Config(MXS_CONFIG_PARAMETER* conf)
|
||||
{
|
||||
for (const auto& a : mxs::strtok(ignored_dbs_str, ", \t"))
|
||||
{
|
||||
ignored_dbs.insert(a);
|
||||
ignored_tables.insert(a);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -49,9 +49,9 @@ struct Config
|
||||
bool refresh_databases; /**< Are databases refreshed when
|
||||
* they are not found in the hashtable */
|
||||
bool debug; /**< Enable verbose debug messages to clients */
|
||||
pcre2_code* ignore_regex; /**< Regular expression used to ignore databases */
|
||||
pcre2_code* ignore_regex; /**< Regular expression used to ignore tables */
|
||||
pcre2_match_data* ignore_match_data;/**< Match data for @c ignore_regex */
|
||||
std::set<std::string> ignored_dbs; /**< Set of ignored databases */
|
||||
std::set<std::string> ignored_tables; /**< Set of ignored tables */
|
||||
SERVER* preferred_server; /**< Server to prefer in conflict situations */
|
||||
|
||||
Config(MXS_CONFIG_PARAMETER* conf);
|
||||
|
@ -1194,11 +1194,12 @@ char* get_lenenc_str(void* data)
|
||||
|
||||
static const std::set<std::string> always_ignore = {"mysql", "information_schema", "performance_schema"};
|
||||
|
||||
bool SchemaRouterSession::ignore_duplicate_database(const char* data)
|
||||
bool SchemaRouterSession::ignore_duplicate_table(const std::string& data)
|
||||
{
|
||||
bool rval = false;
|
||||
|
||||
if (m_config->ignored_dbs.count(data) || always_ignore.count(data))
|
||||
std::string db = data.substr(0, data.find("."));
|
||||
if (m_config->ignored_tables.count(data) || always_ignore.count(db))
|
||||
{
|
||||
rval = true;
|
||||
}
|
||||
@ -1212,7 +1213,7 @@ bool SchemaRouterSession::ignore_duplicate_database(const char* data)
|
||||
}
|
||||
|
||||
if (pcre2_match(m_config->ignore_regex,
|
||||
(PCRE2_SPTR) data,
|
||||
(PCRE2_SPTR) data.c_str(),
|
||||
PCRE2_ZERO_TERMINATED,
|
||||
0,
|
||||
0,
|
||||
@ -1304,7 +1305,7 @@ enum showdb_response SchemaRouterSession::parse_mapping_response(SSRBackend& bre
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!ignore_duplicate_database(data))
|
||||
if (strchr(data, '.') != NULL && !ignore_duplicate_table(std::string(data)))
|
||||
{
|
||||
duplicate_found = true;
|
||||
SERVER* duplicate = m_shard.get_location(data);
|
||||
|
@ -129,7 +129,7 @@ private:
|
||||
bool get_shard_dcb(DCB** dcb, const char* name);
|
||||
bool have_servers();
|
||||
bool handle_default_db();
|
||||
bool ignore_duplicate_database(const char* data);
|
||||
bool ignore_duplicate_table(const std::string& data);
|
||||
SERVER* get_query_target(GWBUF* buffer);
|
||||
SERVER* get_ps_target(GWBUF* buffer, uint32_t qtype, qc_query_op_t op);
|
||||
|
||||
|
Reference in New Issue
Block a user