[sqlsmith] Missing CHECK_FOR_INTERRUPTS in tsquery_rewrite - Mailing list pgsql-hackers

From Andreas Seltenreich
Subject [sqlsmith] Missing CHECK_FOR_INTERRUPTS in tsquery_rewrite
Date
Msg-id 8760oasf2y.fsf@credativ.de
Whole thread Raw
Responses Re: [sqlsmith] Missing CHECK_FOR_INTERRUPTS in tsquery_rewrite
List pgsql-hackers
Hi,

testing with sqlsmith yielded an uncancellable backend hogging CPU time.
Gdb showed it was busy in findeq() of tsquery_rewrite.c.  This function
appears to have exponential complexity wrt. the size of the involved
tsqueries.  The following query runs for 12s on my machine with no way
to cancel it and incrementing the length of the first argument by 1
doubles this time.

select ts_rewrite(
  (select string_agg(i::text, '&')::tsquery from generate_series(1,32) g(i)),
  (select string_agg(i::text, '&')::tsquery from generate_series(1,19) g(i)),
  'foo');

The attached patch adds a CHECK_FOR_INTERRUPTS to make it cancellable.

regards,
Andreas


Attachment

pgsql-hackers by date:

Previous
From: Jim Nasby
Date:
Subject: Re: make coverage-html on OS X
Next
From: Michael Paquier
Date:
Subject: Re: Mention column name in error messages