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.
This commit is contained in:
Simon Riggs 2013-04-30 12:27:12 +01:00
parent 730924397c
commit 443951748c
6 changed files with 16 additions and 12 deletions

View File

@ -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() */

View File

@ -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);

View File

@ -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;
}

View File

@ -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);
}

View File

@ -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;

View File

@ -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