On Tue, Jul 31, 2018 at 01:39:07PM +0900, Kyotaro HORIGUCHI wrote:
> "int backendID" is left in autovacuum.c as an unused variable.
Fixed.
> "Even if this is *not* an atomic operation" ?
Yeah, I am reworking this comment a bit more to map with the other
PGPROC fields.
> + * Mark the proc entry as owning this namespace which autovacuum uses to
> + * decide if a temporary file entry can be marked as orphaned or not. Even
> + * if this is an atomic operation, this can be safely done lock-less as no
> + * temporary relations associated to it can be seen yet by autovacuum when
> + * scanning pg_class.
> + */
> + MyProc->tempNamespaceId = namespaceId;
>
> The comment looks wrong. After a crash having temp tables,
> pg_class has orphaned temp relations and the namespace can be of
> reconnected backends especially for low-numbered backends
I don't quite understand your comment. InitProcess() initializes the
field, so if a backend reconnects and uses the same proc slot as a
backend which had a temporary namespace, then you would discard orphaned
tables. Anyway, I have reworked it as such:
+ /*
+ * Mark MyProc as owning this namespace which other processes can use to
+ * decide if a temporary namespace is in use or not. We assume that
+ * assignment of namespaceId is an atomic operation. Even if it is not,
+ * there is as no temporary relations associated to it and the temporary
+ * namespace creation is not committed yet, so none of its contents can
+ * be seen yet if scanning pg_class or pg_namespace.
+ */
As new minor versions have been tagged, I am planning to commit this
patch soon with some tweaks for the comments. As this introduces a new
field to PGPROC, so back-patching the thing as-is would cause an ABI
breakage. Are folks here fine with the new field added to the bottom of
the structure for the backpatched versions, including v11? I have found
about commit 13752743 which has also added a new field called
isBackgroundWorker in the middle of PGPROC in a released branch, which
looks to me like an ABI breakage...
--
Michael