[sheepdog] [PATCH 6/8] sheep: embed struct node_id into struct {sd_node, sd_vnode}
Liu Yuan
namei.unix at gmail.com
Wed Jun 27 09:25:37 CEST 2012
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
More information about the sheepdog
mailing list