Обсуждение: pg_dump 9.1.1 hanging (collectSecLabels gets 0 labels)
We have a cluster running 9.1.1 where pg_dump hangs when we try to dump some a database inside of the cluster. The server is running AIX. I can see this on clean cluster where we do an initdb, followed by a createdb and try running pg_dump. I've tracked the issue down to collectSecLabels in pg_dump.c SELECT label, provider, classoid, objoid, objsbid FROM pg_catalog.pg_seclabel; returns 0 rows. The code in collectSecLabels() is not prepared to deal with a zero row result and tries to malloc 0 bytes. I am not yet sure if the problem is that my pg_seclabel is empty or if the issue is in collectSecLabels() or if collectSecLabels shouldn't even be called. Has anyone seen something similar?
Steve Singer <ssinger@ca.afilias.info> writes:
> I've tracked the issue down to collectSecLabels in pg_dump.c
> SELECT label, provider, classoid, objoid, objsbid FROM
> pg_catalog.pg_seclabel;
> returns 0 rows.
> The code in collectSecLabels() is not prepared to deal with a zero row
> result and tries to malloc 0 bytes.
pg_seclabel is almost always empty, so I'm not convinced that you've
identified your problem correctly.
regards, tom lane
On 11-11-09 06:35 PM, Tom Lane wrote: > Steve Singer<ssinger@ca.afilias.info> writes: >> I've tracked the issue down to collectSecLabels in pg_dump.c > >> SELECT label, provider, classoid, objoid, objsbid FROM >> pg_catalog.pg_seclabel; > >> returns 0 rows. > >> The code in collectSecLabels() is not prepared to deal with a zero row >> result and tries to malloc 0 bytes. > > pg_seclabel is almost always empty, so I'm not convinced that you've > identified your problem correctly. > > regards, tom lane > The attached patch seems to fix the issue. The man page for malloc on AIX is pretty clear on what happens when you try to malloc 0 bytes. It returns NULL.
Вложения
Steve Singer <ssinger@ca.afilias.info> writes:
> The man page for malloc on AIX is pretty clear on what happens when you
> try to malloc 0 bytes. It returns NULL.
Yes, that's a pretty common behavior for malloc(0). It should not cause
a problem here AFAICS.
... Oh, I see, the problem is that &labels[-1] might not compare to
&labels[0] the way we want. I think only the first hunk of your
patch is actually necessary.
regards, tom lane
On 11-11-10 02:00 PM, Tom Lane wrote: > Steve Singer<ssinger@ca.afilias.info> writes: >> The man page for malloc on AIX is pretty clear on what happens when you >> try to malloc 0 bytes. It returns NULL. > > Yes, that's a pretty common behavior for malloc(0). It should not cause > a problem here AFAICS. > > ... Oh, I see, the problem is that&labels[-1] might not compare to > &labels[0] the way we want. I think only the first hunk of your > patch is actually necessary. > > regards, tom lane > Yes the problem is still fixed if I only apply the first hunk.
Steve Singer <ssinger@ca.afilias.info> writes:
> On 11-11-10 02:00 PM, Tom Lane wrote:
>> ... Oh, I see, the problem is that&labels[-1] might not compare to
>> &labels[0] the way we want. I think only the first hunk of your
>> patch is actually necessary.
> Yes the problem is still fixed if I only apply the first hunk.
OK, everything seems satisfactorily explained then. Will commit the
fix, thanks for the report!
regards, tom lane