dblink_write implement [FEAT MERGE]

Co-authored-by: zzg19950727 <1071026277@qq.com>
Co-authored-by: xianyu-w <707512433@qq.com>
This commit is contained in:
obdev
2023-01-29 16:23:18 +08:00
committed by ob-robot
parent 195ab500ab
commit 814de27a42
226 changed files with 9602 additions and 4087 deletions

View File

@ -444,8 +444,12 @@ int ObDbLinkProxy::create_dblink_pool(uint64_t tenant_id, uint64_t dblink_id, Db
return ret;
}
int ObDbLinkProxy::acquire_dblink(uint64_t dblink_id, DblinkDriverProto dblink_type,
ObISQLConnection *&dblink_conn, uint32_t sessid, int64_t timeout_sec)
int ObDbLinkProxy::acquire_dblink(uint64_t dblink_id,
DblinkDriverProto dblink_type,
const dblink_param_ctx &param_ctx,
ObISQLConnection *&dblink_conn,
uint32_t sessid,
int64_t sql_request_level)
{
int ret = OB_SUCCESS;
ObISQLConnectionPool *dblink_pool = NULL;
@ -454,10 +458,13 @@ int ObDbLinkProxy::acquire_dblink(uint64_t dblink_id, DblinkDriverProto dblink_t
LOG_WARN("dblink proxy not inited");
} else if (OB_FAIL(switch_dblink_conn_pool(dblink_type, dblink_pool))) {
LOG_WARN("failed to get dblink interface", K(ret), K(dblink_type));
} else if (OB_FAIL(dblink_pool->acquire_dblink(dblink_id, dblink_conn, sessid, timeout_sec))) {
} else if (OB_FAIL(dblink_pool->acquire_dblink(dblink_id, param_ctx, dblink_conn, sessid, sql_request_level))) {
LOG_WARN("acquire dblink failed", K(ret), K(dblink_id), K(dblink_type));
} else if (OB_FAIL(prepare_enviroment(dblink_conn, dblink_type))) {
LOG_WARN("failed to prepare dblink env", K(ret));
} else {
dblink_conn->set_dblink_id(dblink_id);
dblink_conn->set_dblink_driver_proto(static_cast<int64_t>(dblink_type));
}
return ret;
}
@ -465,11 +472,11 @@ int ObDbLinkProxy::acquire_dblink(uint64_t dblink_id, DblinkDriverProto dblink_t
int ObDbLinkProxy::prepare_enviroment(ObISQLConnection *dblink_conn, int link_type)
{
int ret = OB_SUCCESS;
if (dblink_conn->get_init_remote_env()) {
// do nothing;
} else if (OB_ISNULL(dblink_conn)) {
if (OB_ISNULL(dblink_conn)) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("dblink is null", K(ret));
} else if (dblink_conn->get_init_remote_env()) {
// do nothing;
} else {
if (OB_FAIL(execute_init_sql(dblink_conn, link_type))) {
LOG_WARN("failed to execute init sql", K(ret));
@ -483,7 +490,6 @@ int ObDbLinkProxy::prepare_enviroment(ObISQLConnection *dblink_conn, int link_ty
int ObDbLinkProxy::execute_init_sql(ObISQLConnection *dblink_conn, int link_type)
{
UNUSED(link_type);
int ret = OB_SUCCESS;
typedef const char * sql_ptr_type;
if (DBLINK_DRV_OB == link_type) {
@ -513,7 +519,6 @@ int ObDbLinkProxy::release_dblink(/*uint64_t dblink_id,*/ DblinkDriverProto dbli
{
int ret = OB_SUCCESS;
ObISQLConnectionPool *dblink_pool = NULL;
dblink_conn->set_init_remote_env(false);
if (!is_inited()) {
ret = OB_NOT_INIT;
LOG_WARN("dblink proxy not inited");
@ -525,47 +530,31 @@ int ObDbLinkProxy::release_dblink(/*uint64_t dblink_id,*/ DblinkDriverProto dbli
return ret;
}
int ObDbLinkProxy::dblink_read(const uint64_t dblink_id,
DblinkDriverProto dblink_type,
ReadResult &result,
const char *sql,
int &dblink_read_ret,
const char *&dblink_read_errmsg,
uint32_t sessid)
int ObDbLinkProxy::dblink_read(ObISQLConnection *dblink_conn, ReadResult &result, const char *sql)
{
int ret = OB_SUCCESS;
dblink_read_ret = OB_SUCCESS;
dblink_read_errmsg = NULL;
ObISQLConnection *dblink_conn = NULL;
if (OB_FAIL(acquire_dblink(dblink_id, dblink_type, dblink_conn, sessid))) {
dblink_read_ret = ret;
if (DblinkDriverProto::DBLINK_DRV_OB == dblink_type && NULL != dblink_conn) {
dblink_read_errmsg = mysql_error(static_cast<common::sqlclient::ObMySQLConnection *>(dblink_conn)->get_handler());
}
LOG_WARN("acquire dblink failed", K(ret));
} else if (OB_FAIL(read(dblink_conn, result, OB_INVALID_TENANT_ID, sql))) {
dblink_read_ret = ret;
if (DblinkDriverProto::DBLINK_DRV_OB == dblink_type && NULL != dblink_conn) {
dblink_read_errmsg = mysql_error(static_cast<common::sqlclient::ObMySQLConnection *>(dblink_conn)->get_handler());
}
LOG_WARN("read from dblink failed", K(ret));
int err = OB_SUCCESS;
if (OB_SUCCESS != (err = release_dblink(dblink_type, dblink_conn, sessid))) {
LOG_ERROR("release dblink failed", K(err));
}
} else if (OB_FAIL(release_dblink(dblink_type, dblink_conn, sessid))) {
LOG_ERROR("release dblink failed", K(ret));
result.reset();
if (OB_ISNULL(dblink_conn) || OB_ISNULL(sql)) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("null ptr", K(ret), KP(dblink_conn), KP(sql));
} else if (OB_FAIL(dblink_conn->execute_read(OB_INVALID_TENANT_ID, sql, result))) {
LOG_WARN("read from dblink failed", K(ret), K(dblink_conn), KCSTRING(sql));
} else {
LOG_DEBUG("succ to read from dblink", K(sql));
}
return ret;
}
int ObDbLinkProxy::dblink_read(ObISQLConnection *dblink_conn, ReadResult &result, const char *sql)
int ObDbLinkProxy::dblink_write(ObISQLConnection *dblink_conn, int64_t &affected_rows, const char *sql)
{
int ret = OB_SUCCESS;
if (OB_ISNULL(dblink_conn)) {
LOG_WARN("dblink conn is NULL", K(ret));
} else if (OB_FAIL(read(dblink_conn, result, OB_INVALID_TENANT_ID, sql))) {
LOG_WARN("read from dblink failed", K(ret));
if (OB_ISNULL(dblink_conn) || OB_ISNULL(sql)) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("null ptr", K(ret), KP(dblink_conn), KP(sql));
} else if (OB_FAIL(dblink_conn->execute_write(OB_INVALID_TENANT_ID, sql, affected_rows))) {
LOG_WARN("write to dblink failed", K(ret), K(dblink_conn), K(sql));
} else {
LOG_DEBUG("succ to write by dblink", K(sql));
}
return ret;
}