mirror of
https://github.com/project-zot/zot.git
synced 2024-12-16 21:56:37 -05:00
76277f5ebd
* fix: remove inline GC and set a default value of gc interval - remove inline GC - add a default value of GC interval - run the GC periodically by default with the default value if no interval provided - generate GC tasks with a random delay(0-30s) between - add IsReady() method to scheduler.TaskGenerator interface Signed-off-by: Andreea-Lupu <andreealupu1470@yahoo.com> * ci: add test for gc with short interval Signed-off-by: Andreea-Lupu <andreealupu1470@yahoo.com> --------- Signed-off-by: Andreea-Lupu <andreealupu1470@yahoo.com>
44 lines
No EOL
2.5 KiB
Markdown
44 lines
No EOL
2.5 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. ***GenerateTask() (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() 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: LowPriorirty, MediumPriority or HighPriority
|
|
|
|
# How to submit a Task to the scheduler
|
|
|
|
In order to create a new task and add it to the scheduler ***DoWork() error*** is the method that should be implemented. This should contain the logic that should be executed when this task is run by the scheduler.
|
|
|
|
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. |