Fix node decision logic when priorities are involved. Currently if

two nodes with different prorities are equally good to be promoted
the second one (with a lower priority, considering them
in descending order) will win.

Per report from Brailean Dumitru
This commit is contained in:
Jaime Casanova
2012-09-16 02:38:28 -05:00
parent 877f4cf82e
commit 5f33d9d715

View File

@@ -708,13 +708,13 @@ do_failover(void)
find_best = true; find_best = true;
} }
/* we use the macros provided by xlogdefs.h to compare XLogPtr */ /* we use the macros provided by xlogdefs.h to compare XLogRecPtr */
/* /*
* Nodes are retrieved ordered by priority, so if the current * Nodes are retrieved ordered by priority, so if the current
* best candidate is lower or equal to the next node's wal location * best candidate is lower than the next node's wal location
* then assign next node as the new best candidate. * then assign next node as the new best candidate.
*/ */
if (XLByteLE(best_candidate.xlog_location, nodes[i].xlog_location)) if (XLByteLT(best_candidate.xlog_location, nodes[i].xlog_location))
{ {
best_candidate.nodeId = nodes[i].nodeId; best_candidate.nodeId = nodes[i].nodeId;
best_candidate.xlog_location.xlogid = nodes[i].xlog_location.xlogid; best_candidate.xlog_location.xlogid = nodes[i].xlog_location.xlogid;