Skip to content

Commit

Permalink
use sockinfo field in server and server_pool struct, instead of stori…
Browse files Browse the repository at this point in the history
…ng individual (int:family, socklen_t:addrlen, sockaddr:addr)
  • Loading branch information
manjuraj committed Jun 18, 2015
1 parent ea7190b commit 5b04fee
Show file tree
Hide file tree
Showing 5 changed files with 24 additions and 31 deletions.
19 changes: 7 additions & 12 deletions src/nc_conf.c
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,7 @@ conf_server_init(struct conf_server *cs)
{
string_init(&cs->pname);
string_init(&cs->name);
string_init(&cs->addrstr);
cs->port = 0;
cs->weight = 0;

Expand All @@ -129,6 +130,7 @@ conf_server_deinit(struct conf_server *cs)
{
string_deinit(&cs->pname);
string_deinit(&cs->name);
string_deinit(&cs->addrstr);
cs->valid = 0;
log_debug(LOG_VVERB, "deinit conf server %p", cs);
}
Expand All @@ -150,12 +152,11 @@ conf_server_each_transform(void *elem, void *data)

s->pname = cs->pname;
s->name = cs->name;
s->addrstr = cs->addrstr;
s->port = (uint16_t)cs->port;
s->weight = (uint32_t)cs->weight;

s->family = cs->info.family;
s->addrlen = cs->info.addrlen;
s->addr = (struct sockaddr *)&cs->info.addr;
nc_memcpy(&s->info, &cs->info, sizeof(cs->info));

s->ns_conn_q = 0;
TAILQ_INIT(&s->s_conn_q);
Expand Down Expand Up @@ -272,9 +273,7 @@ conf_pool_each_transform(void *elem, void *data)
sp->addrstr = cp->listen.pname;
sp->port = (uint16_t)cp->listen.port;

sp->family = cp->listen.info.family;
sp->addrlen = cp->listen.info.addrlen;
sp->addr = (struct sockaddr *)&cp->listen.info.addr;
nc_memcpy(&sp->info, &cp->listen.info, sizeof(cp->listen.info));
sp->perm = cp->listen.perm;

sp->key_hash_type = cp->hash;
Expand Down Expand Up @@ -1518,10 +1517,8 @@ conf_add_server(struct conf *cf, struct command *cmd, void *conf)
uint8_t *p, *q, *start;
uint8_t *pname, *addr, *port, *weight, *name;
uint32_t k, delimlen, pnamelen, addrlen, portlen, weightlen, namelen;
struct string address;
char delim[] = " ::";

string_init(&address);
p = conf;
a = (struct array *)(p + cmd->offset);

Expand Down Expand Up @@ -1633,18 +1630,16 @@ conf_add_server(struct conf *cf, struct command *cmd, void *conf)
return CONF_ERROR;
}

status = string_copy(&address, addr, addrlen);
status = string_copy(&field->addrstr, addr, addrlen);
if (status != NC_OK) {
return CONF_ERROR;
}

status = nc_resolve(&address, field->port, &field->info);
status = nc_resolve(&field->addrstr, field->port, &field->info);
if (status != NC_OK) {
string_deinit(&address);
return CONF_ERROR;
}

string_deinit(&address);
field->valid = 1;

return CONF_OK;
Expand Down
9 changes: 5 additions & 4 deletions src/nc_conf.h
Original file line number Diff line number Diff line change
Expand Up @@ -56,17 +56,18 @@
#define CONF_DEFAULT_KETAMA_PORT 11211

struct conf_listen {
struct string pname; /* listen: as "name:port" */
struct string name; /* name */
struct string pname; /* listen: as "hostname:port" */
struct string name; /* hostname:port */
int port; /* port */
mode_t perm; /* socket permissions */
struct sockinfo info; /* listen socket info */
unsigned valid:1; /* valid? */
};

struct conf_server {
struct string pname; /* server: as "name:port:weight" */
struct string name; /* name */
struct string pname; /* server: as "hostname:port:weight" */
struct string name; /* hostname:port or [name] */
struct string addrstr; /* hostname */
int port; /* port */
int weight; /* weight */
struct sockinfo info; /* connect socket info */
Expand Down
6 changes: 3 additions & 3 deletions src/nc_proxy.c
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,9 @@ proxy_ref(struct conn *conn, void *owner)
ASSERT(!conn->client && conn->proxy);
ASSERT(conn->owner == NULL);

conn->family = pool->family;
conn->addrlen = pool->addrlen;
conn->addr = pool->addr;
conn->family = pool->info.family;
conn->addrlen = pool->info.addrlen;
conn->addr = (struct sockaddr *)&pool->info.addr;

pool->p_conn = conn;

Expand Down
6 changes: 3 additions & 3 deletions src/nc_server.c
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,9 @@ server_ref(struct conn *conn, void *owner)
ASSERT(!conn->client && !conn->proxy);
ASSERT(conn->owner == NULL);

conn->family = server->family;
conn->addrlen = server->addrlen;
conn->addr = server->addr;
conn->family = server->info.family;
conn->addrlen = server->info.addrlen;
conn->addr = (struct sockaddr *)&server->info.addr;

server->ns_conn_q++;
TAILQ_INSERT_TAIL(&server->s_conn_q, conn, conn_tqe);
Expand Down
15 changes: 6 additions & 9 deletions src/nc_server.h
Original file line number Diff line number Diff line change
Expand Up @@ -70,13 +70,12 @@ struct server {
uint32_t idx; /* server index */
struct server_pool *owner; /* owner pool */

struct string pname; /* name:port:weight (ref in conf_server) */
struct string name; /* name (ref in conf_server) */
struct string pname; /* hostname:port:weight (ref in conf_server) */
struct string name; /* hostname:port or [name] (ref in conf_server) */
struct string addrstr; /* hostname (ref in conf_server) */
uint16_t port; /* port */
uint32_t weight; /* weight */
int family; /* socket family */
socklen_t addrlen; /* socket length */
struct sockaddr *addr; /* socket address (ref in conf_server) */
struct sockinfo info; /* server socket info */

uint32_t ns_conn_q; /* # server connection */
struct conn_tqh s_conn_q; /* server connection q */
Expand All @@ -101,12 +100,10 @@ struct server_pool {
int64_t next_rebuild; /* next distribution rebuild time in usec */

struct string name; /* pool name (ref in conf_pool) */
struct string addrstr; /* pool address (ref in conf_pool) */
struct string addrstr; /* pool address - hostname:port (ref in conf_pool) */
struct string redis_auth; /* redis_auth password */
uint16_t port; /* port */
int family; /* socket family */
socklen_t addrlen; /* socket length */
struct sockaddr *addr; /* socket address (ref in conf_pool) */
struct sockinfo info; /* listen socket info */
mode_t perm; /* socket permission */
int dist_type; /* distribution type (dist_type_t) */
int key_hash_type; /* key hash type (hash_type_t) */
Expand Down

0 comments on commit 5b04fee

Please sign in to comment.