</listitem>
</varlistentry>
- <varlistentry id="guc-trace-recovery-messages" xreflabel="trace_recovery_messages">
- <term><varname>trace_recovery_messages</varname> (<type>enum</type>)
- <indexterm>
- <primary><varname>trace_recovery_messages</varname> configuration parameter</primary>
- </indexterm>
- </term>
- <listitem>
- <para>
- Enables logging of recovery-related debugging output that otherwise
- would not be logged. This parameter allows the user to override the
- normal setting of <xref linkend="guc-log-min-messages"/>, but only for
- specific messages. This is intended for use in debugging hot standby.
- Valid values are <literal>DEBUG5</literal>, <literal>DEBUG4</literal>,
- <literal>DEBUG3</literal>, <literal>DEBUG2</literal>, <literal>DEBUG1</literal>, and
- <literal>LOG</literal>. The default, <literal>LOG</literal>, does not affect
- logging decisions at all. The other values cause recovery-related
- debug messages of that priority or higher to be logged as though they
- had <literal>LOG</literal> priority; for common settings of
- <varname>log_min_messages</varname> this results in unconditionally sending
- them to the server log.
- This parameter can only be set in the <filename>postgresql.conf</filename>
- file or on the server command line.
- </para>
- </listitem>
- </varlistentry>
-
<varlistentry id="guc-trace-sort" xreflabel="trace_sort">
<term><varname>trace_sort</varname> (<type>boolean</type>)
<indexterm>
*/
if (XLogHaveInvalidPages())
{
- elog(trace_recovery(DEBUG2),
+ elog(DEBUG2,
"could not record restart point at %X/%X because there "
"are unresolved references to invalid pages",
LSN_FORMAT_ARGS(checkPoint->redo));
LSN_FORMAT_ARGS(xlogreader->ReadRecPtr));
#ifdef WAL_DEBUG
- if (XLOG_DEBUG ||
- (record->xl_rmid == RM_XACT_ID && trace_recovery_messages <= DEBUG2) ||
- (record->xl_rmid != RM_XACT_ID && trace_recovery_messages <= DEBUG3))
+ if (XLOG_DEBUG)
{
StringInfoData buf;
running->oldestRunningXid))
{
standbyState = STANDBY_SNAPSHOT_READY;
- elog(trace_recovery(DEBUG1),
+ elog(DEBUG1,
"recovery snapshots are now enabled");
}
else
- elog(trace_recovery(DEBUG1),
+ elog(DEBUG1,
"recovery snapshot waiting for non-overflowed snapshot or "
"until oldest active xid on standby is at least %u (now %u)",
standbySnapshotPendingXmin,
KnownAssignedXidsAdd(xids[i], xids[i], true);
}
- KnownAssignedXidsDisplay(trace_recovery(DEBUG3));
+ KnownAssignedXidsDisplay(DEBUG3);
}
pfree(xids);
Assert(FullTransactionIdIsValid(TransamVariables->nextXid));
- KnownAssignedXidsDisplay(trace_recovery(DEBUG3));
+ KnownAssignedXidsDisplay(DEBUG3);
if (standbyState == STANDBY_SNAPSHOT_READY)
- elog(trace_recovery(DEBUG1), "recovery snapshots are now enabled");
+ elog(DEBUG1, "recovery snapshots are now enabled");
else
- elog(trace_recovery(DEBUG1),
+ elog(DEBUG1,
"recovery snapshot waiting for non-overflowed snapshot or "
"until oldest active xid on standby is at least %u (now %u)",
standbySnapshotPendingXmin,
Assert(TransactionIdIsValid(xid));
Assert(TransactionIdIsValid(latestObservedXid));
- elog(trace_recovery(DEBUG4), "record known xact %u latestObservedXid %u",
+ elog(DEBUG4, "record known xact %u latestObservedXid %u",
xid, latestObservedXid);
/*
{
Assert(TransactionIdIsValid(xid));
- elog(trace_recovery(DEBUG4), "remove KnownAssignedXid %u", xid);
+ elog(DEBUG4, "remove KnownAssignedXid %u", xid);
/*
* Note: we cannot consider it an error to remove an XID that's not
if (!TransactionIdIsValid(removeXid))
{
- elog(trace_recovery(DEBUG4), "removing all KnownAssignedXids");
+ elog(DEBUG4, "removing all KnownAssignedXids");
pArray->numKnownAssignedXids = 0;
pArray->headKnownAssignedXids = pArray->tailKnownAssignedXids = 0;
return;
}
- elog(trace_recovery(DEBUG4), "prune KnownAssignedXids to %u", removeXid);
+ elog(DEBUG4, "prune KnownAssignedXids to %u", removeXid);
/*
* Mark entries invalid starting at the tail. Since array is sorted, we
TransactionIdDidAbort(xid))
return;
- elog(trace_recovery(DEBUG4),
- "adding recovery lock: db %u rel %u", dbOid, relOid);
+ elog(DEBUG4, "adding recovery lock: db %u rel %u", dbOid, relOid);
/* dbOid is InvalidOid when we are locking a shared relation. */
Assert(OidIsValid(relOid));
{
LOCKTAG locktag;
- elog(trace_recovery(DEBUG4),
+ elog(DEBUG4,
"releasing recovery lock: xid %u db %u rel %u",
entry->key.xid, entry->key.dbOid, entry->key.relOid);
/* Release the lock ... */
HASH_SEQ_STATUS status;
RecoveryLockXidEntry *entry;
- elog(trace_recovery(DEBUG2), "release all standby locks");
+ elog(DEBUG2, "release all standby locks");
hash_seq_init(&status, RecoveryLockXidHash);
while ((entry = hash_seq_search(&status)))
recptr = XLogInsert(RM_STANDBY_ID, XLOG_RUNNING_XACTS);
if (CurrRunningXacts->subxid_overflow)
- elog(trace_recovery(DEBUG2),
+ elog(DEBUG2,
"snapshot of %d running transactions overflowed (lsn %X/%X oldest xid %u latest complete %u next xid %u)",
CurrRunningXacts->xcnt,
LSN_FORMAT_ARGS(recptr),
CurrRunningXacts->latestCompletedXid,
CurrRunningXacts->nextXid);
else
- elog(trace_recovery(DEBUG2),
+ elog(DEBUG2,
"snapshot of %d+%d running transaction ids (lsn %X/%X oldest xid %u latest complete %u next xid %u)",
CurrRunningXacts->xcnt, CurrRunningXacts->subxcnt,
LSN_FORMAT_ARGS(recptr),
if (nmsgs <= 0)
return;
- elog(trace_recovery(DEBUG4), "replaying commit with %d messages%s", nmsgs,
+ elog(DEBUG4, "replaying commit with %d messages%s", nmsgs,
(RelcacheInitFileInval ? " and relcache file invalidation" : ""));
if (RelcacheInitFileInval)
{
- elog(trace_recovery(DEBUG4), "removing relcache init files for database %u",
- dbid);
+ elog(DEBUG4, "removing relcache init files for database %u", dbid);
/*
* RelationCacheInitFilePreInvalidate, when the invalidation message
nwritten += rc;
}
}
-
-
-/*
- * Adjust the level of a recovery-related message per trace_recovery_messages.
- *
- * The argument is the default log level of the message, eg, DEBUG2. (This
- * should only be applied to DEBUGn log messages, otherwise it's a no-op.)
- * If the level is >= trace_recovery_messages, we return LOG, causing the
- * message to be logged unconditionally (for most settings of
- * log_min_messages). Otherwise, we return the argument unchanged.
- * The message will then be shown based on the setting of log_min_messages.
- *
- * Intention is to keep this for at least the whole of the 9.0 production
- * release, so we can more easily diagnose production problems in the field.
- * It should go away eventually, though, because it's an ugly and
- * hard-to-explain kluge.
- */
-int
-trace_recovery(int trace_level)
-{
- if (trace_level < LOG &&
- trace_level >= trace_recovery_messages)
- return LOG;
-
- return trace_level;
-}
int log_temp_files = -1;
double log_statement_sample_rate = 1.0;
double log_xact_sample_rate = 0;
-int trace_recovery_messages = LOG;
char *backtrace_functions;
int temp_file_limit = -1;
NULL, NULL, NULL
},
- {
- {"trace_recovery_messages", PGC_SIGHUP, DEVELOPER_OPTIONS,
- gettext_noop("Enables logging of recovery-related debugging information."),
- gettext_noop("Each level includes all the levels that follow it. The later"
- " the level, the fewer messages are sent."),
- GUC_NOT_IN_SAMPLE,
- },
- &trace_recovery_messages,
-
- /*
- * client_message_level_options allows too many values, really, but
- * it's not worth having a separate options array for this.
- */
- LOG, client_message_level_options,
- NULL, NULL, NULL
- },
-
{
{"track_functions", PGC_SUSET, STATS_CUMULATIVE,
gettext_noop("Collects function-level statistics on database activity."),
extern void PreventCommandIfParallelMode(const char *cmdname);
extern void PreventCommandDuringRecovery(const char *cmdname);
-/* in utils/misc/guc_tables.c */
-extern PGDLLIMPORT int trace_recovery_messages;
-extern int trace_recovery(int trace_level);
-
/*****************************************************************************
* pdir.h -- *
* POSTGRES directory path definitions. *