aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSimon Riggs <simon@2ndQuadrant.com>2013-04-30 12:27:12 +0100
committerSimon Riggs <simon@2ndQuadrant.com>2013-04-30 12:27:12 +0100
commit443951748ce4c94b001877c7cf88b0ee969c79e7 (patch)
tree6f5af0f79b52f3e9df2b88b5322d573ed0a34f40 /src
parent730924397c8151c3cf34e633211cd0fe4a0db112 (diff)
downloadpostgresql-443951748ce4c94b001877c7cf88b0ee969c79e7.tar.gz
postgresql-443951748ce4c94b001877c7cf88b0ee969c79e7.zip
Record data_checksum_version in control file.
The value is not used anywhere in code, but will allow future changes to the checksum version should that become necessary in the future.
Diffstat (limited to 'src')
-rw-r--r--src/backend/access/transam/xlog.c6
-rw-r--r--src/backend/bootstrap/bootstrap.c5
-rw-r--r--src/bin/pg_controldata/pg_controldata.c4
-rw-r--r--src/bin/pg_resetxlog/pg_resetxlog.c4
-rw-r--r--src/include/catalog/pg_control.h4
-rw-r--r--src/include/storage/bufpage.h5
6 files changed, 16 insertions, 12 deletions
diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c
index 5452ae139a2..959f4231873 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 287f19b6ece..9e401ef7a30 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 ceb412505bf..a790f99cb51 100644
--- a/src/bin/pg_controldata/pg_controldata.c
+++ b/src/bin/pg_controldata/pg_controldata.c
@@ -287,7 +287,7 @@ main(int argc, char *argv[])
(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 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 124dcfb7772..9c340b2db59 100644
--- a/src/bin/pg_resetxlog/pg_resetxlog.c
+++ b/src/bin/pg_resetxlog/pg_resetxlog.c
@@ -624,8 +624,8 @@ 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 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 1d003d6d7a0..dfe6aacdf70 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 b9ee7c27e10..df581b779f6 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