From 3b63c32f08e69a498f4d4e287824f21149c75c3f Mon Sep 17 00:00:00 2001 From: Jacob Gunther Date: Wed, 19 Jul 2023 21:16:22 -0500 Subject: [PATCH] Ability to enable/disable locks --- config.example.yml | 1 + src/config.go | 8 +++++--- src/status.go | 16 ++++++++++------ 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/config.example.yml b/config.example.yml index 6f5626e..76cffb7 100644 --- a/config.example.yml +++ b/config.example.yml @@ -3,6 +3,7 @@ host: 0.0.0.0 port: 3001 redis: ${REDIS_URL} # Use an environment variable to define the Redis URL cache: + enable_locks: true java_status_duration: 1m bedrock_status_duration: 1m icon_duration: 24h \ No newline at end of file diff --git a/src/config.go b/src/config.go index 4d94dbe..ea270bc 100644 --- a/src/config.go +++ b/src/config.go @@ -17,6 +17,7 @@ var ( Port: 3001, Redis: nil, Cache: ConfigCache{ + EnableLocks: true, JavaStatusDuration: time.Minute, BedrockStatusDuration: time.Minute, IconDuration: time.Minute * 15, @@ -35,9 +36,10 @@ type Config struct { // ConfigCache represents the caching durations of various responses. type ConfigCache struct { - JavaStatusDuration time.Duration `yaml:"java_status_duration" json:"java_status_duration"` - BedrockStatusDuration time.Duration `yaml:"bedrock_status_duration" json:"bedrock_status_duration"` - IconDuration time.Duration `yaml:"icon_duration" json:"icon_duration"` + EnableLocks bool `yaml:"enable_locks"` + JavaStatusDuration time.Duration `yaml:"java_status_duration"` + BedrockStatusDuration time.Duration `yaml:"bedrock_status_duration"` + IconDuration time.Duration `yaml:"icon_duration"` } // ReadFile reads the configuration from the given file and overrides values using environment variables. diff --git a/src/status.go b/src/status.go index 46beed3..abc5990 100644 --- a/src/status.go +++ b/src/status.go @@ -116,10 +116,12 @@ type Plugin struct { func GetJavaStatus(host string, port uint16, enableQuery bool) (*JavaStatusResponse, time.Duration, error) { cacheKey := fmt.Sprintf("java:%v-%s-%d", enableQuery, host, port) - mutex := r.NewMutex(fmt.Sprintf("java-lock:%v-%s-%d", enableQuery, host, port)) - mutex.Lock() + if conf.Cache.EnableLocks { + mutex := r.NewMutex(fmt.Sprintf("java-lock:%v-%s-%d", enableQuery, host, port)) + mutex.Lock() - defer mutex.Unlock() + defer mutex.Unlock() + } cache, ttl, err := r.Get(cacheKey) @@ -154,10 +156,12 @@ func GetJavaStatus(host string, port uint16, enableQuery bool) (*JavaStatusRespo func GetBedrockStatus(host string, port uint16) (*BedrockStatusResponse, time.Duration, error) { cacheKey := fmt.Sprintf("bedrock:%s-%d", host, port) - mutex := r.NewMutex(fmt.Sprintf("bedrock-lock:%s-%d", host, port)) - mutex.Lock() + if conf.Cache.EnableLocks { + mutex := r.NewMutex(fmt.Sprintf("bedrock-lock:%s-%d", host, port)) + mutex.Lock() - defer mutex.Unlock() + defer mutex.Unlock() + } cache, ttl, err := r.Get(cacheKey)