LCOV - differential code coverage report
Current view: top level - src/backend/utils/activity - pgstat_archiver.c (source / functions) Coverage Total Hit CBC
Current: Differential Code Coverage HEAD vs 15 Lines: 100.0 % 42 42 42
Current Date: 2023-04-08 17:13:01 Functions: 100.0 % 4 4 4
Baseline: 15 Line coverage date bins:
Baseline Date: 2023-04-08 15:09:40 (240..) days: 100.0 % 42 42 42
Legend: Lines: hit not hit Function coverage date bins:
(240..) days: 100.0 % 4 4 4

 Age         Owner                  TLA  Line data    Source code
                                  1                 : /* -------------------------------------------------------------------------
                                  2                 :  *
                                  3                 :  * pgstat_archiver.c
                                  4                 :  *    Implementation of archiver statistics.
                                  5                 :  *
                                  6                 :  * This file contains the implementation of archiver statistics. It is kept
                                  7                 :  * separate from pgstat.c to enforce the line between the statistics access /
                                  8                 :  * storage implementation and the details about individual types of
                                  9                 :  * statistics.
                                 10                 :  *
                                 11                 :  * Copyright (c) 2001-2023, PostgreSQL Global Development Group
                                 12                 :  *
                                 13                 :  * IDENTIFICATION
                                 14                 :  *    src/backend/utils/activity/pgstat_archiver.c
                                 15                 :  * -------------------------------------------------------------------------
                                 16                 :  */
                                 17                 : 
                                 18                 : #include "postgres.h"
                                 19                 : 
                                 20                 : #include "utils/pgstat_internal.h"
                                 21                 : #include "utils/timestamp.h"
                                 22                 : 
                                 23                 : 
                                 24                 : /*
                                 25                 :  * Report archiver statistics
                                 26                 :  */
                                 27                 : void
  368 andres                     28 CBC          25 : pgstat_report_archiver(const char *xlog, bool failed)
                                 29                 : {
                                 30              25 :     PgStatShared_Archiver *stats_shmem = &pgStatLocal.shmem->archiver;
                                 31              25 :     TimestampTz now = GetCurrentTimestamp();
                                 32                 : 
                                 33              25 :     pgstat_begin_changecount_write(&stats_shmem->changecount);
                                 34                 : 
                                 35              25 :     if (failed)
                                 36                 :     {
                                 37               1 :         ++stats_shmem->stats.failed_count;
                                 38               1 :         memcpy(&stats_shmem->stats.last_failed_wal, xlog,
                                 39                 :                sizeof(stats_shmem->stats.last_failed_wal));
                                 40               1 :         stats_shmem->stats.last_failed_timestamp = now;
                                 41                 :     }
                                 42                 :     else
                                 43                 :     {
                                 44              24 :         ++stats_shmem->stats.archived_count;
                                 45              24 :         memcpy(&stats_shmem->stats.last_archived_wal, xlog,
                                 46                 :                sizeof(stats_shmem->stats.last_archived_wal));
                                 47              24 :         stats_shmem->stats.last_archived_timestamp = now;
                                 48                 :     }
                                 49                 : 
                                 50              25 :     pgstat_end_changecount_write(&stats_shmem->changecount);
                                 51              25 : }
                                 52                 : 
                                 53                 : /*
                                 54                 :  * Support function for the SQL-callable pgstat* functions. Returns
                                 55                 :  * a pointer to the archiver statistics struct.
                                 56                 :  */
                                 57                 : PgStat_ArchiverStats *
                                 58              22 : pgstat_fetch_stat_archiver(void)
                                 59                 : {
                                 60              22 :     pgstat_snapshot_fixed(PGSTAT_KIND_ARCHIVER);
                                 61                 : 
                                 62              22 :     return &pgStatLocal.snapshot.archiver;
                                 63                 : }
                                 64                 : 
                                 65                 : void
                                 66             441 : pgstat_archiver_reset_all_cb(TimestampTz ts)
                                 67                 : {
                                 68             441 :     PgStatShared_Archiver *stats_shmem = &pgStatLocal.shmem->archiver;
                                 69                 : 
                                 70                 :     /* see explanation above PgStatShared_Archiver for the reset protocol */
                                 71             441 :     LWLockAcquire(&stats_shmem->lock, LW_EXCLUSIVE);
                                 72             441 :     pgstat_copy_changecounted_stats(&stats_shmem->reset_offset,
                                 73             441 :                                     &stats_shmem->stats,
                                 74                 :                                     sizeof(stats_shmem->stats),
                                 75                 :                                     &stats_shmem->changecount);
                                 76             441 :     stats_shmem->stats.stat_reset_timestamp = ts;
                                 77             441 :     LWLockRelease(&stats_shmem->lock);
                                 78             441 : }
                                 79                 : 
                                 80                 : void
                                 81            1014 : pgstat_archiver_snapshot_cb(void)
                                 82                 : {
                                 83            1014 :     PgStatShared_Archiver *stats_shmem = &pgStatLocal.shmem->archiver;
                                 84            1014 :     PgStat_ArchiverStats *stat_snap = &pgStatLocal.snapshot.archiver;
                                 85            1014 :     PgStat_ArchiverStats *reset_offset = &stats_shmem->reset_offset;
                                 86                 :     PgStat_ArchiverStats reset;
                                 87                 : 
                                 88            1014 :     pgstat_copy_changecounted_stats(stat_snap,
                                 89            1014 :                                     &stats_shmem->stats,
                                 90                 :                                     sizeof(stats_shmem->stats),
                                 91                 :                                     &stats_shmem->changecount);
                                 92                 : 
                                 93            1014 :     LWLockAcquire(&stats_shmem->lock, LW_SHARED);
                                 94            1014 :     memcpy(&reset, reset_offset, sizeof(stats_shmem->stats));
                                 95            1014 :     LWLockRelease(&stats_shmem->lock);
                                 96                 : 
                                 97                 :     /* compensate by reset offsets */
                                 98            1014 :     if (stat_snap->archived_count == reset.archived_count)
                                 99                 :     {
                                100             995 :         stat_snap->last_archived_wal[0] = 0;
                                101             995 :         stat_snap->last_archived_timestamp = 0;
                                102                 :     }
                                103            1014 :     stat_snap->archived_count -= reset.archived_count;
                                104                 : 
                                105            1014 :     if (stat_snap->failed_count == reset.failed_count)
                                106                 :     {
                                107            1006 :         stat_snap->last_failed_wal[0] = 0;
                                108            1006 :         stat_snap->last_failed_timestamp = 0;
                                109                 :     }
                                110            1014 :     stat_snap->failed_count -= reset.failed_count;
  384                           111            1014 : }
        

Generated by: LCOV version v1.16-55-g56c0a2a