CUBRID Engine  latest
shard_proxy_io.h
Go to the documentation of this file.
1 /*
2  * Copyright 2008 Search Solution Corporation
3  * Copyright 2016 CUBRID Corporation
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  */
18 
19 
20 /*
21  * shard_proxy_io.h -
22  */
23 
24 #ifndef _SHARD_PROXY_IO_H_
25 #define _SHARD_PROXY_IO_H_
26 
27 #ident "$Id$"
28 
29 #include <fcntl.h>
30 #if !defined(WINDOWS)
31 #include <netdb.h>
32 #include <sys/socket.h>
33 #include <sys/un.h>
34 #include <sys/time.h>
35 #include <netinet/in.h>
36 #include <arpa/inet.h>
37 #endif /* !WINDOWS */
38 
39 #include "broker_recv_fd.h"
40 #include "cas_network.h"
41 #include "shard_proxy_common.h"
42 #include "shard_metadata.h"
43 
44 #if defined(WINDOWS)
45 #define CLOSESOCKET(fd) closesocket((SOCKET)fd)
46 #define READSOCKET(fd, buf, len) recv((SOCKET)fd, buf, len, 0)
47 #define WRITESOCKET(fd, buf, len) send((SOCKET)fd, buf, len, 0)
48 #else
49 #define CLOSESOCKET(fd) close(fd)
50 #define READSOCKET(fd, buf, len) read(fd, buf, (size_t)len)
51 #define WRITESOCKET(fd, buf, len) write(fd, buf, (size_t)len)
52 #endif
53 
54 #define DEFAULT_POLL_INTERVAL 1
55 
56 /* connection protocol(size : information)
57 PROTOCOL_SIZE : CAS_CONNECTION_REPLY_SIZE
58 CAS_INFO_SIZE : CAS_INFO_SIZE
59 CAS_PID_SIZE : proxy pid
60 BROKER_INFO_SIZE : broker_info
61 CAS_INFO_SIZE : cas_info
62 */
63 
64 #define PROTOCOL_SIZE sizeof(int)
65 #define PROXY_CONNECTION_REPLY_SIZE(con_reply_size) (PROTOCOL_SIZE + CAS_INFO_SIZE + (con_reply_size))
66 
67 #define SHARD_TEMPORARY_UNAVAILABLE (-1)
68 
69 #define PROXY_IO_FROM_CAS (true)
70 #define PROXY_IO_FROM_CLIENT (false)
71 #define PROXY_CONV_ERR_TO_NEW (true)
72 #define PROXY_CONV_ERR_TO_OLD (false)
73 
74 #if !defined(LINUX)
75 /* for network global variables */
76 extern fd_set rset, wset, allset, wnewset, wallset;
77 extern int maxfd;
78 #endif /* !LINUX */
79 
82 
83 extern void set_data_length (char *buffer, int length);
84 extern int get_data_length (char *buffer);
85 extern int get_msg_length (char *buffer);
86 
87 extern char *proxy_dup_msg (char *msg);
88 
89 extern void proxy_set_con_status_in_tran (char *msg);
90 extern void proxy_set_con_status_out_tran (char *msg);
91 extern void proxy_set_force_out_tran (char *msg);
92 extern void proxy_unset_force_out_tran (char *msg);
93 extern int proxy_make_net_buf (T_NET_BUF * net_buf, int size, T_BROKER_VERSION client_version);
94 
95 extern int proxy_io_make_error_msg (char *driver_info, char **buffer, int error_ind, int error_code,
96  const char *error_msg, char is_in_tran);
97 extern int proxy_io_make_no_error (char *driver_info, char **buffer);
98 extern int proxy_io_make_con_close_ok (char *driver_info, char **buffer);
99 extern int proxy_io_make_end_tran_ok (char *driver_info, char **buffer);
100 extern int proxy_io_make_check_cas_ok (char *driver_info, char **buffer);
101 extern int proxy_io_make_set_db_parameter_ok (char *driver_info, char **buffer);
102 extern int proxy_io_make_ex_get_isolation_level (char *driver_info, char **buffer, void *argv);
103 extern int proxy_io_make_ex_get_lock_timeout (char *driver_info, char **buffer, void *argv);
104 
105 extern int proxy_io_make_end_tran_request (char *driver_info, char **buffer, bool commit);
106 #if defined (ENABLE_UNUSED_FUNCTION)
107 extern int proxy_io_make_end_tran_commit (char **buffer);
108 #endif /* ENABLE_UNUSED_FUNCTION */
109 extern int proxy_io_make_end_tran_abort (char *driver_info, char **buffer);
110 extern int proxy_io_make_close_req_handle_ok (char *driver_info, char **buffer, bool is_in_tran);
111 #if defined (ENABLE_UNUSED_FUNCTION)
112 extern int proxy_io_make_close_req_handle_in_tran_ok (char **buffer);
113 #endif /* ENABLE_UNUSED_FUNCTION */
114 extern int proxy_io_make_close_req_handle_out_tran_ok (char *driver_info, char **buffer);
115 extern int proxy_io_make_cursor_close_out_tran_ok (char *driver_info, char **buffer);
116 
117 extern int proxy_io_make_get_db_version (char *driver_info, char **buffer);
118 extern int proxy_io_make_client_conn_ok (char *driver_info, char **buffer);
119 extern int proxy_io_make_client_proxy_alive (char *driver_info, char **buffer);
120 extern int proxy_io_make_client_dbinfo_ok (char *driver_info, char **buffer);
121 extern int proxy_io_make_client_acl_fail (char *driver_info, char **buffer);
122 extern int proxy_io_make_shard_info (char *driver_info, char **buffer);
123 extern int proxy_io_make_check_cas (char *driver_info, char **buffer);
124 
125 extern int proxy_socket_set_write_event (T_SOCKET_IO * sock_io_p, T_PROXY_EVENT * event_p);
126 extern void proxy_io_buffer_clear (T_IO_BUFFER * io_buffer);
127 extern void proxy_socket_io_print (bool print_all);
128 extern void proxy_client_io_print (bool print_all);
129 extern char *proxy_str_client_io (T_CLIENT_IO * cli_io_p);
130 
131 extern void proxy_shard_io_print (bool print_all);
132 extern char *proxy_str_cas_io (T_CAS_IO * cas_io_p);
133 
134 extern void proxy_client_io_free (T_CLIENT_IO * cli_io_p);
135 extern void proxy_client_io_free_by_ctx (int client_id, int ctx_cid, int ctx_uid);
136 extern T_CLIENT_IO *proxy_client_io_find_by_ctx (int client_id, int ctx_cid, unsigned int ctx_uid);
137 extern T_CLIENT_IO *proxy_client_io_find_by_fd (int client_id, SOCKET fd);
138 extern int proxy_client_io_write (T_CLIENT_IO * cli_io_p, T_PROXY_EVENT * event_p);
139 extern void proxy_cas_io_free_by_ctx (int shard_id, int cas_id, int ctx_cid, unsigned int ctx_uid);
140 extern T_CAS_IO *proxy_cas_find_io_by_ctx (int shard_id, int cas_id, int ctx_cid, unsigned int ctx_uid);
141 
142 extern T_CAS_IO *proxy_cas_alloc_by_ctx (int client_id, int shard_id, int cas_id, int ctx_cid, unsigned int ctx_uid,
143  int timeout, int func_code);
144 extern void proxy_cas_release_by_ctx (int shard_id, int cas_id, int ctx_cid, unsigned int ctx_uid);
145 extern int proxy_cas_io_write (T_CAS_IO * cas_io_p, T_PROXY_EVENT * event_p);
146 
147 extern int proxy_io_close_all_fd (void);
148 
149 extern int proxy_io_process (void);
150 extern int proxy_io_initialize (void);
151 extern void proxy_io_destroy (void);
152 
153 
154 extern int proxy_socket_io_delete (SOCKET fd);
156 
157 extern char *proxy_get_driver_info_by_ctx (T_PROXY_CONTEXT * ctx_p);
158 extern char *proxy_get_driver_info_by_fd (T_SOCKET_IO * sock_io_p);
159 
160 extern void proxy_available_cas_wait_timer (void);
161 extern int proxy_convert_error_code (int error_ind, int error_code, char *driver_info, T_BROKER_VERSION client_version,
162  bool to_new);
163 #endif /* _SHARD_PROXY_IO_H_ */
int proxy_io_process(void)
int proxy_io_make_cursor_close_out_tran_ok(char *driver_info, char **buffer)
void proxy_socket_io_print(bool print_all)
fd_set wnewset
int proxy_io_set_established_by_ctx(T_PROXY_CONTEXT *ctx_p)
int SOCKET
Definition: porting.h:482
int proxy_io_make_client_conn_ok(char *driver_info, char **buffer)
void proxy_set_con_status_in_tran(char *msg)
void proxy_shard_io_print(bool print_all)
int get_data_length(char *buffer)
int proxy_io_make_ex_get_lock_timeout(char *driver_info, char **buffer, void *argv)
int proxy_cas_io_write(T_CAS_IO *cas_io_p, T_PROXY_EVENT *event_p)
int proxy_io_make_client_dbinfo_ok(char *driver_info, char **buffer)
void proxy_io_destroy(void)
int proxy_io_make_con_close_ok(char *driver_info, char **buffer)
T_CAS_IO * proxy_cas_alloc_by_ctx(int client_id, int shard_id, int cas_id, int ctx_cid, unsigned int ctx_uid, int timeout, int func_code)
void proxy_cas_io_free_by_ctx(int shard_id, int cas_id, int ctx_cid, unsigned int ctx_uid)
int proxy_io_make_set_db_parameter_ok(char *driver_info, char **buffer)
fd_set rset
int proxy_client_io_write(T_CLIENT_IO *cli_io_p, T_PROXY_EVENT *event_p)
int proxy_socket_set_write_event(T_SOCKET_IO *sock_io_p, T_PROXY_EVENT *event_p)
int proxy_convert_error_code(int error_ind, int error_code, char *driver_info, T_BROKER_VERSION client_version, bool to_new)
fd_set allset
void proxy_unset_force_out_tran(char *msg)
int maxfd
char * proxy_get_driver_info_by_fd(T_SOCKET_IO *sock_io_p)
char * proxy_get_driver_info_by_ctx(T_PROXY_CONTEXT *ctx_p)
void proxy_client_io_free_by_ctx(int client_id, int ctx_cid, int ctx_uid)
char * proxy_dup_msg(char *msg)
void proxy_io_buffer_clear(T_IO_BUFFER *io_buffer)
fd_set wallset
int proxy_io_initialize(void)
int proxy_socket_io_delete(SOCKET fd)
int proxy_io_make_no_error(char *driver_info, char **buffer)
int proxy_io_make_close_req_handle_ok(char *driver_info, char **buffer, bool is_in_tran)
int proxy_io_make_error_msg(char *driver_info, char **buffer, int error_ind, int error_code, const char *error_msg, char is_in_tran)
void proxy_client_io_print(bool print_all)
int get_msg_length(char *buffer)
int proxy_io_make_check_cas_ok(char *driver_info, char **buffer)
int proxy_io_make_ex_get_isolation_level(char *driver_info, char **buffer, void *argv)
int proxy_io_make_end_tran_ok(char *driver_info, char **buffer)
int proxy_io_make_client_proxy_alive(char *driver_info, char **buffer)
T_CAS_IO * proxy_cas_find_io_by_ctx(int shard_id, int cas_id, int ctx_cid, unsigned int ctx_uid)
int proxy_make_net_buf(T_NET_BUF *net_buf, int size, T_BROKER_VERSION client_version)
void proxy_client_io_free(T_CLIENT_IO *cli_io_p)
T_SHARD_IO_GLOBAL proxy_Shard_io
T_CLIENT_IO * proxy_client_io_find_by_ctx(int client_id, int ctx_cid, unsigned int ctx_uid)
T_CLIENT_IO * proxy_client_io_find_by_fd(int client_id, SOCKET fd)
T_CLIENT_IO_GLOBAL proxy_Client_io
const char ** argv
Definition: dynamic_load.c:952
void proxy_cas_release_by_ctx(int shard_id, int cas_id, int ctx_cid, unsigned int ctx_uid)
int proxy_io_close_all_fd(void)
int T_BROKER_VERSION
Definition: cas_protocol.h:342
void set_data_length(char *buffer, int length)
int proxy_io_make_get_db_version(char *driver_info, char **buffer)
int proxy_io_make_end_tran_request(char *driver_info, char **buffer, bool commit)
char * proxy_str_cas_io(T_CAS_IO *cas_io_p)
fd_set wset
int proxy_io_make_client_acl_fail(char *driver_info, char **buffer)
int proxy_io_make_shard_info(char *driver_info, char **buffer)
char * proxy_str_client_io(T_CLIENT_IO *cli_io_p)
void proxy_set_con_status_out_tran(char *msg)
void proxy_available_cas_wait_timer(void)
int proxy_io_make_end_tran_abort(char *driver_info, char **buffer)
int proxy_io_make_close_req_handle_out_tran_ok(char *driver_info, char **buffer)
int proxy_io_make_check_cas(char *driver_info, char **buffer)
void proxy_set_force_out_tran(char *msg)