diff options
| author | Heikki Linnakangas | 2013-01-17 21:12:30 +0000 |
|---|---|---|
| committer | Heikki Linnakangas | 2013-01-17 21:45:45 +0000 |
| commit | 3684a534efbd2ffd72e2c4cbd21f9752be3efaf1 (patch) | |
| tree | 52da979cbedcbea664a4e7591deb1bf80b5ccc5f /src | |
| parent | 279628a0a7cf582f7dfb68e25b7b76183dd8ff2f (diff) | |
I added a result set to START_STREAMING command, but neglected walreceiver.
The patch to allow pg_receivexlog to switch timeline added a result set
after copy has ended in START_STREAMING command, to return the next
timeline's ID to the client. But walreceived didn't get the memo, and threw
an error on the unexpected result set. Fix.
Diffstat (limited to 'src')
| -rw-r--r-- | src/backend/replication/libpqwalreceiver/libpqwalreceiver.c | 20 | ||||
| -rw-r--r-- | src/backend/replication/walreceiver.c | 4 |
2 files changed, 18 insertions, 6 deletions
diff --git a/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c b/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c index 7374489b403..84ab25b0e2a 100644 --- a/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c +++ b/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c @@ -215,17 +215,27 @@ libpqrcv_endstreaming(void) while ((res = PQgetResult(streamConn)) != NULL) { - if (PQresultStatus(res) != PGRES_COMMAND_OK) - ereport(ERROR, - (errmsg("error reading result of streaming command: %s", - PQerrorMessage(streamConn)))); /* + * After Copy, if the streaming ended because we reached end of the + * timeline, server sends one result set with the next timeline's ID. + * We don't need it, so just slurp and ignore it. + * * If we had not yet received CopyDone from the backend, PGRES_COPY_IN * is also possible. However, at the moment this function is only * called after receiving CopyDone from the backend - the walreceiver * never terminates replication on its own initiative. */ - + switch (PQresultStatus(res)) + { + case PGRES_COMMAND_OK: + case PGRES_TUPLES_OK: + break; + + default: + ereport(ERROR, + (errmsg("error reading result of streaming command: %s", + PQerrorMessage(streamConn)))); + } PQclear(res); } } diff --git a/src/backend/replication/walreceiver.c b/src/backend/replication/walreceiver.c index 16cf9444a57..444be9463bc 100644 --- a/src/backend/replication/walreceiver.c +++ b/src/backend/replication/walreceiver.c @@ -431,7 +431,9 @@ WalReceiverMain(void) { ereport(LOG, (errmsg("replication terminated by primary server"), - errdetail("End of WAL reached on timeline %u", startpointTLI))); + errdetail("End of WAL reached on timeline %u at %X/%X", + startpointTLI, + (uint32) (LogstreamResult.Write >> 32), (uint32) LogstreamResult.Write))); endofwal = true; break; } |
