summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTomas Vondra2016-08-23 12:47:14 +0000
committerPavan Deolasee2016-10-18 10:07:45 +0000
commit4a28fb864993d03f6f5e06c5cd7b401849ce8c63 (patch)
tree91b5d4dbd694ac9b50b545dd5ca41e40ea1ce191
parenta1958c9519113826b05d114f13034fd1a9bcf097 (diff)
refactor DoRefreshRemoteHandles a bit to get rid of compiler warnings
As written originally, the branching confused the compiler enough to emit warning about using uninitialized allOids variable. Refactor the code a bit to make it clear that's not really possible, and also move a number of variable declarations from the function scope to a block level. Note: I think the function would deserve more documentation - both about the intent in general, and about the meaning of the return value ('res' is quite unclear name).
-rw-r--r--src/backend/pgxc/pool/pgxcnode.c181
1 files changed, 92 insertions, 89 deletions
diff --git a/src/backend/pgxc/pool/pgxcnode.c b/src/backend/pgxc/pool/pgxcnode.c
index 40d718c52d..cc5df6963e 100644
--- a/src/backend/pgxc/pool/pgxcnode.c
+++ b/src/backend/pgxc/pool/pgxcnode.c
@@ -2884,12 +2884,8 @@ static bool
DoRefreshRemoteHandles(void)
{
List *altered = NIL, *deleted = NIL, *added = NIL;
- List *shmoids = NIL;
- Oid *coOids, *dnOids, *allOids, nodeoid;
- int numDNodes;
- int i, numCoords, total_nodes;
- NodeDefinition *nodeDef;
- PGXCNodeHandle *handle;
+ Oid *coOids, *dnOids;
+ int numCoords, numDNodes, total_nodes;
bool res = true;
HandlesRefreshPending = false;
@@ -2899,107 +2895,114 @@ DoRefreshRemoteHandles(void)
total_nodes = numCoords + numDNodes;
if (total_nodes > 0)
{
- allOids = (Oid *)palloc(total_nodes * sizeof(Oid));
+ int i;
+ List *shmoids = NIL;
+ Oid *allOids = (Oid *)palloc(total_nodes * sizeof(Oid));
- for (i = 0; i < numCoords; i++)
- allOids[i] = coOids[i];
+ /* build array with Oids of all nodes (coordinators first) */
+ memcpy(allOids, coOids, numCoords * sizeof(Oid));
+ memcpy(allOids + numCoords, dnOids, numDNodes * sizeof(Oid));
- for (i = 0; i + numCoords < total_nodes; i++)
- allOids[i + numCoords] = dnOids[i];
- }
+ LWLockAcquire(NodeTableLock, LW_SHARED);
- LWLockAcquire(NodeTableLock, LW_SHARED);
- for (i = 0; i < total_nodes; i++)
- {
- int nid;
- Oid nodeoid;
- char ntype = PGXC_NODE_NONE;
+ for (i = 0; i < total_nodes; i++)
+ {
+ NodeDefinition *nodeDef;
+ PGXCNodeHandle *handle;
- nodeoid = allOids[i];
- shmoids = lappend_oid(shmoids, nodeoid);
+ int nid;
+ Oid nodeoid;
+ char ntype = PGXC_NODE_NONE;
- nodeDef = PgxcNodeGetDefinition(nodeoid);
- /*
- * identify an entry with this nodeoid. If found
- * compare the name/host/port entries. If the name is
- * same and other info is different, it's an ALTER.
- * If the local entry does not exist in the shmem, it's
- * a DELETE. If the entry from shmem does not exist
- * locally, it's an ADDITION
- */
- nid = PGXCNodeGetNodeId(nodeoid, &ntype);
-
- if (nid == -1)
- {
- /* a new node has been added to the shmem */
- added = lappend_oid(added, nodeoid);
- elog(LOG, "Node added: name (%s) host (%s) port (%d)",
- NameStr(nodeDef->nodename), NameStr(nodeDef->nodehost),
- nodeDef->nodeport);
- }
- else
- {
- if (ntype == PGXC_NODE_COORDINATOR)
- handle = &co_handles[nid];
- else if (ntype == PGXC_NODE_DATANODE)
- handle = &dn_handles[nid];
- else
- elog(ERROR, "Node with non-existent node type!");
+ nodeoid = allOids[i];
+ shmoids = lappend_oid(shmoids, nodeoid);
+ nodeDef = PgxcNodeGetDefinition(nodeoid);
/*
- * compare name, host, port to see if this node
- * has been ALTERed
+ * identify an entry with this nodeoid. If found
+ * compare the name/host/port entries. If the name is
+ * same and other info is different, it's an ALTER.
+ * If the local entry does not exist in the shmem, it's
+ * a DELETE. If the entry from shmem does not exist
+ * locally, it's an ADDITION
*/
- if (strncmp(handle->nodename, NameStr(nodeDef->nodename), NAMEDATALEN)
- != 0 ||
- strncmp(handle->nodehost, NameStr(nodeDef->nodehost), NAMEDATALEN)
- != 0 ||
- handle->nodeport != nodeDef->nodeport)
+ nid = PGXCNodeGetNodeId(nodeoid, &ntype);
+
+ if (nid == -1)
{
- elog(LOG, "Node altered: old name (%s) old host (%s) old port (%d)"
- " new name (%s) new host (%s) new port (%d)",
- handle->nodename, handle->nodehost, handle->nodeport,
+ /* a new node has been added to the shmem */
+ added = lappend_oid(added, nodeoid);
+ elog(LOG, "Node added: name (%s) host (%s) port (%d)",
NameStr(nodeDef->nodename), NameStr(nodeDef->nodehost),
nodeDef->nodeport);
- altered = lappend_oid(altered, nodeoid);
}
- /* else do nothing */
+ else
+ {
+ if (ntype == PGXC_NODE_COORDINATOR)
+ handle = &co_handles[nid];
+ else if (ntype == PGXC_NODE_DATANODE)
+ handle = &dn_handles[nid];
+ else
+ elog(ERROR, "Node with non-existent node type!");
+
+ /*
+ * compare name, host, port to see if this node
+ * has been ALTERed
+ */
+ if (strncmp(handle->nodename, NameStr(nodeDef->nodename), NAMEDATALEN) != 0 ||
+ strncmp(handle->nodehost, NameStr(nodeDef->nodehost), NAMEDATALEN) != 0 ||
+ handle->nodeport != nodeDef->nodeport)
+ {
+ elog(LOG, "Node altered: old name (%s) old host (%s) old port (%d)"
+ " new name (%s) new host (%s) new port (%d)",
+ handle->nodename, handle->nodehost, handle->nodeport,
+ NameStr(nodeDef->nodename), NameStr(nodeDef->nodehost),
+ nodeDef->nodeport);
+ altered = lappend_oid(altered, nodeoid);
+ }
+ /* else do nothing */
+ }
+ pfree(nodeDef);
}
- pfree(nodeDef);
- }
- /*
- * Any entry in backend area but not in shmem means that it has
- * been deleted
- */
- for (i = 0; i < NumCoords; i++)
- {
- handle = &co_handles[i];
- nodeoid = handle->nodeoid;
- if (!list_member_oid(shmoids, nodeoid))
+ /*
+ * Any entry in backend area but not in shmem means that it has
+ * been deleted
+ */
+ for (i = 0; i < NumCoords; i++)
{
- deleted = lappend_oid(deleted, nodeoid);
- elog(LOG, "Node deleted: name (%s) host (%s) port (%d)",
- handle->nodename, handle->nodehost, handle->nodeport);
+ PGXCNodeHandle *handle = &co_handles[i];
+ Oid nodeoid = handle->nodeoid;
+
+ if (!list_member_oid(shmoids, nodeoid))
+ {
+ deleted = lappend_oid(deleted, nodeoid);
+ elog(LOG, "Node deleted: name (%s) host (%s) port (%d)",
+ handle->nodename, handle->nodehost, handle->nodeport);
+ }
}
- }
- for (i = 0; i < NumDataNodes; i++)
- {
- handle = &dn_handles[i];
- nodeoid = handle->nodeoid;
- if (!list_member_oid(shmoids, nodeoid))
+
+ for (i = 0; i < NumDataNodes; i++)
{
- deleted = lappend_oid(deleted, nodeoid);
- elog(LOG, "Node deleted: name (%s) host (%s) port (%d)",
- handle->nodename, handle->nodehost, handle->nodeport);
+ PGXCNodeHandle *handle = &dn_handles[i];
+ Oid nodeoid = handle->nodeoid;
+
+ if (!list_member_oid(shmoids, nodeoid))
+ {
+ deleted = lappend_oid(deleted, nodeoid);
+ elog(LOG, "Node deleted: name (%s) host (%s) port (%d)",
+ handle->nodename, handle->nodehost, handle->nodeport);
+ }
}
- }
- LWLockRelease(NodeTableLock);
- /* Release palloc'ed memory */
- pfree(coOids);
- pfree(dnOids);
- pfree(allOids);
+ LWLockRelease(NodeTableLock);
+
+ /* Release palloc'ed memory */
+ pfree(coOids);
+ pfree(dnOids);
+ pfree(allOids);
+ list_free(shmoids);
+ }
if (deleted != NIL || added != NIL)
{
@@ -3015,10 +3018,10 @@ DoRefreshRemoteHandles(void)
else
PgxcNodeRefreshBackendHandlesShmem(altered);
- list_free(shmoids);
list_free(altered);
list_free(added);
list_free(deleted);
+
return res;
}