This is an automated email from the ASF dual-hosted git repository.

yjhjstz pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudberry.git

commit f0976cecf3c142d0bfadfa4b99f911f581eba758
Author: Asim R P <[email protected]>
AuthorDate: Tue May 18 21:58:06 2021 +0530

    Fix KeepLogSeg() unittest
    
    The current WAL record pointer passed by the test to KeepLogSeg was
    older that _logSegNo.  This cannot happen, so fix it by increasing it
    beyond _logSegNo.  The test needs to be refactored heavily to make use
    of new WAL format, but let's do it as a follow up.
    
    Reviewed by: Ashwin Agrawal <[email protected]>
    Reviewed by: Paul Guo <[email protected]>
    
    (cherry picked from commit e4ec851b151267fe3209af6804e438611836a875)
---
 src/backend/access/transam/test/xlog_test.c | 88 ++++++++++++++++++++++++++++-
 1 file changed, 85 insertions(+), 3 deletions(-)

diff --git a/src/backend/access/transam/test/xlog_test.c 
b/src/backend/access/transam/test/xlog_test.c
index 436a4cfb99..dacebb77a6 100644
--- a/src/backend/access/transam/test/xlog_test.c
+++ b/src/backend/access/transam/test/xlog_test.c
@@ -124,15 +124,97 @@ test_KeepLogSeg(void **state)
         ***********************************************/
        /* Current Delete pointer */
        wal_keep_size_mb = 0;
-       _logSegNo = 4 * XLogSegmentsPerXLogId(wal_segment_size) + 45;
+       _logSegNo = recptr / wal_segment_size - 3;
 
        KeepLogSeg_wrapper(recptr, &_logSegNo);
-       assert_int_equal(_logSegNo, 4*XLogSegmentsPerXLogId(wal_segment_size) + 
45);
+       assert_int_equal(_logSegNo, recptr / wal_segment_size - 3);
 
        wal_keep_size_mb = -1;
 
        KeepLogSeg_wrapper(recptr, &_logSegNo);
-       assert_int_equal(_logSegNo, 4*XLogSegmentsPerXLogId(wal_segment_size) + 
45);
+       assert_int_equal(_logSegNo, recptr / wal_segment_size - 3);
+       /************************************************/
+}
+
+static void
+test_KeepLogSeg_max_slot_wal_keep_size(void **state)
+{
+       XLogRecPtr recptr;
+       XLogSegNo  _logSegNo;
+       XLogCtlData xlogctl;
+
+       xlogctl.replicationSlotMinLSN = ((uint64) 4) << 32 | (wal_segment_size 
* 0);
+       SpinLockInit(&xlogctl.info_lck);
+       XLogCtl = &xlogctl;
+
+       wal_keep_size_mb = 0;
+
+       /************************************************
+        * Current Delete greater than what keep wants,
+        * so, delete offset should get updated.
+        * max_slot_wal_keep_size smaller than the segs
+        * that keeps wants, cut to max_slot_wal_keep_size_mb
+        ***********************************************/
+       /* Current Delete pointer */
+       _logSegNo = 4 * XLogSegmentsPerXLogId(wal_segment_size) + 20;
+
+       max_slot_wal_keep_size_mb = 5 * 64;
+
+       /*
+        * Current xlog location (4, 10)
+        * xrecoff = seg * 67108864 (64 MB segsize)
+        */
+       recptr = ((uint64) 4) << 32 | (wal_segment_size * 10);
+
+       KeepLogSeg_wrapper(recptr, &_logSegNo);
+       /* 4 * 64 + 10 - 5 (max_slot_wal_keep_size) */
+       assert_int_equal(_logSegNo, 261);
+       /************************************************/
+
+
+       /************************************************
+        * Current Delete greater than what keep wants,
+        * so, delete offset should get updated.
+        * max_slot_wal_keep_size smaller than the segs
+        * that keeps wants, ignore max_slot_wal_keep_size_mb
+        ***********************************************/
+       /* Current Delete pointer */
+       _logSegNo = 4 * XLogSegmentsPerXLogId(wal_segment_size) + 20;
+
+       max_slot_wal_keep_size_mb = 10 * 64;
+
+       /*
+        * Current xlog location (4, 1)
+        * xrecoff = seg * 67108864 (64 MB segsize)
+        */
+       recptr = ((uint64) 4) << 32 | (wal_segment_size * 10);
+
+       KeepLogSeg_wrapper(recptr, &_logSegNo);
+       /* cut to the keep (xlogctl.replicationSlotMinLSN) */
+       assert_int_equal(_logSegNo, 256);
+       /************************************************/
+
+       wal_keep_size_mb = 15 * (wal_segment_size / (1024 * 1024));
+
+       /************************************************
+        * Current Delete greater than what keep wants,
+        * so, delete offset should get updated.
+        * max_slot_wal_keep_size smaller than wal_keep_size,
+        * max_slot_wal_keep_size doesn't take effect.
+        ***********************************************/
+       /* Current Delete pointer */
+       _logSegNo = 4 * XLogSegmentsPerXLogId(wal_segment_size) + 20;
+       max_slot_wal_keep_size_mb = 5 * 64;
+
+       /*
+        * Current xlog location (4, 1)
+        * xrecoff = seg * 67108864 (64 MB segsize)
+        */
+       recptr = ((uint64) 4) << 32 | (wal_segment_size * 10);
+
+       KeepLogSeg_wrapper(recptr, &_logSegNo);
+       /* 4 * 64 + 10 - 15 (wal_keep_size) */
+       assert_int_equal(_logSegNo, 251);
        /************************************************/
 }
 


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to