TopoSort() fix

Rui Hai Jiang <ruihaij@gmail.com>

From: Rui Hai Jiang <ruihaij@gmail.com>
To: PostgreSQL Hackers <pgsql-hackers@postgresql.org>
Date: 2019-07-02T14:47:32Z
Lists: pgsql-hackers

Attachments

Hi Hackers,

I think I found an issue in the TopoSort() function.

As the comments say,

                /* .....
                 * ...... If there are any other processes
                 * in the same lock group on the queue, set their number of
                 * beforeConstraints to -1 to indicate that they should be
emitted
                 * with their groupmates rather than considered separately.
                 */

If the line "break;" exists, there is no chance to set beforeConstraints to
-1 for other processes in the same lock group.

So, I think we need delete the line "break;" . See the patch.

I just took a look, and I found all the following versions have this line .


postgresql-12beta2, postgresql-12beta1, postgresql-11.4,
postgresql-11.3,postgresql-11.0,
postgresql-10.9,postgresql-10.5, postgresql-10.0


Thanks,
Ruihai

Commits

  1. Add an isolation test to exercise parallel-worker deadlock resolution.

  2. Mark advisory-lock functions as parallel restricted, not parallel unsafe.

  3. Fix busted logic for parallel lock grouping in TopoSort().