Ripples 1.0
High Performant Software Architecture For Transaction Processing
Loading...
Searching...
No Matches
conn.h
Go to the documentation of this file.
1
45#ifndef CONN_H
46#define CONN_H
47
48#include <stdint.h>
49#include <sys/uio.h>
50#include <sys/socket.h>
51#include <time.h>
52
53#include <uthash/uthash.h>
54
55#include "query.h"
56
58#define CONN_IS_UDP_LISTENER(conn) \
59 conn->lc == 0 && conn->proto == 0
60
62#define CONN_IS_TCP_LISTENER(conn) \
63 conn->lc == 0 && conn->proto == 1
64
66#define CONN_IS_TCP_CONN(conn) \
67 conn->lc == 1 && conn->proto == 1
68
101
103typedef enum conn_tcp_state_e {
104 /*8 Error assigning connection ID. */
105 TCP_CONN_ST_ASSIGN_CONN_ID_ERR = 0,
106
109
110 /* Wait for query data, meaning some data was read in yet not enough to be
111 * a complete query request.
112 */
113 TCP_CONN_ST_WAIT_FOR_QUERY_DATA,
114
117
122
127
130
135
138
140
142typedef struct conn_tcp_s {
144 struct sockaddr_storage client_ip;
145
147 struct sockaddr_storage local_ip;
148
150 unsigned char *read_buffer;
151
154
157
160
166
169
172
175
178
181
184
186 struct timespec start_time;
187
191 struct timespec timeout;
192
194 struct timespec end_time;
196
198typedef struct conn_udp_s {
203 unsigned int vector_len;
204
206 struct mmsghdr *read_vector;
207
209 unsigned int read_vector_count;
210
213
217 struct mmsghdr *write_vector;
218
227
231 unsigned int write_vector_count;
232
234
236typedef struct conn_s {
238 UT_hash_handle hh;
239
243 uint64_t cid;
244
246 uint8_t lc: 1;
247
249 uint8_t proto: 1;
250
252 uint8_t ip_version: 1;
253
258
263
265 uint8_t in_read_queue: 1;
266
268 uint8_t in_write_queue: 1;
269
274
277
280
283
285 int fd;
286
288 union {
289 conn_udp_t *udp;
290 conn_tcp_t *tcp;
292
294
306
307
318
319void conn_tcp_release(conn_tcp_t *conn_tcp);
320void conn_udp_release(conn_udp_t *conn_udp);
321void conn_release(conn_t *conn);
322void conn_udp_vectors_reset(conn_udp_t *conn_udp);
323conn_udp_t * conn_udp_new(config_t *cfg, int family);
324conn_t * conn_new_tcp(int fd, config_t *cfg, int ip_version,
325 struct sockaddr_storage *client_ip,
326 struct sockaddr_storage *local_ip);
327
328conn_t * conn_listener_provision(config_t *cfg, int family, int protocol,
329 char *err_buf, size_t err_buf_len);
330
331conn_t * conn_lru_cache_get(conn_t **lru, uint64_t id);
332
333bool conn_tcp_id_assign(uint64_t *id, conn_t **lru, uint64_t *base);
334
335void conn_tcp_report_metrics(conn_tcp_t *conn_tcp, metrics_t *metrics);
336
337#endif /* End of CONN_H */
338
conn_t * conn_fifo_dequeue_release(conn_fifo_queue_t *queue)
Definition conn.c:725
struct conn_udp_s conn_udp_t
struct conn_tcp_s conn_tcp_t
void conn_fifo_enqueue_release(conn_fifo_queue_t *queue, conn_t *conn)
Definition conn.c:703
enum conn_tcp_state_e conn_tcp_state_t
conn_tcp_state_e
Definition conn.h:103
conn_t * conn_new_tcp(int fd, config_t *cfg, int ip_version, struct sockaddr_storage *client_ip, struct sockaddr_storage *local_ip)
Definition conn.c:180
conn_t * conn_listener_provision(config_t *cfg, int family, int protocol, char *err_buf, size_t err_buf_len)
Definition conn.c:507
void conn_fifo_remove_from_write_queue(conn_fifo_queue_t *queue, conn_t *conn_rm)
Definition conn.c:775
void conn_fifo_enqueue_read(conn_fifo_queue_t *queue, conn_t *entry)
Definition conn.c:575
conn_t * conn_fifo_dequeue_gen(conn_fifo_queue_t *queue)
Definition conn.c:638
void conn_fifo_enqueue_write(conn_fifo_queue_t *queue, conn_t *entry)
Definition conn.c:658
listener_start_error_e
Definition conn.h:70
bool conn_tcp_id_assign(uint64_t *id, conn_t **lru, uint64_t *base)
Definition conn.c:832
void conn_tcp_report_metrics(conn_tcp_t *conn_tcp, metrics_t *metrics)
Definition conn_tcp_report_metrics.c:37
void conn_udp_vectors_reset(conn_udp_t *conn_udp)
Definition conn.c:302
void conn_fifo_remove_from_read_queue(conn_fifo_queue_t *queue, conn_t *conn_rm)
Definition conn.c:749
conn_t * conn_lru_cache_get(conn_t **lru, uint64_t id)
Definition conn.c:806
conn_udp_t * conn_udp_new(config_t *cfg, int family)
Definition conn.c:234
void conn_release(conn_t *conn)
Definition conn.c:147
struct conn_fifo_queue_s conn_fifo_queue_t
void conn_udp_release(conn_udp_t *conn_udp)
Definition conn.c:120
conn_t * conn_fifo_dequeue_write(conn_fifo_queue_t *queue)
Definition conn.c:680
enum listener_start_error_e listener_start_error_t
void conn_tcp_release(conn_tcp_t *conn_tcp)
Definition conn.c:105
struct conn_s conn_t
conn_t * conn_fifo_dequeue_read(conn_fifo_queue_t *queue)
Definition conn.c:597
void conn_fifo_enqueue_gen(conn_fifo_queue_t *queue, conn_t *conn)
Definition conn.c:619
@ TCP_CONN_ST_WAIT_FOR_WRITE
Definition conn.h:116
@ TCP_CONN_ST_CLOSED_FOR_READ
Definition conn.h:121
@ TCP_CONN_ST_READ_ERR
Definition conn.h:126
@ TCP_CONN_ST_CLOSED_FOR_WRITE
Definition conn.h:129
@ TCP_CONN_ST_WAIT_FOR_QUERY
Definition conn.h:108
@ TCP_CONN_ST_QUERY_SIZE_TOOLARGE
Definition conn.h:137
@ TCP_CONN_ST_WRITE_ERR
Definition conn.h:134
@ LISTENER_ERR_SOCKET_OPT_RCVBUF
Definition conn.h:96
@ LISTENER_ERR_SOCKET_OPT_IPV6_V6ONLY
Definition conn.h:90
@ LISTENER_ERR_SOCKET_OPT_SNDBUF
Definition conn.h:99
@ LISTENER_ERR_SOCKET_OPT_IPV6_RECVPKTINFO
Definition conn.h:93
@ LISTENER_ERR_BIND
Definition conn.h:81
@ LISTENER_ERR_SOCKET
Definition conn.h:72
@ LISTENER_ERR_SOCKET_OPT_REUSEADDR
Definition conn.h:75
@ LISTENER_ERR_SOCKET_OPT_IP_PKTINFO
Definition conn.h:87
@ LISTENER_ERR_SOCKET_OPT_REUSEPORT
Definition conn.h:78
@ LISTENER_ERR_LISTEN
Definition conn.h:84
Definition config.h:46
Definition conn.h:298
conn_t * tail
Definition conn.h:303
conn_t * head
Definition conn.h:300
Definition conn.h:236
uint8_t waiting_for_read
Definition conn.h:257
struct conn_s * write_q_handle
Definition conn.h:279
uint8_t proto
Definition conn.h:249
uint8_t waiting_for_write
Definition conn.h:262
uint8_t ip_version
Definition conn.h:252
UT_hash_handle hh
Definition conn.h:238
uint8_t in_read_queue
Definition conn.h:265
union conn_s::@0 conn
struct conn_s * read_q_handle
Definition conn.h:276
uint64_t cid
Definition conn.h:243
uint8_t in_release_queue
Definition conn.h:273
uint8_t lc
Definition conn.h:246
struct conn_s * gen_q_handle
Definition conn.h:282
uint8_t in_write_queue
Definition conn.h:268
int fd
Definition conn.h:285
Definition conn.h:142
struct timespec end_time
Definition conn.h:194
size_t read_buffer_size
Definition conn.h:153
unsigned char * read_buffer
Definition conn.h:150
struct timespec start_time
Definition conn.h:186
size_t query_write_index
Definition conn.h:159
size_t queries_size
Definition conn.h:171
struct sockaddr_storage client_ip
Definition conn.h:144
query_t * queries
Definition conn.h:168
size_t tcp_keepalive
Definition conn.h:180
conn_tcp_state_t state
Definition conn.h:183
size_t write_index
Definition conn.h:165
size_t read_buffer_len
Definition conn.h:156
size_t queries_total_count
Definition conn.h:177
struct sockaddr_storage local_ip
Definition conn.h:147
size_t queries_count
Definition conn.h:174
struct timespec timeout
Definition conn.h:191
Definition conn.h:198
unsigned int write_vector_count
Definition conn.h:231
struct mmsghdr * read_vector
Definition conn.h:206
unsigned int vector_len
Definition conn.h:203
struct mmsghdr * write_vector
Definition conn.h:217
query_t * queries
Definition conn.h:212
unsigned int write_vector_write_index
Definition conn.h:226
unsigned int read_vector_count
Definition conn.h:209
Definition metrics.h:41
Definition query.h:122