Great, let's get these issues ironed out now- I know the 'repeats' param
was part of the older scheduler before you started work on it, but as far
as I know it's been experimental up until now and and so future-readiness
should trump backwards compatibility at this point. I hope...
I'll be testing all day- I'll bring up any more issues as I find them.
Thanks for being so responsive, and good work--
On Sunday, August 5, 2012 12:25:48 PM UTC-4, Niphlod wrote:
>
> I like the idea.
> The only problem is having people changing repeat to repeats if they're
> using the scheduler included into the stable version.
> I don't think that the implementation would be cumbersome, I'll try to
> compose a patch and send it to Massimo ASAP.
>
> On Sunday, August 5, 2012 6:16:55 PM UTC+2, Yarin wrote:
>>
>> Let me go further:
>>
>> Field('repeats_failed', 'integer', default=1, comment="0=unlimited"),
>>
>> Should really be:
>>
>> Field('retry_failed', 'integer', default=0, comment="-1=unlimited"),
>>
>> According to the docs, this param is supposed to "set how many times the
>> function can raise an exception ... and be queued again instead of stopping
>> in FAILED status with the parameter." If that's the case, then 0 should
>> mean that we don't want the function to be queued again if it fails. 1
>> should mean give it one more try. This is a lot clearer than having the
>> number refer to the number of failures allowed.
>>
>>
>>
>>
>>
>> On Sunday, August 5, 2012 11:55:19 AM UTC-4, Yarin wrote:
>>>
>>> Ok this is clearer to me- I'll see if I can clarify it in the docs..
>>>
>>> On to the next issue, this one regarding implementation:
>>>
>>> I think the following parameters need to be renamed:
>>>
>>> 1. 'repeats' should be 'repeat'
>>> 2. 'repeats_failed' should be 'retry_failed'
>>>
>>> Let me explain:
>>>
>>> 1. 'repeat' is a command, whereas 'repeats' sounds like a result.
>>> Because the task record stores both arguments and results, this becomes
>>> confusing.
>>> 2. 'repeats_failed' is even worse, because it sounds like a result
>>> (like 'times_failed', which *is* a result), and because it is a
>>> misnomer. We are not instructing it to repeat failures, but to *retry
>>> * them. Moreover, it needs to be clear that this value is completely
>>> distinct from the 'repeat' value- i.e. retries will be applied to every
>>> execution attempt, regardless of whether those attempts will be repeated
>>> or
>>> not.
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> On Sunday, August 5, 2012 11:13:38 AM UTC-4, Niphlod wrote:
>>>>
>>>> Hi Yarin, Thank you for testing it!
>>>> A QUEUED task is not picked up by a worker, it is first ASSIGNED to a
>>>> worker that can pick up only the ones ASSIGNED to him. The "assignment"
>>>> phase is important because:
>>>> - the group_name parameter is honored (task queued with the group_name
>>>> 'foo' gets assigned only to workers that process 'foo' tasks (the
>>>> group_names column in scheduler_workers))
>>>> - DISABLED, KILL and TERMINATE workers are "removed" from the
>>>> assignment alltogether
>>>> - in multiple workers situations the QUEUED tasks are split amongst
>>>> workers evenly, and workers "know in advance" what tasks they are allowed
>>>> to execute (the assignment allows the scheduler to set up n "independant"
>>>> queues for the n ACTIVE workers)
>>>>
>>>>
>>>> On Sunday, August 5, 2012 4:54:22 PM UTC+2, Yarin wrote:
>>>>>
>>>>> @Niphlod- First of all, thanks for taking this on. An effective
>>>>> scheduler is critically important to us, and I'll be glad to help out in
>>>>> any way.
>>>>>
>>>>> I've downloaded the test app and am making corrections to the
>>>>> documentation (per your request) for clarity, grammar, etc.
>>>>>
>>>>> On thing I'm stuck on is when the ASSIGNED status comes into play.
>>>>> According to the docs:
>>>>>
>>>>>> "Tasks with no stop_time set or picked up BEFORE stop_time are
>>>>>> ASSIGNED to a worker. When a workers picks up them, they become
>>>>>> RUNNING."
>>>>>
>>>>> - This doesn't make sense to me. If a QUEUED task is picked up by a
>>>>> worker, its status changes to RUNNING. So at what point is it ASSIGNED?
>>>>>
>>>>>
>>>>> On Thursday, July 12, 2012 4:36:38 PM UTC-4, Niphlod wrote:
>>>>>>
>>>>>> Hello everybody, in the last month several changes were commited to
>>>>>> the scheduler, in order to improve it.
>>>>>> Table schemas were changed, to add some features that were missed by
>>>>>> some users.
>>>>>> On the verge of releasing web2py v.2.0.0, and seeing that the
>>>>>> scheduler potential is often missed by regular web2py users, I created a
>>>>>> test app with two main objectives: documenting the new scheduler and
>>>>>> test
>>>>>> the features.
>>>>>>
>>>>>> App is available on github (
>>>>>> https://github.com/niphlod/w2p_scheduler_tests). All you need is
>>>>>> download the trunk version of web2py, download the app and play with it.
>>>>>>
>>>>>> Current features:
>>>>>> - one-time-only tasks
>>>>>> - recurring tasks
>>>>>> - possibility to schedule functions at a given time
>>>>>> - possibility to schedule recurring tasks with a stop_time
>>>>>> - can operate distributed among machines, given a database reachable
>>>>>> for all workers
>>>>>> - group_names to "divide" tasks among different workers
>>>>>> - group_names can also influence the "percentage" of assigned tasks
>>>>>> to similar workers
>>>>>> - simple integration using modules for "embedded" tasks (i.e. you can
>>>>>> use functions defined in modules directly in your app or have them
>>>>>> processed in background)
>>>>>> - configurable heartbeat to reduce latency: with sane defaults and
>>>>>> not toooo many tasks queued normally a queued task doesn't exceed 5
>>>>>> seconds
>>>>>> execution times
>>>>>> - option to start it, process all available tasks and then die
>>>>>> automatically
>>>>>> - integrated tracebacks
>>>>>> - monitorable as state is saved on the db
>>>>>> - integrated app environment if started as web2py.py -K
>>>>>> - stop processes immediately (set them to "KILL")
>>>>>> - stop processes gracefully (set them to "TERMINATE")
>>>>>> - disable processes (set them to "DISABLED")
>>>>>> - functions that doesn't return results do not generate a
>>>>>> scheduler_run entry
>>>>>> - added a discard_results parameter that doesn't store results "no
>>>>>> matter what"
>>>>>> - added a uuid record to tasks to simplify checkings of "unique" tasks
>>>>>> - task_name is not required anymore
>>>>>> - you can skip passing the function to the scheduler istantiation:
>>>>>> functions can be dinamically retrieved in the app's environment
>>>>>>
>>>>>> So, your mission is:
>>>>>> - test the scheduler with the app and familiarize with it
>>>>>> Secondary mission is:
>>>>>> - report any bug you find here or on github (
>>>>>> https://github.com/niphlod/w2p_scheduler_tests/issues)
>>>>>> - propose new examples to be embedded in the app, or correct the
>>>>>> current docs (English is not my mother tongue)
>>>>>>
>>>>>> Once approved, docs will be probably embedded in the book (
>>>>>> http://web2py.com/book)
>>>>>>
>>>>>> Feel free to propose features you'd like to see in the scheduler, I
>>>>>> have some time to spend implementing it.
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>> On Sunday, August 5, 2012 11:13:38 AM UTC-4, Niphlod wrote:
>>>>
>>>> Hi Yarin, Thank you for testing it!
>>>> A QUEUED task is not picked up by a worker, it is first ASSIGNED to a
>>>> worker that can pick up only the ones ASSIGNED to him. The "assignment"
>>>> phase is important because:
>>>> - the group_name parameter is honored (task queued with the group_name
>>>> 'foo' gets assigned only to workers that process 'foo' tasks (the
>>>> group_names column in scheduler_workers))
>>>> - DISABLED, KILL and TERMINATE workers are "removed" from the
>>>> assignment alltogether
>>>> - in multiple workers situations the QUEUED tasks are split amongst
>>>> workers evenly, and workers "know in advance" what tasks they are allowed
>>>> to execute (the assignment allows the scheduler to set up n "independant"
>>>> queues for the n ACTIVE workers)
>>>>
>>>>
>>>> On Sunday, August 5, 2012 4:54:22 PM UTC+2, Yarin wrote:
>>>>>
>>>>> @Niphlod- First of all, thanks for taking this on. An effective
>>>>> scheduler is critically important to us, and I'll be glad to help out in
>>>>> any way.
>>>>>
>>>>> I've downloaded the test app and am making corrections to the
>>>>> documentation (per your request) for clarity, grammar, etc.
>>>>>
>>>>> On thing I'm stuck on is when the ASSIGNED status comes into play.
>>>>> According to the docs:
>>>>>
>>>>>> "Tasks with no stop_time set or picked up BEFORE stop_time are
>>>>>> ASSIGNED to a worker. When a workers picks up them, they become
>>>>>> RUNNING."
>>>>>
>>>>> - This doesn't make sense to me. If a QUEUED task is picked up by a
>>>>> worker, its status changes to RUNNING. So at what point is it ASSIGNED?
>>>>>
>>>>>
>>>>> On Thursday, July 12, 2012 4:36:38 PM UTC-4, Niphlod wrote:
>>>>>>
>>>>>> Hello everybody, in the last month several changes were commited to
>>>>>> the scheduler, in order to improve it.
>>>>>> Table schemas were changed, to add some features that were missed by
>>>>>> some users.
>>>>>> On the verge of releasing web2py v.2.0.0, and seeing that the
>>>>>> scheduler potential is often missed by regular web2py users, I created a
>>>>>> test app with two main objectives: documenting the new scheduler and
>>>>>> test
>>>>>> the features.
>>>>>>
>>>>>> App is available on github (
>>>>>> https://github.com/niphlod/w2p_scheduler_tests). All you need is
>>>>>> download the trunk version of web2py, download the app and play with it.
>>>>>>
>>>>>> Current features:
>>>>>> - one-time-only tasks
>>>>>> - recurring tasks
>>>>>> - possibility to schedule functions at a given time
>>>>>> - possibility to schedule recurring tasks with a stop_time
>>>>>> - can operate distributed among machines, given a database reachable
>>>>>> for all workers
>>>>>> - group_names to "divide" tasks among different workers
>>>>>> - group_names can also influence the "percentage" of assigned tasks
>>>>>> to similar workers
>>>>>> - simple integration using modules for "embedded" tasks (i.e. you can
>>>>>> use functions defined in modules directly in your app or have them
>>>>>> processed in background)
>>>>>> - configurable heartbeat to reduce latency: with sane defaults and
>>>>>> not toooo many tasks queued normally a queued task doesn't exceed 5
>>>>>> seconds
>>>>>> execution times
>>>>>> - option to start it, process all available tasks and then die
>>>>>> automatically
>>>>>> - integrated tracebacks
>>>>>> - monitorable as state is saved on the db
>>>>>> - integrated app environment if started as web2py.py -K
>>>>>> - stop processes immediately (set them to "KILL")
>>>>>> - stop processes gracefully (set them to "TERMINATE")
>>>>>> - disable processes (set them to "DISABLED")
>>>>>> - functions that doesn't return results do not generate a
>>>>>> scheduler_run entry
>>>>>> - added a discard_results parameter that doesn't store results "no
>>>>>> matter what"
>>>>>> - added a uuid record to tasks to simplify checkings of "unique" tasks
>>>>>> - task_name is not required anymore
>>>>>> - you can skip passing the function to the scheduler istantiation:
>>>>>> functions can be dinamically retrieved in the app's environment
>>>>>>
>>>>>> So, your mission is:
>>>>>> - test the scheduler with the app and familiarize with it
>>>>>> Secondary mission is:
>>>>>> - report any bug you find here or on github (
>>>>>> https://github.com/niphlod/w2p_scheduler_tests/issues)
>>>>>> - propose new examples to be embedded in the app, or correct the
>>>>>> current docs (English is not my mother tongue)
>>>>>>
>>>>>> Once approved, docs will be probably embedded in the book (
>>>>>> http://web2py.com/book)
>>>>>>
>>>>>> Feel free to propose features you'd like to see in the scheduler, I
>>>>>> have some time to spend implementing it.
>>>>>>
>>>>>>
>>>>>>
>>>>>>
--