[sheepdog] [PATCH 3/4] sockfd cache: cleanup parameter
Liu Yuan
namei.unix at gmail.com
Sun Jan 13 16:17:00 CET 2013
From: Liu Yuan <tailai.ly at taobao.com>
This is a prepare patch for redundant nic support.
Signed-off-by: Liu Yuan <tailai.ly at taobao.com>
---
sheep/sockfd_cache.c | 32 ++++++++++++++++++--------------
1 file changed, 18 insertions(+), 14 deletions(-)
diff --git a/sheep/sockfd_cache.c b/sheep/sockfd_cache.c
index e0956fb..3ae084b 100644
--- a/sheep/sockfd_cache.c
+++ b/sheep/sockfd_cache.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2012 Taobao Inc.
+ * Copyright (C) 2012-2013 Taobao Inc.
*
* Liu Yuan <namei.unix at gmail.com>
*
@@ -51,14 +51,14 @@ static struct sockfd_cache sockfd_cache = {
/*
* Suppose request size from Guest is 512k, then 4M / 512k = 8, so at
* most 8 requests can be issued to the same sheep object. Based on this
- * assumption, '16' would be effecient for servers that only host 2~4
+ * assumption, '8' would be effecient for servers that only host 2~4
* Guests.
*
* This fd count will be dynamically grown when the idx reaches watermark which
* is calculated as FDS_COUNT * 0.75
*/
-#define DEFAULT_FDS_COUNT 16
-#define DEFAULT_FDS_WATERMARK 12
+#define DEFAULT_FDS_COUNT 8
+#define DEFAULT_FDS_WATERMARK 6
/* How many FDs we cache for one node */
static int fds_count = DEFAULT_FDS_COUNT;
@@ -142,13 +142,16 @@ static inline int get_free_slot(struct sockfd_cache_entry *entry)
* If no free slot available, this typically means we should use short FD.
*/
static struct sockfd_cache_entry *sockfd_cache_grab(const struct node_id *nid,
- char *name, int *ret_idx)
+ int *ret_idx)
{
struct sockfd_cache_entry *entry;
pthread_rwlock_rdlock(&sockfd_cache.lock);
entry = sockfd_cache_search(nid);
if (!entry) {
+ char name[INET6_ADDRSTRLEN];
+
+ addr_to_str(name, sizeof(name), nid->addr, 0);
dprintf("failed node %s:%d\n", name, nid->port);
goto out;
}
@@ -334,10 +337,12 @@ static inline void check_idx(int idx)
}
/* Add the node back if it is still alive */
-static inline int revalidate_node(const struct node_id *nid, char *name)
+static inline int revalidate_node(const struct node_id *nid)
{
+ char name[INET6_ADDRSTRLEN];
int fd;
+ addr_to_str(name, sizeof(name), nid->addr, 0);
fd = connect_to(name, nid->port);
if (fd < 0)
return -1;
@@ -347,14 +352,16 @@ static inline int revalidate_node(const struct node_id *nid, char *name)
return 0;
}
-static struct sockfd *sockfd_cache_get(const struct node_id *nid, char *name)
+static struct sockfd *sockfd_cache_get(const struct node_id *nid)
{
struct sockfd_cache_entry *entry;
struct sockfd *sfd;
+ char name[INET6_ADDRSTRLEN];
int fd, idx;
+ addr_to_str(name, sizeof(name), nid->addr, 0);
grab:
- entry = sockfd_cache_grab(nid, name, &idx);
+ entry = sockfd_cache_grab(nid, &idx);
if (!entry) {
/*
* The node is deleted, but someone askes us to grab it.
@@ -363,13 +370,11 @@ grab:
* busy to serve any request that makes other nodes deleted it
* from the sockfd cache. In such cases, we need to add it back.
*/
- if (revalidate_node(nid, name) < 0)
+ if (revalidate_node(nid) < 0)
return NULL;
goto grab;
}
-
check_idx(idx);
-
if (entry->fds[idx].fd != -1) {
dprintf("%s:%d, idx %d\n", name, nid->port, idx);
goto out;
@@ -383,7 +388,6 @@ grab:
return NULL;
}
entry->fds[idx].fd = fd;
-
out:
sfd = xmalloc(sizeof(*sfd));
sfd->fd = entry->fds[idx].fd;
@@ -422,12 +426,12 @@ struct sockfd *sheep_get_sockfd(const struct node_id *nid)
struct sockfd *sfd;
int fd;
- addr_to_str(name, sizeof(name), nid->addr, 0);
- sfd = sockfd_cache_get(nid, name);
+ sfd = sockfd_cache_get(nid);
if (sfd)
return sfd;
/* Create a fd that is to be closed */
+ addr_to_str(name, sizeof(name), nid->addr, 0);
fd = connect_to(name, nid->port);
if (fd < 0) {
dprintf("failed connect to %s:%d\n", name, nid->port);
--
1.7.9.5
More information about the sheepdog
mailing list