Add new rpc queue for storage_ha

This commit is contained in:
godyangfight
2023-09-09 10:55:37 +00:00
committed by ob-robot
parent f890972523
commit cade45ca80
46 changed files with 398 additions and 263 deletions

View File

@ -53,10 +53,12 @@ public:
virtual int read(ReadResult &res, const uint64_t tenant_id, const char *sql) = 0;
virtual int read(ReadResult &res, const int64_t cluster_id, const uint64_t tenant_id, const char *sql) = 0;
virtual int read(ReadResult &res, const char *sql) { return this->read(res, OB_SYS_TENANT_ID, sql); }
virtual int read(ReadResult &res, const uint64_t tenant_id, const char *sql, const int32_t group_id) = 0;
// execute update sql
virtual int write(const uint64_t tenant_id, const char *sql, int64_t &affected_rows) = 0;
virtual int write(const char *sql, int64_t &affected_rows) { return this->write(OB_SYS_TENANT_ID, sql, affected_rows); }
virtual int write(const uint64_t tenant_id, const char *sql, const int32_t group_id, int64_t &affected_rows) = 0;
// executor execute
int execute(const uint64_t tenant_id, sqlclient::ObIExecutor &executor)

View File

@ -116,9 +116,9 @@ public:
// acquired connection must be released
virtual int acquire(ObISQLConnection *&conn, ObISQLClient *client_addr)
{
return this->acquire(OB_INVALID_TENANT_ID, conn, client_addr);
return this->acquire(OB_INVALID_TENANT_ID, conn, client_addr, 0);
}
virtual int acquire(const uint64_t tenant_id, ObISQLConnection *&conn, ObISQLClient *client_addr) = 0;
virtual int acquire(const uint64_t tenant_id, ObISQLConnection *&conn, ObISQLClient *client_addr, const int32_t group_id) = 0;
virtual int release(ObISQLConnection *conn, const bool success) = 0;
virtual int on_client_inactive(ObISQLClient *client_addr) = 0;
virtual ObSQLConnPoolType get_type() = 0;

View File

@ -698,10 +698,11 @@ void ObMySQLConnectionPool::runTimerTask()
}
}
int ObMySQLConnectionPool::acquire(const uint64_t tenant_id, ObISQLConnection *&conn, ObISQLClient *client_addr)
int ObMySQLConnectionPool::acquire(const uint64_t tenant_id, ObISQLConnection *&conn, ObISQLClient *client_addr, const int32_t group_id)
{
int ret = OB_SUCCESS;
UNUSED(client_addr);
UNUSED(group_id);
ObMySQLConnection *mysql_conn = NULL;
conn = NULL;
if (OB_FAIL(acquire(tenant_id, mysql_conn))) {

View File

@ -140,7 +140,7 @@ public:
virtual int escape(const char *from, const int64_t from_size,
char *to, const int64_t to_size, int64_t &out_size);
virtual int acquire(const uint64_t tenant_id, ObISQLConnection *&conn, ObISQLClient *client_addr) override;
virtual int acquire(const uint64_t tenant_id, ObISQLConnection *&conn, ObISQLClient *client_addr, const int32_t group_id) override;
virtual int release(ObISQLConnection *conn, const bool success) override;
virtual int on_client_inactive(ObISQLClient *client_addr) override

View File

@ -56,11 +56,11 @@ void ObCommonSqlProxy::operator=(const ObCommonSqlProxy &o)
pool_ = o.pool_;
}
int ObCommonSqlProxy::read(ReadResult &result, const uint64_t tenant_id, const char *sql)
int ObCommonSqlProxy::read(ReadResult &result, const uint64_t tenant_id, const char *sql, const int32_t group_id)
{
int ret = OB_SUCCESS;
ObISQLConnection *conn = NULL;
if (OB_FAIL(acquire(tenant_id, conn))) {
if (OB_FAIL(acquire(tenant_id, conn, group_id))) {
LOG_WARN("acquire connection failed", K(ret), K(conn));
} else if (OB_FAIL(read(conn, result, tenant_id, sql))) {
LOG_WARN("read failed", K(ret));
@ -76,7 +76,7 @@ int ObCommonSqlProxy::read(ReadResult &result, const uint64_t tenant_id, const c
if (OB_ISNULL(exec_sql_addr)) {
ret = OB_INVALID_ARGUMENT;
LOG_WARN("read with typically exec addr failed", K(ret), K(exec_sql_addr));
} else if (OB_FAIL(acquire(tenant_id, conn))) {
} else if (OB_FAIL(acquire(tenant_id, conn, 0/*group_id*/))) {
LOG_WARN("acquire connection failed", K(ret), K(conn));
} else if (OB_FAIL(read(conn, result, tenant_id, sql, exec_sql_addr))) {
LOG_WARN("read failed", K(ret));
@ -89,7 +89,7 @@ int ObCommonSqlProxy::read(ReadResult &result, const uint64_t tenant_id, const c
{
int ret = OB_SUCCESS;
ObISQLConnection *conn = NULL;
if (OB_FAIL(acquire(tenant_id, conn))) {
if (OB_FAIL(acquire(tenant_id, conn, 0/*group_id*/))) {
LOG_WARN("acquire connection failed", K(ret), K(conn));
} else if (nullptr != session_param) {
conn->set_ddl_info(&session_param->ddl_info_);
@ -133,7 +133,7 @@ int ObCommonSqlProxy::read(ObISQLConnection *conn, ReadResult &result,
return ret;
}
int ObCommonSqlProxy::write(const uint64_t tenant_id, const char *sql, int64_t &affected_rows)
int ObCommonSqlProxy::write(const uint64_t tenant_id, const char *sql, const int32_t group_id, int64_t &affected_rows)
{
int ret = OB_SUCCESS;
int64_t start = ::oceanbase::common::ObTimeUtility::current_time();
@ -141,7 +141,7 @@ int ObCommonSqlProxy::write(const uint64_t tenant_id, const char *sql, int64_t &
if (OB_ISNULL(sql)) {
ret = OB_INVALID_ARGUMENT;
LOG_WARN("empty sql");
} else if (OB_FAIL(acquire(tenant_id, conn))) {
} else if (OB_FAIL(acquire(tenant_id, conn, group_id))) {
LOG_WARN("acquire connection failed", K(ret), K(conn));
} else if (OB_ISNULL(conn)) {
ret = OB_INNER_STAT_ERROR;
@ -171,7 +171,7 @@ int ObCommonSqlProxy::write(const uint64_t tenant_id, const ObString sql,
if (OB_UNLIKELY(sql.empty())) {
ret = OB_INVALID_ARGUMENT;
LOG_WARN("empty sql");
} else if (OB_FAIL(acquire(tenant_id, conn))) {
} else if (OB_FAIL(acquire(tenant_id, conn, 0/*group_id*/))) {
LOG_WARN("acquire connection failed", K(ret), K(conn));
} else if (OB_ISNULL(conn)) {
ret = OB_INNER_STAT_ERROR;
@ -254,7 +254,7 @@ int ObCommonSqlProxy::execute(const uint64_t tenant_id, ObIExecutor &executor)
int ret = OB_SUCCESS;
int64_t start = ::oceanbase::common::ObTimeUtility::current_time();
ObISQLConnection *conn = NULL;
if (OB_FAIL(acquire(tenant_id, conn))) {
if (OB_FAIL(acquire(tenant_id, conn, 0/*group_id*/))) {
LOG_WARN("acquire connection failed", K(ret), K(conn));
} else if (OB_ISNULL(conn)) {
ret = OB_INNER_STAT_ERROR;
@ -336,13 +336,13 @@ int ObCommonSqlProxy::add_slashes(const char *from, const int64_t from_size,
return ret;
}
int ObCommonSqlProxy::acquire(const uint64_t tenant_id, sqlclient::ObISQLConnection *&conn)
int ObCommonSqlProxy::acquire(const uint64_t tenant_id, sqlclient::ObISQLConnection *&conn, const int32_t group_id)
{
int ret = OB_SUCCESS;
if (!is_inited()) {
ret = OB_NOT_INIT;
LOG_WARN("mysql proxy not inited", K(ret));
} else if (OB_FAIL(pool_->acquire(tenant_id, conn, this))) {
} else if (OB_FAIL(pool_->acquire(tenant_id, conn, this, group_id))) {
LOG_WARN("acquire connection failed", K(ret), K(conn));
} else if (OB_ISNULL(conn)) {
ret = OB_ERR_UNEXPECTED;
@ -367,7 +367,7 @@ int ObCommonSqlProxy::read(
} else if (NULL == sql) {
ret = OB_INVALID_ARGUMENT;
LOG_WARN("empty sql");
} else if (OB_FAIL(acquire(tenant_id, conn))) {
} else if (OB_FAIL(acquire(tenant_id, conn, 0/*group_id*/))) {
LOG_WARN("acquire connection failed", K(ret), K(conn));
} else if (NULL == conn) {
ret = OB_INNER_STAT_ERROR;

View File

@ -107,9 +107,10 @@ public:
virtual int escape(const char *from, const int64_t from_size,
char *to, const int64_t to_size, int64_t &out_size) override;
// execute query and return data result
virtual int read(ReadResult &res, const uint64_t tenant_id, const char *sql) override;
virtual int read(ReadResult &res, const uint64_t tenant_id, const char *sql) override { return this->read(res, tenant_id, sql, 0/*group_id*/); }
int read(ReadResult &res, const uint64_t tenant_id, const char *sql, const ObSessionParam *session_param);
int read(ReadResult &res, const uint64_t tenant_id, const char *sql, const common::ObAddr *sql_exec_addr);
virtual int read(ReadResult &res, const uint64_t tenant_id, const char *sql, const int32_t group_id) override;
//only for across cluster
//cluster_id can not GCONF.cluster_id
virtual int read(ReadResult &res,
@ -118,7 +119,8 @@ public:
const char *sql) override;
using ObISQLClient::read;
// execute update sql
virtual int write(const uint64_t tenant_id, const char *sql, int64_t &affected_rows) override;
virtual int write(const uint64_t tenant_id, const char *sql, int64_t &affected_rows) override { return this->write(tenant_id, sql, 0/**/, affected_rows); }
virtual int write(const uint64_t tenant_id, const char *sql, const int32_t group_id, int64_t &affected_rows) override;
int write(const uint64_t tenant_id, const ObString sql, int64_t &affected_rows, int64_t compatibility_mode,
const ObSessionParam *session_param = nullptr,
const common::ObAddr *sql_exec_addr = nullptr);
@ -137,8 +139,8 @@ public:
int execute(const uint64_t tenant_id, sqlclient::ObIExecutor &executor);
protected:
int acquire(sqlclient::ObISQLConnection *&conn) { return this->acquire(OB_INVALID_TENANT_ID, conn); }
int acquire(const uint64_t tenant_id, sqlclient::ObISQLConnection *&conn);
int acquire(sqlclient::ObISQLConnection *&conn) { return this->acquire(OB_INVALID_TENANT_ID, conn, 0); }
int acquire(const uint64_t tenant_id, sqlclient::ObISQLConnection *&conn, const int32_t group_id);
int read(sqlclient::ObISQLConnection *conn, ReadResult &result,
const uint64_t tenant_id, const char *sql, const common::ObAddr *sql_exec_addr = nullptr);

View File

@ -66,11 +66,12 @@ int ObMySQLTransaction::start_transaction(
int ObMySQLTransaction::start(
ObISQLClient *sql_client,
const uint64_t tenant_id,
bool with_snapshot/* = false*/)
bool with_snapshot/* = false*/,
const int32_t group_id /* = 0*/)
{
int ret = OB_SUCCESS;
start_time_ = ::oceanbase::common::ObTimeUtility::current_time();
if (OB_FAIL(connect(tenant_id, sql_client))) {
if (OB_FAIL(connect(tenant_id, group_id, sql_client))) {
LOG_WARN("failed to init", K(ret), K(tenant_id));
} else if (enable_query_stash_ && OB_FAIL(query_stash_desc_.create(1024, "BucketQueryS", "NodeQueryS"))) {
LOG_WARN("failed to init map", K(ret), K(tenant_id));

View File

@ -63,7 +63,8 @@ public:
// start transaction
virtual int start(ObISQLClient *proxy,
const uint64_t tenant_id,
bool with_snapshot = false);
bool with_snapshot = false,
const int32_t group_id = 0);
virtual int start(ObISQLClient *proxy,
const uint64_t &tenant_id,
const int64_t &refreshed_schema_version,

View File

@ -33,12 +33,12 @@ ObSingleConnectionProxy::~ObSingleConnectionProxy()
(void)close();
}
int ObSingleConnectionProxy::connect(const uint64_t tenant_id, ObISQLClient *sql_client)
int ObSingleConnectionProxy::connect(const uint64_t tenant_id, const int32_t group_id, ObISQLClient *sql_client)
{
int ret = OB_SUCCESS;
if (NULL == sql_client || NULL == sql_client->get_pool()) {
if (NULL == sql_client || NULL == sql_client->get_pool() || group_id < 0) {
ret = OB_INVALID_ARGUMENT;
LOG_WARN("invalid argument", K(sql_client));
LOG_WARN("invalid argument", K(sql_client), K(group_id));
} else if (NULL != pool_ || NULL != conn_) {
ret = OB_INNER_STAT_ERROR;
LOG_WARN("transaction can only be started once", K(tenant_id), K(pool_), K(conn_));
@ -46,7 +46,7 @@ int ObSingleConnectionProxy::connect(const uint64_t tenant_id, ObISQLClient *sql
oracle_mode_ = sql_client->is_oracle_mode();
pool_ = sql_client->get_pool();
if (OB_FAIL(pool_->acquire(tenant_id, conn_, sql_client))) {
if (OB_FAIL(pool_->acquire(tenant_id, conn_, sql_client, group_id))) {
LOG_WARN("acquire connection failed", K(ret), K(tenant_id), K(pool_));
} else if (NULL == conn_) {
ret = OB_INNER_STAT_ERROR;
@ -72,10 +72,11 @@ int ObSingleConnectionProxy::connect(const uint64_t tenant_id, ObISQLClient *sql
}
int ObSingleConnectionProxy::read(ReadResult &res,
const uint64_t tenant_id, const char *sql)
const uint64_t tenant_id, const char *sql, const int32_t group_id)
{
int ret = OB_SUCCESS;
res.reset();
UNUSED(group_id);
if (!check_inner_stat()) {
ret = OB_INNER_STAT_ERROR;
LOG_WARN("check inner stat failed");
@ -92,6 +93,7 @@ int ObSingleConnectionProxy::read(ReadResult &res,
LOG_TRACE("execute sql", KCSTRING(sql), K(ret));
return ret;
}
int ObSingleConnectionProxy::read(ReadResult &res,
const int64_t cluster_id,
const uint64_t tenant_id, const char *sql)
@ -116,9 +118,10 @@ int ObSingleConnectionProxy::read(ReadResult &res,
}
int ObSingleConnectionProxy::write(
const uint64_t tenant_id, const char *sql, int64_t &affected_rows)
const uint64_t tenant_id, const char *sql, const int32_t group_id, int64_t &affected_rows)
{
int ret = OB_SUCCESS;
UNUSED(group_id);
if (!check_inner_stat()) {
ret = OB_INNER_STAT_ERROR;
LOG_WARN("check inner stat failed");

View File

@ -37,13 +37,15 @@ public:
virtual int escape(const char *from, const int64_t from_size,
char *to, const int64_t to_size, int64_t &out_size) override;
// %res should be destructed before execute other sql
virtual int read(ReadResult &res, const uint64_t tenant_id, const char *sql) override;
virtual int read(ReadResult &res, const uint64_t tenant_id, const char *sql) override { return this->read(res, tenant_id, sql, 0/*group_id*/); }
virtual int read(ReadResult &res, const uint64_t tenant_id, const char *sql, const int32_t group_id) override;
virtual int read(ReadResult &res, const int64_t cluster_id, const uint64_t tenant_id, const char *sql) override;
virtual int write(const uint64_t tenant_id, const char *sql, int64_t &affected_rows) override;
virtual int write(const uint64_t tenant_id, const char *sql, int64_t &affected_rows) override { return this->write(tenant_id, sql, 0/*group_id*/, affected_rows); }
virtual int write(const uint64_t tenant_id, const char *sql, const int32_t group_id, int64_t &affected_rows) override;
using ObISQLClient::read;
using ObISQLClient::write;
int connect(const uint64_t tenant_id, ObISQLClient *sql_client);
int connect(const uint64_t tenant_id, const int32_t group_id, ObISQLClient *sql_client);
virtual sqlclient::ObISQLConnectionPool *get_pool() override { return pool_; }
virtual sqlclient::ObISQLConnection *get_connection() override { return conn_; }