cache lookup errors for missing replication origins

From: Michael Paquier <michael(dot)paquier(at)gmail(dot)com>
To: PostgreSQL mailing lists <pgsql-hackers(at)postgresql(dot)org>
Subject: cache lookup errors for missing replication origins
Date: 2017-09-05 03:59:13
Message-ID: CAB7nPqQtPg+LKKtzdKN26judHcvPZ0s1gNigzOT4j8CYuuuBYg@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Hi all,

Cache lookup errors with elog() can be triggered easily by users at
SQL level using replication origin functions:
=# select pg_replication_origin_advance('popo', '0/1');
ERROR: XX000: cache lookup failed for replication origin 'popo'
LOCATION: replorigin_by_name, origin.c:229
=# select pg_replication_origin_drop('popo');
ERROR: XX000: cache lookup failed for replication origin 'popo'
LOCATION: replorigin_by_name, origin.c:229
=# select pg_replication_origin_session_setup('popo');
ERROR: XX000: cache lookup failed for replication origin 'popo'
LOCATION: replorigin_by_name, origin.c:229
=# select pg_replication_origin_progress('popo', true);
ERROR: XX000: cache lookup failed for replication origin 'popo';
LOCATION: replorigin_by_name, origin.c:229
A cache lookup means that an illogical status has been reached, but
those code paths don't refer to that. So I think that the error in
replorigin_by_name should be changed to that:
ERROR: 42704: replication slot "%s" does not exist

As far as I can see, replorigin_by_oid makes no use of its missing_ok
= false in the backend code, so letting it untouched would have no
impact. replorigin_by_name with missing_ok = false is only used with
SQL-callable functions, so it could be changed without any impact
elsewhere (without considering externally-maintained replication
modules).

Thanks,
--
Michael

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Ryan Murphy 2017-09-05 03:59:23 Re: Useless code in ExecInitModifyTable
Previous Message Tom Lane 2017-09-05 03:56:14 Re: Useless code in ExecInitModifyTable