while I test it, could you please verify that when you updated web2py the
scheduler_* table have been migrated too ?
it seems in all your code posted migration on that db are always turned
off.
please inspect the scheduler_task table and see if it has a column named
"uuid".
BTW: from scheduler import Scheduler shouldn't work unless you're messing
with sys.path . the correct import would be from gluon.scheduler import
Scheduler
On Saturday, October 6, 2012 12:25:49 AM UTC+2, Adi wrote:
>
> Of course. This is what I have in a test application:
>
> Models
> ======
> db.py
>
> if not request.env.web2py_runtime_gae:
> # used tunnel
> *db_s = DAL('mysql://crm:password@localhost:3307/CRM',migrate_enabled=
> False, fake_migrate_all=True)*
> else:
> ## connect to Google BigTable (optional
> 'google:datastore://namespace')
> db_s = DAL('google:datastore')
> ## store sessions and tickets there
> session.connect(request, response, db_s = db_s)
>
>
>
> db_scheduler.py
> # coding: utf8
> from scheduler import Scheduler
> import datetime
> import urllib, urllib2
> from urlparse import urlparse
> import unicodedata
>
> def send_msg():
> email_sent=mail.send(to='[email protected] <javascript:>',
> subject='email_subject',
> message='message')
> print 'sent'
> return
>
> myscheduler = Scheduler(db_s, dict(send_msg=send_msg))
>
>
>
> Controllers
> ===========
> test.py
> def test():
> db_s.scheduler_task.insert(
> status='QUEUED',
> application_name='test2',
> task_name='send test abandoned email',
> function_name='send_msg',
> enabled=True,
> start_time = request.now,
> next_run_time = request.now+datetime.
> timedelta(minutes=2),
> stop_time = request.now+datetime.timedelta(
> days=1),
> repeats = 1, # run 1 times
> period = 120, # every 2m
> timeout = 60, # should take less than 60
> seconds
> )
>
>
>
> Scheduler started:
> $ python web2py.py -a pass -K test2 -X > log_scheduler.log
>
>
>
>
> On Friday, October 5, 2012 5:58:37 PM UTC-4, Massimo Di Pierro wrote:
>>
>> Can you share some code so we ret reproduce it and fix it? We do not need
>> all the code. Just a minimalist example that causes the same problem.
>>
>> On Friday, 5 October 2012 16:24:11 UTC-5, Adi wrote:
>>>
>>> yes, i just confirmed by running in parallel 9/13 and 10/5
>>>
>>> results:
>>> 9/13 partially works (will execute task, mark it as "COMPLETED" in
>>> scheduler_tasks, but will mark it as "FAILED" in scheduler_run and won't
>>> update details in there...
>>> 10/5 doesn't work (RuntimeError: Cannot duplicate a Singleton)
>>>
>>>
>>> On Fri, Oct 5, 2012 at 11:59 AM, Massimo Di Pierro <
>>> [email protected]> wrote:
>>>
>>>> To summarize:
>>>> 1) 9/13 version works
>>>> 2) 10/4 version does not work as you expected
>>>>
>>>> Did you try any 10/5 version?
>>>>
>>>>
>>>> On Friday, 5 October 2012 10:21:46 UTC-5, Adi wrote:
>>>>>
>>>>>
>>>>> for what it's worth, just want to let you know that after rolling back
>>>>> to "Version 2.0.9 (2012-09-13 23:51:30) stable" tasks are getting
>>>>> executed, marked as COMPLETED, but schedule_run is being marked as FAILED
>>>>> w
>>>>> bellow specified sys.exit(1).
>>>>>
>>>>> anyway... this is perfect for now, and customers won't suffer :)
>>>>>
>>>>> scheduler and workflow are two crucial things in complex applications
>>>>> from my prospective, so big thanks for scheduler, and can't wait to start
>>>>> testing workflow once it's in.
>>>>>
>>>>> On Friday, October 5, 2012 9:27:22 AM UTC-4, Adi wrote:
>>>>>>
>>>>>>
>>>>>> Created a new application from admin panel, accessing single mysql
>>>>>> db, inserted one task that sends an email and prints a test message.
>>>>>>
>>>>>> Version 2.0.9 (2012-10-04 20:17:03) dev
>>>>>>
>>>>>> def test():
>>>>>> db.scheduler_task.insert(
>>>>>> status='QUEUED',
>>>>>> application_name='test2',
>>>>>> task_name='send reminder email',
>>>>>> function_name='send_msg',
>>>>>> enabled=True,
>>>>>> start_time = request.now,
>>>>>> next_run_time = request.now+datetime.
>>>>>> timedelta**(minutes=2),
>>>>>> stop_time = request.now+datetime.
>>>>>> timedelta**(days=1),
>>>>>> repeats = 1, # run 1 times
>>>>>> period = 120,
>>>>>> timeout = 60, # should take less than
>>>>>> 60 seconds
>>>>>> )
>>>>>>
>>>>>>
>>>>>>
>>>>>> *started scheduler: *
>>>>>> asm21:web2py209 adnan$ python web2py.py -a pass -K test2 -X
>>>>>> web2py Web Framework
>>>>>> Created by Massimo Di Pierro, Copyright 2007-2012
>>>>>> Version 2.0.9 (2012-10-04 20:17:03) dev
>>>>>> Database drivers available: SQLite(sqlite3), MySQL(pymysql),
>>>>>> PostgreSQL(pg8000), IMAP(imaplib)
>>>>>> please visit:
>>>>>> starting scheduler for "test2"... http://127.0.0.1:8000
>>>>>>
>>>>>> use "kill -SIGTERM 831" to shutdown the web2py server
>>>>>> Currently running 1 scheduler processes
>>>>>> Processes started
>>>>>> ERROR:Rocket.Errors.Port8000:**Socket 127.0.0.1:8000 in use by other
>>>>>> process and it won't share.
>>>>>> WARNING:Rocket.Errors.**Port8000:Listener started when not ready.
>>>>>> Traceback (most recent call last):
>>>>>> File "/Users/adnan/web2py209/gluon/**restricted.py", line 209, in
>>>>>> restricted
>>>>>> exec ccode in environment
>>>>>> File "applications/test2/models/db.**py", line 15, in <module>
>>>>>> db =
>>>>>> DAL('mysql://crm:password@**localhost:3307/CRM',migrate_**enabled=False,
>>>>>> fake_migrate_all=True)
>>>>>> File "/Users/adnan/web2py209/gluon/**dal.py", line 6600, in __new__
>>>>>> raise RuntimeError, 'Cannot duplicate a Singleton'
>>>>>> RuntimeError: Cannot duplicate a Singleton
>>>>>>
>>>>>>
>>>>>> *traceback error in the scheduler_run table after task was run
>>>>>> (first time):*
>>>>>> Traceback (most recent call last):
>>>>>> File "/opt/web-apps/web2py/gluon/**scheduler.py", line 203, in
>>>>>> executor
>>>>>> _env = env(a=a,c=c,import_models=**True)
>>>>>> File "/opt/web-apps/web2py/gluon/**shell.py", line 127, in env
>>>>>> environment = build_environment(request, response, session)
>>>>>> File "/opt/web-apps/web2py/gluon/**compileapp.py", line 388, in
>>>>>> build_environment
>>>>>> t = environment['T'] = translator(request)
>>>>>> File "/opt/web-apps/web2py/gluon/**languages.py", line 437, in
>>>>>> __init__
>>>>>> self.set_current_languages()
>>>>>> File "/opt/web-apps/web2py/gluon/**languages.py", line 492, in
>>>>>> set_current_languages
>>>>>> pl_info = self.get_possible_languages_**info('default')
>>>>>> File "/opt/web-apps/web2py/gluon/**languages.py", line 471, in
>>>>>> get_possible_languages_info
>>>>>> info = read_possible_languages(self.**folder)
>>>>>> File "/opt/web-apps/web2py/gluon/**languages.py", line 250, in
>>>>>> read_possible_languages
>>>>>> lambda: read_possible_languages_aux(**langdir))
>>>>>> File "/opt/web-apps/web2py/gluon/**cfs.py", line 40, in getcfs
>>>>>> return filter() if callable(filter) else ''
>>>>>> File "/opt/web-apps/web2py/gluon/**languages.py", line 250, in
>>>>>> <lambda>
>>>>>> lambda: read_possible_languages_aux(**langdir))
>>>>>> File "/opt/web-apps/web2py/gluon/**languages.py", line 215, in
>>>>>> read_possible_languages_aux
>>>>>> flist = oslistdir(langdir)
>>>>>> OSError: [Errno 2] No such file or directory:
>>>>>> 'applications/test2/languages'
>>>>>>
>>>>>> *traceback error in the scheduler_run table after task was run
>>>>>> (second time):*
>>>>>> Traceback (most recent call last):
>>>>>> File "/Users/adnan/web2py209/gluon/**scheduler.py", line 203, in
>>>>>> executor
>>>>>> _env = env(a=a,c=c,import_models=**True)
>>>>>> File "/Users/adnan/web2py209/gluon/**shell.py", line 134, in env
>>>>>> sys.exit(1)
>>>>>> SystemExit: 1
>>>>>>
>>>>>> Please let me know if there is anything else I can test to help
>>>>>> figure out where exactly is the problem? It's a bit urgent for me to
>>>>>> figure
>>>>>> this out, or I have to roll back production before weekend starts :(
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Friday, October 5, 2012 12:00:57 AM UTC-4, Adi wrote:
>>>>>>>
>>>>>>> Will run more tests in the morning on a brand new application, since
>>>>>>> I can't see anything wrong (connection string duplication) in code
>>>>>>> right
>>>>>>> now. Unfortunately, can't roll back this functionality now, so will
>>>>>>> have to
>>>>>>> figure it out quickly. Thanks for help Massimo and Niphlod.
>>>>>>>
>>>>>>>
>>>>>>> On Thu, Oct 4, 2012 at 10:32 PM, Massimo Di Pierro wrote:
>>>>>>>
>>>>>>>> No. this should not be a problem. This is only be a problem if any
>>>>>>>> two have the same connection string.
>>>>>>>>
>>>>>>>>
>>>>>>>> On Thursday, 4 October 2012 21:10:58 UTC-5, Adi wrote:
>>>>>>>>
>>>>>>>>> I'm using 6 connections at the same time, 3 go to different
>>>>>>>>> databases on the same server, and 3 to totally different servers.
>>>>>>>>> Each
>>>>>>>>> connection has a different name
>>>>>>>>>
>>>>>>>>> db = DAL('mysql://crm:password@**loca**lhost:3307/CRM',migrate_**
>>>>>>>>> enable**d=True)
>>>>>>>>> db_us = DAL('mysql://web_US:password@**l**ocalhost:3307/DataUS',**
>>>>>>>>> migrate_**enabled=False, fake_migrate_all=True)
>>>>>>>>> db_ca = DAL('mysql://web_CA:password@**l**ocalhost:3307/DataCA',
>>>>>>>>> migrate_enabled=False, fake_migrate_all=True)
>>>>>>>>> ...
>>>>>>>>>
>>>>>>>>> Could something like this be a problem:
>>>>>>>>> In a scheduler function, based on application that inserted a
>>>>>>>>> task, I assign relevant connection to another object to use?
>>>>>>>>>
>>>>>>>>> if application='ca':
>>>>>>>>> db_front_end = db_ca
>>>>>>>>> elif application='us':
>>>>>>>>> db_front_end = db_us
>>>>>>>>>
>>>>>>>>> use db_front_end to retrieve data and perform scheduled task
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On Thu, Oct 4, 2012 at 9:42 PM, Massimo Di Pierro <
>>>>>>>>> [email protected]> wrote:
>>>>>>>>>
>>>>>>>>>> This error can arise in two cases:
>>>>>>>>>> - you are using an a recent trunk version (not the latest) which
>>>>>>>>>> has a bug
>>>>>>>>>> - you are using the latest trunk (no bug) but you have a
>>>>>>>>>> duplicated connection in your code:
>>>>>>>>>>
>>>>>>>>>> db = DAL(....)
>>>>>>>>>> db = DAL(....)
>>>>>>>>>>
>>>>>>>>>> perhaps in different model files. Previous web2py did not check
>>>>>>>>>> and allowed you to have two connections to the same database. We
>>>>>>>>>> found this
>>>>>>>>>> is often source or errors. The new web2py checks and does not allow
>>>>>>>>>> you to
>>>>>>>>>> do it. Your would get the error you see.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On Thursday, 4 October 2012 14:42:59 UTC-5, Adi wrote:
>>>>>>>>>>
>>>>>>>>>>> We promoted latest night build to production, and scheduler
>>>>>>>>>>> started failing. At the same time there were some code changes, so
>>>>>>>>>>> I'm
>>>>>>>>>>> having a hard time tracing the source of the problem.
>>>>>>>>>>>
>>>>>>>>>>> Any insights while I'm trying to figure it out?
>>>>>>>>>>>
>>>>>>>>>>> Thanks,
>>>>>>>>>>> Adi
>>>>>>>>>>>
>>>>>>>>>>> db: mysql
>>>>>>>>>>> redhat linux
>>>>>>>>>>> w2p: Version 2.0.9 (2012-10-02 03:55:58) dev
>>>>>>>>>>>
>>>>>>>>>>> scheduler_run table: traceback field:
>>>>>>>>>>> Traceback (most recent call last):
>>>>>>>>>>> File "/opt/web-apps/web2py/gluon/**sc****heduler.py", line
>>>>>>>>>>> 203, in executor
>>>>>>>>>>> _env = env(a=a,c=c,import_models=**True****)
>>>>>>>>>>> File "/opt/web-apps/web2py/gluon/**sh****ell.py", line 134,
>>>>>>>>>>> in env
>>>>>>>>>>> sys.exit(1)
>>>>>>>>>>> SystemExit: 1
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> scheduler log:
>>>>>>>>>>> /opt/web-apps/web2py/gluon/**dal****.py:6597:
>>>>>>>>>>> DeprecationWarning: object.__new__() takes no parameters
>>>>>>>>>>> db = super(DAL, cls).__new__(cls, uri, *args, **kwargs)
>>>>>>>>>>> web2py Web Framework
>>>>>>>>>>> Created by Massimo Di Pierro, Copyright 2007-2012
>>>>>>>>>>> Version 2.0.9 (2012-10-02 03:55:58) dev
>>>>>>>>>>> Database drivers available: SQLite(sqlite3), MySQL(pymysql),
>>>>>>>>>>> PostgreSQL(pg8000), IMAP(imaplib)
>>>>>>>>>>> starting single-scheduler for "crm"...
>>>>>>>>>>> Traceback (most recent call last):
>>>>>>>>>>> File "/opt/web-apps/web2py/gluon/**re****stricted.py", line
>>>>>>>>>>> 209, in restricted
>>>>>>>>>>> exec ccode in environment
>>>>>>>>>>> File "applications/crm/models/db.**py****", line 47, in
>>>>>>>>>>> <module>
>>>>>>>>>>> db = DAL('mysql://crm:password@**loca****
>>>>>>>>>>> lhost:3307/CRM',migrate_**enable****d=False,
>>>>>>>>>>> fake_migrate_all=True)
>>>>>>>>>>> File "/opt/web-apps/web2py/gluon/**da****l.py", line 6595, in
>>>>>>>>>>> __new__
>>>>>>>>>>> raise RuntimeError, 'Cannot duplicate a Singleton'
>>>>>>>>>>> RuntimeError: Cannot duplicate a Singleton
>>>>>>>>>>>
>>>>>>>>>>> --
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>
>>>>
>>>>
>>>>
>>>
>>>
>>>
>>> --
>>>
>>> Thanks,
>>> Adnan
>>>
>>> video: http://vimeo.com/24653283
>>>
>>>
>>>
--