ahem .... until "it makes sense" any modification (and discussion about it) doesn't really help anyone ^_^ . The fact that you have 4 workers and a congestion problem gives me the hint that your db is on the lower side of the needed specs for a normal server. These kind of issues starts to show with 40-50 workers with a disk on an usb drive.... not on a production server (even built 10 years ago).
On Tuesday, November 1, 2016 at 2:42:32 PM UTC+1, Erwn Ltmann wrote: > > Hi Niphold, > > you are right: I have an extra database select in order to get the list of > dead workers. > > Usually I have four workers for example. They are static and shouldn't > terminate often. In this case, I call only once the database in order to > get the list of dead workers and I assume this list is always empty. In > this case nothing is to do. The inner part of my condition will be > important very rare and because of that I can ignore this within my runtime > complexity calculation. In our original code we call always twice the > question how many dead workers there are (update and delete). My suggestion > reflects a runtime rate of 1 for 2. > > Anyway, if I run the worker with my suggested extra condition I could > eliminate the deadlock cases. This works very well because the extra > condition. I am happy :) > > Thx a lot. > Erwn > > On Monday, October 31, 2016 at 3:02:42 PM UTC+1, Niphlod wrote: >> >> sorry, but it doesn't really make sense. >> You're executing twice the same command (the call enclosed in len() and >> the actual .delete() call), which is the counter-arg for relaxing a >> pressured database environment. >> >> On Monday, October 31, 2016 at 2:04:24 PM UTC+1, Erwn Ltmann wrote: >>> >>> Hi, >>> >>> thank you for your reply. >>> >>> @Pierre: MariaDB (in my case) handled deadlocks automaticly too. Good to >>> known, I don't have to be worry about that. >>> >>> @Niphlod: I tried to beef up my database host. No effects. Another >>> suggestion is to prevent the cases for such situation. I did it by an >>> another extra code line in your worker function send_heartbeat: >>> >>> *if len(db.executesql(dead_workers_name)) > 0:* >>>> db( >>>> (st.assigned_worker_name.belongs(dead_workers_name)) & >>>> (st.status == RUNNING) >>>> ).update(assigned_worker_name='', status=QUEUED) >>>> dead_workers.delete() >>>> >>> >>> >>> >>> Erwn >>> >> -- Resources: - http://web2py.com - http://web2py.com/book (Documentation) - http://github.com/web2py/web2py (Source code) - https://code.google.com/p/web2py/issues/list (Report Issues) --- You received this message because you are subscribed to the Google Groups "web2py-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.

