If this is not done in one line, it is not atomic and results into the problems.
On 13 Ago, 13:00, G <[email protected]> wrote: > As a quick workaround, this change in assign_next_task seems to do the > trick: > > subselect = db(query).select( > db.task_scheduled.id,limitby=(0,1), > orderby=db.task_scheduled.next_run_time) > for row in subselect: > db(db.task_scheduled.id == row.id).update( > status=RUNNING, > assigned_worker_name=self.worker_name, > last_run_time=datetime.now) > > On Aug 13, 11:47 am, Massimo Di Pierro <[email protected]> > wrote: > > > > > > > > > I have MySQL, it is full of caveats like this. Can somebody check > > postgresql? > > If this is just a mysql issue, we'll deal with it as an exception and > > find a workaround. > > > On 13 Ago, 04:56, G <[email protected]> wrote: > > > > Hello, > > > I just tried to use scheduler.py with MySQL instead of SQLite and ran > > > into this error: > > > > NotSupportedError: (1235, "This version of MySQL doesn't yet support > > > 'LIMIT & IN/ALL/ANY/SOME subquery'") > > > > The MySQL server version is 5.0.77. Searching on the web, it seems > > > this limitation is common. Is there a way to work around the issue? > > > The offending SQL looks like this: > > > > UPDATE task_scheduled SET > > > status='running',assigned_worker_name='crabby#237cf3f0-89e7-4db5- > > > b514-56db27a700d5',last_run_time='2011-08-13 09:33:01' WHERE > > > (task_scheduled.id IN (SELECT task_scheduled.id FROM task_scheduled > > > WHERE (((((task_scheduled.enabled = 'T') AND (task_scheduled.status = > > > 'queued')) AND (task_scheduled.group_name IN ('command','main'))) AND > > > (task_scheduled.next_run_time < '2011-08-13 09:33:01')) AND > > > (((task_scheduled.assigned_worker_name = '') OR > > > (task_scheduled.assigned_worker_name IS NULL)) OR > > > (task_scheduled.assigned_worker_name = 'crabby#237cf3f0-89e7-4db5- > > > b514-56db27a700d5'))) ORDER BY task_scheduled.next_run_time LIMIT 1 > > > OFFSET 0)); > > > > I'm pretty sure this is coming from the massively complex query in > > > assign_next_task. > > > > Thanks, > > > G

