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 1p7v53-0006yp-KV for pgsql-hackers@arkaria.postgresql.org; Wed, 21 Dec 2022 09:08:05 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1p7v52-0007iB-CZ for pgsql-hackers@arkaria.postgresql.org; Wed, 21 Dec 2022 09:08:04 +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 1p7v51-0007i1-Vv for pgsql-hackers@lists.postgresql.org; Wed, 21 Dec 2022 09:08:04 +0000 Received: from mail-wm1-x32e.google.com ([2a00:1450:4864:20::32e]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1p7v4z-0005Lz-H4 for pgsql-hackers@postgresql.org; Wed, 21 Dec 2022 09:08:02 +0000 Received: by mail-wm1-x32e.google.com with SMTP id v7so10726419wmn.0 for ; Wed, 21 Dec 2022 01:08:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=CpN9l3hOJofRf5iWCCGequkMEAYhtdDK0awURbM0OWc=; b=Yi3rPDhFdl1mcW9nVh/ODuXbiOineDSlTZs+zTCziJihBgGtRJknmZY0ljbBGh5ctz EQUjW5WbSbW2bj7379Jig4wqFn3YDUxmE85A1zyBvOa/rJF+TcjtPvJN1OomIChFSHFA 2FLqpMnqRxheNR8oPqHJbGKpiFEGoL4urO7F66MU0HPF9Cu4lHQAPZbH4HzxyCLAqlK2 S4ChdLccQdubMpO0L2ApvF+m/We96SUzf4kYkfHwRD8f0LxpGTLJAgFDd28hb+4zPN/b IRxlnBoZP56gq5wbtxuR1xlAepsqKPsuAIdsFKxRSJMKy1UQhSObd/IcuVChA+/YpCj5 x4Hg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=CpN9l3hOJofRf5iWCCGequkMEAYhtdDK0awURbM0OWc=; b=x8f8gvvtuTLuHnH8VMFB+ct2LX3Z+eKZPQ0veOmR3lEEh7IvU4Qa6pcfuhGd1zqvOF vjijElRN/0KqxKuORl6NGgnT8liJTgCHORNO90GNMtuLHF4oFSyb2Le866eYCpBHEP9b UkifWVEVtLjcK86toYBwQnQivbErUfm0qBfva5gHixC/S0FY+DK6s1aeZuEhh0lvjSaz kpNR/ojPXOO5pUmpllBzRonnyU69Rd+OXAFiySYG5AUOU7WFtxD8ldJEJRur6Q9RRSb9 No40jCUxNyD27Umv0aboVxgcNvitPYtI7wO3OCBod1Hn7fTiNdrVJHwmKQls9IOx0h/T +aFg== X-Gm-Message-State: AFqh2kqI5Cqt093YhzHcivFAOcge4zNbzCGeiZ0mPQY+YJGmJqOcO1Wa 56iD9tI1P59vn9udOXGxPc4= X-Google-Smtp-Source: AMrXdXv5n56+H7OQkMEpvYHpk5TCBBWuzwt35pG515EDhQYhmrGtsd4ItSHDWhTtkmiQyUYFmbDMlA== X-Received: by 2002:a05:600c:1e09:b0:3cf:b73f:bf8f with SMTP id ay9-20020a05600c1e0900b003cfb73fbf8fmr1035286wmb.7.1671613679456; Wed, 21 Dec 2022 01:07:59 -0800 (PST) Received: from [10.95.86.20] ([54.239.6.188]) by smtp.gmail.com with ESMTPSA id i2-20020a05600c354200b003d35acb0fd7sm1664365wmq.34.2022.12.21.01.07.58 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 21 Dec 2022 01:07:58 -0800 (PST) Content-Type: multipart/mixed; boundary="------------ekWnxcRaZg9zY3cB20IsJq2k" Message-ID: <1f2ad9fd-53ff-74cc-a602-72d45423bcab@gmail.com> Date: Wed, 21 Dec 2022 10:06:42 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Thunderbird/102.6.0 Subject: Re: Minimal logical decoding on standbys To: Robert Haas , Andres Freund Cc: Alvaro Herrera , Ibrar Ahmed , Amit Khandekar , fabriziomello@gmail.com, tushar , Rahila Syed , pgsql-hackers References: <4b19419f-2e7c-a76b-c948-26d10af6693d@gmail.com> <20221207175824.apmc5clnj2fdjkaq@awork3.anarazel.de> <09c26df0-c5f9-eae0-5a6a-10fb00b0522e@gmail.com> <9f0a021e-40e1-0ae6-8086-a4457c99749e@gmail.com> <0ae83e69-bda0-0eb8-ef4a-d169292e3f66@gmail.com> <47f5faf0-6a6d-602a-5d5b-9449ca74c6ad@gmail.com> <20221214173552.sshklqvwezeo52h3@alap3.anarazel.de> Content-Language: en-US From: "Drouvot, Bertrand" In-Reply-To: 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. --------------ekWnxcRaZg9zY3cB20IsJq2k Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Hi, On 12/20/22 10:41 PM, Robert Haas wrote: > On Tue, Dec 20, 2022 at 3:39 PM Robert Haas wrote: >> I think this might be the only WAL record type where there's a >> problem, but I haven't fully confirmed that yet. > > It's not. GIST has the same issue. The same test case demonstrates the > problem there, if you substitute this test script for > kpt_hash_setup.sql and possibly also run it for somewhat longer. One > might think that this wouldn't be a problem, because the comments for > gistxlogDelete say this: > > /* > * In payload of blk 0 : todelete OffsetNumbers > */ > > But it's not in the payload of blk 0. It follows the main payload. Oh right, nice catch! Indeed, we can see in gistRedoDeleteRecord(): " todelete = (OffsetNumber *) ((char *) xldata + SizeOfGistxlogDelete); " > > This is the reverse of xl_heap_freeze_page, which claims that freeze > plans and offset numbers follow, but they don't: they're in the data > for block 0. oh right, we can see in heap_xlog_freeze_page(): " plans = (xl_heap_freeze_plan *) XLogRecGetBlockData(record, 0, NULL); offsets = (OffsetNumber *) ((char *) plans + (xlrec->nplans * sizeof(xl_heap_freeze_plan))); " > xl_btree_delete is also wrong, claiming that the data > follows when it's really attached to block 0. oh right, we can see in btree_xlog_delete(): " char *ptr = XLogRecGetBlockData(record, 0, NULL); page = (Page) BufferGetPage(buffer); if (xlrec->nupdated > 0) { OffsetNumber *updatedoffsets; xl_btree_update *updates; updatedoffsets = (OffsetNumber *) (ptr + xlrec->ndeleted * sizeof(OffsetNumber)); updates = (xl_btree_update *) ((char *) updatedoffsets + xlrec->nupdated * sizeof(OffsetNumber)); " > I guess whatever else we > do here, we should fix the comments. > Agree, please find attached a patch proposal doing so. > Bottom line is that I think the two cases that have alignment issues > as coded are xl_hash_vacuum_one_page and gistxlogDelete. Everything > else is OK, as far as I can tell right now. > Thanks a lot for the repro(s) and explanations! That's very useful/helpful. Based on your discovery about the wrong comments above, I'm now tempted to fix those 2 alignment issues by using a FLEXIBLE_ARRAY_MEMBER within those structs (as you proposed in [1]) (as that should also prevent any possible wrong comments about where the array is located). What do you think? [1]: https://www.postgresql.org/message-id/CA%2BTgmoaVcu_mbxbH%3DEccvKG6u8%2BMdQf9zx98uAL9zsStFwrYsQ%40mail.gmail.com Regards, -- Bertrand Drouvot PostgreSQL Contributors Team RDS Open Source Databases Amazon Web Services: https://aws.amazon.com --------------ekWnxcRaZg9zY3cB20IsJq2k Content-Type: text/plain; charset=UTF-8; name="v1-0001-fix-some-comments.patch" Content-Disposition: attachment; filename="v1-0001-fix-some-comments.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9naXN0eGxvZy5oIGIvc3JjL2luY2x1 ZGUvYWNjZXNzL2dpc3R4bG9nLmgKaW5kZXggMzNmMWM3ZTMxYi4uOTUwNjhmZWI4NyAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL2dpc3R4bG9nLmgKKysrIGIvc3JjL2luY2x1 ZGUvYWNjZXNzL2dpc3R4bG9nLmgKQEAgLTUyLDkgKzUyLDcgQEAgdHlwZWRlZiBzdHJ1Y3Qg Z2lzdHhsb2dEZWxldGUKIAlUcmFuc2FjdGlvbklkIHNuYXBzaG90Q29uZmxpY3RIb3Jpem9u OwogCXVpbnQxNgkJbnRvZGVsZXRlOwkJLyogbnVtYmVyIG9mIGRlbGV0ZWQgb2Zmc2V0cyAq LwogCi0JLyoKLQkgKiBJbiBwYXlsb2FkIG9mIGJsayAwIDogdG9kZWxldGUgT2Zmc2V0TnVt YmVycwotCSAqLworCS8qIFRPREVMRVRFIE9GRlNFVCBOVU1CRVIgQVJSQVkgRk9MTE9XUyAq LwogfSBnaXN0eGxvZ0RlbGV0ZTsKIAogI2RlZmluZSBTaXplT2ZHaXN0eGxvZ0RlbGV0ZQko b2Zmc2V0b2YoZ2lzdHhsb2dEZWxldGUsIG50b2RlbGV0ZSkgKyBzaXplb2YodWludDE2KSkK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW1feGxvZy5oIGIvc3JjL2lu Y2x1ZGUvYWNjZXNzL2hlYXBhbV94bG9nLmgKaW5kZXggNWM3NzI5MGVlYy4uMTExN2U5NWVk ZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbV94bG9nLmgKKysrIGIv c3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbV94bG9nLmgKQEAgLTM0NSw4ICszNDUsOSBAQCB0 eXBlZGVmIHN0cnVjdCB4bF9oZWFwX2ZyZWV6ZV9wYWdlCiAJVHJhbnNhY3Rpb25JZCBzbmFw c2hvdENvbmZsaWN0SG9yaXpvbjsKIAl1aW50MTYJCW5wbGFuczsKIAotCS8qIEZSRUVaRSBQ TEFOUyBGT0xMT1cgKi8KLQkvKiBPRkZTRVQgTlVNQkVSIEFSUkFZIEZPTExPV1MgKi8KKwkv KgorCSAqIEluIHBheWxvYWQgb2YgYmxrIDAgOiBGUkVFWkUgUExBTlMgYW5kIE9GRlNFVCBO VU1CRVIgQVJSQVkKKwkgKi8KIH0geGxfaGVhcF9mcmVlemVfcGFnZTsKIAogI2RlZmluZSBT aXplT2ZIZWFwRnJlZXplUGFnZSAob2Zmc2V0b2YoeGxfaGVhcF9mcmVlemVfcGFnZSwgbnBs YW5zKSArIHNpemVvZih1aW50MTYpKQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNz L25idHhsb2cuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9uYnR4bG9nLmgKaW5kZXggM2IyZDk1 OWM2OS4uMWFhOGU3ZWNhNSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL25idHhs b2cuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0eGxvZy5oCkBAIC0yMzYsOSArMjM2 LDEyIEBAIHR5cGVkZWYgc3RydWN0IHhsX2J0cmVlX2RlbGV0ZQogCXVpbnQxNgkJbmRlbGV0 ZWQ7CiAJdWludDE2CQludXBkYXRlZDsKIAotCS8qIERFTEVURUQgVEFSR0VUIE9GRlNFVCBO VU1CRVJTIEZPTExPVyAqLwotCS8qIFVQREFURUQgVEFSR0VUIE9GRlNFVCBOVU1CRVJTIEZP TExPVyAqLwotCS8qIFVQREFURUQgVFVQTEVTIE1FVEFEQVRBICh4bF9idHJlZV91cGRhdGUp IEFSUkFZIEZPTExPV1MgKi8KKwkvKgorCSAqIEluIHBheWxvYWQgb2YgYmxrIDAgOgorCSAq IC0gREVMRVRFRCBUQVJHRVQgT0ZGU0VUIE5VTUJFUlMKKwkgKiAtIFVQREFURUQgVEFSR0VU IE9GRlNFVCBOVU1CRVJTCisJICogLSBVUERBVEVEIFRVUExFUyBNRVRBREFUQSAoeGxfYnRy ZWVfdXBkYXRlKSBBUlJBWQorCSAqLwogfSB4bF9idHJlZV9kZWxldGU7CiAKICNkZWZpbmUg U2l6ZU9mQnRyZWVEZWxldGUJKG9mZnNldG9mKHhsX2J0cmVlX2RlbGV0ZSwgbnVwZGF0ZWQp ICsgc2l6ZW9mKHVpbnQxNikpCg== --------------ekWnxcRaZg9zY3cB20IsJq2k--