Merge lp:~ramon-van-alteren/mysql-proxy/funnel-private-backend into lp:~trickie/mysql-proxy/funnel

Proposed by Ramon
Status: Merged
Approved by: trickie
Approved revision: 661
Merged at revision: not available
Proposed branch: lp:~ramon-van-alteren/mysql-proxy/funnel-private-backend
Merge into: lp:~trickie/mysql-proxy/funnel
Diff against target: None lines
To merge this branch: bzr merge lp:~ramon-van-alteren/mysql-proxy/funnel-private-backend
Reviewer Review Type Date Requested Status
nickloeve Pending
Review via email: mp+5244@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Ramon (ramon-van-alteren) wrote :

As the commit statement reads...

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'plugins/funnel/funnel-plugin.c'
2--- plugins/funnel/funnel-plugin.c 2009-03-24 10:44:50 +0000
3+++ plugins/funnel/funnel-plugin.c 2009-04-06 12:00:28 +0000
4@@ -390,6 +390,7 @@
5
6 /* try for a pooled connection and possibly go to backlog */
7 if (!con->server) {
8+ network_socket_set_keepalive(con->client);
9 g_static_mutex_lock(&current_backend_cons_mutex);
10 if (current_backend_cons >= con->config->min_backend_cons) { /* we want to get a minimum in our pool */
11
12@@ -413,6 +414,7 @@
13 stats->no_of_frontend_conns++;
14
15 if (!con->server) {
16+ network_socket_set_keepalive(con->client);
17 current_backend_cons++;
18 g_static_mutex_unlock(&current_backend_cons_mutex);
19 con->server = network_socket_new();
20@@ -995,9 +997,15 @@
21 return -1;
22 }
23
24+ /** Set listen socket to do tcp_keepalive
25+ * This should be inherited by all subsequent sockets
26+ **/
27+
28+ // network_socket_set_keepalive(listen_sock);
29+
30 /**
31 * call network_mysqld_con_accept() with this connection when we are done
32- */
33+ **/
34
35 event_set(&(listen_sock->event), listen_sock->fd, EV_READ|EV_PERSIST, network_mysqld_con_accept, con);
36 event_base_set(chas->event_base, &(listen_sock->event));
37
38=== modified file 'src/network-socket.c'
39--- src/network-socket.c 2009-02-23 23:58:26 +0000
40+++ src/network-socket.c 2009-04-06 12:00:28 +0000
41@@ -279,6 +279,60 @@
42 }
43
44 /**
45+ * set keepalive properties on the socket
46+ *
47+ * @param fd socket-fd
48+ * @return 0
49+ */
50+network_socket_retval_t network_socket_set_keepalive(network_socket *sock) {
51+ int optval = 1;
52+ int optlen = sizeof(optval);
53+
54+#ifdef linux
55+ if(setsockopt(sock->fd, SOL_SOCKET, SO_KEEPALIVE, &optval, optlen) < 0) {
56+ g_critical("%s.%d: set_keepalive() failed: %s (%d)",
57+ __FILE__, __LINE__,
58+ g_strerror(errno), errno);
59+ return NETWORK_SOCKET_ERROR;
60+ }
61+
62+ /* start sending keepalive ack's after 2 minutes */
63+ optval = 120;
64+ optlen = sizeof(optval);
65+
66+ if(setsockopt(sock->fd, IPPROTO_TCP, TCP_KEEPIDLE, &optval, optlen) < 0) {
67+ g_critical("%s.%d: set_keepalive() failed: %s (%d)",
68+ __FILE__, __LINE__,
69+ g_strerror(errno), errno);
70+ return NETWORK_SOCKET_ERROR;
71+ }
72+
73+ /* send keepalive every 2 minutes when idle */
74+ if(setsockopt(sock->fd, IPPROTO_TCP, TCP_KEEPINTVL, &optval, optlen) < 0) {
75+ g_critical("%s.%d: set_keepalive() failed: %s (%d)",
76+ __FILE__, __LINE__,
77+ g_strerror(errno), errno);
78+ return NETWORK_SOCKET_ERROR;
79+ }
80+
81+ /* fail after 1 failed keepalive packet */
82+ optval = 1;
83+
84+ if(setsockopt(sock->fd, IPPROTO_TCP, TCP_KEEPCNT, &optval, optlen) < 0) {
85+ g_critical("%s.%d: set_keepalive() failed: %s (%d)",
86+ __FILE__, __LINE__,
87+ g_strerror(errno), errno);
88+ return NETWORK_SOCKET_ERROR;
89+ }
90+
91+ return NETWORK_SOCKET_SUCCESS;
92+#else
93+ //todo, fix this on other platforms
94+ return NETWORK_SOCKET_SUCCESS;
95+#endif
96+}
97+
98+/**
99 * accept a connection
100 *
101 * event handler for listening connections
102@@ -300,13 +354,16 @@
103
104 return NULL;
105 }
106-
107+
108 network_socket_set_non_blocking(client);
109
110 if (network_address_refresh_name(client->src)) {
111 network_socket_free(client);
112 return NULL;
113 }
114+
115+ /* set socket to do tcp_keepalive */
116+ //network_socket_set_keepalive(client);
117
118 /* the listening side may be INADDR_ANY, let's get which address the client really connected to */
119 if (-1 == getsockname(client->fd, &client->dst->addr.common, &(client->dst->len))) {

Subscribers

People subscribed via source and target branches