On Wed, Apr 20, 2011 at 9:57 AM, Noah Misch <n...@leadboat.com> wrote:
> On Tue, Apr 19, 2011 at 10:36:14PM -0400, Robert Haas wrote:
>> On Mon, Apr 18, 2011 at 7:50 PM, Noah Misch <n...@leadboat.com> wrote:
>> > On Fri, Apr 15, 2011 at 11:58:30AM -0400, Noah Misch wrote:
>> >> When we're done with the relkind-restriction patch, I'll post a new 
>> >> version of
>> >> this one. ?It will remove the circularity check and add a relkind check.
>> >
>> > Here it is. ?Changes from tt1v1-alter-of.patch to tt1v2-alter-of.patch:
>> > * Use transformOfType()'s relkind check in ATExecAddOf()
>> > * Remove circularity check
>> > * Open pg_inherits with AccessShareLock
>> > * Fix terminology in ATExecDropOf() comment
>> > * Rebase over pgindent changes
>> >
>> > Changes from tt2v1-binary-upgrade.patch to tt2v2-binary-upgrade.patch:
>> > * Rebase over dumpCompositeType() changes from commit acfa1f45
>>
>> I think there's a bug in the tt1v1 patch.  I'm getting intermittent
>> regression test failures at this point:
>>
>> ALTER TABLE tt7 OF tt_t1;                       -- reassign an
>> already-typed table
>> server closed the connection unexpectedly
>>         This probably means the server terminated abnormally
>>         before or while processing the request.
>> connection to server was lost
>>
>> In src/test/regress/log/postmaster.log:
>>
>> TRAP: FailedAssertion("!(((bool)((relation)->rd_refcnt == 0)))", File:
>> "relcache.c", Line: 1756)
>
> How frequently does it happen for you?  I ran `make check' about fifteen times
> without hitting an error.  I ran the new test cases under valgrind, and that
> also came out clean.
>
> Could you try a fresh build and see if it still happens?  If it does, could 
> you
> grab a "bt full" and "p *relation->rd_rel" in gdb?

I reproduced it this morning after git clean -dfx, updating to the
latest master branch, and re-applying your patch.  The most recent
time I reproduced it, it took 7 tries, but I think the average
frequency of failure is around 25%.

gdb info attached, courtesy of defining SLEEP_ON_ASSERT to 1 in
pg_config_manual.h

-- 
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company
(gdb) bt full
#0  0x00007fff884caf8a in __semwait_signal ()
No symbol table info available.
#1  0x00007fff884cae19 in nanosleep ()
No symbol table info available.
#2  0x00007fff88517df0 in sleep ()
No symbol table info available.
#3  0x00000001002f9d77 in ExceptionalCondition (conditionName=<value 
temporarily unavailable, due to optimizations>, errorType=<value temporarily 
unavailable, due to optimizations>, fileName=<value temporarily unavailable, 
due to optimizations>, lineNumber=<value temporarily unavailable, due to 
optimizations>) at assert.c:54
No locals.
#4  0x00000001002ed3bf in RelationDestroyRelation (relation=0x100faae20) at 
relcache.c:1756
No locals.
#5  0x00000001002f1d58 in RelationClearRelation (relation=0x100faae20, 
rebuild=<value temporarily unavailable, due to optimizations>) at 
relcache.c:1930
        newrel = (Relation) 0x0
        save_relid = 41137
        keep_tupdesc = <value temporarily unavailable, due to optimizations>
#6  0x00000001002f22a2 in RelationCacheInvalidateEntry (relationId=41137) at 
relcache.c:2027
        relation = (Relation) #7  0x00000001002e9bf6 in 
LocalExecuteInvalidationMessage (msg=0x10114b660) at inval.c:501
        i = <value temporarily unavailable, due to optimizations>
#8  0x00000001002e93df in ProcessInvalidationMessages (hdr=0x10114ae48, 
func=0x1002e9ab0 <LocalExecuteInvalidationMessage>) at inval.c:391
        _cindex = <value temporarily unavailable, due to optimizations>
        _chunk = (InvalidationChunk *) 0x10114b650
#9  0x00000001002e9480 in CommandEndInvalidationMessages () at inval.c:1047
No locals.
#10 0x0000000100124294 in ATRewriteCatalogs [inlined] () at 
/Users/rhaas/pgsql/src/backend/commands/tablecmds.c:3022
        rel = (Relation) 0x100faae20
        lcmd = (ListCell *) 0x101175858
        pass = 8
        ltab = (ListCell *) 0x10118ea90
        lockmode = #11 0x0000000100124294 in ATController (rel=<value 
temporarily unavailable, due to optimizations>, cmds=<value temporarily 
unavailable, due to optimizations>, recurse=<value temporarily unavailable, due 
to optimizations>, lockmode=4) at tablecmds.c:2756
        rel = (Relation) 0x100faae20
        lcmd = (ListCell *) 0x101175858
        pass = 8
        ltab = (ListCell *) 0x10118ea90
        lockmode = #12 0x000000010023b185 in standard_ProcessUtility 
(parsetree=0x101041a40, queryString=0x101040e38 "ALTER TABLE tt0 OF tt_t0;", 
params=0x0, isTopLevel=1 '\001', dest=0x101041dc8, completionTag=<value 
temporarily unavailable, due to optimizations>) at utility.c:781
        stmt = <value temporarily unavailable, due to optimizations>
        stmts = <value temporarily unavailable, due to optimizations>
        l = (ListCell *) 0x10118e850
        validnsps = {0x100389abe "toast", 0x0}
#13 0x000000010023628b in MemoryContextSwitchTo [inlined] () at 
/Users/rhaas/pgsql/src/include/utils/palloc.h:1184
No locals.
#14 0x000000010023628b in PortalRunUtility (portal=0x1010f5a38, 
utilityStmt=0x101041a40, isTopLevel=<value temporarily unavailable, due to 
optimizations>, dest=0x101041dc8, completionTag=0x7fff5fbfdd30 "") at 
pquery.c:1192
        context = (MemoryContext) #15 0x0000000100237a45 in PortalRunMulti 
(portal=0x1010f5a38, isTopLevel=<value temporarily unavailable, due to 
optimizations>, dest=0x101041dc8, altdest=0x101041dc8, 
completionTag=0x7fff5fbfdd30 "") at pquery.c:1315
        stmt = (Node *) 0x101041a40
        active_snapshot_set = 0 '\0'
        stmtlist_item = (ListCell *) 0x101041d68
#16 0x00000001002383e8 in PortalRun (portal=0x1010f5a38, 
count=9223372036854775807, isTopLevel=<value temporarily unavailable, due to 
optimizations>, dest=0x101041dc8, altdest=0x101041dc8, 
completionTag=0x7fff5fbfdd30 "") at pquery.c:813
        save_exception_stack = (sigjmp_buf *) 0x7fff5fbfde60
        save_context_stack = (ErrorContextCallback *) 0x0
        local_sigjmp_buf = {17046984, 1, 1606409424, 32767, 1606409136, 32767, 
17783352, 1, 17046080, 1, 3552322, 1, 17046136, 1, 2326934, 1, 530, 0, 8096, 
895, 17026896, 0, 17046080, 1, 3552322, 1, 17046136, 1, 1606409392, 32767, 
3264283, 1, 2, 0, 17783352, 1, 1606409424, 32767}
        saveTopTransactionResourceOwner = (ResourceOwner) 0x101146b90
        saveTopTransactionContext = (MemoryContext) 0x10106e858
        saveActivePortal = (Portal) 0x0
        saveResourceOwner = (ResourceOwner) 0x101146b90
        savePortalContext = (MemoryContext) 0x0
        saveMemoryContext = (MemoryContext) 0x10106e858
#17 0x000000010023437d in exec_simple_query (query_string=0x101040e38 "ALTER 
TABLE tt0 OF tt_t0;") at postgres.c:1018
        parsetree = (Node *) 0x101041a40
        portal = (Portal) 0x1010f5a38
        commandTag = 0x100363442 "ALTER TABLE"
        completionTag = 
"\000ݿ_?\000\000J?0\000\001\000\000\000\002\000\000\000\000\000\000\000 
߿\000\006\000\000\000x?\003\001\001\000\000\000\006\000\000\000\000\000\000\000?AQ\000\001\000\000\000\002\000\000\000\000\000\000"
        querytree_list = <value temporarily unavailable, due to optimizations>
        plantree_list = <value temporarily unavailable, due to optimizations>
        receiver = (DestReceiver *) 0x101041dc8
        format = 0
        dest = DestRemote
        oldcontext = (MemoryContext) 0x10106e858
        parsetree_list = (List *) 0x101041aa0
        parsetree_item = (ListCell *) 0x101041a78
        save_log_statement_stats = 0 '\0'
        was_logged = 0 '\0'
        msec_str = 
"\031\000\000\000\000\000\000\0008\016\004\001\001\000\000\000?ݿ_?\000\000|?0\000\001\000\000"
#18 0x0000000100234f31 in PostgresMain (argc=2, argv=<value temporarily 
unavailable, due to optimizations>, username=<value temporarily unavailable, 
due to optimizations>) at postgres.c:3919
        query_string = 0x101040e38 "ALTER TABLE tt0 OF tt_t0;"
        dbname = <value temporarily unavailable, due to optimizations>
        firstchar = 81
        stack_base = 0 '\0'
        input_message = {
  data = 0x101040e38 "ALTER TABLE tt0 OF tt_t0;", 
  len = 26, 
  maxlen = 1024, 
  cursor = 26
}
        local_sigjmp_buf = {1606409984, 32767, 1606410208, 32767, 1606409696, 
32767, 11575168, 1, 2, 0, 17028800, 1, 17029496, 1, 2312734, 1, 530, 0, 8096, 
895, 0, 1, 4, 0, 1606410128, 32767, -455871145, -1979638038, 0, 0, 1606410160, 
32767, 1606410032, 32767, 17028800, 1, 17028832, 1}
        send_ready_for_query = 0 '\0'
#19 0x00000001001e818c in ServerLoop () at postmaster.c:3590
        port = (Port *) #20 0x00000001001e90f1 in PostmasterMain (argc=6, 
argv=0x100b08f30) at postmaster.c:1110
        opt = <value temporarily unavailable, due to optimizations>
        status = <value temporarily unavailable, due to optimizations>
        userDoption = 0x100b08fe0 
"/Users/rhaas/pgsql/src/test/regress/./tmp_check/data"
        listen_addr_saved = 0 '\0'
#21 0x000000010017c485 in main (argc=6, argv=0x100b08f30) at main.c:199
No locals.
(gdb) fr 4
#4  0x00000001002ed3bf in RelationDestroyRelation (relation=0x100faae20) at 
relcache.c:1756
1756            Assert(RelationHasReferenceCountZero(relation));
(gdb) p *relation
$1 = {
  rd_node = {
    spcNode = 1663, 
    dbNode = 16384, 
    relNode = 41137
  }, 
  rd_smgr = 0x0, 
  rd_refcnt = 1, 
  rd_backend = -1, 
  rd_isnailed = 0 '\0', 
  rd_isvalid = 0 '\0', 
  rd_indexvalid = 0 '\0', 
  rd_createSubid = 0, 
  rd_newRelfilenodeSubid = 0, 
  rd_rel = 0x100e1b590, 
  rd_att = 0x100fc0090, 
  rd_id = 41137, 
  rd_indexlist = 0x0, 
  rd_indexattr = 0x0, 
  rd_oidindex = 0, 
  rd_lockInfo = {
    lockRelId = {
      relId = 41137, 
      dbId = 16384
    }
  }, 
  rd_rules = 0x0, 
  rd_rulescxt = 0x0, 
  trigdesc = 0x0, 
  rd_options = 0x0, 
  rd_index = 0x0, 
  rd_indextuple = 0x0, 
  rd_am = 0x0, 
  rd_indexcxt = 0x0, 
  rd_aminfo = 0x0, 
  rd_opfamily = 0x0, 
  rd_opcintype = 0x0, 
  rd_support = 0x0, 
  rd_supportinfo = 0x0, 
  rd_indoption = 0x0, 
  rd_indexprs = 0x0, 
  rd_indpred = 0x0, 
  rd_exclops = 0x0, 
  rd_exclprocs = 0x0, 
  rd_exclstrats = 0x0, 
  rd_amcache = 0x0, 
  rd_indcollation = 0x0, 
  rd_toastoid = 0, 
  pgstat_info = 0x101158e78
}
(gdb) p *relation->rd_rel
$2 = {
  relname = {
    data = "tt0", '\0' <repeats 60 times>
  }, 
  relnamespace = 2200, 
  reltype = 41139, 
  reloftype = 0, 
  relowner = 10, 
  relam = 0, 
  relfilenode = 41137, 
  reltablespace = 0, 
  relpages = 0, 
  reltuples = 0, 
  reltoastrelid = 0, 
  reltoastidxid = 0, 
  relhasindex = 0 '\0', 
  relisshared = 0 '\0', 
  relpersistence = 112 'p', 
  relkind = 114 'r', 
  relnatts = 2, 
  relchecks = 0, 
  relhasoids = 0 '\0', 
  relhaspkey = 0 '\0', 
  relhasrules = 0 '\0', 
  relhastriggers = 0 '\0', 
  relhassubclass = 1 '\001', 
  relfrozenxid = 5822, 
  relacl = {17222296}, 
  reloptions = {{
      vl_len_ = "\001\000\000", 
      vl_dat = ""
    }}
}
(gdb) q
The program is running.  Quit anyway (and detach it)? (y or n) y
-- 
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