pgsql: Fix bug in Tid scan.

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
9 messages Options
Reply | Threaded
Open this post in threaded view
|

pgsql: Fix bug in Tid scan.

Fujii Masao-3
Fix bug in Tid scan.

Commit 147e3722f7 changed Tid scan so that it calls table_beginscan()
and uses the scan option for seq scan. This change caused two issues.

(1) The change caused Tid scan to take a predicate lock on the entire
       relation in serializable transaction even when relation-level
       lock is not necessary. This could lead to an unexpected
       serialization error.

(2) The change caused Tid scan to increment the number of seq_scan
       in pg_stat_*_tables views even though it's not seq scan. This
       could confuse the users.

This commit adds the scan option for Tid scan and makes Tid scan
use it, to avoid those issues.

Back-patch to v12, where the bug was introduced.

Author: Tatsuhito Kasahara
Reviewed-by: Kyotaro Horiguchi, Masahiko Sawada, Fujii Masao
Discussion: https://postgr.es/m/CAP0=ZVKy+gTbFmB6X_UW0pP3WaeJ-fkUWHoD-pExS=at3CY76g@...

Branch
------
REL_12_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/598b466e80d9f46aa1472d4f1adb1df90be8c260

Modified Files
--------------
src/backend/executor/nodeTidscan.c    |  5 ++---
src/backend/utils/adt/tid.c           |  4 ++--
src/include/access/tableam.h          | 24 +++++++++++++++++++-----
src/test/regress/expected/tidscan.out | 16 ++++++++++++++++
src/test/regress/sql/tidscan.sql      |  7 +++++++
5 files changed, 46 insertions(+), 10 deletions(-)

Reply | Threaded
Open this post in threaded view
|

Re: pgsql: Fix bug in Tid scan.

Tom Lane-2
Fujii Masao <[hidden email]> writes:
> Fix bug in Tid scan.

AFAICS, this patch has caused an ABI break in v12.  Do we really
believe that no extension references the values of the ScanOptions
enum?

                        regards, tom lane


Reply | Threaded
Open this post in threaded view
|

Re: pgsql: Fix bug in Tid scan.

Fujii Masao-2
On Sat, Feb 8, 2020 at 4:25 AM Tom Lane <[hidden email]> wrote:
>
> Fujii Masao <[hidden email]> writes:
> > Fix bug in Tid scan.
>
> AFAICS, this patch has caused an ABI break in v12.  Do we really
> believe that no extension references the values of the ScanOptions
> enum?

Yes, you are right. Some extensions may depend on it.
It's better not to add new ScanOption not to break ABI.

So I'm thinking to apply the attached patch only to v12.
Which fixes the issue without adding new ScanOption.

Regards,

--
Fujii Masao

dont_break_abi.patch (1K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: pgsql: Fix bug in Tid scan.

Tom Lane-2
Fujii Masao <[hidden email]> writes:
> On Sat, Feb 8, 2020 at 4:25 AM Tom Lane <[hidden email]> wrote:
>> AFAICS, this patch has caused an ABI break in v12.  Do we really
>> believe that no extension references the values of the ScanOptions
>> enum?

> Yes, you are right. Some extensions may depend on it.
> It's better not to add new ScanOption not to break ABI.

I think it's okay to add a new value of ScanOption; what you can't
do is change the codes assigned to the existing values.  So I'd
just revert those code changes and give SO_TYPE_TIDSCAN a value
that's out-of-order.

                        regards, tom lane


Reply | Threaded
Open this post in threaded view
|

Re: pgsql: Fix bug in Tid scan.

Fujii Masao-2
On Sat, Feb 8, 2020 at 10:04 AM Tom Lane <[hidden email]> wrote:

>
> Fujii Masao <[hidden email]> writes:
> > On Sat, Feb 8, 2020 at 4:25 AM Tom Lane <[hidden email]> wrote:
> >> AFAICS, this patch has caused an ABI break in v12.  Do we really
> >> believe that no extension references the values of the ScanOptions
> >> enum?
>
> > Yes, you are right. Some extensions may depend on it.
> > It's better not to add new ScanOption not to break ABI.
>
> I think it's okay to add a new value of ScanOption; what you can't
> do is change the codes assigned to the existing values.  So I'd
> just revert those code changes and give SO_TYPE_TIDSCAN a value
> that's out-of-order.
So you are thinking to apply something like the attached to
both master and v12? That sounds better to me.

Regards,

--
Fujii Masao

dont_break_abi_v2.patch (1K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: pgsql: Fix bug in Tid scan.

Tom Lane-2
Fujii Masao <[hidden email]> writes:
> On Sat, Feb 8, 2020 at 10:04 AM Tom Lane <[hidden email]> wrote:
>> I think it's okay to add a new value of ScanOption; what you can't
>> do is change the codes assigned to the existing values.  So I'd
>> just revert those code changes and give SO_TYPE_TIDSCAN a value
>> that's out-of-order.

> So you are thinking to apply something like the attached to
> both master and v12? That sounds better to me.

No, you can leave HEAD alone --- renumbering the enum values in
master is fine, since we force extensions to recompile against
new major versions.  We just need to hold the values steady in
released branches.

Personally I'd keep SO_TYPE_TIDSCAN physically adjacent to the other
SO_TYPE_xxxSCAN entries in the list, but of course that's just cosmetic.

                        regards, tom lane


Reply | Threaded
Open this post in threaded view
|

Re: pgsql: Fix bug in Tid scan.

Fujii Masao-2
On Sat, Feb 8, 2020 at 11:08 AM Tom Lane <[hidden email]> wrote:

>
> Fujii Masao <[hidden email]> writes:
> > On Sat, Feb 8, 2020 at 10:04 AM Tom Lane <[hidden email]> wrote:
> >> I think it's okay to add a new value of ScanOption; what you can't
> >> do is change the codes assigned to the existing values.  So I'd
> >> just revert those code changes and give SO_TYPE_TIDSCAN a value
> >> that's out-of-order.
>
> > So you are thinking to apply something like the attached to
> > both master and v12? That sounds better to me.
>
> No, you can leave HEAD alone --- renumbering the enum values in
> master is fine, since we force extensions to recompile against
> new major versions.  We just need to hold the values steady in
> released branches.

Yeah, you're right.

> Personally I'd keep SO_TYPE_TIDSCAN physically adjacent to the other
> SO_TYPE_xxxSCAN entries in the list, but of course that's just cosmetic.

+1. So I will apply the latest patch (adding SO_TYPE_TIDSCAN just after
SO_TYPE_ANALYZE) only to v12.

Regards,

--
Fujii Masao


Reply | Threaded
Open this post in threaded view
|

Re: pgsql: Fix bug in Tid scan.

Tom Lane-2
Fujii Masao <[hidden email]> writes:
> On Sat, Feb 8, 2020 at 11:08 AM Tom Lane <[hidden email]> wrote:
>> Personally I'd keep SO_TYPE_TIDSCAN physically adjacent to the other
>> SO_TYPE_xxxSCAN entries in the list, but of course that's just cosmetic.

> +1. So I will apply the latest patch (adding SO_TYPE_TIDSCAN just after
> SO_TYPE_ANALYZE) only to v12.

Works for me.

                        regards, tom lane


Reply | Threaded
Open this post in threaded view
|

Re: pgsql: Fix bug in Tid scan.

Fujii Masao-2
On Sat, Feb 8, 2020 at 12:05 PM Tom Lane <[hidden email]> wrote:

>
> Fujii Masao <[hidden email]> writes:
> > On Sat, Feb 8, 2020 at 11:08 AM Tom Lane <[hidden email]> wrote:
> >> Personally I'd keep SO_TYPE_TIDSCAN physically adjacent to the other
> >> SO_TYPE_xxxSCAN entries in the list, but of course that's just cosmetic.
>
> > +1. So I will apply the latest patch (adding SO_TYPE_TIDSCAN just after
> > SO_TYPE_ANALYZE) only to v12.
>
> Works for me.

Pushed! Thanks a lot!!

Regards,

--
Fujii Masao