Received: from maia.hub.org (maia-3.hub.org [200.46.204.243]) by mail.postgresql.org (Postfix) with ESMTP id C17051337999 for ; Mon, 21 Feb 2011 19:42:45 -0400 (AST) Received: from mail.postgresql.org ([200.46.204.86]) by maia.hub.org (mx1.hub.org [200.46.204.243]) (amavisd-maia, port 10024) with ESMTP id 90315-01 for ; Mon, 21 Feb 2011 23:42:38 +0000 (UTC) X-Greylist: from auto-whitelisted by SQLgrey-1.7.6 Received: from mail.netbsd.org (mail.netbsd.org [204.152.190.11]) by mail.postgresql.org (Postfix) with ESMTP id D3D301337990 for ; Mon, 21 Feb 2011 19:42:37 -0400 (AST) Received: by mail.netbsd.org (Postfix, from userid 1270) id 4635E19D574; Mon, 21 Feb 2011 23:42:36 +0000 (UTC) To: Kevin.Grittner@wicourts.gov Cc: heikki.linnakangas@enterprisedb.com, drkp@csail.mit.edu, pgsql-hackers@postgresql.org Subject: Re: SSI bug? In-Reply-To: Your message of "Sun, 20 Feb 2011 19:31:32 -0600" <4D616C14020000250003AD9A@gw.wicourts.gov> References: <4D616C14020000250003AD9A@gw.wicourts.gov> X-Mailer: Cue version 0.8 (100217-1432/takashi) Mime-Version: 1.0 Content-Type: Text/Plain; charset=us-ascii Message-Id: <20110221234236.4635E19D574@mail.netbsd.org> Date: Mon, 21 Feb 2011 23:42:36 +0000 (UTC) From: yamt@mwd.biglobe.ne.jp (YAMAMOTO Takashi) X-Virus-Scanned: Maia Mailguard 1.0.1 X-Spam-Status: No, hits=-4.2 tagged_above=-5 required=5 tests=BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3 X-Spam-Level: X-Archive-Number: 201102/2048 X-Sequence-Number: 182837 hi, > "Kevin Grittner" wrote: > >> I'm proceeding on this basis. > > Result attached. I found myself passing around the tuple xmin value > just about everywhere that the predicate lock target tag was being > passed, so it finally dawned on me that this logically belonged as > part of the target tag. That simplified the changes, and the net > result of following Heikki's suggestion here is the reduction of > total lines of code by 178 while adding coverage for missed corner > cases and fixing bugs. > > Thanks again, Heikki! > > I will test this some more tomorrow. So far I haven't done more than > ensure it passes the standard regression tests and the isolation > tests added for SSI. The latter took awhile because the hash_any > function was including uninitialized bytes past the length of the tag > in its calculations. We should probably either fix that or document > it. I had to add another couple bytes to the tag to get it to a four > byte boundary to fix it. Easy once you know that's how it works... > > The attached patch can also be viewed here: > > http://git.postgresql.org/gitweb?p=users/kgrittn/postgres.git;a=commitdiff;h=46fd5ea6728b566c521ec83048bc00a207289dd9 > > If this stands up to further testing, the only issue I know of for > the 9.1 release is to update the documentation of shared memory usage > to include the new structures. > > -Kevin i tested ede45e90dd1992bfd3e1e61ce87bad494b81f54d + ssi-multi-update-1.patch with my application and got the following assertion failure. YAMAMOTO Takashi Core was generated by `postgres'. Program terminated with signal 6, Aborted. #0 0xbbba4cc7 in _lwp_kill () from /usr/lib/libc.so.12 (gdb) bt #0 0xbbba4cc7 in _lwp_kill () from /usr/lib/libc.so.12 #1 0xbbba4c85 in raise (s=6) at /siro/nbsd/src/lib/libc/gen/raise.c:48 #2 0xbbba445a in abort () at /siro/nbsd/src/lib/libc/stdlib/abort.c:74 #3 0x0833d9f2 in ExceptionalCondition ( conditionName=0x8493f6d "!(locallock != ((void *)0))", errorType=0x8370451 "FailedAssertion", fileName=0x8493ec3 "predicate.c", lineNumber=3657) at assert.c:57 #4 0x0827977e in CheckTargetForConflictsIn (targettag=0xbfbfce78) at predicate.c:3657 #5 0x0827bd74 in CheckForSerializableConflictIn (relation=0x99b5bad4, tuple=0xbfbfcf78, buffer=234) at predicate.c:3772 #6 0x080a5be8 in heap_update (relation=0x99b5bad4, otid=0xbfbfd038, newtup=0x99a0aa08, ctid=0xbfbfd03e, update_xmax=0xbfbfd044, cid=1, crosscheck=0x0, wait=1 '\001') at heapam.c:2593 #7 0x081c81ca in ExecModifyTable (node=0x99a0566c) at nodeModifyTable.c:624 #8 0x081b2153 in ExecProcNode (node=0x99a0566c) at execProcnode.c:371 #9 0x081b0f82 in standard_ExecutorRun (queryDesc=0x99b378f0, direction=ForwardScanDirection, count=0) at execMain.c:1247 #10 0xbbaaf352 in pgss_ExecutorRun (queryDesc=0x99b378f0, direction=ForwardScanDirection, count=0) at pg_stat_statements.c:541 #11 0xbbab5ee5 in explain_ExecutorRun (queryDesc=0x99b378f0, direction=ForwardScanDirection, count=0) at auto_explain.c:201 #12 0x08288ae3 in ProcessQuery (plan=0x99bb404c, sourceText=0x99b3781c "UPDATE file SET ctime = $1 WHERE fileid = $2", params=, dest=0x84d1f38, completionTag=0xbfbfd2f0 "") at pquery.c:197 #13 0x08288d0a in PortalRunMulti (portal=0x99b3f01c, isTopLevel=, dest=dwarf2_read_address: Corrupted DWARF expression. ) at pquery.c:1268 #14 0x0828984a in PortalRun (portal=0x99b3f01c, count=2147483647, isTopLevel=1 '\001', dest=0x99b07428, altdest=0x99b07428, completionTag=0xbfbfd2f0 "") at pquery.c:822 #15 0x08286c22 in PostgresMain (argc=2, argv=0xbb9196a4, username=0xbb9195f8 "takashi") at postgres.c:2004 #16 0x082413f6 in ServerLoop () at postmaster.c:3590 #17 0x082421a8 in PostmasterMain (argc=3, argv=0xbfbfe594) at postmaster.c:1110 #18 0x081e0d09 in main (argc=3, argv=0xbfbfe594) at main.c:199 (gdb) fr 4 #4 0x0827977e in CheckTargetForConflictsIn (targettag=0xbfbfce78) at predicate.c:3657 3657 Assert(locallock != NULL); (gdb) list 3652 3653 locallock = (LOCALPREDICATELOCK *) 3654 hash_search_with_hash_value(LocalPredicateLockHash, 3655 targettag, targettaghash, 3656 HASH_FIND, NULL); 3657 Assert(locallock != NULL); 3658 Assert(locallock->held); 3659 locallock->held = false; 3660 3661 if (locallock->childLocks == 0) (gdb)