mirror of
https://github.com/project-zot/zot.git
synced 2024-12-30 22:34:13 -05:00
2e733b3f4f
Signed-off-by: Alexei Dodon <adodon@cisco.com>
57 lines
2.7 KiB
Markdown
57 lines
2.7 KiB
Markdown
# How to submit a Generator to the scheduler
|
|
|
|
## What is a generator and how should it be implemented?
|
|
In order to create a new generator (which will generate new tasks one by one) and add it to the scheduler there are 4 methods which should be implemented:
|
|
1. ***Next() (Task, error)***
|
|
```
|
|
This method should implement the logic for generating a new task.
|
|
Basically, when this method is called by the scheduler it should return the next task until there are no more tasks to be generated.
|
|
Also, the Task returned by this method should implement DoWork(ctx context.Context) method which should contain the logic that should be executed when this task is run by the scheduler.
|
|
```
|
|
2. ***IsDone() bool***
|
|
```
|
|
This method should return true after the generator finished all the work and has no more tasks to generate.
|
|
```
|
|
3. ***IsReady() bool***
|
|
```
|
|
This method should return true if the generator is ready to generate a new task and should be used when it is needed to generate tasks with some delay between.
|
|
```
|
|
4. ***Reset()***
|
|
```
|
|
When this method is called the generator should reset to its initial state.
|
|
After the generator is reset, it will generate new tasks as if it hadn't been used before.
|
|
This is useful for periodic generators, because the scheduler will call this method when the generator is done and has to wait a specific interval of time for this generator to become ready to run again.
|
|
```
|
|
|
|
## Submit a generator
|
|
The scheduler accepts both periodic and non-periodic generators.
|
|
|
|
To submit a generator to the scheduler, ***SubmitGenerator*** should be called with the implemented generator, interval of time (which should be time.Duration(0) in case of non-periodic generator, or the interval for the periodic generator) and the priority of the tasks which will be generated by this generator as parameters.
|
|
|
|
Notes:
|
|
|
|
- A generator should submit only tasks having the same priority
|
|
- The priority of a task can be: LowPriority, MediumPriority or HighPriority
|
|
|
|
# How to submit a Task to the scheduler
|
|
|
|
In order to create a new task and add it to the scheduler we need to implement below methods:
|
|
|
|
1. ***DoWork(ctx context.Context) error***
|
|
```
|
|
This should contain the logic that should be executed when this task is run by the scheduler.
|
|
```
|
|
2. ***Name() string***
|
|
```
|
|
Name of the task.
|
|
```
|
|
3. ***String() string***
|
|
```
|
|
Description of the task. Used in debugging to identify executed task.
|
|
```
|
|
|
|
To submit a task to the scheduler ***SubmitTask*** should be called with the implemented task and the priority of the task as parameters.
|
|
|
|
Note:
|
|
|
|
- A task can not be periodic. In order to add a periodic task, it can be created a generator which will generate periodically the same task.
|