plague-client list failing
Dennis Gregorovic
dgregor at redhat.com
Thu Jun 29 18:23:48 UTC 2006
On Thu, 2006-06-29 at 14:10 -0400, Dan Williams wrote:
> On Thu, 2006-06-29 at 10:56 -0700, Ian Burrell wrote:
> > Doing "plague-client list" fails with the following error:
> >
> > Error: an error ocurred communicating with the server. '<Fault 1:
> > 'pg.DatabaseError:error \'ERROR: expression
> > too complex\nDETAIL: Nesting depth exceeds maximum expression depth
> > 10000.\nHINT: Increase the configuration
> > parameter "max_expr_depth".\n\' in \'SELECT jobid, parent_uid,
> > starttime, endtime, arch, builder_addr, status,
> > builder_status FROM archjobs WHERE parent_uid=5 OR parent_uid=1 OR
> > parent_uid=3 OR parent_uid=6 OR parent_uid=9
> >
> > The "OR parent_uid = " clauses go on for a few pages (something 226K).
> > PostgreSQL has a limit of 10,000 clauses in an expression. Limiting
> > the number of jobs selected would fix the problem.
>
> Thanks for the report, I need to fix this server-side. Should be using
> <> here if the numbers are contiguous.
>
> Dan
It looks like an IN clause would be simpler.
Index: UserInterface.py
===================================================================
RCS file: /cvs/fedora/extras-buildsys/server/UserInterface.py,v
retrieving revision 1.62
diff -u -r1.62 UserInterface.py
--- UserInterface.py 24 Mar 2006 19:13:41 -0000 1.62
+++ UserInterface.py 29 Jun 2006 18:23:41 -0000
@@ -338,11 +338,8 @@
# Mash all returned job UIDs into an SQL query to get all their
archjobs
uids = ''
- for job in jobs:
- if len(uids) == 0:
- uids = uids + "parent_uid=%d" % job['uid']
- else:
- uids = uids + " OR parent_uid=%d" % job['uid']
+ if jobs:
+ uids = 'parent_uid in (' + ','.join([ job['uid'] for job in
jobs ]) + ')'
# Get all archjobs for this job
if len(uids) > 0:
More information about the fedora-extras-list
mailing list