From: Liu Yuan <tailai.ly at taobao.com> Signed-off-by: Liu Yuan <tailai.ly at taobao.com> --- collie/cluster.c | 2 +- collie/node.c | 14 +++++++------- collie/vdi.c | 26 +++++++++++++------------- include/sheep.h | 37 ++++++++++++++++++++----------------- sheep/cluster.h | 8 ++++---- sheep/gateway.c | 16 ++++++++-------- sheep/group.c | 24 ++++++++++++------------ sheep/ops.c | 6 +++--- sheep/recovery.c | 16 ++++++++-------- sheep/sheep.c | 2 +- sheep/sheep_priv.h | 18 ++++++++---------- sheep/sockfd_cache.c | 28 ++++++++-------------------- sheep/store.c | 10 +++++----- 13 files changed, 98 insertions(+), 109 deletions(-) diff --git a/collie/cluster.c b/collie/cluster.c index 23fa2b0..e3fc38a 100644 --- a/collie/cluster.c +++ b/collie/cluster.c @@ -197,7 +197,7 @@ again: printf("%s%s", (j == 0) ? "" : ", ", addr_to_str(name, sizeof(name), - entry->addr, entry->port)); + entry->nid.addr, entry->nid.port)); } printf("]\n"); } diff --git a/collie/node.c b/collie/node.c index 2449b16..ce1c981 100644 --- a/collie/node.c +++ b/collie/node.c @@ -30,8 +30,8 @@ static int node_list(int argc, char **argv) for (i = 0; i < sd_nodes_nr; i++) { char data[128]; - addr_to_str(data, sizeof(data), sd_nodes[i].addr, - sd_nodes[i].port); + addr_to_str(data, sizeof(data), sd_nodes[i].nid.addr, + sd_nodes[i].nid.port); if (i == master_idx) { if (highlight) @@ -67,9 +67,9 @@ static int node_info(int argc, char **argv) struct sd_node_rsp *rsp = (struct sd_node_rsp *)&req; char store_str[UINT64_DECIMAL_SIZE], free_str[UINT64_DECIMAL_SIZE]; - addr_to_str(name, sizeof(name), sd_nodes[i].addr, 0); + addr_to_str(name, sizeof(name), sd_nodes[i].nid.addr, 0); - fd = connect_to(name, sd_nodes[i].port); + fd = connect_to(name, sd_nodes[i].nid.port); if (fd < 0) return 1; @@ -134,9 +134,9 @@ static int node_recovery(int argc, char **argv) struct sd_node_req req; struct sd_node_rsp *rsp = (struct sd_node_rsp *)&req; - addr_to_str(host, sizeof(host), sd_nodes[i].addr, 0); + addr_to_str(host, sizeof(host), sd_nodes[i].nid.addr, 0); - fd = connect_to(host, sd_nodes[i].port); + fd = connect_to(host, sd_nodes[i].nid.port); if (fd < 0) return EXIT_FAILURE; @@ -151,7 +151,7 @@ static int node_recovery(int argc, char **argv) if (!ret && rsp->result == SD_RES_SUCCESS) { addr_to_str(host, sizeof(host), - sd_nodes[i].addr, sd_nodes[i].port); + sd_nodes[i].nid.addr, sd_nodes[i].nid.port); printf(raw_output ? "%d %s %d %d\n" : "%4d %-20s%5d%11d\n", i, host, sd_nodes[i].nr_vnodes, sd_nodes[i].zone); diff --git a/collie/vdi.c b/collie/vdi.c index 34c8c03..d76307e 100644 --- a/collie/vdi.c +++ b/collie/vdi.c @@ -274,9 +274,9 @@ static void parse_objs(uint64_t oid, obj_parser_func_t func, void *data, unsigne struct sd_req hdr; struct sd_rsp *rsp = (struct sd_rsp *)&hdr; - addr_to_str(name, sizeof(name), sd_nodes[i].addr, 0); + addr_to_str(name, sizeof(name), sd_nodes[i].nid.addr, 0); - fd = connect_to(name, sd_nodes[i].port); + fd = connect_to(name, sd_nodes[i].nid.port); if (fd < 0) break; @@ -292,7 +292,7 @@ static void parse_objs(uint64_t oid, obj_parser_func_t func, void *data, unsigne ret = exec_req(fd, &hdr, buf, &wlen, &rlen); close(fd); - sprintf(name + strlen(name), ":%d", sd_nodes[i].port); + sprintf(name + strlen(name), ":%d", sd_nodes[i].nid.port); if (ret) fprintf(stderr, "Failed to connect to %s\n", name); @@ -849,14 +849,14 @@ again: for (i = nr_logs - 1; i >= 0; i--) { vnodes_nr = nodes_to_vnodes(logs[i].nodes, logs[i].nr_nodes, vnodes); printf("\nobj %"PRIx64" locations at epoch %d, copies = %d\n", - oid, logs[i].epoch, logs[i].nr_copies); + oid, logs[i].epoch, logs[i].nr_copies); printf("---------------------------------------------------\n"); obj_to_sheeps(vnodes, vnodes_nr, oid, - logs[i].nr_copies, idx_buf); + logs[i].nr_copies, idx_buf); for (j = 0; j < logs[i].nr_copies; j++) { idx = idx_buf[j]; - addr_to_str(host, sizeof(host), vnodes[idx].addr, - vnodes[idx].port); + addr_to_str(host, sizeof(host), vnodes[idx].nid.addr, + vnodes[idx].nid.port); printf("%s\n", host); } } @@ -1331,11 +1331,11 @@ static void *read_object_from(struct sd_vnode *vnode, uint64_t oid) exit(EXIT_SYSFAIL); } - addr_to_str(name, sizeof(name), vnode->addr, 0); - fd = connect_to(name, vnode->port); + addr_to_str(name, sizeof(name), vnode->nid.addr, 0); + fd = connect_to(name, vnode->nid.port); if (fd < 0) { fprintf(stderr, "failed to connect to %s:%"PRIu32"\n", - name, vnode->port); + name, vnode->nid.port); exit(EXIT_FAILURE); } @@ -1370,11 +1370,11 @@ static void write_object_to(struct sd_vnode *vnode, uint64_t oid, void *buf) unsigned wlen = SD_DATA_OBJ_SIZE, rlen = 0; char name[128]; - addr_to_str(name, sizeof(name), vnode->addr, 0); - fd = connect_to(name, vnode->port); + addr_to_str(name, sizeof(name), vnode->nid.addr, 0); + fd = connect_to(name, vnode->nid.port); if (fd < 0) { fprintf(stderr, "failed to connect to %s:%"PRIu32"\n", - name, vnode->port); + name, vnode->nid.port); exit(EXIT_FAILURE); } diff --git a/include/sheep.h b/include/sheep.h index a188d18..d4037bd 100644 --- a/include/sheep.h +++ b/include/sheep.h @@ -150,16 +150,19 @@ struct sd_node_rsp { uint64_t store_free; }; +struct node_id { + uint8_t addr[16]; + uint16_t port; +}; + struct sd_node { - uint8_t addr[16]; - uint16_t port; + struct node_id nid; uint16_t nr_vnodes; uint32_t zone; }; struct sd_vnode { - uint8_t addr[16]; - uint16_t port; + struct node_id nid; uint16_t node_idx; uint32_t zone; uint64_t id; @@ -190,8 +193,8 @@ struct trace_graph_item { static inline int same_node(struct sd_vnode *e, int n1, int n2) { - if (memcmp(e[n1].addr, e[n2].addr, sizeof(e->addr)) == 0 && - e[n1].port == e[n2].port) + if (memcmp(e[n1].nid.addr, e[n2].nid.addr, sizeof(e->nid.addr)) == 0 && + e[n1].nid.port == e[n2].nid.port) return 1; return 0; @@ -330,13 +333,13 @@ static inline int vnode_node_cmp(const void *a, const void *b) const struct sd_node *node2 = b; int cmp; - cmp = memcmp(node1->addr, node2->addr, sizeof(node1->addr)); + cmp = memcmp(node1->nid.addr, node2->nid.addr, sizeof(node1->nid.addr)); if (cmp != 0) return cmp; - if (node1->port < node2->port) + if (node1->nid.port < node2->nid.port) return -1; - if (node1->port > node2->port) + if (node1->nid.port > node2->nid.port) return 1; return 0; } @@ -347,13 +350,13 @@ static inline int node_cmp(const void *a, const void *b) const struct sd_node *node2 = b; int cmp; - cmp = memcmp(node1->addr, node2->addr, sizeof(node1->addr)); + cmp = memcmp(node1->nid.addr, node2->nid.addr, sizeof(node1->nid.addr)); if (cmp != 0) return cmp; - if (node1->port < node2->port) + if (node1->nid.port < node2->nid.port) return -1; - if (node1->port > node2->port) + if (node1->nid.port > node2->nid.port) return 1; return 0; } @@ -387,13 +390,13 @@ static inline int nodes_to_vnodes(struct sd_node *nodes, int nr, for (i = 0; i < n->nr_vnodes; i++) { if (vnodes) { - hval = fnv_64a_buf(&n->port, sizeof(n->port), hval); - for (j = ARRAY_SIZE(n->addr) - 1; j >= 0; j--) - hval = fnv_64a_buf(&n->addr[j], 1, hval); + hval = fnv_64a_buf(&n->nid.port, sizeof(n->nid.port), hval); + for (j = ARRAY_SIZE(n->nid.addr) - 1; j >= 0; j--) + hval = fnv_64a_buf(&n->nid.addr[j], 1, hval); vnodes[nr_vnodes].id = hval; - memcpy(vnodes[nr_vnodes].addr, n->addr, sizeof(n->addr)); - vnodes[nr_vnodes].port = n->port; + memcpy(vnodes[nr_vnodes].nid.addr, n->nid.addr, sizeof(n->nid.addr)); + vnodes[nr_vnodes].nid.port = n->nid.port; vnodes[nr_vnodes].node_idx = n - nodes; vnodes[nr_vnodes].zone = n->zone; } diff --git a/sheep/cluster.h b/sheep/cluster.h index 58b7eeb..153e33f 100644 --- a/sheep/cluster.h +++ b/sheep/cluster.h @@ -153,7 +153,7 @@ static inline char *node_to_str(struct sd_node *id) static char str[256]; char name[256]; int af = AF_INET6; - uint8_t *addr = id->addr; + uint8_t *addr = id->nid.addr; /* Find address family type */ if (addr[12]) { @@ -166,7 +166,7 @@ static inline char *node_to_str(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->addr, 0), id->port); + addr_to_str(name, sizeof(name), id->nid.addr, 0), id->nid.port); return str; } @@ -177,12 +177,12 @@ static inline struct sd_node *str_to_node(const char *str, struct sd_node *id) char v[8], ip[256]; sscanf(str, "%s ip:%s port:%d", v, ip, &port); - id->port = port; + id->nid.port = port; if (strcmp(v, "IPv4") == 0) af = AF_INET; - if (!str_to_addr(af, ip, id->addr)) + if (!str_to_addr(af, ip, id->nid.addr)) return NULL; return id; diff --git a/sheep/gateway.c b/sheep/gateway.c index e338448..ccc0e5b 100644 --- a/sheep/gateway.c +++ b/sheep/gateway.c @@ -66,7 +66,7 @@ read_remote: if (vnode_is_local(v)) continue; - fd = sheep_get_fd(v, &sock_idx); + fd = sheep_get_fd(&v->nid, &sock_idx); if (fd < 0) { ret = SD_RES_NETWORK_ERROR; continue; @@ -80,18 +80,18 @@ read_remote: if (!ret && rsp->result == SD_RES_SUCCESS) { memcpy(&req->rp, rsp, sizeof(*rsp)); ret = rsp->result; - sheep_put_fd(v, fd, sock_idx); + sheep_put_fd(&v->nid, fd, sock_idx); break; /* Read success */ } if (ret) { dprintf("remote node might have gone away"); - sheep_del_fd(v, fd, sock_idx); + sheep_del_fd(&v->nid, fd, sock_idx); ret = SD_RES_NETWORK_ERROR; } else { ret = rsp->result; eprintf("remote read fail %x\n", ret); - sheep_put_fd(v, fd, sock_idx); + sheep_put_fd(&v->nid, fd, sock_idx); } /* Reset the hdr for next read */ memcpy(&fwd_hdr, &req->rq, sizeof(fwd_hdr)); @@ -121,14 +121,14 @@ static inline void update_write_info(struct write_info *wi, int pos) static inline void finish_one_write(struct write_info *wi, int i) { - sheep_put_fd(wi->vnodes[i], wi->pfds[i].fd, + sheep_put_fd(&wi->vnodes[i]->nid, wi->pfds[i].fd, wi->sock_idx[i]); update_write_info(wi, i); } static inline void finish_one_write_err(struct write_info *wi, int i) { - sheep_del_fd(wi->vnodes[i], wi->pfds[i].fd, + sheep_del_fd(&wi->vnodes[i]->nid, wi->pfds[i].fd, wi->sock_idx[i]); update_write_info(wi, i); } @@ -228,7 +228,7 @@ int forward_write_obj_req(struct request *req) continue; } - fd = sheep_get_fd(v, &wi.sock_idx[wi.nr_sent]); + fd = sheep_get_fd(&v->nid, &wi.sock_idx[wi.nr_sent]); if (fd < 0) { err_ret = SD_RES_NETWORK_ERROR; break; @@ -236,7 +236,7 @@ int forward_write_obj_req(struct request *req) ret = send_req(fd, &fwd_hdr, req->data, &wlen); if (ret) { - sheep_del_fd(v, fd, wi.sock_idx[wi.nr_sent]); + sheep_del_fd(&v->nid, fd, wi.sock_idx[wi.nr_sent]); err_ret = SD_RES_NETWORK_ERROR; dprintf("fail %d\n", ret); break; diff --git a/sheep/group.c b/sheep/group.c index 681672c..035bcca 100644 --- a/sheep/group.c +++ b/sheep/group.c @@ -686,19 +686,19 @@ static int get_vdi_bitmap_from(struct sd_node *node) unsigned int rlen, wlen; char host[128]; - if (is_myself(node->addr, node->port)) + if (is_myself(node->nid.addr, node->nid.port)) goto out; - addr_to_str(host, sizeof(host), node->addr, 0); + addr_to_str(host, sizeof(host), node->nid.addr, 0); - fd = connect_to(host, node->port); + fd = connect_to(host, node->nid.port); if (fd < 0) { vprintf(SDOG_ERR, "unable to get the VDI bitmap from %s: %m\n", host); ret = -SD_RES_EIO; goto out; } - vprintf(SDOG_ERR, "%s:%d\n", host, node->port); + vprintf(SDOG_ERR, "%s:%d\n", host, node->nid.port); memset(&hdr, 0, sizeof(hdr)); hdr.opcode = SD_OP_READ_VDIS; @@ -871,7 +871,7 @@ static void update_cluster_info(struct join_message *msg, sys_stat_set(SD_STATUS_OK); } - sockfd_cache_add(joined); + sockfd_cache_add(&joined->nid); } /* @@ -889,7 +889,7 @@ void sd_notify_handler(struct sd_node *sender, void *data, size_t data_len) dprintf("size: %zd, from: %s\n", data_len, node_to_str(sender)); - if (is_myself(sender->addr, sender->port)) { + if (is_myself(sender->nid.addr, sender->nid.port)) { req = list_first_entry(&sys->pending_list, struct request, pending_list); list_del(&req->pending_list); @@ -952,7 +952,7 @@ enum cluster_join_result sd_check_join_cb(struct sd_node *joining, void *opaque) jm->ctime, jm->epoch, &jm->cluster_status, &jm->inc_epoch); eprintf("%s: ret = 0x%x, cluster_status = 0x%x\n", - addr_to_str(str, sizeof(str), joining->addr, joining->port), + addr_to_str(str, sizeof(str), joining->nid.addr, joining->nid.port), ret, jm->cluster_status); jm->nr_copies = sys->nr_copies; @@ -1116,7 +1116,7 @@ void sd_leave_handler(struct sd_node *left, struct sd_node *members, sys_stat_set(SD_STATUS_HALT); } - sockfd_cache_del((struct node_id *)left); + sockfd_cache_del(&left->nid); } int create_cluster(int port, int64_t zone, int nr_vnodes, @@ -1141,18 +1141,18 @@ int create_cluster(int port, int64_t zone, int nr_vnodes, if (!explicit_addr) { if (sys->cdrv->get_local_addr) - ret = sys->cdrv->get_local_addr(sys->this_node.addr); + ret = sys->cdrv->get_local_addr(sys->this_node.nid.addr); else - ret = get_local_addr(sys->this_node.addr); + ret = get_local_addr(sys->this_node.nid.addr); if (ret < 0) return -1; } - sys->this_node.port = port; + sys->this_node.nid.port = port; sys->this_node.nr_vnodes = nr_vnodes; if (zone == -1) { /* use last 4 bytes as zone id */ - uint8_t *b = sys->this_node.addr + 12; + uint8_t *b = sys->this_node.nid.addr + 12; sys->this_node.zone = b[0] | b[1] << 8 | b[2] << 16 | b[3] << 24; } else sys->this_node.zone = zone; diff --git a/sheep/ops.c b/sheep/ops.c index 6bdcc83..55978f4 100644 --- a/sheep/ops.c +++ b/sheep/ops.c @@ -572,7 +572,7 @@ static int read_copy_from_replica(struct vnode_info *vnodes, uint32_t epoch, struct siocb iocb; v = obj_vnodes[i]; - addr_to_str(name, sizeof(name), v->addr, 0); + addr_to_str(name, sizeof(name), v->nid.addr, 0); if (vnode_is_local(v)) { memset(&iocb, 0, sizeof(iocb)); @@ -603,9 +603,9 @@ static int read_copy_from_replica(struct vnode_info *vnodes, uint32_t epoch, continue; v = obj_vnodes[j]; - addr_to_str(name, sizeof(name), v->addr, 0); + addr_to_str(name, sizeof(name), v->nid.addr, 0); - fd = connect_to(name, v->port); + fd = connect_to(name, v->nid.port); if (fd < 0) continue; diff --git a/sheep/recovery.c b/sheep/recovery.c index a434ee9..0fafea8 100644 --- a/sheep/recovery.c +++ b/sheep/recovery.c @@ -93,11 +93,11 @@ static int recover_object_from_replica(uint64_t oid, } } - addr_to_str(name, sizeof(name), entry->addr, 0); - fd = connect_to(name, entry->port); - dprintf("%s, %d\n", name, entry->port); + addr_to_str(name, sizeof(name), entry->nid.addr, 0); + fd = connect_to(name, entry->nid.port); + dprintf("%s, %d\n", name, entry->nid.port); if (fd < 0) { - eprintf("failed to connect to %s:%"PRIu32"\n", name, entry->port); + eprintf("failed to connect to %s:%"PRIu32"\n", name, entry->nid.port); ret = -1; goto out; } @@ -467,13 +467,13 @@ static int fetch_object_list(struct sd_node *e, uint32_t epoch, struct sd_list_req hdr; struct sd_list_rsp *rsp; - addr_to_str(name, sizeof(name), e->addr, 0); + addr_to_str(name, sizeof(name), e->nid.addr, 0); - dprintf("%s %"PRIu32"\n", name, e->port); + dprintf("%s %"PRIu32"\n", name, e->nid.port); - fd = connect_to(name, e->port); + fd = connect_to(name, e->nid.port); if (fd < 0) { - eprintf("%s %"PRIu32"\n", name, e->port); + eprintf("%s %"PRIu32"\n", name, e->nid.port); return -1; } diff --git a/sheep/sheep.c b/sheep/sheep.c index 956ad07..317d2b0 100644 --- a/sheep/sheep.c +++ b/sheep/sheep.c @@ -148,7 +148,7 @@ int main(int argc, char **argv) break; case 'y': af = strstr(optarg, ":") ? AF_INET6 : AF_INET; - if (!str_to_addr(af, optarg, sys->this_node.addr)) { + if (!str_to_addr(af, optarg, sys->this_node.nid.addr)) { fprintf(stderr, "Invalid address: '%s'\n", optarg); diff --git a/sheep/sheep_priv.h b/sheep/sheep_priv.h index 9883f90..a5b0399 100644 --- a/sheep/sheep_priv.h +++ b/sheep/sheep_priv.h @@ -319,14 +319,14 @@ int jrnl_recover(const char *jrnl_dir); static inline int is_myself(uint8_t *addr, uint16_t port) { - return (memcmp(addr, sys->this_node.addr, - sizeof(sys->this_node.addr)) == 0) && - port == sys->this_node.port; + return (memcmp(addr, sys->this_node.nid.addr, + sizeof(sys->this_node.nid.addr)) == 0) && + port == sys->this_node.nid.port; } static inline int vnode_is_local(struct sd_vnode *v) { - return is_myself(v->addr, v->port); + return is_myself(v->nid.addr, v->nid.port); } /* Cluster status/flag helper */ @@ -399,14 +399,12 @@ void object_cache_delete(uint32_t vid); int object_cache_init(const char *p); /* sockfd_cache */ -struct node_id; - void sockfd_cache_del(struct node_id *); -void sockfd_cache_add(struct sd_node *); +void sockfd_cache_add(struct node_id *); void sockfd_cache_add_group(struct sd_node *nodes, int nr); -int sheep_get_fd(struct sd_vnode *vnode, int *); -void sheep_put_fd(struct sd_vnode *vnode, int fd, int); -void sheep_del_fd(struct sd_vnode *vnode, int fd, int); +int sheep_get_fd(struct node_id *, int *); +void sheep_put_fd(struct node_id *, int fd, int); +void sheep_del_fd(struct node_id *, int fd, int); #endif diff --git a/sheep/sockfd_cache.c b/sheep/sockfd_cache.c index 61b5595..372ec58 100644 --- a/sheep/sockfd_cache.c +++ b/sheep/sockfd_cache.c @@ -38,11 +38,6 @@ #include "logger.h" #include "util.h" -struct node_id { - uint8_t addr[16]; - uint16_t port; -}; - struct sockfd_cache { struct rb_root root; pthread_rwlock_t lock; @@ -261,20 +256,18 @@ static void sockfd_cache_add_nolock(struct node_id *nid) void sockfd_cache_add_group(struct sd_node *nodes, int nr) { struct sd_node *p; - struct node_id *nid; dprintf("%d\n", nr); pthread_rwlock_wrlock(&sockfd_cache.lock); while (nr--) { p = nodes + nr; - nid = (struct node_id *)p; - sockfd_cache_add_nolock(nid); + sockfd_cache_add_nolock(&p->nid); } pthread_rwlock_unlock(&sockfd_cache.lock); } /* Add one node to the cache means we can do caching tricks on this node */ -void sockfd_cache_add(struct sd_node *node) +void sockfd_cache_add(struct node_id *nid) { struct sockfd_cache_entry *new = xzalloc(sizeof(*new)); char name[INET6_ADDRSTRLEN]; @@ -283,7 +276,7 @@ void sockfd_cache_add(struct sd_node *node) for (i = 0; i < SOCKFD_CACHE_MAX_FD; i++) new->fd[i] = -1; - memcpy(&new->nid, node, sizeof(struct node_id)); + memcpy(&new->nid, nid, sizeof(struct node_id)); pthread_rwlock_rdlock(&sockfd_cache.lock); if (sockfd_cache_insert(new)) { free(new); @@ -292,8 +285,8 @@ void sockfd_cache_add(struct sd_node *node) } pthread_rwlock_unlock(&sockfd_cache.lock); n = uatomic_add_return(&sockfd_cache.count, 1); - addr_to_str(name, sizeof(name), node->addr, 0); - dprintf("%s:%d, count %d\n", name, node->port, n); + addr_to_str(name, sizeof(name), nid->addr, 0); + dprintf("%s:%d, count %d\n", name, nid->port, n); } static int sockfd_cache_get(struct node_id *nid, char *name, int *ret_idx) @@ -349,9 +342,8 @@ static void sockfd_cache_put(struct node_id *nid, int idx) * * ret_idx is opaque to the caller, -1 indicates it is a short FD. */ -int sheep_get_fd(struct sd_vnode *vnode, int *ret_idx) +int sheep_get_fd(struct node_id *nid, int *ret_idx) { - struct node_id *nid = (struct node_id *)vnode; char name[INET6_ADDRSTRLEN]; int fd; @@ -380,10 +372,8 @@ int sheep_get_fd(struct sd_vnode *vnode, int *ret_idx) * sheep_put_fd() or sheep_del_fd() should be paired with sheep_get_fd() */ -void sheep_put_fd(struct sd_vnode *vnode, int fd, int idx) +void sheep_put_fd(struct node_id *nid, int fd, int idx) { - struct node_id *nid = (struct node_id *)vnode; - if (idx == -1) { dprintf("%d\n", fd); close(fd); @@ -400,10 +390,8 @@ void sheep_put_fd(struct sd_vnode *vnode, int fd, int idx) * this vnode in the cache. * If it is a short FD, just close it. */ -void sheep_del_fd(struct sd_vnode *vnode, int fd, int idx) +void sheep_del_fd(struct node_id *nid, int fd, int idx) { - struct node_id *nid = (struct node_id *)vnode; - if (idx == -1) { dprintf("%d\n", fd); close(fd); diff --git a/sheep/store.c b/sheep/store.c index d5a080b..17067c4 100644 --- a/sheep/store.c +++ b/sheep/store.c @@ -131,11 +131,11 @@ int epoch_log_read_remote(uint32_t epoch, struct sd_node *nodes, int len) unsigned int rlen, wlen; int fd; - if (is_myself(local_nodes[i].addr, local_nodes[i].port)) + if (is_myself(local_nodes[i].nid.addr, local_nodes[i].nid.port)) continue; - addr_to_str(host, sizeof(host), local_nodes[i].addr, 0); - fd = connect_to(host, local_nodes[i].port); + addr_to_str(host, sizeof(host), local_nodes[i].nid.addr, 0); + fd = connect_to(host, local_nodes[i].nid.port); if (fd < 0) { vprintf(SDOG_ERR, "failed to connect to %s: %m\n", host); continue; @@ -610,9 +610,9 @@ int remove_object(struct vnode_info *vnodes, uint32_t epoch, int fd, ret; v = obj_vnodes[i]; - addr_to_str(name, sizeof(name), v->addr, 0); + addr_to_str(name, sizeof(name), v->nid.addr, 0); - fd = connect_to(name, v->port); + fd = connect_to(name, v->nid.port); if (fd < 0) { rsp->result = SD_RES_NETWORK_ERROR; return -1; -- 1.7.10.2 |