There was a problem where, after upgrading otter to v2, there was a chance
of properties being just cached and not reread. The reason we couldn't use
otter's magic reloading is that there's more business logic that needs to
be executed than just to reread value from DB.
One drawback is in order to keep otter's package "hidden", a clone of Loader
had to be created in common.
Additionally Verify API of server was refactored so we return a clear error
externally in case of auth failure (related to "delayed" API key check)
- more aggressive caching of API keys and added cache warmup
- remove direct DB access in APIkey() middleware immediately
- decrease resources usage for test puzzles
- decrease cache collision possibility for cached solved puzzles
- cosmetic improvement in rate limiter and leaky bucket Updater logic
- move user limits check and API key backfill to a separate goroutine
Main reason being otter/v2 release with APIs for sliding expiration.
- added new cache API to use Loader logic from otter/v2 (fetch from DB)
- main direction of work is improving "negative caching" performance
(currently it is still intertwined with the main cache)
- expose new Prometheus metric for cache hit ratio