Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dxZ70-0004Yb-1h for pgsql-bugs@arkaria.postgresql.org; Thu, 28 Sep 2017 13:44:22 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.84_2) (envelope-from ) id 1dxZ6z-0006Fc-AD for pgsql-bugs@arkaria.postgresql.org; Thu, 28 Sep 2017 13:44:21 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1dxZ6y-0006FT-Ur for pgsql-bugs@postgresql.org; Thu, 28 Sep 2017 13:44:21 +0000 Received: from smtprelay0230.b.hostedemail.com ([64.98.42.230] helo=smtprelay.b.hostedemail.com) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1dxZ6t-0002Ad-Ns for pgsql-bugs@postgresql.org; Thu, 28 Sep 2017 13:44:19 +0000 Received: from filter.hostedemail.com (10.5.19.248.rfc1918.com [10.5.19.248]) by smtprelay05.b.hostedemail.com (Postfix) with ESMTP id 033FE32AEEC; Thu, 28 Sep 2017 13:44:13 +0000 (UTC) X-Session-Marker: 616C76686572726540616C76682E6E6F2D69702E6F7267 X-Spam-Summary: 50,0,0,,d41d8cd98f00b204,alvherre@alvh.no-ip.org,:::::::::::,RULES_HIT:41:355:379:599:965:966:967:973:988:989:1260:1277:1311:1312:1313:1314:1345:1359:1437:1515:1516:1518:1519:1534:1541:1593:1594:1595:1596:1711:1730:1747:1777:1792:2196:2198:2199:2200:2393:2525:2560:2563:2682:2685:2731:2828:2859:2895:2933:2937:2939:2942:2945:2947:2951:2954:3022:3138:3139:3140:3141:3142:3352:3622:3865:3866:3867:3868:3870:3871:3874:3934:3936:3938:3941:3944:3947:3950:3953:3956:3959:4250:4385:4390:4395:4605:5007:6261:8957:9025:9121:10004:10400:10450:10455:10848:11026:11658:11914:12043:12438:13069:13311:13357:13439:13894:13895:14764:19904:19999:21080:21627:30054:30070,0,RBL:none,CacheIP:none,Bayesian:0.5,0.5,0.5,Netcheck:none,DomainCache:0,MSF:not bulk,SPF:,MSBL:0,DNSBL:none,Custom_rules:0:0:0,LFtime:3,LUA_SUMMARY:none X-HE-Tag: work35_24a57f5519831 X-Filterd-Recvd-Size: 2353 Received: from alvin.alvh.no-ip.org (p578b65b1.dip0.t-ipconnect.de [87.139.101.177]) (Authenticated sender: alvherre@alvh.no-ip.org) by omf01.b.hostedemail.com (Postfix) with ESMTPA; Thu, 28 Sep 2017 13:44:11 +0000 (UTC) Received: by alvin.alvh.no-ip.org (Postfix, from userid 1000) id 4A78C1607; Thu, 28 Sep 2017 15:44:00 +0200 (CEST) Date: Thu, 28 Sep 2017 15:44:00 +0200 From: Alvaro Herrera To: "Wong, Yi Wen" Cc: Michael Paquier , Peter Geoghegan , "Wood, Dan" , "pgsql-bugs@postgresql.org" , Andres Freund Subject: Re: Old row version in hot chain become visible after a freeze Message-ID: <20170928134400.mm74ldkisk4z5dkl@alvherre.pgsql> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <1505258965245.51728@amazon.com> User-Agent: NeoMutt/20170306-137-4415bd-dirty (1.8.0) List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-Mailing-List: pgsql-bugs Precedence: bulk Sender: pgsql-bugs-owner@postgresql.org Wong, Yi Wen wrote: > 2) Flip the order of HeapTupleHeaderIsHeapOnly(tuple) and HeapTupleHeaderIsHotUpdated(tuple). This is merely a > microoptimization on a non-performance critical path because HeapOnly is a broader condititon than HotUpdated :-) Actually, is this correct? AFAICS, IsHeapOnly refers to the *new* version of the tuple in a HOT update, whereas IsHotUpdated refers to the *old* version. We surely must never freeze a IsHotUpdated tuple (because that would bring a dead tuple back to life, which is the bug at hand), but what is the argument against freezing a IsHeapOnly tuple? I think the way this test is written comes from some fuzzy thinking -- somebody (probably me) copied the test from lazy_scan_heap, but that routine has two different reasons for each of those two conditions (one is merely an optimization, the other is necessary for correctness). But in the spot we're patching, one of them is wrong. I could observe that this bug causes xids older than cutoff xid to remain in xmax occasionally with that test in place. Removing the "IsHeapOnly" part and keeping only IsHotUpdated makes that go away. -- Álvaro Herrera https://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services -- Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-bugs