2
* Copyright (c) 2021 OceanBase
3
* OceanBase CE is licensed under Mulan PubL v2.
4
* You can use this software according to the terms and conditions of the Mulan PubL v2.
5
* You may obtain a copy of Mulan PubL v2 at:
6
* http://license.coscl.org.cn/MulanPubL-2.0
7
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
8
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
9
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
10
* See the Mulan PubL v2 for more details.
13
#define USING_LOG_PREFIX SERVER
14
#include "observer/mysql/obmp_reset_connection.h"
15
#include "rpc/obmysql/obsm_struct.h"
16
#include "observer/mysql/ob_mysql_end_trans_cb.h"
17
#include "lib/string/ob_sql_string.h"
18
#include "rpc/obmysql/ob_mysql_util.h"
19
#include "rpc/obmysql/packet/ompk_ok.h"
20
//#include "share/schema/ob_schema_getter_guard.h"
21
//#include "share/schema/ob_schema_getter_guard.h"
22
#include "share/schema/ob_schema_struct.h"
23
#include "share/schema/ob_multi_version_schema_service.h"
24
#include "sql/ob_sql.h"
25
#include "sql/ob_end_trans_callback.h"
26
#include "sql/session/ob_sql_session_mgr.h"
27
#include "sql/session/ob_sql_session_info.h"
28
#include "sql/parser/ob_parser.h"
29
#include "sql/parser/ob_parser_utils.h"
32
using namespace oceanbase::common;
33
using namespace oceanbase::rpc;
34
using namespace oceanbase::obmysql;
35
using namespace oceanbase::share::schema;
41
int ObMPResetConnection::process()
44
bool need_disconnect = false;
45
ObSQLSessionInfo *session = NULL;
46
ObSMConnection *conn = NULL;
47
ObSchemaGetterGuard schema_guard;
48
uint64_t tenant_id = OB_INVALID_ID;
49
const ObSysVariableSchema *sys_variable_schema = NULL;
50
if (OB_FAIL(get_session(session))) {
51
LOG_ERROR("get session fail", K(ret));
52
} else if (OB_ISNULL(conn = get_conn())) {
53
ret = OB_ERR_UNEXPECTED;
54
LOG_ERROR("null conn", K(ret));
55
} else if (OB_ISNULL(session)) {
56
ret = OB_ERR_UNEXPECTED;
57
LOG_ERROR("fail to get session info", K(ret), K(session));
59
THIS_WORKER.set_session(session);
60
ObSQLSessionInfo::LockGuard lock_guard(session->get_query_lock());
61
session->update_last_active_time();
62
tenant_id = session->get_effective_tenant_id();
63
if (OB_FAIL(ObSqlTransControl::rollback_trans(session, need_disconnect))) {
64
OB_LOG(WARN, "fail to rollback trans for change user", K(ret), K(need_disconnect));
65
} else if (OB_FAIL(gctx_.schema_service_->get_tenant_schema_guard(tenant_id, schema_guard))) {
66
OB_LOG(WARN,"fail get schema guard", K(ret));
67
} else if (OB_FAIL(schema_guard.get_sys_variable_schema(tenant_id, sys_variable_schema))) {
68
LOG_WARN("get sys variable schema failed", K(ret));
69
} else if (OB_ISNULL(sys_variable_schema)) {
70
ret = OB_ERR_UNEXPECTED;
71
LOG_WARN("sys variable schema is null", K(ret));
72
} else if (OB_FAIL(session->load_all_sys_vars(*sys_variable_schema, true))) {
73
LOG_WARN("load system variables failed", K(ret));
74
} else if (OB_FAIL(session->update_database_variables(&schema_guard))) {
75
OB_LOG(WARN, "failed to update database variables", K(ret));
76
} else if (OB_FAIL(update_proxy_sys_vars(*session))) {
77
LOG_WARN("update_proxy_sys_vars failed", K(ret));
78
} else if (OB_FAIL(update_charset_sys_vars(*conn, *session))) {
79
LOG_WARN("fail to update charset sys vars", K(ret));
81
session->clean_status();
85
//send packet to client
88
ok_param.is_on_change_user_ = true;
89
if (OB_FAIL(send_ok_packet(*session, ok_param))) {
90
OB_LOG(WARN, "response ok packet fail", K(ret));
93
if (OB_FAIL(send_error_packet(ret, NULL))) {
94
OB_LOG(WARN,"response fail packet fail", K(ret));
98
if (OB_UNLIKELY(need_disconnect) && is_conn_valid()) {
99
if (NULL == session) {
100
LOG_WARN("will disconnect connection", K(ret), K(need_disconnect));
102
LOG_WARN("will disconnect connection", K(ret), K(session->get_sessid()),
108
THIS_WORKER.set_session(NULL);
109
if (session != NULL) {
110
revert_session(session);
115
} //namespace observer
116
} //namespace oceanbase