summaryrefslogtreecommitdiffstats
path: root/libglusterfs/src/event-poll.c
diff options
context:
space:
mode:
authorShreyas Siravara <sshreyas@fb.com>2016-03-28 14:17:53 -0700
committerJeff Darcy <jeff@pl.atyp.us>2017-09-12 15:12:21 +0000
commit14e24da1eb59a85fe99c22bafd8641ca2b75a923 (patch)
treee027476d10acffbd7d8415884901883f47fae2b7 /libglusterfs/src/event-poll.c
parent60b35dbfa42a65d81a18efda2776c0e733c4e769 (diff)
event: Idle connection management
Summary: - This diff adds support for detecting and tracking idle client connections. - It allows *service translators* (server, nfs) to opt-in to detect and close idle client connections. - Right now it explicitly restricts the service to NFS as a safety. Here are the debug logs when a client connection gets closed: [2016-03-29 17:27:06.154232] W [socket.c:2426:socket_timeout_handler] 0-socket: Shutting down idle client connection (idle=20s,fd=20,conn=[2401:db00:11:d0af:face:0:3:0:957]->[2401:db00:11:d0af:face:0:3:0:2049])! [2016-03-29 17:27:06.154292] D [event-epoll.c:655:__event_epoll_timeout_slot] 0-epoll: Connection on slot->fd=9 was idle for 20 seconds! [2016-03-29 17:27:06.163282] D [socket.c:629:__socket_rwv] 0-socket.nfs-server: EOF on socket [2016-03-29 17:27:06.163298] D [socket.c:2474:socket_event_handler] 0-transport: disconnecting now [2016-03-29 17:27:06.163316] D [event-epoll.c:614:event_dispatch_epoll_handler] 0-epoll: generation bumped on idx=9 from gen=4 to slot->gen=5, fd=20, slot->fd=20 Test Plan: - Used stuck NFS mounts to create idle clients and unstuck them. Reviewers: kvigor, rwareing Reviewed By: rwareing Subscribers: dld, moox, dph Differential Revision: https://phabricator.fb.com/D3112099 Change-Id: Ic06c89e03f87daabab7f07f892390edd1a1fcc20 Signed-off-by: Jeff Darcy <jdarcy@fb.com> Reviewed-on: https://review.gluster.org/18265 Reviewed-by: Jeff Darcy <jeff@pl.atyp.us> Tested-by: Jeff Darcy <jeff@pl.atyp.us> CentOS-regression: Gluster Build System <jenkins@build.gluster.org> Smoke: Gluster Build System <jenkins@build.gluster.org>
Diffstat (limited to 'libglusterfs/src/event-poll.c')
-rw-r--r--libglusterfs/src/event-poll.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/libglusterfs/src/event-poll.c b/libglusterfs/src/event-poll.c
index 2006e33d33b..2e166163790 100644
--- a/libglusterfs/src/event-poll.c
+++ b/libglusterfs/src/event-poll.c
@@ -35,7 +35,7 @@ struct event_slot_poll {
static int
event_register_poll (struct event_pool *event_pool, int fd,
- event_handler_t handler,
+ event_handler_t handler, timeout_event_handler_t timeout_handler,
void *data, int poll_in, int poll_out);
@@ -153,7 +153,7 @@ event_pool_new_poll (int count, int eventthreadcount)
}
ret = event_register_poll (event_pool, event_pool->breaker[0],
- __flush_fd, NULL, 1, 0);
+ __flush_fd, NULL, NULL, 1, 0);
if (ret == -1) {
gf_msg ("poll", GF_LOG_ERROR, 0, LG_MSG_REGISTER_PIPE_FAILED,
"could not register pipe fd with poll event loop");
@@ -179,7 +179,7 @@ event_pool_new_poll (int count, int eventthreadcount)
static int
event_register_poll (struct event_pool *event_pool, int fd,
- event_handler_t handler,
+ event_handler_t handler, timeout_event_handler_t time_handler,
void *data, int poll_in, int poll_out)
{
int idx = -1;