crash_REL9_2CF4.patch
application/octet-stream
Filename: crash_REL9_2CF4.patch
Type: application/octet-stream
Part: 0
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
| File | + | − |
|---|---|---|
| src/backend/postmaster/postmaster.c | 0 | 0 |
| src/backend/storage/smgr/md.c | 0 | 0 |
| src/backend/utils/misc/guc.c | 0 | 0 |
| src/backend/utils/misc/postgresql.conf.sample | 0 | 0 |
diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c
new file mode 100644
index 5d7888a..4aa7115
*** a/src/backend/postmaster/postmaster.c
--- b/src/backend/postmaster/postmaster.c
*************** checkDataDir(void)
*** 1235,1241 ****
* reasonable check to apply on Windows.
*/
#if !defined(WIN32) && !defined(__CYGWIN__)
! if (stat_buf.st_mode & (S_IRWXG | S_IRWXO))
ereport(FATAL,
(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
errmsg("data directory \"%s\" has group or world access",
--- 1235,1241 ----
* reasonable check to apply on Windows.
*/
#if !defined(WIN32) && !defined(__CYGWIN__)
! if (0 && stat_buf.st_mode & (S_IRWXG | S_IRWXO))
ereport(FATAL,
(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
errmsg("data directory \"%s\" has group or world access",
diff --git a/src/backend/storage/smgr/md.c b/src/backend/storage/smgr/md.c
new file mode 100644
index bfc9f06..bf5cfe7
*** a/src/backend/storage/smgr/md.c
--- b/src/backend/storage/smgr/md.c
***************
*** 59,64 ****
--- 59,66 ----
#define FILE_POSSIBLY_DELETED(err) ((err) == ENOENT || (err) == EACCES)
#endif
+ int JJ_torn_page=0;
+
/*
* The magnetic disk storage manager keeps track of open file
* descriptors in its own descriptor pool. This is done to make it
*************** mdwrite(SMgrRelation reln, ForkNumber fo
*** 689,694 ****
--- 691,697 ----
off_t seekpos;
int nbytes;
MdfdVec *v;
+ static int counter=0;
/* This assert is too expensive to have on normally ... */
#ifdef CHECK_WRITE_VS_EXTEND
*************** mdwrite(SMgrRelation reln, ForkNumber fo
*** 713,719 ****
errmsg("could not seek to block %u in file \"%s\": %m",
blocknum, FilePathName(v->mdfd_vfd))));
! nbytes = FileWrite(v->mdfd_vfd, buffer, BLCKSZ);
TRACE_POSTGRESQL_SMGR_MD_WRITE_DONE(forknum, blocknum,
reln->smgr_rnode.node.spcNode,
--- 716,733 ----
errmsg("could not seek to block %u in file \"%s\": %m",
blocknum, FilePathName(v->mdfd_vfd))));
! if (JJ_torn_page > 0 && counter++ > JJ_torn_page) {
! nbytes = FileWrite(v->mdfd_vfd, buffer, BLCKSZ/3);
! ereport(FATAL,
! (errcode(ERRCODE_DISK_FULL),
! errmsg("could not write block %u of relation %s: wrote only %d of %d bytes",
! blocknum,
! relpath(reln->smgr_rnode, forknum),
! nbytes, BLCKSZ),
! errhint("JJ is screwing with the database.")));
! } else {
! nbytes = FileWrite(v->mdfd_vfd, buffer, BLCKSZ);
! }
TRACE_POSTGRESQL_SMGR_MD_WRITE_DONE(forknum, blocknum,
reln->smgr_rnode.node.spcNode,
diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c
new file mode 100644
index a5becbe..b6d8ebf
*** a/src/backend/utils/misc/guc.c
--- b/src/backend/utils/misc/guc.c
***************
*** 127,132 ****
--- 127,133 ----
/* XXX these should appear in other modules' header files */
extern bool Log_disconnections;
extern int CommitDelay;
+ int JJ_torn_page;
extern int CommitSiblings;
extern char *default_tablespace;
extern char *temp_tablespaces;
*************** static struct config_int ConfigureNamesI
*** 2031,2036 ****
--- 2032,2046 ----
},
{
+ {"JJ_torn_page", PGC_USERSET, WAL_SETTINGS,
+ gettext_noop("Simulate a torn-page crash after this number of page writes (0 to turn off)"),
+ NULL
+ },
+ &JJ_torn_page,
+ 0, 0, 100000, NULL, NULL
+ },
+
+ {
{"commit_siblings", PGC_USERSET, WAL_SETTINGS,
gettext_noop("Sets the minimum concurrent open transactions before performing "
"commit_delay."),
diff --git a/src/backend/utils/misc/postgresql.conf.sample b/src/backend/utils/misc/postgresql.conf.sample
new file mode 100644
index 96da086..1cdebbb
*** a/src/backend/utils/misc/postgresql.conf.sample
--- b/src/backend/utils/misc/postgresql.conf.sample
***************
*** 159,165 ****
# - Settings -
! #wal_level = minimal # minimal, archive, or hot_standby
# (change requires restart)
#fsync = on # turns forced synchronization on or off
#synchronous_commit = on # synchronization level; on, off, or local
--- 159,165 ----
# - Settings -
! wal_level = archive # minimal, archive, or hot_standby
# (change requires restart)
#fsync = on # turns forced synchronization on or off
#synchronous_commit = on # synchronization level; on, off, or local
***************
*** 180,199 ****
# - Checkpoints -
! #checkpoint_segments = 3 # in logfile segments, min 1, 16MB each
! #checkpoint_timeout = 5min # range 30s-1h
#checkpoint_completion_target = 0.5 # checkpoint target duration, 0.0 - 1.0
#checkpoint_warning = 30s # 0 disables
# - Archiving -
! #archive_mode = off # allows archiving to be done
# (change requires restart)
! #archive_command = '' # command to use to archive a logfile segment
# placeholders: %p = path of file to archive
# %f = file name only
# e.g. 'test ! -f /mnt/server/archivedir/%f && cp %p /mnt/server/archivedir/%f'
! #archive_timeout = 0 # force a logfile segment switch after this
# number of seconds; 0 disables
--- 180,199 ----
# - Checkpoints -
! checkpoint_segments = 1 # in logfile segments, min 1, 16MB each
! checkpoint_timeout = 30s # range 30s-1h
#checkpoint_completion_target = 0.5 # checkpoint target duration, 0.0 - 1.0
#checkpoint_warning = 30s # 0 disables
# - Archiving -
! archive_mode = on # allows archiving to be done
# (change requires restart)
! archive_command = 'echo archive_command %p %f `date`' # command to use to archive a logfile segment
# placeholders: %p = path of file to archive
# %f = file name only
# e.g. 'test ! -f /mnt/server/archivedir/%f && cp %p /mnt/server/archivedir/%f'
! archive_timeout = 30 # force a logfile segment switch after this
# number of seconds; 0 disables
***************
*** 382,394 ****
#debug_print_rewritten = off
#debug_print_plan = off
#debug_pretty_print = on
! #log_checkpoints = off
#log_connections = off
#log_disconnections = off
#log_duration = off
#log_error_verbosity = default # terse, default, or verbose messages
#log_hostname = off
! #log_line_prefix = '' # special values:
# %a = application name
# %u = user name
# %d = database name
--- 382,394 ----
#debug_print_rewritten = off
#debug_print_plan = off
#debug_pretty_print = on
! log_checkpoints = on
#log_connections = off
#log_disconnections = off
#log_duration = off
#log_error_verbosity = default # terse, default, or verbose messages
#log_hostname = off
! log_line_prefix = '%p %i %m:' # special values:
# %a = application name
# %u = user name
# %d = database name