From 7353047467b66da7b5af5455fc0d64330e8bcfe6 Mon Sep 17 00:00:00 2001 From: ErickSkrauch Date: Fri, 8 Nov 2019 01:54:16 +0300 Subject: [PATCH] Increase queue loop delay from 1 to 2.5 seconds. Add configuration param to adjust its value --- CHANGELOG.md | 4 ++++ README.md | 11 ++++++----- api/mojang/queue/queue.go | 7 ++++--- api/mojang/queue/queue_test.go | 2 +- cmd/serve.go | 3 +++ 5 files changed, 18 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5d95343..229ed22 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] - xxxx-xx-xx ### Added - 403 Forbidden errors from the Mojang's API are now logged +- `QUEUE_LOOP_DELAY` configuration param to adjust Mojang's textures queue performance + +### Changed +- Mojang's textures queue loop is now has an iteration delay of 2.5 seconds (was 1) ## [4.2.3] - 2019-10-03 ### Changed diff --git a/README.md b/README.md index 450a5b8..60b2b88 100644 --- a/README.md +++ b/README.md @@ -57,11 +57,12 @@ docker-compose up -d app **Variables to adjust:** -| ENV | Description | Example | -|--------------------|------------------------------------------------------------------------------------|-------------------------------------------| -| STORAGE_REDIS_POOL | By default, Chrly creates pool with 10 connection, but you may want to increase it | `20` | -| STATSD_ADDR | StatsD can be used to collect metrics | `localhost:8125` | -| SENTRY_DSN | Sentry can be used to collect app errors | `https://public:private@your.sentry.io/1` | +| ENV | Description | Example | +|--------------------|-------------------------------------------------------------------------------------------------|-------------------------------------------| +| STORAGE_REDIS_POOL | By default, Chrly creates pool with 10 connection, but you may want to increase it | `20` | +| STATSD_ADDR | StatsD can be used to collect metrics | `localhost:8125` | +| SENTRY_DSN | Sentry can be used to collect app errors | `https://public:private@your.sentry.io/1` | +| QUEUE_LOOP_DELAY | Parameter is sets the delay before each iteration of the Mojang's textures queue (milliseconds) | `3200` | If something goes wrong, you can always access logs by executing `docker-compose logs -f app`. diff --git a/api/mojang/queue/queue.go b/api/mojang/queue/queue.go index 1aa5241..7034d0b 100644 --- a/api/mojang/queue/queue.go +++ b/api/mojang/queue/queue.go @@ -14,9 +14,10 @@ import ( "github.com/elyby/chrly/api/mojang" ) +var UuidsQueueIterationDelay = 2*time.Second + 500*time.Millisecond + var usernamesToUuids = mojang.UsernamesToUuids var uuidToTextures = mojang.UuidToTextures -var uuidsQueueIterationDelay = time.Second var forever = func() bool { return true } @@ -97,13 +98,13 @@ func (ctx *JobsQueue) GetTexturesForUsername(username string) chan *mojang.Signe func (ctx *JobsQueue) startQueue() { go func() { - time.Sleep(uuidsQueueIterationDelay) + time.Sleep(UuidsQueueIterationDelay) for forever() { start := time.Now() ctx.queueRound() elapsed := time.Since(start) ctx.Logger.RecordTimer("mojang_textures.usernames.round_time", elapsed) - time.Sleep(uuidsQueueIterationDelay) + time.Sleep(UuidsQueueIterationDelay) } }() } diff --git a/api/mojang/queue/queue_test.go b/api/mojang/queue/queue_test.go index f597a69..30bc3ee 100644 --- a/api/mojang/queue/queue_test.go +++ b/api/mojang/queue/queue_test.go @@ -85,7 +85,7 @@ type queueTestSuite struct { } func (suite *queueTestSuite) SetupSuite() { - uuidsQueueIterationDelay = 0 + UuidsQueueIterationDelay = 0 } func (suite *queueTestSuite) SetupTest() { diff --git a/cmd/serve.go b/cmd/serve.go index c0c7bf9..31d137e 100644 --- a/cmd/serve.go +++ b/cmd/serve.go @@ -3,6 +3,7 @@ package cmd import ( "fmt" "log" + "time" "github.com/spf13/cobra" "github.com/spf13/viper" @@ -51,6 +52,7 @@ var serveCmd = &cobra.Command{ return } + queue.UuidsQueueIterationDelay = time.Duration(viper.GetInt("queue.loop_delay")) * time.Millisecond texturesStorage := queue.CreateInMemoryTexturesStorage() texturesStorage.Start() mojangTexturesQueue := &queue.JobsQueue{ @@ -86,4 +88,5 @@ func init() { viper.SetDefault("storage.redis.poll", 10) viper.SetDefault("storage.filesystem.basePath", "data") viper.SetDefault("storage.filesystem.capesDirName", "capes") + viper.SetDefault("queue.loop_delay", 2_500) }