Files
oceanbase/deps/oblib/src/rpc/ob_sql_request_operator.h

116 lines
3.8 KiB
C++

/**
* Copyright (c) 2021 OceanBase
* OceanBase CE is licensed under Mulan PubL v2.
* You can use this software according to the terms and conditions of the Mulan PubL v2.
* You may obtain a copy of Mulan PubL v2 at:
* http://license.coscl.org.cn/MulanPubL-2.0
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PubL v2 for more details.
*/
#ifndef OCEANBASE_RPC_OB_SQL_REQUEST_OPERATOR_H_
#define OCEANBASE_RPC_OB_SQL_REQUEST_OPERATOR_H_
#include <stdint.h>
#include "lib/net/ob_addr.h"
#include "rpc/obrpc/ob_rpc_opts.h"
namespace oceanbase
{
namespace rpc
{
class ObRequest;
struct ObSqlSockDesc
{
ObSqlSockDesc(): type_(0), sock_desc_(NULL) {}
~ObSqlSockDesc() {}
void reset() {
type_ = 0;
sock_desc_ = NULL;
}
void set(int type, void* desc) {
type_ = type;
sock_desc_ = desc;
}
void clear_sql_session_info();
int type_;
void* sock_desc_;
};
class ObISqlRequestOperator
{
public:
ObISqlRequestOperator() {}
~ObISqlRequestOperator() {}
virtual void *get_sql_session(ObRequest* req) = 0;
virtual SSL *get_sql_ssl_st(ObRequest* req) = 0;
virtual char* alloc_sql_response_buffer(ObRequest* req, int64_t size) = 0;
virtual char *sql_reusable_alloc(ObRequest* req, const int64_t size) = 0;
virtual common::ObAddr get_peer(const ObRequest* req) = 0;
virtual void disconnect_sql_conn(ObRequest* req) = 0;
virtual void finish_sql_request(ObRequest* req) = 0;
virtual int write_response(ObRequest* req, const char* buf, int64_t sz) = 0;
virtual int async_write_response(ObRequest* req, const char* buf, int64_t sz) = 0;
virtual void get_sock_desc(ObRequest* req, ObSqlSockDesc& desc) = 0;
virtual void disconnect_by_sql_sock_desc(ObSqlSockDesc& desc) = 0;
virtual void destroy(ObRequest* req) = 0;
virtual void set_sql_session_to_sock_desc(ObRequest* req, void* sess) = 0;
};
class ObSqlRequestOperator
{
public:
ObSqlRequestOperator() {}
~ObSqlRequestOperator() {}
void *get_sql_session(ObRequest* req);
SSL *get_sql_ssl_st(ObRequest* req) {
return get_operator(req).get_sql_ssl_st(req);
}
char* alloc_sql_response_buffer(ObRequest* req, int64_t size) {
return get_operator(req).alloc_sql_response_buffer(req, size);
}
char *sql_reusable_alloc(ObRequest* req, const int64_t size) {
return get_operator(req).sql_reusable_alloc(req, size);
}
common::ObAddr get_peer(const ObRequest* req) {
return get_operator(req).get_peer(req);
}
void disconnect_sql_conn(ObRequest* req) {
return get_operator(req).disconnect_sql_conn(req);
}
void finish_sql_request(ObRequest* req) {
return get_operator(req).finish_sql_request(req);
}
int write_response(ObRequest* req, const char* buf, int64_t sz) {
return get_operator(req).write_response(req, buf, sz);
}
int async_write_response(ObRequest* req, const char* buf, int64_t sz) {
return get_operator(req).async_write_response(req, buf, sz);
}
void get_sock_desc(ObRequest* req, ObSqlSockDesc& desc) {
return get_operator(req).get_sock_desc(req, desc);
}
void disconnect_by_sql_sock_desc(ObSqlSockDesc& desc) {
return get_operator(desc).disconnect_by_sql_sock_desc(desc);
}
void destroy(ObRequest* req) {
return get_operator(req).destroy(req);
}
void set_sql_session_to_sock_desc(ObRequest* req, void* sess) {
return get_operator(req).set_sql_session_to_sock_desc(req, sess);
}
private:
ObISqlRequestOperator& get_operator(const ObRequest* req);
ObISqlRequestOperator& get_operator(const ObSqlSockDesc& desc);
};
extern ObSqlRequestOperator global_sql_req_operator;
#define SQL_REQ_OP (oceanbase::rpc::global_sql_req_operator)
} // end of namespace rp
} // end of namespace oceanbase
#endif /* OCEANBASE_RPC_OB_SQL_REQUEST_OPERATOR_H_ */