Re: How about using dirty snapshots to locate dependent objects?

From: Ashutosh Sharma <ashu(dot)coek88(at)gmail(dot)com>
To: Dilip Kumar <dilipbalaut(at)gmail(dot)com>
Cc: pgsql-hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: How about using dirty snapshots to locate dependent objects?
Date: 2024-06-06 14:09:31
Message-ID: CAE9k0PkpmkAHS10VOz=351Mqk_ER2AvAo5yiyrkSgaiEDeiz8A@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Thu, Jun 6, 2024 at 6:20 PM Dilip Kumar <dilipbalaut(at)gmail(dot)com> wrote:

> On Thu, Jun 6, 2024 at 5:59 PM Ashutosh Sharma <ashu(dot)coek88(at)gmail(dot)com>
> wrote:
> >
> > Hello everyone,
> >
> > At present, we use MVCC snapshots to identify dependent objects. This
> implies that if a new dependent object is inserted within a transaction
> that is still ongoing, our search for dependent objects won't include this
> recently added one. Consequently, if someone attempts to drop the
> referenced object, it will be dropped, and when the ongoing transaction
> completes, we will end up having an entry for a referenced object that has
> already been dropped. This situation can lead to an inconsistent state.
> Below is an example illustrating this scenario:
>
> I don't think it's correct to allow the index to be dropped while a
> transaction is creating it. Instead, the right solution should be for
> the create index operation to protect the object it is using from
> being dropped. Specifically, the create index operation should acquire
> a shared lock on the Access Method (AM) to ensure it doesn't get
> dropped concurrently while the transaction is still in progress.
>

If I'm following you correctly, that's exactly what the patch is trying to
do; while the index creation is in progress, if someone tries to drop the
object referenced by the index under creation, the referenced object being
dropped is able to know about the dependent object (in this case the index
being created) using dirty snapshot and hence, it is unable to acquire the
lock on the dependent object, and as a result of that, it is unable to drop
it.

--
With Regards,
Ashutosh Sharma.

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Radu Radutiu 2024-06-06 14:19:34 Re: Postgresql OOM
Previous Message Robert Haas 2024-06-06 13:48:51 Re: race condition in pg_class