Commit 96bdb7e1 authored by Fujii Masao's avatar Fujii Masao

Fix pgstat_report_replslot() to use proper data types for its arguments.

The caller of pgstat_report_replslot() passes int64 values to the function.
Also the function stores those values in PgStat_Counter (i.e., int64) fields
of PgStat_MsgReplSlot struct. But previously the function used "int" as
the data types of some arguments for those values, which could lead to
the overflow of values.

To avoid this risk, this commit fixes pgstat_report_replslot() to use
PgStat_Counter type for the arguments. Since they are the statistics counters,
PgStat_Counter, the data type used for counters, is used for them
instead of int64.

Reported-by: Vignesh C
Author: Vignesh C
Reviewed-by: Jeevan Ladhe, Fujii Masao
Discussion: https://postgr.es/m/CALDaNm080OpG=ZwOb0i8EyChH5SyHAMFWJCKaKTXmrfvJLbgaA@mail.gmail.com
parent 6fb66c26
...@@ -1773,8 +1773,10 @@ pgstat_report_tempfile(size_t filesize) ...@@ -1773,8 +1773,10 @@ pgstat_report_tempfile(size_t filesize)
* ---------- * ----------
*/ */
void void
pgstat_report_replslot(const char *slotname, int spilltxns, int spillcount, pgstat_report_replslot(const char *slotname, PgStat_Counter spilltxns,
int spillbytes, int streamtxns, int streamcount, int streambytes) PgStat_Counter spillcount, PgStat_Counter spillbytes,
PgStat_Counter streamtxns, PgStat_Counter streamcount,
PgStat_Counter streambytes)
{ {
PgStat_MsgReplSlot msg; PgStat_MsgReplSlot msg;
......
...@@ -1450,8 +1450,10 @@ extern void pgstat_report_recovery_conflict(int reason); ...@@ -1450,8 +1450,10 @@ extern void pgstat_report_recovery_conflict(int reason);
extern void pgstat_report_deadlock(void); extern void pgstat_report_deadlock(void);
extern void pgstat_report_checksum_failures_in_db(Oid dboid, int failurecount); extern void pgstat_report_checksum_failures_in_db(Oid dboid, int failurecount);
extern void pgstat_report_checksum_failure(void); extern void pgstat_report_checksum_failure(void);
extern void pgstat_report_replslot(const char *slotname, int spilltxns, int spillcount, extern void pgstat_report_replslot(const char *slotname, PgStat_Counter spilltxns,
int spillbytes, int streamtxns, int streamcount, int streambytes); PgStat_Counter spillcount, PgStat_Counter spillbytes,
PgStat_Counter streamtxns, PgStat_Counter streamcount,
PgStat_Counter streambytes);
extern void pgstat_report_replslot_drop(const char *slotname); extern void pgstat_report_replslot_drop(const char *slotname);
extern void pgstat_initialize(void); extern void pgstat_initialize(void);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment