Add new rpc queue for storage_ha
This commit is contained in:
@ -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)
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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))) {
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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;
|
||||
|
||||
10
deps/oblib/src/lib/mysqlclient/ob_mysql_proxy.h
vendored
10
deps/oblib/src/lib/mysqlclient/ob_mysql_proxy.h
vendored
@ -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);
|
||||
|
||||
|
||||
@ -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));
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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");
|
||||
|
||||
@ -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_; }
|
||||
|
||||
|
||||
Reference in New Issue
Block a user