Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tArgi-000WDn-Rg for pgsql-hackers@arkaria.postgresql.org; Tue, 12 Nov 2024 14:16:12 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1tArgg-006qe6-4R for pgsql-hackers@arkaria.postgresql.org; Tue, 12 Nov 2024 14:16:10 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tArgf-006qdx-Ok for pgsql-hackers@lists.postgresql.org; Tue, 12 Nov 2024 14:16:10 +0000 Received: from mail-pg1-x52f.google.com ([2607:f8b0:4864:20::52f]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1tArgb-001Y6P-7h for pgsql-hackers@lists.postgresql.org; Tue, 12 Nov 2024 14:16:09 +0000 Received: by mail-pg1-x52f.google.com with SMTP id 41be03b00d2f7-7cd8803fe0aso3746087a12.0 for ; Tue, 12 Nov 2024 06:16:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=timescale.com; s=google; t=1731420964; x=1732025764; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=3Eh7AxTMFo7IhhYaa+2BqB4bo8Zdh7DYqIyR3SaPUoU=; b=dcizrQjZrsq4+igSPM5I2mzRAGoX9+DdkcJnREloC9dmJZ3S1Y5TqZ5CyU9ucXVJv+ geTlR8qC7KgROfUF9GU+zJIl/h4OqU8DpFKcBgNBT3NFdOjqtP+WEU8VtXU+N/cZs6wa ZUTqI0TVr1adq7zSLHNnKlh8DEhDUtSksGMLmZI+goxPkwF6cHXhJOo0oYFF8CCL5clr rNTMl7mA7A36CFErYhGh160XhyBpiqsooC43Ay1ZLabrFcqRFVJlcpD0RzbhVonsAHVa 85iZ6h9QPuunz8wpkL4WV7BxOpac673WOSX+SLt9ylydtDEp6z7D9W5HizY6haAnwYxU yHUw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1731420964; x=1732025764; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=3Eh7AxTMFo7IhhYaa+2BqB4bo8Zdh7DYqIyR3SaPUoU=; b=wxH2XCkWVL6LstXIJ8+l4a8XjhMASnVzc5xCuqWeHW0PtRmjXZU/tGKLdOL2/nWyfG 6mzrH1nxw0uSyXA208o+QSx44gPSxcAfMAzb4eQrgk19sRMPfQg6IC8UYmyj2ATy1yGa LC6Pzhul0j29RmfDWSszMSQk0vX8vgHpxqbWxwA5qplQdLlfSiPJHL0ANC1gSZz/gahe xmJakFGPPEgWu+yQWJDDxlukgnVlx34OZJLdP1+v5z9FJm0E+J7haPfm1XFE3nNzxKSS 5IsOTLWoKWcXFhkb+5BuIYF7zSE5XkTBqbWKmUPA9mBjN1NBSyxSZkrDDwpaECIoSH4O PwXg== X-Gm-Message-State: AOJu0YwVcV2Nu58hW/lmeOJXoHxN9se/52Gf0vlIRuhT5LB0QTQV6DS7 ervZah05248B3uIlEtCONWkmKTaY7BcZj6XkyatByejwCbEse5WtzXcxrodTmdTcsZgL8Of7gao ldmFfzVq8iHCTV1muQ2+pSc7a85XK5tHCx29ySS+2LHcLyim3V9I= X-Google-Smtp-Source: AGHT+IGRVhx7mPhEoNwhgPg9oCkTD3JfMsb1qqpnprEqoaVr/Pi98b21tahV6ZOcajVE9xzIV+MmioaO3FRzvmNA6VU= X-Received: by 2002:a17:90b:2ec8:b0:2e2:b46f:d92a with SMTP id 98e67ed59e1d1-2e9e4adeecbmr3476150a91.14.1731420963178; Tue, 12 Nov 2024 06:16:03 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Aleksander Alekseev Date: Tue, 12 Nov 2024 17:15:52 +0300 Message-ID: Subject: Re: [PATCH] Refactor SLRU to always use long file names To: PostgreSQL Hackers Cc: Michael Paquier Content-Type: multipart/mixed; boundary="00000000000077cd650626b7db9c" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000077cd650626b7db9c Content-Type: text/plain; charset="UTF-8" Hi Michael, Thanks for your feedback! > Your patch is just doing a rename() of the files from short to long > names. How about adding a new TAP script in pg_upgrade that creates a > couple of empty files with short files names in each path that needs > to do the transfer? Then the test could run one pg_upgrade command > and check that the new names are in place. You could use a array of > objects, with the base path, the old name and the new name, then loop > over it. With the check in check_slru_segment_filenames() based on > SLRU_SEG_FILENAMES_CHANGE_CAT_VER, that should work. OK I gave it a try and discovered that the test becomes very ugly very fast. Attached is the draft of the test to give you an idea of how it's going to look like. In order to trigger renaming of SLRU segments first we have to downgrade the catalog version in the pg_control file. Otherwise the check in check_slru_segment_filenames() is not going to pass and pg_upgrade will do nothing (*). This per se is easily done with binmode() and pack() however the file has a CRC. Calculating it is not difficult since we have pg_read_binary_file() and crc32c() SQL functions, although personally I don't find a need for starting a cluster for this quite satisfactory. The CRC is stored by the offset `sizeof(ControlData)-4` and unless I'm wrong is platform-dependent. I see several solutions for this problem: * We could add sizeof(ControlData) to the output of `pg_controldata` so we could use it from Perl * We could teach `initdb` to override the catalog version * We could implement a new tool for editing pg_control file On top of that I should add that the test takes about 7 seconds on my laptop. Apparently executing two initdb's and one pg_upgrade is not very cheap. This makes me wonder if instead of writing a new test we should modify 002_pg_upgrade.pl. This however will make the test even less readable and maintainable. What do you think? (*) BTW I noticed a mistake in the commented code. The condition should be `>=`, not `<`, i.e: ``` if(new_cluster.controldata.cat_ver >= SLRU_SEG_FILENAMES_CHANGE_CAT_VER) return; ``` -- Best regards, Aleksander Alekseev --00000000000077cd650626b7db9c Content-Type: text/plain; charset="US-ASCII"; name="005_slru.pl.txt" Content-Disposition: attachment; filename="005_slru.pl.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m3eii3x50 IyBDb3B5cmlnaHQgKGMpIDIwMjQsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3Vw Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3MgRkFUQUwgPT4gJ2FsbCc7Cgp1c2UgUG9zdGdyZVNR TDo6VGVzdDo6Q2x1c3RlcjsKdXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwp1c2UgVGVzdDo6 TW9yZTsKCiMgVGhpcyB0ZXN0IGVuc3VyZXMgdGhhdCBwZ191cGdyYWRlIHJlbmFtZXMgU0xSVSBz ZWdtZW50cy4KIyBBZnRlciB0aGUgdXBncmFkZSBhbGwgc2VnbWVudHMgc2hvdWxkIGhhdmUgbG9u ZyBmaWxlIG5hbWVzLgoKIyBlcXVhbHMgU0xSVV9TRUdfRklMRU5BTUVTX0NIQU5HRV9DQVRfVkVS IGluIHBnX3VwZ3JhZGUuaApteSAkc2xydV9zZWdfZmlsZW5hbWVzX2NoYW5nZV9jYXRfdmVyID0g MjAyNDExMTIxOwoKbXkgQHNscnVfZGlycyA9ICgKCSJwZ194YWN0IiwKCSJwZ19jb21taXRfdHMi LAoJInBnX211bHRpeGFjdC9vZmZzZXRzIiwKCSJwZ19tdWx0aXhhY3QvbWVtYmVycyIsCgkicGdf c3VidHJhbnMiLAoJInBnX3NlcmlhbCIsCik7CgpteSAkc2hvcnRfc2VnbWVudF9uYW1lID0gIjEy MzQiOwpteSAkbG9uZ19zZWdtZW50X25hbWUgPSAiMDAwMDAwMDAwMDAxMjM0IjsKCm15ICRvbGRu b2RlID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdvbGRfbm9kZScpOwokb2xkbm9k ZS0+aW5pdCgpOwpteSAkb2xkYmluZGlyID0gJG9sZG5vZGUtPmNvbmZpZ19kYXRhKCctLWJpbmRp cicpOwoKbXkgJG5ld25vZGUgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ25ld19u b2RlJyk7CiRuZXdub2RlLT5pbml0KCk7Cm15ICRuZXdiaW5kaXIgPSAkbmV3bm9kZS0+Y29uZmln X2RhdGEoJy0tYmluZGlyJyk7CgojIEZpbGwgZGF0YV9kaXIgb2YgdGhlIG9sZCBub2RlIHdpdGgg U0xSVSBzZWdtZW50cyB0aGF0IHVzZSBzaG9ydCBmaWxlIG5hbWVzLgojIHBnX3VwZ3JhZGUgcmVu YW1lcyB0aGUgZmlsZXMgd2l0aG91dCBsb29raW5nIGF0IHRoZSBjb250ZW50LCBzbyB0aGUgY29u dGVudAojIGlzIG5vdCBpbXBvcnRhbnQuCmZvcmVhY2ggbXkgJGRpciAoQHNscnVfZGlycykKewoJ bXkgJGZuYW1lID0gJG9sZG5vZGUtPmRhdGFfZGlyLiIvIi4kZGlyLiIvIi4kc2hvcnRfc2VnbWVu dF9uYW1lOwoJb3BlbiBteSAkZmgsICI+IiwgJGZuYW1lIG9yIGRpZSAkITsKCWNsb3NlICRmaDsK fQoKIyBNb2RpZnkgcGdfY29udHJvbCBvZiB0aGUgb2xkIG5vZGUgdG8gbWFrZSBpdCBsb29rIGxp a2UgYSB2ZXJzaW9uIHRoYXQgbmVlZHMKIyBtaWdyYXRpb24gKGRlY3JlYXNlIENvbnRyb2xEYXRh LT5jYXRfdmVyKS4gT3RoZXJ3aXNlIHBnX3VwZ3JhZGUgd2lsbCBza2lwIGl0LgpteSAkcGdfY29u dHJvbF9mbmFtZSA9ICRvbGRub2RlLT5kYXRhX2Rpci4iL2dsb2JhbC9wZ19jb250cm9sIjsKCm9w ZW4gbXkgJGZoLCAiKzwiLCAkcGdfY29udHJvbF9mbmFtZSBvciBkaWUgJCE7CmJpbm1vZGUoJGZo KTsKc3lzc2VlaygkZmgsIDEyLCAwKTsKbXkgJGJpbnZhbCA9IHBhY2soIkwhIiwgJHNscnVfc2Vn X2ZpbGVuYW1lc19jaGFuZ2VfY2F0X3ZlciAtIDEpOwpzeXN3cml0ZSgkZmgsICRiaW52YWwsIDQp OwpjbG9zZSgkZmgpOwoKIyBDYWxjdWxhdGUgQ1JDIG9mIHRoZSB1cGRhdGVkIGZpbGUgdXNpbmcg cGdfcmVhZF9iaW5hcnlfZmlsZSgpIGFuZCBjcmMzMmMoKQpteSAkZnNpemUgPSAtcyAkcGdfY29u dHJvbF9mbmFtZTsgIyBXUk9ORyEgc2hvdWxkIGJlIHNpemVvZihDb250cm9sRmlsZSkKJG5ld25v ZGUtPnN0YXJ0OwpteSAkbmV3Y3JjOwokbmV3bm9kZS0+cHNxbCgKCSJwb3N0Z3JlcyIsCgkiU0VM RUNUIGNyYzMyKHBnX3JlYWRfYmluYXJ5X2ZpbGUoJyIuJHBnX2NvbnRyb2xfZm5hbWUuIicsMCwi LigkZnNpemUtNCkuIikpOyIsCglzdGRvdXQgPT4gXCRuZXdjcmMsCglvbl9lcnJvcl9kaWUgPT4g MSwKCSk7CiRuZXdub2RlLT5zdG9wOwoKIyBVcGRhdGUgQ1JDCm9wZW4gJGZoLCAiKzwiLCAkcGdf Y29udHJvbF9mbmFtZSBvciBkaWUgJCE7CmJpbm1vZGUoJGZoKTsKc3lzc2VlaygkZmgsICRmc2l6 ZS00LCAwKTsKbXkgJGJpbmNyYyA9IHBhY2soIkwhIiwgJG5ld2NyYyk7CnN5c3dyaXRlKCRmaCwg JGJpbmNyYywgNCk7CmNsb3NlKCRmaCk7CgokbmV3bm9kZS0+Y29tbWFuZF9vaygKCVsKCQkncGdf dXBncmFkZScsCgkJJy0tb2xkLWRhdGFkaXInLCAkb2xkbm9kZS0+ZGF0YV9kaXIsCgkJJy0tbmV3 LWRhdGFkaXInLCAkbmV3bm9kZS0+ZGF0YV9kaXIsCgkJJy0tb2xkLWJpbmRpcicsICRvbGRiaW5k aXIsCgkJJy0tbmV3LWJpbmRpcicsICRuZXdiaW5kaXIsCgldLAoJJ3J1biBvZiBwZ191cGdyYWRl Jyk7CgojIENoZWNrIHRoYXQgcGdfdXBncmFkZSByZW5hbWVkIHRoZSBTTFJVIHNlZ21lbnRzIHdl IGNyZWF0ZWQKZm9yZWFjaCBteSAkZGlyIChAc2xydV9kaXJzKQp7CglvaygtZSAkbmV3bm9kZS0+ ZGF0YV9kaXIuIi8iLiRkaXIuIi8iLiRsb25nX3NlZ21lbnRfbmFtZSk7Cn0KCmRvbmVfdGVzdGlu ZygpOwo= --00000000000077cd650626b7db9c--