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=<value optimized out>, dest=0x84d1f38, completionTag=0xbfbfd2f0 "")
    at pquery.c:197
#13 0x08288d0a in PortalRunMulti (portal=0x99b3f01c, 
    isTopLevel=<value optimized out>, 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) 

-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to