Re: Reviewing freeze map code - Mailing list pgsql-hackers

From Andres Freund
Subject Re: Reviewing freeze map code
Date
Msg-id 20160505182009.4xepvfzx5qyeu6w6@alap3.anarazel.de
Whole thread Raw
In response to Reviewing freeze map code  (Andres Freund <andres@anarazel.de>)
Responses Re: Reviewing freeze map code  (Robert Haas <robertmhaas@gmail.com>)
List pgsql-hackers
Hi,

On 2016-05-02 14:48:18 -0700, Andres Freund wrote:
> 7087166 pg_upgrade: Convert old visibility map format to new format.

+const char *
+rewriteVisibilityMap(const char *fromfile, const char *tofile, bool force)
...

+    while ((bytesRead = read(src_fd, buffer, BLCKSZ)) == BLCKSZ)
+    {
..

Uh, shouldn't we actually fail if we read incompletely? Rather than
silently ignoring the problem? Ok, this causes no corruption, but it
indicates that something went significantly wrong.

+            char        new_vmbuf[BLCKSZ];
+            char       *new_cur = new_vmbuf;
+            bool        empty = true;
+            bool        old_lastpart;
+
+            /* Copy page header in advance */
+            memcpy(new_vmbuf, &pageheader, SizeOfPageHeaderData);

Shouldn't we zero out new_vmbuf? Afaics we're not necessarily zeroing it
with old_lastpart && !empty, right?


+    if ((dst_fd = open(tofile, O_RDWR | O_CREAT | (force ? 0 : O_EXCL), S_IRUSR | S_IWUSR)) < 0)
+    {
+        close(src_fd);
+        return getErrorText();
+    }

I know you guys copied this, but what's the force thing about?
Expecially as it's always set to true by the callers (i.e. what is the
parameter even about?)?  Wouldn't we at least have to specify O_TRUNC in
the force case?


+                old_cur += BITS_PER_HEAPBLOCK_OLD;
+                new_cur += BITS_PER_HEAPBLOCK;

I'm not sure I'm understanding the point of the BITS_PER_HEAPBLOCK_OLD
stuff - as long as it's hardcoded into rewriteVisibilityMap() we'll not
be able to have differing ones anyway, should we decide to add a third
bit?

- Andres



pgsql-hackers by date:

Previous
From: Tom Lane
Date:
Subject: Re: Initial release notes created for 9.6
Next
From: Robert Haas
Date:
Subject: Re: Initial release notes created for 9.6