Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1m86lm-0007qc-2j for pgsql-bugs@arkaria.postgresql.org; Mon, 26 Jul 2021 20:00:10 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1m86lk-0004Gy-UA for pgsql-bugs@arkaria.postgresql.org; Mon, 26 Jul 2021 20:00:08 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1m86lk-0004Gf-CF for pgsql-bugs@lists.postgresql.org; Mon, 26 Jul 2021 20:00:08 +0000 Received: from mail-lj1-x231.google.com ([2a00:1450:4864:20::231]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1m86lh-0003tl-PU for pgsql-bugs@lists.postgresql.org; Mon, 26 Jul 2021 20:00:07 +0000 Received: by mail-lj1-x231.google.com with SMTP id a7so12750781ljq.11 for ; Mon, 26 Jul 2021 13:00:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:references:from:message-id:date:user-agent:mime-version :in-reply-to:content-language; bh=uGSXX9VllcT1NBIuzatj3vHEvY6m7GU+jrChL/3RKuc=; b=vTtjquChggbDiUek8+bcdz/QgIPX+H20to+IvHhg9X3Jdruwdga8q0TBEsuMBfbXt0 MnyyqMgXd6B8D2cWOiTHkOgXlMjU+jUr0L26tQLW9jAX0BlY/O7K8Wnmi225gl9VjYNN mU2SoKBQWOniUplOUUtbac1Q63+O+TEuOqzurYuv/7OhnNE5KzULQd1jrLFxjiqNoZ4g 7vljK9CbP+AMGaoYeQWyqZffkbJoW6b86fvy8m1WTtazOS0fMKzChGB9NC0Wam8MkLrC 5JoCpVji1t5fEH3Gvq+qPgQnssR4mlh3j+le0Bq20aeEJRvVk6yc6IH/g3gsnqAwdPrP RsjA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language; bh=uGSXX9VllcT1NBIuzatj3vHEvY6m7GU+jrChL/3RKuc=; b=E0C5NzG8mEBiBuCmxzw/Z17y9OcylGK/ZKPG4XGKpi1G6ikuXSiBSQ1iijLtNSpi29 fCn9RurJw3sAVS/7VYXMurStSXUjbO8D1J2mj1SqdC2vQSdPG3buII8WP33RYnc6v5N9 z3KKBibciUF3B5xabLjIMUM39nXHXAv0+8FmaQEo3IOKzSxaI+A2myFPgl+TllzcphSs fyzUHkU+F16KlIZRx/Qa4xh/kzK1L+gRIstgFB4kzJPDhp129DhqUDCjegEmHXsGxeZ4 8CaQ+s2PpjB9ywWFmemv5PLnLrOxchJ48u2sOLXz6GcqSJ1RQgomtN8Sr+HNcqwN6v5J BF2A== X-Gm-Message-State: AOAM530wXU/5Z+r0eQ3OWkUIraYvDJYwrpTy5mwUzpN3MFM1SODK745y mOvKqLcadZUYQRxUvM2+LxYNAb+IKHs= X-Google-Smtp-Source: ABdhPJxyco+Z8uZVAdyUbiveg3cnHOKZp0EkX7ccFvWf9LTvfz8Dey5jstBJoUCZRoAbJXTX5NRRSw== X-Received: by 2002:a05:651c:997:: with SMTP id b23mr12609725ljq.219.1627329602904; Mon, 26 Jul 2021 13:00:02 -0700 (PDT) Received: from [1.0.0.7] ([178.155.6.109]) by smtp.gmail.com with ESMTPSA id r16sm90714lfm.91.2021.07.26.13.00.01 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 26 Jul 2021 13:00:01 -0700 (PDT) Subject: Re: BUG #17116: Assert failed in SerialSetActiveSerXmin() on commit of parallelized serializable transaction To: Thomas Munro , PostgreSQL mailing lists References: <17116-d6ca217acc180e30@postgresql.org> From: Alexander Lakhin Message-ID: <66a6851c-e213-b31a-c8e6-789ab06e17f1@gmail.com> Date: Mon, 26 Jul 2021 23:00:00 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.7.1 MIME-Version: 1.0 In-Reply-To: Content-Type: multipart/mixed; boundary="------------BD4F9CA304156E4715166F3A" Content-Language: en-US List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------BD4F9CA304156E4715166F3A Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Hello Thomas, 26.07.2021 10:36, Thomas Munro wrote: > On Sat, Jul 24, 2021 at 12:56 AM Thomas Munro wrote: >> On Thu, Jul 22, 2021 at 11:23 PM PG Bug reporting form >> wrote: '. >>> #2 0x0000555e1740b1ac in ExceptionalCondition ( >>> conditionName=conditionName@entry=0x555e17581ce8 >>> "!TransactionIdIsValid(serialControl->tailXid) || TransactionIdFollows(xid, >>> serialControl->tailXid)", errorType=errorType@entry=0x555e17466028 >>> "FailedAssertion", >>> fileName=fileName@entry=0x555e17581789 "predicate.c", >>> lineNumber=lineNumber@entry=1056) at assert.c:67 >> Thanks. Repro'd here. Not immediately sure what's happening here, >> but I will look into it next week. > Here's a draft patch that includes your test spec. Without the > included change to predicate.c, it hits the assertion. With it, it > doesn't, and pg_locks shows no leaked locks after the isolation checks > run (that was the problem 47a338cf fixed before 12 was released, but > it fixed it a little too far in the opposite direction, fortunately > without ill effect AFAICS besides wasted CPU cycles). Thanks! I'm not sure, whether this is related to the fix, but my parallel installcheck script (attached) catches another assert with the patch applied: Core was generated by `postgres: postgres regress33 127.0.0.1(48582) COM'. Program terminated with signal SIGABRT, Aborted. #0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50 50      ../sysdeps/unix/sysv/linux/raise.c: No such file or directory. (gdb) bt #0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50 #1  0x00007ff5251c7535 in __GI_abort () at abort.c:79 #2  0x000055b16d72aa32 in ExceptionalCondition (     conditionName=conditionName@entry=0x55b16d89ccd0 "!SxactIsPartiallyReleased(MySerializableXact)",     errorType=errorType@entry=0x55b16d78301d "FailedAssertion", fileName=fileName@entry=0x55b16d89bbc9 "predicate.c",     lineNumber=lineNumber@entry=4859) at assert.c:67 #3  0x000055b16d5f8a3a in PreCommit_CheckForSerializationFailure () at predicate.c:4859 #4  0x000055b16d34227d in CommitTransaction () at xact.c:2140 #5  0x000055b16d3435b5 in CommitTransactionCommand () at xact.c:3085 #6  0x000055b16d602369 in finish_xact_command () at postgres.c:2662 #7  0x000055b16d604a23 in finish_xact_command () at postgres.c:2660 #8  exec_simple_query (query_string=0x55b16e9c6980 "COMMIT;") at postgres.c:1264 #9  0x000055b16d6060d9 in PostgresMain (argc=, argv=argv@entry=0x55b16e9f66a8, dbname=,     username=) at postgres.c:4339 #10 0x000055b16d57936f in BackendRun (port=0x55b16e9f40b0, port=0x55b16e9f40b0) at postmaster.c:4526 #11 BackendStartup (port=0x55b16e9f40b0) at postmaster.c:4210 #12 ServerLoop () at postmaster.c:1739 #13 0x000055b16d57a36c in PostmasterMain (argc=3, argv=0x55b16e9c1320) at postmaster.c:1412 #14 0x000055b16d28bf5b in main (argc=3, argv=0x55b16e9c1320) at main.c:210 --- /tmp/t/ic01-33/src/test/isolation/expected/serializable-parallel-2.out 2021-07-26 22:04:06.206541268 +0300 +++ /tmp/t/ic01-33/src/test/isolation/output_iso/results/serializable-parallel-2.out       2021-07-26 22:08:04.883339810 +0300 @@ -47,4 +47,6 @@  10  (10 rows) -step s2c: COMMIT; +lock wait query failed: server closed the connection unexpectedly +       This probably means the server terminated abnormally +       before or while processing the request. If time permits, I will compose (till the weekend) yet another isolation test to demonstrate this fail. But maybe the script can be useful as is. (To simplify things I left only serializable-parallel* tests in isolation_schedule.) Best regards, Alexander --------------BD4F9CA304156E4715166F3A Content-Type: application/x-bzip; name="icx.tar.bz2" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="icx.tar.bz2" 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 kudDmQyyzqTH1csyQTARuIQP+LuSKcKEhi+y4Ug= --------------BD4F9CA304156E4715166F3A--