static void pgstat_write_statsfile(void);
static void pgstat_read_statsfile(void);
-static void pgstat_reset_after_failure(TimestampTz ts);
+static void pgstat_reset_after_failure(void);
static bool pgstat_flush_pending_entries(bool nowait);
errmsg("unlinked permanent statistics file \"%s\"",
PGSTAT_STAT_PERMANENT_FILENAME)));
}
+
+ /*
+ * Reset stats contents. This will set reset timestamps of fixed-numbered
+ * stats to the current time (no variable stats exist).
+ */
+ pgstat_reset_after_failure();
}
/*
bool found;
const char *statfile = PGSTAT_STAT_PERMANENT_FILENAME;
PgStat_ShmemControl *shmem = pgStatLocal.shmem;
- TimestampTz ts = GetCurrentTimestamp();
/* shouldn't be called from postmaster */
Assert(IsUnderPostmaster || !IsPostmasterEnvironment);
(errcode_for_file_access(),
errmsg("could not open statistics file \"%s\": %m",
statfile)));
- pgstat_reset_after_failure(ts);
+ pgstat_reset_after_failure();
return;
}
ereport(LOG,
(errmsg("corrupted statistics file \"%s\"", statfile)));
- /* Set the current timestamp as reset timestamp */
- pgstat_reset_after_failure(ts);
+ pgstat_reset_after_failure();
goto done;
}
/*
- * Helper to reset / drop stats after restoring stats from disk failed,
- * potentially after already loading parts.
+ * Helper to reset / drop stats after a crash or after restoring stats from
+ * disk failed, potentially after already loading parts.
*/
static void
-pgstat_reset_after_failure(TimestampTz ts)
+pgstat_reset_after_failure(void)
{
+ TimestampTz ts = GetCurrentTimestamp();
+
/* reset fixed-numbered stats */
for (int kind = PGSTAT_KIND_FIRST_VALID; kind <= PGSTAT_KIND_LAST; kind++)
{
$wal_restart2->{reset},
"$sect: newer stats_reset");
+$node->stop('immediate');
+$node->start;
+
+$sect = "post immediate restart";
+my $wal_restart_immediate = wal_stats();
+
+cmp_ok(
+ $wal_reset_restart->{reset}, 'lt',
+ $wal_restart_immediate->{reset},
+ "$sect: reset timestamp is new");
$node->stop;
done_testing();