0
Fork 0
mirror of https://github.com/project-zot/zot.git synced 2024-12-30 22:34:13 -05:00
zot/pkg/storage
peusebiu 7642e5af98
fix(scheduler): fix data race (#2085)
* fix(scheduler): data race when pushing new tasks

the problem here is that scheduler can be closed in two ways:
- canceling the context given as argument to scheduler.RunScheduler()
- running scheduler.Shutdown()

because of this shutdown can trigger a data race between calling scheduler.inShutdown()
and actually pushing tasks into the pool workers

solved that by keeping a quit channel and listening on both quit channel and ctx.Done()
and closing the worker chan and scheduler afterwards.

Signed-off-by: Petu Eusebiu <peusebiu@cisco.com>

* refactor(scheduler): refactor into a single shutdown

before this we could stop scheduler either by closing the context
provided to RunScheduler(ctx) or by running Shutdown().

simplify things by getting rid of the external context in RunScheduler().
keep an internal context in the scheduler itself and pass it down to all tasks.

Signed-off-by: Petu Eusebiu <peusebiu@cisco.com>

---------

Signed-off-by: Petu Eusebiu <peusebiu@cisco.com>
2023-12-11 10:00:34 -08:00
..
cache refactor(test): add lint rule for messages starting with the component (#2045) 2023-12-08 10:05:02 +02:00
common ci(nightly): fix nightly after log message refactor (#2121) 2023-12-11 15:39:32 +02:00
constants feat(retention): added image retention policies (#1866) 2023-11-01 09:16:18 -07:00
gc refactor(test): add lint rule for messages starting with the component (#2045) 2023-12-08 10:05:02 +02:00
imagestore refactor(test): add lint rule for messages starting with the component (#2045) 2023-12-08 10:05:02 +02:00
local fix(scheduler): fix data race (#2085) 2023-12-11 10:00:34 -08:00
s3 fix(scheduler): fix data race (#2085) 2023-12-11 10:00:34 -08:00
types feat(scheduler): gracefully shutdown (#1951) 2023-11-24 00:40:10 -08:00
cache.go refactor(log): replace panics with log fatal or log panic functions (#1723) 2023-11-24 00:38:36 -08:00
cache_benchmark_test.go fix: tests refactoring (#1950) 2023-10-26 11:20:39 +03:00
cache_test.go refactor(log): replace panics with log fatal or log panic functions (#1723) 2023-11-24 00:38:36 -08:00
README.md refactor(cache): rewrote/refactored cachedb functionality to use interface (#667) 2022-11-02 15:53:08 -07:00
scrub.go feat(scheduler): gracefully shutdown (#1951) 2023-11-24 00:40:10 -08:00
scrub_test.go refactor(test): add lint rule for messages starting with the component (#2045) 2023-12-08 10:05:02 +02:00
storage.go refactor(test): add lint rule for messages starting with the component (#2045) 2023-12-08 10:05:02 +02:00
storage_controller.go refactor(pkg/test): split logic in pkg/test/common.go into multiple packages (#1861) 2023-09-27 11:34:48 -07:00
storage_test.go feat(scheduler): gracefully shutdown (#1951) 2023-11-24 00:40:10 -08:00

zot currently supports two types of underlying filesystems:

  1. local - a locally mounted filesystem

  2. remote - a remote filesystem such as AWS S3

The cache database can be configured independently of storage. Right now, zot supports the following database implementations:

  1. BoltDB - local storage. Set the "cloudCache" field in the config file to false. Example: examples/config-boltdb.json