v3-0002-Fix-spill_bytes-counter.patch
application/octet-stream
Filename: v3-0002-Fix-spill_bytes-counter.patch
Type: application/octet-stream
Part: 0
Patch
Format: format-patch
Series: patch v3-0002
Subject: Fix spill_bytes counter
| File | + | − |
|---|---|---|
| src/backend/replication/logical/reorderbuffer.c | 8 | 4 |
From a09269f20c7e3d273590d0f0c9d83cccdee645dc Mon Sep 17 00:00:00 2001
From: Julien Tachoires <julmon@gmail.com>
Date: Sun, 23 Jun 2024 14:42:04 -0700
Subject: [PATCH 2/6] Fix spill_bytes counter
The spill_bytes counter considers now the fact that decoded changes
are spilled on disk compressed.
---
src/backend/replication/logical/reorderbuffer.c | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/src/backend/replication/logical/reorderbuffer.c b/src/backend/replication/logical/reorderbuffer.c
index 2519f799bc..964a861bbf 100644
--- a/src/backend/replication/logical/reorderbuffer.c
+++ b/src/backend/replication/logical/reorderbuffer.c
@@ -246,7 +246,7 @@ static void ReorderBufferExecuteInvalidations(uint32 nmsgs, SharedInvalidationMe
*/
static void ReorderBufferCheckMemoryLimit(ReorderBuffer *rb);
static void ReorderBufferSerializeTXN(ReorderBuffer *rb, ReorderBufferTXN *txn);
-static void ReorderBufferSerializeChange(ReorderBuffer *rb, ReorderBufferTXN *txn,
+static Size ReorderBufferSerializeChange(ReorderBuffer *rb, ReorderBufferTXN *txn,
int fd, ReorderBufferChange *change);
static Size ReorderBufferRestoreChanges(ReorderBuffer *rb, ReorderBufferTXN *txn,
TXNEntryFile *file, XLogSegNo *segno);
@@ -3689,6 +3689,7 @@ ReorderBufferSerializeTXN(ReorderBuffer *rb, ReorderBufferTXN *txn)
XLogSegNo curOpenSegNo = 0;
Size spilled = 0;
Size size = txn->size;
+ Size spillBytes = 0;
elog(DEBUG2, "spill %u changes in XID %u to disk",
(uint32) txn->nentries_mem, txn->xid);
@@ -3740,7 +3741,7 @@ ReorderBufferSerializeTXN(ReorderBuffer *rb, ReorderBufferTXN *txn)
errmsg("could not open file \"%s\": %m", path)));
}
- ReorderBufferSerializeChange(rb, txn, fd, change);
+ spillBytes += ReorderBufferSerializeChange(rb, txn, fd, change);
dlist_delete(&change->node);
ReorderBufferReturnChange(rb, change, false);
@@ -3754,7 +3755,7 @@ ReorderBufferSerializeTXN(ReorderBuffer *rb, ReorderBufferTXN *txn)
if (spilled)
{
rb->spillCount += 1;
- rb->spillBytes += size;
+ rb->spillBytes += spillBytes;
/* don't consider already serialized transactions */
rb->spillTxns += (rbtxn_is_serialized(txn) || rbtxn_is_serialized_clear(txn)) ? 0 : 1;
@@ -3775,7 +3776,7 @@ ReorderBufferSerializeTXN(ReorderBuffer *rb, ReorderBufferTXN *txn)
/*
* Serialize individual change to disk.
*/
-static void
+static Size
ReorderBufferSerializeChange(ReorderBuffer *rb, ReorderBufferTXN *txn,
int fd, ReorderBufferChange *change)
{
@@ -3988,6 +3989,9 @@ ReorderBufferSerializeChange(ReorderBuffer *rb, ReorderBufferTXN *txn,
*/
if (txn->final_lsn < change->lsn)
txn->final_lsn = change->lsn;
+
+ /* Return data size written to disk */
+ return disk_hdr->size;
}
/* Returns true, if the output plugin supports streaming, false, otherwise. */
--
2.43.0