glusterd: try to connect on GF_PMAP_PORT_FOREIGN aswell

This patch fix couple of things mentioned below:

1. previously we use to try to connect on only GF_PMAP_PORT_FREE
in the pmap_registry_alloc(), it could happen that some foreign process
would have freed the port by this time ?, hence it is worth giving a try on
GF_PMAP_PORT_FOREIGN ports as well instead of wasting them all.

2. fix pmap_registry_remove() to mark the port asGF_PMAP_PORT_FREE

3. added useful comments on gf_pmap_port_type enum members

Change-Id: Id2aa7ad55e76ae3fdece21bed15792525ae33fe1
BUG: 1322805
Signed-off-by: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>
Reviewed-on: http://review.gluster.org/14080
Tested-by: Prasanna Kumar Kalever <pkalever@redhat.com>
Smoke: Gluster Build System <jenkins@build.gluster.com>
NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
CentOS-regression: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Atin Mukherjee <amukherj@redhat.com>
This commit is contained in:
Prasanna Kumar Kalever 2016-04-26 18:40:04 +05:30 committed by Atin Mukherjee
parent 1890e5e092
commit 3af9b53d13
2 changed files with 11 additions and 8 deletions

View File

@ -96,10 +96,10 @@ enum gf_aggregator_procnum {
enum gf_pmap_port_type {
GF_PMAP_PORT_FREE = 0,
GF_PMAP_PORT_FOREIGN,
GF_PMAP_PORT_FOREIGN, /* it actually means, not sure who is using it, but it is in-use */
GF_PMAP_PORT_LEASED,
GF_PMAP_PORT_NONE,
GF_PMAP_PORT_BRICKSERVER,
GF_PMAP_PORT_BRICKSERVER, /* port used by brick process */
};
typedef enum gf_pmap_port_type gf_pmap_port_type_t;

View File

@ -185,13 +185,15 @@ pmap_registry_alloc (xlator_t *this)
pmap = pmap_registry_get (this);
for (p = pmap->last_alloc; p < 65535; p++) {
if (pmap->ports[p].type != GF_PMAP_PORT_FREE)
continue;
/* GF_PMAP_PORT_FOREIGN may be freed up ? */
if ((pmap->ports[p].type == GF_PMAP_PORT_FREE) ||
(pmap->ports[p].type == GF_PMAP_PORT_FOREIGN)) {
if (pmap_port_isfree (p)) {
pmap->ports[p].type = GF_PMAP_PORT_LEASED;
port = p;
break;
if (pmap_port_isfree (p)) {
pmap->ports[p].type = GF_PMAP_PORT_LEASED;
port = p;
break;
}
}
}
@ -271,6 +273,7 @@ remove:
free (pmap->ports[p].brickname);
pmap->ports[p].type = GF_PMAP_PORT_FREE;
pmap->ports[p].brickname = NULL;
pmap->ports[p].xprt = NULL;