checksums_version.v1.patch
application/octet-stream
Filename: checksums_version.v1.patch
Type: application/octet-stream
Part: 0
Message:
Re: Enabling Checksums
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: unified
Series: patch v1
| File | + | − |
|---|---|---|
| src/backend/access/transam/xlog.c | 3 | 3 |
| src/backend/bootstrap/bootstrap.c | 3 | 2 |
| src/bin/pg_controldata/pg_controldata.c | 3 | 1 |
| src/bin/pg_resetxlog/pg_resetxlog.c | 4 | 2 |
| src/include/catalog/pg_control.h | 2 | 2 |
| src/include/storage/bufpage.h | 4 | 1 |
diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c
index 3cb866f..1105ba2 100644
--- a/src/backend/access/transam/xlog.c
+++ b/src/backend/access/transam/xlog.c
@@ -60,7 +60,7 @@
#include "utils/timestamp.h"
#include "pg_trace.h"
-extern bool bootstrap_data_checksums;
+extern uint32 bootstrap_data_checksum_version;
/* File path names (all relative to $PGDATA) */
#define RECOVERY_COMMAND_FILE "recovery.conf"
@@ -3797,7 +3797,7 @@ bool
DataChecksumsEnabled(void)
{
Assert(ControlFile != NULL);
- return ControlFile->data_checksums;
+ return (ControlFile->data_checksum_version > 0);
}
/*
@@ -4126,7 +4126,7 @@ BootStrapXLOG(void)
ControlFile->max_prepared_xacts = max_prepared_xacts;
ControlFile->max_locks_per_xact = max_locks_per_xact;
ControlFile->wal_level = wal_level;
- ControlFile->data_checksums = bootstrap_data_checksums;
+ ControlFile->data_checksum_version = bootstrap_data_checksum_version;
/* some additional ControlFile fields are set in WriteControlFile() */
diff --git a/src/backend/bootstrap/bootstrap.c b/src/backend/bootstrap/bootstrap.c
index 287f19b..9e401ef 100644
--- a/src/backend/bootstrap/bootstrap.c
+++ b/src/backend/bootstrap/bootstrap.c
@@ -34,6 +34,7 @@
#include "postmaster/walwriter.h"
#include "replication/walreceiver.h"
#include "storage/bufmgr.h"
+#include "storage/bufpage.h"
#include "storage/ipc.h"
#include "storage/proc.h"
#include "tcop/tcopprot.h"
@@ -48,7 +49,7 @@
extern int optind;
extern char *optarg;
-bool bootstrap_data_checksums = false;
+uint32 bootstrap_data_checksum_version = 0; /* No checksum */
#define ALLOC(t, c) ((t *) calloc((unsigned)(c), sizeof(t)))
@@ -262,7 +263,7 @@ AuxiliaryProcessMain(int argc, char *argv[])
SetConfigOption("fsync", "false", PGC_POSTMASTER, PGC_S_ARGV);
break;
case 'k':
- bootstrap_data_checksums = true;
+ bootstrap_data_checksum_version = PG_DATA_CHECKSUM_VERSION;
break;
case 'r':
strlcpy(OutputFileName, optarg, MAXPGPATH);
diff --git a/src/bin/pg_controldata/pg_controldata.c b/src/bin/pg_controldata/pg_controldata.c
index ceb4125..ce86985 100644
--- a/src/bin/pg_controldata/pg_controldata.c
+++ b/src/bin/pg_controldata/pg_controldata.c
@@ -288,6 +288,8 @@ main(int argc, char *argv[])
printf(_("Float8 argument passing: %s\n"),
(ControlFile.float8ByVal ? _("by value") : _("by reference")));
printf(_("Data page checksums: %s\n"),
- (ControlFile.data_checksums ? _("enabled") : _("disabled")));
+ (ControlFile.data_checksum_version > 0 ? _("enabled") : _("disabled")));
+ printf(_("Data page checksum version: %u\n"),
+ ControlFile.data_checksum_version);
return 0;
}
diff --git a/src/bin/pg_resetxlog/pg_resetxlog.c b/src/bin/pg_resetxlog/pg_resetxlog.c
index 124dcfb..1635cc5 100644
--- a/src/bin/pg_resetxlog/pg_resetxlog.c
+++ b/src/bin/pg_resetxlog/pg_resetxlog.c
@@ -624,8 +624,10 @@ PrintControlValues(bool guessed)
(ControlFile.float4ByVal ? _("by value") : _("by reference")));
printf(_("Float8 argument passing: %s\n"),
(ControlFile.float8ByVal ? _("by value") : _("by reference")));
- printf(_("Data page checksums: %s\n"),
- (ControlFile.data_checksums ? _("enabled") : _("disabled")));
+ printf(_("Data page checksums: %s\n"),
+ (ControlFile.data_checksum_version > 0 ? _("enabled") : _("disabled")));
+ printf(_("Data page checksum version: %u\n"),
+ ControlFile.data_checksum_version);
}
diff --git a/src/include/catalog/pg_control.h b/src/include/catalog/pg_control.h
index 1d003d6..dfe6aac 100644
--- a/src/include/catalog/pg_control.h
+++ b/src/include/catalog/pg_control.h
@@ -213,8 +213,8 @@ typedef struct ControlFileData
bool float4ByVal; /* float4 pass-by-value? */
bool float8ByVal; /* float8, int8, etc pass-by-value? */
- /* Are data pages protected by checksums? */
- bool data_checksums;
+ /* Are data pages protected by checksums? Zero if no checksum version */
+ uint32 data_checksum_version;
/* CRC of all above ... MUST BE LAST! */
pg_crc32 crc;
diff --git a/src/include/storage/bufpage.h b/src/include/storage/bufpage.h
index b9ee7c2..df581b7 100644
--- a/src/include/storage/bufpage.h
+++ b/src/include/storage/bufpage.h
@@ -189,9 +189,12 @@ typedef PageHeaderData *PageHeader;
* Release 8.3 uses 4; it changed the HeapTupleHeader layout again, and
* added the pd_flags field (by stealing some bits from pd_tli),
* as well as adding the pd_prune_xid field (which enlarges the header).
+ *
+ * As of Release 9.3, the checksum version must also be considered when
+ * handling pages.
*/
#define PG_PAGE_LAYOUT_VERSION 4
-
+#define PG_DATA_CHECKSUM_VERSION 1
/* ----------------------------------------------------------------
* page support macros