Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bFRzN-00081A-Ko for pgsql-hackers@arkaria.postgresql.org; Tue, 21 Jun 2016 20:09:37 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.84_2) (envelope-from ) id 1bFRzN-0007nd-1L for pgsql-hackers@arkaria.postgresql.org; Tue, 21 Jun 2016 20:09:37 +0000 Received: from makus.postgresql.org ([2001:4800:1501:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1bFRzG-0007hi-6i for pgsql-hackers@postgresql.org; Tue, 21 Jun 2016 20:09:30 +0000 Received: from smtprelay0191.b.hostedemail.com ([64.98.42.191] helo=smtprelay.b.hostedemail.com) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1bFRzC-00035C-W2 for pgsql-hackers@postgresql.org; Tue, 21 Jun 2016 20:09:28 +0000 Received: from filter.hostedemail.com (10.5.19.248.rfc1918.com [10.5.19.248]) by smtprelay01.b.hostedemail.com (Postfix) with ESMTP id 13ABF2D2BA6; Tue, 21 Jun 2016 20:09:25 +0000 (UTC) X-Session-Marker: 616C76686572726540616C76682E6E6F2D69702E6F7267 X-Spam-Summary: 13,1.2,0,,d41d8cd98f00b204,alvherre@alvh.no-ip.org,:::::::,RULES_HIT:41:355:379:599:800:960:967:973:988:989:1260:1263:1277:1311:1312:1313:1314:1345:1359:1431:1437:1515:1516:1518:1519:1534:1542:1593:1594:1595:1596:1711:1730:1747:1777:1792:2393:2525:2553:2560:2563:2682:2685:2691:2828:2859:2895:2933:2937:2939:2942:2945:2947:2951:2954:3022:3138:3139:3140:3141:3142:3354:3865:3866:3867:3868:3870:3871:3872:3874:3934:3936:3938:3941:3944:3947:3950:3953:3956:3959:4605:4659:5007:6119:6261:7514:7903:9025:9036:9121:10008:10400:10848:11026:11232:11256:11257:11473:11638:11658:11914:12517:12519:12660:12663:13161:13229:13439:13618:13894:13895:14181:14721:21080:21222:21324,0,RBL:none,CacheIP:none,Bayesian:0.5,0.5,0.5,Netcheck:none,DomainCache:0,MSF:not bulk,SPF:fn,MSBL:0,DNSBL:none,Custom_rules:0:1:0,LFtime:3,LUA_SUMMARY:none X-HE-Tag: quill66_6f3f255a87e42 X-Filterd-Recvd-Size: 3120 Received: from alvin.alvh.no-ip.org (unknown [216.155.90.98]) (Authenticated sender: alvherre@alvh.no-ip.org) by omf13.b.hostedemail.com (Postfix) with ESMTPA; Tue, 21 Jun 2016 20:09:24 +0000 (UTC) Received: by alvin.alvh.no-ip.org (Postfix, from userid 1000) id 1362F526; Tue, 21 Jun 2016 16:09:22 -0400 (CLT) Date: Tue, 21 Jun 2016 16:09:22 -0400 From: Alvaro Herrera To: Robert Haas Cc: Andrew Gierth , Stephen Frost , "pgsql-hackers@postgresql.org" Subject: Re: MultiXactId error after upgrade to 9.3.4 Message-ID: <20160621200922.GA106138@alvherre.pgsql> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: User-Agent: Mutt/1.5.23 (2014-03-12) X-Pg-Spam-Score: -0.4 (/) List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-Mailing-List: pgsql-hackers Precedence: bulk Sender: pgsql-hackers-owner@postgresql.org Robert Haas wrote: > On Fri, Jun 17, 2016 at 9:33 AM, Andrew Gierth > wrote: > >>>>>> "Robert" == Robert Haas writes: > > >> Why is the correct rule not "check for and ignore pre-upgrade mxids > > >> before even trying to fetch members"? > > > > Robert> I entirely believe that's the correct rule, but doesn't > > Robert> implementing it require a crystal balll? > > > > Why would it? Pre-9.3 mxids are identified by the combination of flag > > bits in the infomask, see Alvaro's patch. > > I see the patch, but I don't see much explanation of why the patch is > correct, which I think is pretty scary in view of the number of > mistakes we've already made in this area. ... and actually the patch fails one isolation tests in 9.3, which is why I haven't pushed (I haven't tested 9.4 but I suppose it should be the same). I'm looking into that now. > The comments just say: > > + * A tuple that has HEAP_XMAX_IS_MULTI and HEAP_XMAX_LOCK_ONLY but neither of > + * XMAX_EXCL_LOCK and XMAX_KEYSHR_LOCK must come from a tuple that was > + * share-locked in 9.2 or earlier and then pg_upgrade'd. > > Why must that be true? The reason this must be true is that in 9.2 and earlier multixacts were only used to lock tuples FOR SHARE, which had that specific bit pattern. I suppose I need to make this comment more explicit. > + * We must not try to resolve such multixacts locally, because the result would > + * be bogus, regardless of where they stand with respect to the current valid > + * range. > > What about other pre-upgrade mxacts that don't have this exact bit > pattern? Why can't we try to resolve them and end up in trouble just > as easily? There shouldn't be any. Back then, it was not possible to have tuples locked and updated at the same time; FOR UPDATE (the only other locking mode back then) didn't allow other lockers, so the only possibility was FOR SHARE with that bit pattern. -- Álvaro Herrera http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers