diff options
Diffstat (limited to 'mgmt.c')
-rw-r--r-- | mgmt.c | 21 |
1 files changed, 21 insertions, 0 deletions
@@ -3,6 +3,7 @@ * License: GPLv3 or later (see COPYING for details) */ #include "cmogstored.h" +#include "trace.h" #include "mgmt.h" #include "digest.h" #include "ioprio.h" @@ -205,6 +206,7 @@ parse: return mgmt->wbuf ? MOG_NEXT_WAIT_WR : MOG_NEXT_ACTIVE; } } else if (r == 0) { /* client shut down */ + TRACE(CMOGSTORED_MGMT_RDCLOSE(mfd, buf_len)); return MOG_NEXT_CLOSE; } else { switch (errno) { @@ -215,8 +217,11 @@ parse: case EINTR: goto reread; case ECONNRESET: case ENOTCONN: + /* these errors are too common to log, normally */ + TRACE(CMOGSTORED_MGMT_RDERR(mfd, buf_len, errno)); return MOG_NEXT_CLOSE; default: + TRACE(CMOGSTORED_MGMT_RDERR(mfd, buf_len, errno)); syslog(LOG_NOTICE, "mgmt client died: %m"); return MOG_NEXT_CLOSE; } @@ -268,6 +273,19 @@ void mog_mgmt_quit_step(struct mog_fd *mfd) } } +/* stringify the address for tracers */ +static MOG_NOINLINE void +trace_mgmt_accepted(struct mog_fd *mfd, struct sockaddr *sa, socklen_t salen) +{ +#ifdef HAVE_SYSTEMTAP + struct mog_ni ni; + int rc = mog_nameinfo(sa, salen, &ni); + const char *host = rc == 0 ? ni.ni_host : gai_strerror(rc); + + TRACE(CMOGSTORED_MGMT_ACCEPTED(mfd->fd, host, ni.ni_serv)); +#endif /* !HAVE_SYSTEMTAP */ +} + /* called immediately after accept(), this initializes the mfd (once) */ void mog_mgmt_post_accept(int fd, struct mog_svc *svc, struct sockaddr *sa, socklen_t salen) @@ -275,6 +293,9 @@ void mog_mgmt_post_accept(int fd, struct mog_svc *svc, struct mog_fd *mfd = mog_fd_init(fd, MOG_FD_TYPE_MGMT); struct mog_mgmt *mgmt = &mfd->as.mgmt; + if (TRACE_ENABLED(CMOGSTORED_MGMT_ACCEPTED)) + trace_mgmt_accepted(mfd, sa, salen); + mog_mgmt_init(mgmt, svc); mog_idleq_add(svc->queue, mfd, MOG_QEV_RD); } |