Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ppcMg-0003Rd-T4 for pgsql-bugs@arkaria.postgresql.org; Thu, 20 Apr 2023 22:02:54 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1ppcMf-0000Kc-6K for pgsql-bugs@arkaria.postgresql.org; Thu, 20 Apr 2023 22:02:53 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ppcMe-0000KT-Ol for pgsql-bugs@lists.postgresql.org; Thu, 20 Apr 2023 22:02:52 +0000 Received: from mail-pj1-x1029.google.com ([2607:f8b0:4864:20::1029]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1ppcMX-000wza-Ui for pgsql-bugs@lists.postgresql.org; Thu, 20 Apr 2023 22:02:51 +0000 Received: by mail-pj1-x1029.google.com with SMTP id 98e67ed59e1d1-247048f86c7so1098813a91.2 for ; Thu, 20 Apr 2023 15:02:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1682028164; x=1684620164; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=anCwy4OdwbA0liXppPN4YYpHKofEMIkUJNMAWg7v1Gc=; b=mVNgkGmA4JLPPJFZAqdBkD4qp4KplkzVDPZXBaEDSw7KIVYgciVO0bt1jsh1Vlyb9s PLovYthl/2Aeeth/PFSHUq2V0ei6GsCusIJfAn/aUr1MMZV/WjgzXMXxirrYxFEfb0I7 AzIkymiwfW5qlxFs7b9gCFrIEvJXDCJ9Llcp5VgJaJVIUN953XWB+G1OYtwSNpGKiKVw gzQf9Lk7EByMgZb85aAkuF48KxtpPTY6A9yj+JzXjrsUy1gUOl0RntaUh0q2q4+lwKyw jq9mqQGV11txJp9EBM0YseDB7mtreyX6FuQBMCRrZ8JDV1b788EjnnnC1PiDOygh9g3Y 4Fvg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1682028164; x=1684620164; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=anCwy4OdwbA0liXppPN4YYpHKofEMIkUJNMAWg7v1Gc=; b=eebC1Jp9g5s73qrIIVW/jAjGBteu6hG6esxGnw9SS8GGty2kegCH52MdcL75JQhYMj tSHIZl6zNdX/IyT58kG8cUwPxgjbILnHvgvDEjgh4B/X7Cs4+ihTjsoc2IFTLQU3QBDM UWaVnpEYpflwfIPmIskEQw6UdD7k3YFz4CzP02jlI0NjwMYx8rFKOUkmMOs8EFkEpzHV GVMm3U89t64K6uNezdtcvAIGtCL1nMM0WI1qiJrNGwqKdkJyg1sa648eX2uxcm10M0JZ a7BvtCt2LTyWenEMkTPNRVZ6dk+qkqbmBDQbt2opO7bbRG2GNxfkXi2UuwRvsnmUflId HhDA== X-Gm-Message-State: AAQBX9fc2jNM83yOAkbcWc/lVvKW9NI2LAIyaqaIAK3SnhAZcMXAp0j9 Qk5NYXYFAYJc7QIhnn7Oj3U= X-Google-Smtp-Source: AKy350YB6GU9Z4X5Q6jBqFSRArqM87dMzNq3gAMRH+gNWmhlfLHWzrMh2a6AfZQW5la+rMFZRcD55Q== X-Received: by 2002:a17:90b:3a89:b0:247:6edf:e934 with SMTP id om9-20020a17090b3a8900b002476edfe934mr2956024pjb.42.1682028164610; Thu, 20 Apr 2023 15:02:44 -0700 (PDT) Received: from nathanxps13 ([50.47.162.83]) by smtp.gmail.com with ESMTPSA id jh22-20020a170903329600b001a5262134d7sm1558432plb.202.2023.04.20.15.02.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Apr 2023 15:02:43 -0700 (PDT) Date: Thu, 20 Apr 2023 15:02:42 -0700 From: Nathan Bossart To: Kyotaro Horiguchi Cc: zhjwpku@gmail.com, xu.xw2008@163.com, pgsql-bugs@lists.postgresql.org Subject: Re: BUG #17903: There is a bug in the KeepLogSeg() Message-ID: <20230420220242.GB1435672@nathanxps13> References: <17903-4288d439dee856c6@postgresql.org> <20230420.120417.1609083651022565895.horikyota.ntt@gmail.com> <20230420.175814.1157027125103997227.horikyota.ntt@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20230420.175814.1157027125103997227.horikyota.ntt@gmail.com> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk On Thu, Apr 20, 2023 at 05:58:14PM +0900, Kyotaro Horiguchi wrote: > + /* > + * Slot minimum LSN could be greater than recptr. In such cases, no > + * segments are protected by slots but we still need to keep segno in a > + * reasonable range for subsequent calculations to avoid underflow. > + */ > + if (segno > currSegNo) > + segno = currSegNo; > + I wonder if it'd be better to instead change if (currSegNo - segno > slot_keep_segs) to if (currSegNo > segno + slot_keep_segs) and if (currSegNo - segno < keep_segs) to if (currSegNo < segNo + keep_segs) If segno > currSegNo, the first conditional would be false as expected, and the second would be true as expected. We could also use pg_sub_u64_overflow() to detect underflow, but that might be excessive in this case. -- Nathan Bossart Amazon Web Services: https://aws.amazon.com