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.
>>>
>>>
>>>
>>>

-- 



Reply via email to