postgres.git / summary / log / commit / refs

commit    b2f6f749c7a5936adbb555e248e8e4df35c00a4a
Author:   Andres Freund <andres@anarazel.de>
Date:     Tue Jul 07 11:05:41 2015 +0000

    Fix logical decoding bug leading to inefficient reopening of files.
    
    When spilling transaction data to disk a simple typo caused the output
    file to be closed and reopened for every serialized change. That happens
    to not have a huge impact on linux, which is why it probably wasn't
    noticed so far, but on windows that appears to trigger actual disk
    writes after every change. Not fun.
    
    The bug fortunately does not have any impact besides speed. A change
    could end up being in the wrong segment (last instead of next), but
    since we read all files to the end, that's just ugly, not really
    problematic. It's not a problem to upgrade, since transaction spill
    files do not persist across restarts.
    
    Bug: #13484
    Reported-By: Olivier Gosseaume
    Discussion: 20150703090217.1190.63940@wrigleys.postgresql.org
    
    Backpatch to 9.4, where logical decoding was added.


src/backend/replication/logical/reorderbuffer.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backend/replication/logical/reorderbuffer.c b/src/backend/replication/logical/reorderbuffer.c index fa98580302a..478c3e874af 100644 --- a/src/backend/replication/logical/reorderbuffer.c +++ b/src/backend/replication/logical/reorderbuffer.c @@ -2009,7 +2009,7 @@ ReorderBufferSerializeTXN(ReorderBuffer *rb, ReorderBufferTXN *txn) * store in segment in which it belongs by start lsn, don't split over * multiple segments tho */ - if (fd == -1 || XLByteInSeg(change->lsn, curOpenSegNo)) + if (fd == -1 || !XLByteInSeg(change->lsn, curOpenSegNo)) { XLogRecPtr recptr; [parent: 5c0de384d2ce]