Signed-off-by: Colin McCabe <cmccabe@xxxxxxxxxxxxxx> --- server/cld.h | 4 +- server/cldb.c | 6 ++-- server/msg.c | 49 +++++++++++++----------------- server/server.c | 86 ++++++++++++++++++++++++------------------------------ server/session.c | 57 ++++++++++++++---------------------- server/util.c | 27 +++++++++-------- 6 files changed, 100 insertions(+), 129 deletions(-) diff --git a/server/cld.h b/server/cld.h index 05c93ad..efe7ee4 100644 --- a/server/cld.h +++ b/server/cld.h @@ -26,6 +26,7 @@ #include <glib.h> #include "cldb.h" #include <cld_msg.h> +#include <common.h> #include <libtimer.h> struct client; @@ -152,7 +153,7 @@ extern int sess_load(GHashTable *ss); /* server.c */ extern const char *opstr(enum cld_msg_ops op); extern struct server cld_srv; -extern int debugging; +extern struct hail_log srv_log; extern struct timeval current_time; extern int udp_tx(int sock_fd, struct sockaddr *, socklen_t, const void *, size_t); @@ -161,7 +162,6 @@ extern void resp_err(struct session *sess, const struct cld_msg_hdr *src, enum cle_err_codes errcode); extern void resp_ok(struct session *sess, const struct cld_msg_hdr *src); extern bool authsign(struct cld_packet *pkt, size_t pkt_len); -extern void applog(int prio, const char *fmt, ...); /* util.c */ extern int write_pid_file(const char *pid_fn); diff --git a/server/cldb.c b/server/cldb.c index 2f012e5..a0d3a67 100644 --- a/server/cldb.c +++ b/server/cldb.c @@ -241,7 +241,7 @@ int cldb_init(struct cldb *cldb, const char *db_home, const char *db_password, rc = db_env_create(&cldb->env, 0); if (rc) { - applog(LOG_WARNING, "cldb->env_create failed: %d", rc); + HAIL_WARN(&srv_log, "cldb->env_create failed: %d", rc); return rc; } @@ -375,7 +375,7 @@ static int cldb_up(struct cldb *cldb, unsigned int flags) cldb->up = true; - applog(LOG_INFO, "databases up"); + HAIL_INFO(&srv_log, "databases up"); return 0; err_out_handle_idx: @@ -417,7 +417,7 @@ void cldb_down(struct cldb *cldb) cldb->inodes = NULL; cldb->sessions = NULL; - applog(LOG_INFO, "databases down"); + HAIL_INFO(&srv_log, "databases down"); } void cldb_fini(struct cldb *cldb) diff --git a/server/msg.c b/server/msg.c index dc5d5fa..609b882 100644 --- a/server/msg.c +++ b/server/msg.c @@ -169,7 +169,7 @@ static bool dirdata_append(void **data, size_t *data_len, mem = realloc(*data, new_len); if (!mem) { - applog(LOG_CRIT, "out of memory for data [%lu]", (long)new_len); + HAIL_CRIT(&srv_log, "out of memory for data [%lz]", new_len); return false; } @@ -238,15 +238,14 @@ static int inode_notify(DB_TXN *txn, cldino_t inum, bool deleted) sess = g_hash_table_lookup(cld_srv.sessions, h.sid); if (!sess) { - applog(LOG_WARNING, "inode_notify BUG"); + HAIL_WARN(&srv_log, "inode_notify BUG"); continue; } if (!sess->sock_fd) { /* Freshly recovered session */ - if (debugging) - applog(LOG_DEBUG, - "Lost notify sid " SIDFMT " ino %lld", - SIDARG(sess->sid), (long long) inum); + HAIL_DEBUG(&srv_log, "Lost notify sid " SIDFMT + " ino %lld", SIDARG(sess->sid), + (long long) inum); continue; } @@ -363,7 +362,7 @@ int inode_lock_rescan(DB_TXN *txn, cldino_t inum) sess = g_hash_table_lookup(cld_srv.sessions, lock.sid); if (!sess) { - applog(LOG_WARNING, "inode_lock_rescan BUG"); + HAIL_WARN(&srv_log, "inode_lock_rescan BUG"); break; } @@ -372,10 +371,9 @@ int inode_lock_rescan(DB_TXN *txn, cldino_t inum) */ if (!sess->sock_fd) { /* Freshly recovered session */ - if (debugging) - applog(LOG_DEBUG, - "Lost success sid " SIDFMT " ino %lld", - SIDARG(sess->sid), (long long) inum); + HAIL_DEBUG(&srv_log, "Lost success sid " SIDFMT + " ino %lld", SIDARG(sess->sid), + (long long) inum); continue; } @@ -455,13 +453,10 @@ void msg_get(struct msg_params *mp, bool metadata_only) goto err_out; } - if (debugging) - applog(LOG_DEBUG, "GET-DEBUG: sizeof(resp) %u, name_len %u, " - "inode->size %u, resp_len %u", - sizeof(*resp), - name_len, - inode_size, - resp_len); + HAIL_DEBUG(&srv_log, "GET-DEBUG: sizeof(resp) %u, name_len %u, " + "inode->size %u, resp_len %u", + sizeof(*resp), name_len, + inode_size, resp_len); /* return response containing inode metadata */ memset(resp, 0, resp_len); @@ -610,7 +605,7 @@ void msg_open(struct msg_params *mp) /* create new in-memory inode */ inode = cldb_inode_new(txn, name, name_len, 0); if (!inode) { - applog(LOG_CRIT, "cannot allocate new inode"); + HAIL_CRIT(&srv_log, "cannot allocate new inode"); resp_rc = CLE_OOM; goto err_out; } @@ -667,7 +662,7 @@ void msg_open(struct msg_params *mp) /* alloc & init new handle; updates session's next_fh */ h = cldb_handle_new(mp->sess, inum, msg_mode, msg_events); if (!h) { - applog(LOG_CRIT, "cannot allocate handle"); + HAIL_CRIT(&srv_log, "cannot allocate handle"); resp_rc = CLE_OOM; goto err_out; } @@ -695,7 +690,7 @@ void msg_open(struct msg_params *mp) raw_sess = session_new_raw(mp->sess); if (!raw_sess) { - applog(LOG_CRIT, "cannot allocate session"); + HAIL_CRIT(&srv_log, "cannot allocate session"); resp_rc = CLE_OOM; goto err_out; } @@ -762,12 +757,10 @@ void msg_put(struct msg_params *mp) /* make sure additional input data as large as expected */ data_size = le32_to_cpu(msg->data_size); if (mp->msg_len != (data_size + sizeof(*msg))) { - applog(LOG_INFO, "PUT len mismatch: msg len %zu, " - "wanted %zu + %u (== %u)", - mp->msg_len, - sizeof(*msg), - data_size, - data_size + sizeof(*msg)); + HAIL_INFO(&srv_log, "PUT len mismatch: msg len %zu, " + "wanted %zu + %u (== %u)", + mp->msg_len, + sizeof(*msg), data_size, data_size + sizeof(*msg)); resp_rc = CLE_BAD_PKT; goto err_out_noabort; } @@ -1067,7 +1060,7 @@ void msg_del(struct msg_params *mp) /* remove record from inode's directory data */ if (!dirdata_delete(parent_data, &parent_len, pinfo.base, pinfo.base_len)) { - applog(LOG_WARNING, "dirent del failed"); + HAIL_WARN(&srv_log, "dirent del failed"); resp_rc = CLE_DB_ERR; goto err_out; } diff --git a/server/server.c b/server/server.c index 39d1a54..f5ac7ce 100644 --- a/server/server.c +++ b/server/server.c @@ -37,6 +37,7 @@ #include <openssl/hmac.h> #include <cld-private.h> #include "cld.h" +#include <common.h> #define PROGRAM_NAME "cld" @@ -84,7 +85,6 @@ static bool server_running = true; static bool dump_stats; static bool use_syslog = true; static bool strict_free = false; -int debugging = 0; struct timeval current_time; struct server cld_srv = { @@ -95,7 +95,7 @@ struct server cld_srv = { static void ensure_root(void); -void applog(int prio, const char *fmt, ...) +static void applog(int prio, const char *fmt, ...) { va_list ap; @@ -116,13 +116,17 @@ void applog(int prio, const char *fmt, ...) va_end(ap); } +struct hail_log srv_log = { + .func = applog, + .verbose = 0, +}; + int udp_tx(int sock_fd, struct sockaddr *addr, socklen_t addr_len, const void *data, size_t data_len) { ssize_t src; - if (debugging > 1) - applog(LOG_DEBUG, "udp_tx, fd %d", sock_fd); + HAIL_DEBUG(&srv_log, "udp_tx, fd %d", sock_fd); src = sendto(sock_fd, data, data_len, 0, addr, addr_len); if (src < 0 && errno != EAGAIN) @@ -267,7 +271,7 @@ static void show_msg(const struct cld_msg_hdr *msg) case cmo_not_master: case cmo_event: case cmo_ack_frag: - applog(LOG_DEBUG, "msg: op %s, xid %llu", + HAIL_DEBUG(&srv_log, "msg: op %s, xid %llu", opstr(msg->op), (unsigned long long) le64_to_cpu(msg->xid)); break; @@ -279,7 +283,7 @@ static void udp_rx_msg(const struct client *cli, const struct cld_packet *pkt, { struct session *sess = mp->sess; - if (debugging) + if (srv_log.verbose) show_msg(msg); switch(msg->op) { @@ -328,12 +332,10 @@ static void pkt_ack_frag(int sock_fd, authsign(outpkt, alloc_len); - if (debugging) - applog(LOG_DEBUG, "ack-partial-msg: " - "sid " SIDFMT ", op %s, seqid %llu", - SIDARG(outpkt->sid), - opstr(ack_msg->hdr.op), - (unsigned long long) le64_to_cpu(outpkt->seqid)); + HAIL_DEBUG(&srv_log, "ack-partial-msg: " + "sid " SIDFMT ", op %s, seqid %llu", + SIDARG(outpkt->sid), opstr(ack_msg->hdr.op), + (unsigned long long) le64_to_cpu(outpkt->seqid)); /* transmit ack-partial-msg response (once, without retries) */ udp_tx(sock_fd, (struct sockaddr *) &cli->addr, cli->addr_len, @@ -386,15 +388,12 @@ static void udp_rx(int sock_fd, mp.msg = msg; mp.msg_len = pkt_len - sizeof(*pkt) - SHA_DIGEST_LENGTH; - if (debugging > 1) - applog(LOG_DEBUG, "pkt: len %zu, seqid %llu, sid " SIDFMT ", " - "flags %s%s, user %s", - pkt_len, - (unsigned long long) le64_to_cpu(pkt->seqid), - SIDARG(pkt->sid), - first_frag ? "F" : "", - last_frag ? "L" : "", - pkt->user); + HAIL_DEBUG(&srv_log, "pkt: len %zu, seqid %llu, sid " SIDFMT ", " + "flags %s%s, user %s", + pkt_len, (unsigned long long) le64_to_cpu(pkt->seqid), + SIDARG(pkt->sid), + first_frag ? "F" : "", last_frag ? "L" : "", + pkt->user); /* advance sequence id's and update last-contact timestamp */ if (!have_new_sess) { @@ -409,8 +408,7 @@ static void udp_rx(int sock_fd, if (!have_ack) { /* eliminate duplicates; do not return any response */ if (le64_to_cpu(pkt->seqid) != sess->next_seqid_in) { - if (debugging) - applog(LOG_DEBUG, "dropping dup"); + HAIL_DEBUG(&srv_log, "dropping dup"); return; } @@ -421,8 +419,7 @@ static void udp_rx(int sock_fd, if (sess) { /* eliminate duplicates; do not return any response */ if (le64_to_cpu(pkt->seqid) != sess->next_seqid_in) { - if (debugging) - applog(LOG_DEBUG, "dropping dup"); + HAIL_DEBUG(&srv_log, "dropping dup"); return; } @@ -452,8 +449,8 @@ static void udp_rx(int sock_fd, mp.msg = msg = (struct cld_msg_hdr *) sess->msg_buf; mp.msg_len = sess->msg_buf_len; - if ((debugging > 1) && !first_frag) - applog(LOG_DEBUG, " final message size %u", + if ((srv_log.verbose > 1) && !first_frag) + HAIL_DEBUG(&srv_log, " final message size %u", sess->msg_buf_len); } @@ -475,13 +472,11 @@ err_out: authsign(outpkt, alloc_len); - if (debugging) - applog(LOG_DEBUG, "udp_rx err: " - "sid " SIDFMT ", op %s, seqid %llu, code %d", - SIDARG(outpkt->sid), - opstr(resp->hdr.op), - (unsigned long long) le64_to_cpu(outpkt->seqid), - resp_rc); + HAIL_DEBUG(&srv_log, "udp_rx err: " + "sid " SIDFMT ", op %s, seqid %llu, code %d", + SIDARG(outpkt->sid), opstr(resp->hdr.op), + (unsigned long long) le64_to_cpu(outpkt->seqid), + resp_rc); udp_tx(sock_fd, (struct sockaddr *) &cli->addr, cli->addr_len, outpkt, alloc_len); @@ -523,9 +518,7 @@ static bool udp_srv_event(int fd, short events, void *userdata) strcpy(cli.addr_host, host); - if (debugging) - applog(LOG_DEBUG, "client %s message (%d bytes)", - host, (int) rrc); + HAIL_DEBUG(&srv_log, "client %s message (%d bytes)", host, (int) rrc); /* if it is complete garbage, drop immediately */ if ((rrc < (sizeof(*pkt) + SHA_DIGEST_LENGTH)) || @@ -575,8 +568,7 @@ static void cldb_checkpoint(struct timer *timer) gettimeofday(¤t_time, NULL); - if (debugging) - applog(LOG_INFO, "db4 checkpoint"); + HAIL_DEBUG(&srv_log, "db4 checkpoint"); /* flush logs to db, if log files >= 1MB */ rc = dbenv->txn_checkpoint(dbenv, 1024, 0, 0); @@ -841,7 +833,7 @@ static error_t parse_opt (int key, char *arg, struct argp_state *state) break; case 'D': if (atoi(arg) >= 0 && atoi(arg) <= 2) - debugging = atoi(arg); + srv_log.verbose = atoi(arg); else { fprintf(stderr, "invalid debug level: '%s'\n", arg); argp_usage(state); @@ -1044,8 +1036,8 @@ int main (int argc, char *argv[]) if (rc) goto err_out_pid; - applog(LOG_INFO, "initialized: dbg %u%s", - debugging, + HAIL_INFO(&srv_log, "initialized: verbose %u%s", + srv_log.verbose, strict_free ? ", strict-free" : ""); /* @@ -1098,9 +1090,8 @@ static void ensure_root() rc = cldb_inode_get_byname(txn, "/", sizeof("/")-1, &inode, false, 0); if (rc == 0) { - if (debugging) - applog(LOG_DEBUG, "Root inode found, ino %llu", - (unsigned long long) cldino_from_le(inode->inum)); + HAIL_DEBUG(&srv_log, "Root inode found, ino %llu", + (unsigned long long) cldino_from_le(inode->inum)); } else if (rc == DB_NOTFOUND) { inode = cldb_inode_mem("/", sizeof("/")-1, CIFL_DIR, CLD_INO_ROOT); if (!inode) { @@ -1119,9 +1110,8 @@ static void ensure_root() goto err_; } - if (debugging) - applog(LOG_DEBUG, "Root inode created, ino %llu", - (unsigned long long) cldino_from_le(inode->inum)); + HAIL_DEBUG(&srv_log, "Root inode created, ino %llu", + (unsigned long long) cldino_from_le(inode->inum)); free(inode); } else { dbenv->err(dbenv, rc, "Root inode lookup"); diff --git a/server/session.c b/server/session.c index 09d26fe..905acf1 100644 --- a/server/session.c +++ b/server/session.c @@ -158,8 +158,7 @@ void sessions_free(void) static void session_trash(struct session *sess) { - if (debugging) - applog(LOG_DEBUG, "session " SIDFMT " sent to garbage", + HAIL_DEBUG(&srv_log, "session " SIDFMT " sent to garbage", SIDARG(sess->sid)); sess->dead = true; } @@ -391,7 +390,7 @@ int session_dispose(DB_TXN *txn, struct session *sess) session_free(sess, true); if (rc) - applog(LOG_WARNING, "failed to remove session"); + HAIL_WARN(&srv_log, "failed to remove session"); return rc; } @@ -435,9 +434,9 @@ static void session_timeout(struct timer *timer) return; /* timer added; do not time out session */ } - applog(LOG_INFO, "session %s, addr %s sid " SIDFMT, - sess->dead ? "gc'd" : "timeout", - sess->ipaddr, SIDARG(sess->sid)); + HAIL_INFO(&srv_log, "session %s, addr %s sid " SIDFMT, + sess->dead ? "gc'd" : "timeout", + sess->ipaddr, SIDARG(sess->sid)); /* open transaction */ rc = dbenv->txn_begin(dbenv, NULL, &txn, 0); @@ -576,13 +575,9 @@ static int sess_retry_output(struct session *sess, time_t *next_retry_out) if (current_time.tv_sec < op->next_retry) continue; - if (debugging) - applog(LOG_DEBUG, - "retry: sid " SIDFMT ", op %s, seqid %llu", - SIDARG(outpkt->sid), - opstr(outmsg->op), - (unsigned long long) - le64_to_cpu(outpkt->seqid)); + HAIL_DEBUG(&srv_log, "retry: sid " SIDFMT ", op %s, seqid %llu", + SIDARG(outpkt->sid), opstr(outmsg->op), + (unsigned long long) le64_to_cpu(outpkt->seqid)); rc = udp_tx(sess->sock_fd, (struct sockaddr *) &sess->addr, sess->addr_len, op->pkt, op->pkt_len); @@ -632,7 +627,7 @@ bool sess_sendmsg(struct session *sess, const void *msg_, size_t msglen, n_pkts = (msglen / CLD_MAX_PKT_MSG_SZ); n_pkts += (msglen % CLD_MAX_PKT_MSG_SZ) ? 1 : 0; - if (debugging) { + if (srv_log.verbose) { const struct cld_msg_hdr *hdr = msg_; const struct cld_msg_resp *rsp; @@ -651,7 +646,7 @@ bool sess_sendmsg(struct session *sess, const void *msg_, size_t msglen, case cmo_get_meta: case cmo_get: rsp = (struct cld_msg_resp *) msg_; - applog(LOG_DEBUG, "sendmsg: " + HAIL_DEBUG(&srv_log, "sendmsg: " "sid " SIDFMT ", op %s, msglen %u, code %u, " "xid %llu, xid_in %llu", SIDARG(sess->sid), @@ -662,7 +657,7 @@ bool sess_sendmsg(struct session *sess, const void *msg_, size_t msglen, (unsigned long long) le64_to_cpu(rsp->xid_in)); break; default: - applog(LOG_DEBUG, "sendmsg: " + HAIL_DEBUG(&srv_log, "sendmsg: " "sid " SIDFMT ", op %s, msglen %u", SIDARG(sess->sid), opstr(hdr->op), @@ -771,9 +766,8 @@ void msg_ack(struct msg_params *mp) if (mp->pkt->seqid != outpkt->seqid) continue; - if (debugging) - applog(LOG_DEBUG, " expiring seqid %llu", - (unsigned long long) le64_to_cpu(outpkt->seqid)); + HAIL_DEBUG(&srv_log, " expiring seqid %llu", + (unsigned long long) le64_to_cpu(outpkt->seqid)); /* remove and delete the ack'd msg; call ack'd callback */ sess->out_q = g_list_delete_link(sess->out_q, tmp1); @@ -865,18 +859,14 @@ err_out: authsign(outpkt, alloc_len); - if (debugging) - applog(LOG_DEBUG, - "new_sess err: sid " SIDFMT ", op %s, seqid %llu", - SIDARG(outpkt->sid), - opstr(resp->hdr.op), - (unsigned long long) le64_to_cpu(outpkt->seqid)); + HAIL_DEBUG(&srv_log, "new_sess err: sid " SIDFMT ", op %s, seqid %llu", + SIDARG(outpkt->sid), opstr(resp->hdr.op), + (unsigned long long) le64_to_cpu(outpkt->seqid)); udp_tx(mp->sock_fd, (struct sockaddr *) &mp->cli->addr, mp->cli->addr_len, outpkt, alloc_len); - if (debugging) - applog(LOG_DEBUG, "NEW-SESS failed: %d", resp_rc); + HAIL_DEBUG(&srv_log, "NEW-SESS failed: %d", resp_rc); } static void end_sess_done(struct session_outpkt *outpkt) @@ -971,14 +961,11 @@ static int sess_load_db(GHashTable *ss, DB_TXN *txn) session_decode(sess, &raw_sess); - if (debugging) - applog(LOG_DEBUG, - " loaded sid " SIDFMT " next seqid %llu/%llu", - SIDARG(sess->sid), - (unsigned long long) - le64_to_cpu(sess->next_seqid_out), - (unsigned long long) - le64_to_cpu(sess->next_seqid_in)); + HAIL_DEBUG(&srv_log, " loaded sid " SIDFMT + " next seqid %llu/%llu", + SIDARG(sess->sid), + (unsigned long long) le64_to_cpu(sess->next_seqid_out), + (unsigned long long) le64_to_cpu(sess->next_seqid_in)); g_hash_table_insert(ss, sess->sid, sess); diff --git a/server/util.c b/server/util.c index 36fa219..9ca53a9 100644 --- a/server/util.c +++ b/server/util.c @@ -47,8 +47,9 @@ int write_pid_file(const char *pid_fn) fd = open(pid_fn, O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR); if (fd < 0) { err = errno; - applog(LOG_ERR, "Cannot open PID file %s: %s", - pid_fn, strerror(err)); + + HAIL_ERR(&srv_log, "Cannot open PID file %s: %s", + pid_fn, strerror(err)); return -err; } @@ -59,11 +60,11 @@ int write_pid_file(const char *pid_fn) if (fcntl(fd, F_SETLK, &lock) != 0) { err = errno; if (err == EAGAIN) { - applog(LOG_ERR, "PID file %s is already locked", - pid_fn); + HAIL_ERR(&srv_log, "PID file %s is already locked", + pid_fn); } else { - applog(LOG_ERR, "Cannot lock PID file %s: %s", - pid_fn, strerror(err)); + HAIL_ERR(&srv_log, "Cannot lock PID file %s: %s", + pid_fn, strerror(err)); } close(fd); return -err; @@ -76,8 +77,8 @@ int write_pid_file(const char *pid_fn) ssize_t rc = write(fd, s, bytes); if (rc < 0) { err = errno; - applog(LOG_ERR, "PID number write failed: %s", - strerror(err)); + HAIL_ERR(&srv_log, "PID number write failed: %s", + strerror(err)); goto err_out; } @@ -88,7 +89,7 @@ int write_pid_file(const char *pid_fn) /* make sure file data is written to disk */ if (fsync(fd) < 0) { err = errno; - applog(LOG_ERR, "PID file fsync failed: %s", strerror(err)); + HAIL_ERR(&srv_log, "PID file fsync failed: %s", strerror(err)); goto err_out; } @@ -102,7 +103,7 @@ err_out: void syslogerr(const char *prefix) { - applog(LOG_ERR, "%s: %s", prefix, strerror(errno)); + HAIL_ERR(&srv_log, "%s: %s", prefix, strerror(errno)); } int fsetflags(const char *prefix, int fd, int or_flags) @@ -112,7 +113,7 @@ int fsetflags(const char *prefix, int fd, int or_flags) /* get current flags */ old_flags = fcntl(fd, F_GETFL); if (old_flags < 0) { - applog(LOG_ERR, "%s F_GETFL: %s", prefix, strerror(errno)); + HAIL_ERR(&srv_log, "%s F_GETFL: %s", prefix, strerror(errno)); return -errno; } @@ -123,8 +124,8 @@ int fsetflags(const char *prefix, int fd, int or_flags) /* set new flags */ if (flags != old_flags) if (fcntl(fd, F_SETFL, flags) < 0) { - applog(LOG_ERR, "%s F_SETFL: %s", prefix, - strerror(errno)); + HAIL_ERR(&srv_log, "%s F_SETFL: %s", prefix, + strerror(errno)); rc = -errno; } -- 1.6.2.5 -- To unsubscribe from this list: send the line "unsubscribe hail-devel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html