* fix: make config read/write thread safe and fix some other similar issues 1. The config config has a lock, and safe methods to update and read the attributes 2. The config has methods to retrieve copies of specific attributes, such as the extyensions config, the auth config, and the authz config. These are needed, as the config object may mutate in the middle of an auth/authz requests, and we avoid partial configuration being applied for that request. 3. Fix an issue with the monitoring server not stopping when the controller is shut down. 4. Fix an issue with the HTPasswdWatcher not stopping when the background tasks are supposed to finish. 5. Fix some tests using hardcoded ports. Moved some of the methods which were on the main config to the auth, access control and extension configs Signed-off-by: Andrei Aaron <andreifdaaron@gmail.com>
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:
- 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. - IsDone() bool
This method should return true after the generator finished all the work and has no more tasks to generate. - 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. - 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:
- DoWork(ctx context.Context) error
This should contain the logic that should be executed when this task is run by the scheduler.
- Name() string
Name of the task.
- 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.