Thread: Unruly rules
The "rule" regression test gets stuck in an infinite loop in optimizer/prep/prepunion.c:find_inheritable_rt_entry. It seems to be a coding mistake; from what I can tell the loop can't ever exit if there are no inherited tables. I also get failures in sanity_check and misc, which might be due to the changed views implementation. -- Peter Eisentraut peter_e@gmx.net http://yi.org/peter-e/
Peter Eisentraut <peter_e@gmx.net> writes: > The "rule" regression test gets stuck in an infinite loop in > optimizer/prep/prepunion.c:find_inheritable_rt_entry. It seems to be a > coding mistake; from what I can tell the loop can't ever exit if there are > no inherited tables. > I also get failures in sanity_check and misc, which might be due to the > changed views implementation. ?? it all passes here ... platform dependency maybe? Or perhaps you just need a make clean and rebuild? I did a fair amount of struct- declaration-rearrangement... regards, tom lane
Tom Lane writes: > > The "rule" regression test gets stuck in an infinite loop in > > optimizer/prep/prepunion.c:find_inheritable_rt_entry. > ?? it all passes here ... platform dependency maybe? Or perhaps you > just need a make clean and rebuild? I did a fair amount of struct- > declaration-rearrangement... Actually, it's still there (even after OS upgrade :). The "misc" and "sanity_check" failures were due to some test ordering problems, but the "rules" still hang. The backend process hangs in this loop: | bool find_inheritable_rt_entry(List *rangetable, | Index *rt_index, | List **inheritors) { | Index count = 0; | List *temp; | | foreach(temp, rangetable) | { | RangeTblEntry *rt_entry = (RangeTblEntry *) lfirst(temp); | List *inhs; | | count++; | /* Ignore non-inheritable RT entries */ | if (! rt_entry->inh) | continue; Somewhere a list pointer needs to be advanced there. This happens at the query: DEBUG: query: insert into shoelace_ok select * from shoelace_arrive;
Peter Eisentraut <peter_e@gmx.net> writes: > The backend process hangs in this loop: > | foreach(temp, rangetable) > Somewhere a list pointer needs to be advanced there. What? foreach() does advance the pointer. The only way this can be an infinite loop is if the rangetable list is circular. I wouldn't rank that as out of the question, considering the enthusiasm with which the rules code munges range lists, but I still don't see it happening here. Is anyone else seeing regression failures with current sources? regards, tom lane
I don't know if you've noticed, but the Beos porters are also reporting that the rule test hangs. Is there any way I can help debugging this? It happens sporadically on my machine, which is potentially because I turn it off every night, thus the memory might be more uniformly initialized than on long-running machines. (Happened before...) -- Peter Eisentraut peter_e@gmx.net http://yi.org/peter-e/
Peter Eisentraut <peter_e@gmx.net> writes: > I don't know if you've noticed, but the Beos porters are also reporting > that the rule test hangs. Is there any way I can help debugging this? Yeah? Hmm, sounds more and more like a platform-specific bug then. I don't see it on HPUX, Linux/Intel or Linux/PPC. What are you running on, and with what configure/build options? regards, tom lane