From: MORITA Kazutaka <morita.kazutaka at lab.ntt.co.jp> Signed-off-by: MORITA Kazutaka <morita.kazutaka at lab.ntt.co.jp> --- collie/cluster.c | 4 +--- collie/node.c | 13 +++++-------- collie/vdi.c | 38 +++++++++++++++++--------------------- include/net.h | 7 ++----- include/sheep.h | 3 +-- lib/net.c | 7 ++++--- lib/sockfd_cache.c | 31 +++++++++---------------------- sheep/group.c | 5 ++--- sheep/recovery.c | 8 +++----- 9 files changed, 44 insertions(+), 72 deletions(-) diff --git a/collie/cluster.c b/collie/cluster.c index 19746c3..30f69dd 100644 --- a/collie/cluster.c +++ b/collie/cluster.c @@ -156,7 +156,6 @@ static int cluster_info(int argc, char **argv) nr_logs = rsp->data_length / sizeof(struct epoch_log); for (i = 0; i < nr_logs; i++) { int j; - char name[128]; const struct sd_node *entry; ti = logs[i].time; @@ -173,8 +172,7 @@ static int cluster_info(int argc, char **argv) entry = logs[i].nodes + j; printf("%s%s", (j == 0) ? "" : ", ", - addr_to_str(name, sizeof(name), - entry->nid.addr, entry->nid.port)); + addr_to_str(entry->nid.addr, entry->nid.port)); } printf("]\n"); } diff --git a/collie/node.c b/collie/node.c index 891f6e2..998f834 100644 --- a/collie/node.c +++ b/collie/node.c @@ -33,13 +33,11 @@ static int node_list(int argc, char **argv) if (!raw_output) printf(" Id Host:Port V-Nodes Zone\n"); for (i = 0; i < sd_nodes_nr; i++) { - char data[128]; - - addr_to_str(data, sizeof(data), sd_nodes[i].nid.addr, - sd_nodes[i].nid.port); + const char *host = addr_to_str(sd_nodes[i].nid.addr, + sd_nodes[i].nid.port); printf(raw_output ? "%d %s %d %u\n" : "%4d %-20s\t%2d%11u\n", - i, data, sd_nodes[i].nr_vnodes, sd_nodes[i].zone); + i, host, sd_nodes[i].nr_vnodes, sd_nodes[i].zone); } return EXIT_SUCCESS; @@ -199,7 +197,6 @@ static int node_recovery(int argc, char **argv) } for (i = 0; i < sd_nodes_nr; i++) { - char host[128]; struct sd_req req; struct recovery_state state; @@ -214,8 +211,8 @@ static int node_recovery(int argc, char **argv) return EXIT_SYSFAIL; if (state.in_recovery) { - addr_to_str(host, sizeof(host), - sd_nodes[i].nid.addr, sd_nodes[i].nid.port); + const char *host = addr_to_str(sd_nodes[i].nid.addr, + sd_nodes[i].nid.port); if (raw_output) printf("%d %s %d %d %"PRIu64" %"PRIu64"\n", i, host, sd_nodes[i].nr_vnodes, diff --git a/collie/vdi.c b/collie/vdi.c index 9991beb..05682f7 100644 --- a/collie/vdi.c +++ b/collie/vdi.c @@ -234,11 +234,11 @@ static void get_oid(uint32_t vid, const char *name, const char *tag, } } -typedef int (*obj_parser_func_t)(char *sheep, uint64_t oid, - struct sd_rsp *rsp, char *buf, void *data); +typedef int (*obj_parser_func_t)(const char *sheep, uint64_t oid, + struct sd_rsp *rsp, char *buf, void *data); -static int do_print_obj(char *sheep, uint64_t oid, struct sd_rsp *rsp, - char *buf, void *data) +static int do_print_obj(const char *sheep, uint64_t oid, struct sd_rsp *rsp, + char *buf, void *data) { switch (rsp->result) { case SD_RES_SUCCESS: @@ -267,8 +267,8 @@ struct get_data_oid_info { unsigned idx; }; -static int get_data_oid(char *sheep, uint64_t oid, struct sd_rsp *rsp, - char *buf, void *data) +static int get_data_oid(const char *sheep, uint64_t oid, struct sd_rsp *rsp, + char *buf, void *data) { struct get_data_oid_info *info = data; struct sd_inode *inode = (struct sd_inode *)buf; @@ -300,7 +300,6 @@ static int get_data_oid(char *sheep, uint64_t oid, struct sd_rsp *rsp, static void parse_objs(uint64_t oid, obj_parser_func_t func, void *data, unsigned size) { - char name[128]; int i, ret, cb_ret; char *buf; @@ -324,9 +323,9 @@ static void parse_objs(uint64_t oid, obj_parser_func_t func, void *data, unsigne untrim_zero_blocks(buf, rsp->obj.offset, rsp->data_length, size); - addr_to_str(name, sizeof(name), sd_nodes[i].nid.addr, - sd_nodes[i].nid.port); - cb_ret = func(name, oid, rsp, buf, data); + cb_ret = func(addr_to_str(sd_nodes[i].nid.addr, + sd_nodes[i].nid.port), + oid, rsp, buf, data); if (cb_ret) break; } @@ -888,7 +887,6 @@ static int do_track_object(uint64_t oid, uint8_t nr_copies) const struct sd_vnode *vnode_buf[SD_MAX_COPIES]; struct epoch_log *logs; int vnodes_nr, nr_logs, log_length; - char host[128]; log_length = sd_epoch * sizeof(struct epoch_log); logs = xmalloc(log_length); @@ -918,10 +916,9 @@ static int do_track_object(uint64_t oid, uint8_t nr_copies) */ if (logs[i].nr_nodes < nr_copies) { for (j = 0; j < logs[i].nr_nodes; j++) { - addr_to_str(host, sizeof(host), - logs[i].nodes[j].nid.addr, - logs[i].nodes[j].nid.port); - printf("%s\n", host); + const struct node_id *n = &logs[i].nodes[j].nid; + + printf("%s\n", addr_to_str(n->addr, n->port)); } continue; } @@ -929,9 +926,9 @@ static int do_track_object(uint64_t oid, uint8_t nr_copies) logs[i].nr_nodes, vnodes); oid_to_vnodes(vnodes, vnodes_nr, oid, nr_copies, vnode_buf); for (j = 0; j < nr_copies; j++) { - addr_to_str(host, sizeof(host), vnode_buf[j]->nid.addr, - vnode_buf[j]->nid.port); - printf("%s\n", host); + const struct node_id *n = &vnode_buf[j]->nid; + + printf("%s\n", addr_to_str(n->addr, n->port)); } } @@ -1448,7 +1445,6 @@ static void vdi_hash_check_work(struct work *work) struct vdi_check_work *vcw = container_of(work, struct vdi_check_work, work); struct vdi_check_info *info = vcw->info; - char host[HOST_NAME_MAX]; int ret; struct sd_req hdr; struct sd_rsp *rsp = (struct sd_rsp *)&hdr; @@ -1473,8 +1469,8 @@ static void vdi_hash_check_work(struct work *work) break; default: sd_err("failed to read %" PRIx64 " from %s, %s", info->oid, - addr_to_str(host, sizeof(host), vcw->vnode->nid.addr, - vcw->vnode->nid.port), sd_strerror(ret)); + addr_to_str(vcw->vnode->nid.addr, vcw->vnode->nid.port), + sd_strerror(ret)); exit(EXIT_FAILURE); } } diff --git a/include/net.h b/include/net.h index 238c636..2782e44 100644 --- a/include/net.h +++ b/include/net.h @@ -62,7 +62,7 @@ int create_listen_ports(const char *bindaddr, int port, int create_unix_domain_socket(const char *unix_path, int (*callback)(int, void *), void *data); -char *addr_to_str(char *str, int size, const uint8_t *addr, uint16_t port); +const char *addr_to_str(const uint8_t *addr, uint16_t port); uint8_t *str_to_addr(const char *ipstr, uint8_t *addr); char *sockaddr_in_to_str(struct sockaddr_in *sockaddr); int set_nonblocking(int fd); @@ -80,10 +80,7 @@ int do_writev2(int fd, void *hdr, size_t hdr_len, void *body, size_t body_len); static inline int connect_to_addr(const uint8_t *addr, int port) { - char name[INET6_ADDRSTRLEN]; - - addr_to_str(name, sizeof(name), addr, 0); - return connect_to(name, port); + return connect_to(addr_to_str(addr, 0), port); } #endif diff --git a/include/sheep.h b/include/sheep.h index 295cb24..219add9 100644 --- a/include/sheep.h +++ b/include/sheep.h @@ -318,7 +318,6 @@ static inline int nodes_to_vnodes(struct sd_node *nodes, int nr, static inline char *node_to_str(const struct sd_node *id) { static char str[MAX_NODE_STR_LEN]; - char name[MAX_NODE_STR_LEN]; int af = AF_INET6; const uint8_t *addr = id->nid.addr; @@ -333,7 +332,7 @@ static inline char *node_to_str(const struct sd_node *id) snprintf(str, sizeof(str), "%s ip:%s port:%d", (af == AF_INET) ? "IPv4" : "IPv6", - addr_to_str(name, sizeof(name), id->nid.addr, 0), id->nid.port); + addr_to_str(id->nid.addr, 0), id->nid.port); return str; } diff --git a/lib/net.c b/lib/net.c index 720624f..82b6e3a 100644 --- a/lib/net.c +++ b/lib/net.c @@ -421,8 +421,9 @@ int exec_req(int sockfd, struct sd_req *hdr, void *data, return 0; } -char *addr_to_str(char *str, int size, const uint8_t *addr, uint16_t port) +const char *addr_to_str(const uint8_t *addr, uint16_t port) { + static __thread char str[HOST_NAME_MAX + 8]; int af = AF_INET6; int addr_start_idx = 0; const char *ret; @@ -437,13 +438,13 @@ char *addr_to_str(char *str, int size, const uint8_t *addr, uint16_t port) addr_start_idx = 12; } } - ret = inet_ntop(af, addr + addr_start_idx, str, size); + ret = inet_ntop(af, addr + addr_start_idx, str, sizeof(str)); if (unlikely(ret == NULL)) panic("failed to convert addr to string, %m"); if (port) { int len = strlen(str); - snprintf(str + len, size - len, ":%d", port); + snprintf(str + len, sizeof(str) - len, ":%d", port); } return str; diff --git a/lib/sockfd_cache.c b/lib/sockfd_cache.c index e5fc11c..c9404ea 100644 --- a/lib/sockfd_cache.c +++ b/lib/sockfd_cache.c @@ -147,10 +147,7 @@ static struct sockfd_cache_entry *sockfd_cache_grab(const struct node_id *nid, sd_read_lock(&sockfd_cache.lock); entry = sockfd_cache_search(nid); if (!entry) { - char name[INET6_ADDRSTRLEN]; - - addr_to_str(name, sizeof(name), nid->addr, 0); - sd_debug("failed node %s:%d", name, nid->port); + sd_debug("failed node %s", addr_to_str(nid->addr, nid->port)); goto out; } @@ -255,7 +252,6 @@ void sockfd_cache_add_group(const struct sd_node *nodes, int nr) void sockfd_cache_add(const struct node_id *nid) { struct sockfd_cache_entry *new; - char name[INET6_ADDRSTRLEN]; int n, i; sd_write_lock(&sockfd_cache.lock); @@ -272,8 +268,7 @@ void sockfd_cache_add(const struct node_id *nid) } sd_unlock(&sockfd_cache.lock); n = uatomic_add_return(&sockfd_cache.count, 1); - addr_to_str(name, sizeof(name), nid->addr, 0); - sd_debug("%s:%d, count %d", name, nid->port, n); + sd_debug("%s, count %d", addr_to_str(nid->addr, nid->port), n); } static uatomic_bool fds_in_grow; @@ -355,10 +350,7 @@ static struct sockfd *sockfd_cache_get_long(const struct node_id *nid) struct sockfd *sfd; bool use_io = nid->io_port ? true : false; const uint8_t *addr = use_io ? nid->io_addr : nid->addr; - char name[INET6_ADDRSTRLEN]; int fd, idx = -1, port = use_io ? nid->io_port : nid->port; - - addr_to_str(name, sizeof(name), addr, 0); grab: entry = sockfd_cache_grab(nid, &idx); if (!entry) { @@ -377,13 +369,14 @@ grab: check_idx(idx); if (entry->fds[idx].fd != -1) { - sd_debug("%s:%d, idx %d", name, port, idx); + sd_debug("%s, idx %d", addr_to_str(addr, port), idx); goto out; } /* Create a new cached connection for this node */ - sd_debug("create cache connection %s:%d idx %d", name, port, idx); - fd = connect_to(name, port); + sd_debug("create cache connection %s idx %d", addr_to_str(addr, port), + idx); + fd = connect_to_addr(addr, port); if (fd < 0) { if (use_io) { sd_err("fallback to non-io connection"); @@ -409,10 +402,8 @@ static void sockfd_cache_put_long(const struct node_id *nid, int idx) const uint8_t *addr = use_io ? nid->io_addr : nid->addr; int port = use_io ? nid->io_port : nid->port; struct sockfd_cache_entry *entry; - char name[INET6_ADDRSTRLEN]; - addr_to_str(name, sizeof(name), addr, 0); - sd_debug("%s:%d idx %d", name, port, idx); + sd_debug("%s idx %d", addr_to_str(addr, port), idx); sd_read_lock(&sockfd_cache.lock); entry = sockfd_cache_search(nid); @@ -427,10 +418,8 @@ static void sockfd_cache_close(const struct node_id *nid, int idx) const uint8_t *addr = use_io ? nid->io_addr : nid->addr; int port = use_io ? nid->io_port : nid->port; struct sockfd_cache_entry *entry; - char name[INET6_ADDRSTRLEN]; - addr_to_str(name, sizeof(name), addr, 0); - sd_debug("%s:%d idx %d", name, port, idx); + sd_debug("%s idx %d", addr_to_str(addr, port), idx); sd_write_lock(&sockfd_cache.lock); entry = sockfd_cache_search(nid); @@ -511,15 +500,13 @@ void sockfd_cache_put(const struct node_id *nid, struct sockfd *sfd) /* Delete all sockfd connected to the node, when node is crashed. */ void sockfd_cache_del_node(const struct node_id *nid) { - char name[INET6_ADDRSTRLEN]; int n; if (!sockfd_cache_destroy(nid)) return; n = uatomic_sub_return(&sockfd_cache.count, 1); - addr_to_str(name, sizeof(name), nid->addr, 0); - sd_debug("%s:%d, count %d", name, nid->port, n); + sd_debug("%s, count %d", addr_to_str(nid->addr, nid->port), n); } /* diff --git a/sheep/group.c b/sheep/group.c index 6dcafec..acd6f41 100644 --- a/sheep/group.c +++ b/sheep/group.c @@ -736,7 +736,6 @@ main_fn bool sd_join_handler(const struct sd_node *joining, { struct cluster_info *cinfo = opaque; enum sd_status status; - char str[MAX_NODE_STR_LEN]; /* * If nr_nodes is 0, the joining node is the first member of the cluster @@ -760,8 +759,8 @@ main_fn bool sd_join_handler(const struct sd_node *joining, cinfo->proto_ver = SD_SHEEP_PROTO_VER; sd_debug("%s: cluster_status = 0x%x", - addr_to_str(str, sizeof(str), joining->nid.addr, - joining->nid.port), cinfo->status); + addr_to_str(joining->nid.addr, joining->nid.port), + cinfo->status); return true; } diff --git a/sheep/recovery.c b/sheep/recovery.c index 3487dbe..91c1a10 100644 --- a/sheep/recovery.c +++ b/sheep/recovery.c @@ -663,15 +663,13 @@ static void finish_object_list(struct work *work) static uint64_t *fetch_object_list(struct sd_node *e, uint32_t epoch, size_t *nr_oids) { - char name[128]; struct sd_req hdr; struct sd_rsp *rsp = (struct sd_rsp *)&hdr; size_t buf_size = list_buffer_size; uint64_t *buf = xmalloc(buf_size); int ret; - addr_to_str(name, sizeof(name), e->nid.addr, 0); - sd_debug("%s %"PRIu32, name, e->nid.port); + sd_debug("%s", addr_to_str(e->nid.addr, e->nid.port)); retry: sd_init_req(&hdr, SD_OP_GET_OBJ_LIST); @@ -687,8 +685,8 @@ retry: buf = xrealloc(buf, buf_size); goto retry; default: - sd_alert("cannot get object list from %s:%d", name, - e->nid.port); + sd_alert("cannot get object list from %s", + addr_to_str(e->nid.addr, e->nid.port)); sd_alert("some objects may be not recovered at epoch %d", epoch); free(buf); -- 1.7.9.5 |