mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-12-21 08:29:39 +08:00
Handle 5-char filenames in SlruScanDirectory
Original users of slru.c were all producing 4-digit filenames, so that
was all that that code was prepared to handle. Changes to multixact.c
in the course of commit 0ac5ad5134
made pg_multixact/members create
5-digit filenames once a certain threshold was reached, which
SlruScanDirectory wasn't prepared to deal with; in particular,
5-digit-name files were not removed during truncation. Change that
routine to make it aware of those files, and have it process them just
like any others.
Right now, some pg_multixact/members directories will contain a mixture
of 4-char and 5-char filenames. A future commit is expected fix things
so that each slru.c user declares the correct maximum width for the
files it produces, to avoid such unsightly mixtures.
Noticed while investigating bug #8673 reported by Serge Negodyuck.
This commit is contained in:
parent
a50d976254
commit
638cf09e76
@ -1293,8 +1293,12 @@ SlruScanDirectory(SlruCtl ctl, SlruScanCallback callback, void *data)
|
|||||||
cldir = AllocateDir(ctl->Dir);
|
cldir = AllocateDir(ctl->Dir);
|
||||||
while ((clde = ReadDir(cldir, ctl->Dir)) != NULL)
|
while ((clde = ReadDir(cldir, ctl->Dir)) != NULL)
|
||||||
{
|
{
|
||||||
if (strlen(clde->d_name) == 4 &&
|
size_t len;
|
||||||
strspn(clde->d_name, "0123456789ABCDEF") == 4)
|
|
||||||
|
len = strlen(clde->d_name);
|
||||||
|
|
||||||
|
if ((len == 4 || len == 5) &&
|
||||||
|
strspn(clde->d_name, "0123456789ABCDEF") == len)
|
||||||
{
|
{
|
||||||
segno = (int) strtol(clde->d_name, NULL, 16);
|
segno = (int) strtol(clde->d_name, NULL, 16);
|
||||||
segpage = segno * SLRU_PAGES_PER_SEGMENT;
|
segpage = segno * SLRU_PAGES_PER_SEGMENT;
|
||||||
|
Loading…
Reference in New Issue
Block a user