Also use our Duration in pkg/shaman (#104408)
Move the `Duration` struct from `internal/manager/config` to `pkg/duration` so that it can be used by `pkg/shaman` as well. Reviewed-on: https://projects.blender.org/studio/flamenco/pulls/104408
This commit is contained in:
parent
4a0c7b21db
commit
7e40e1bbb0
@ -23,6 +23,7 @@ import (
|
|||||||
"projects.blender.org/studio/flamenco/internal/appinfo"
|
"projects.blender.org/studio/flamenco/internal/appinfo"
|
||||||
"projects.blender.org/studio/flamenco/internal/manager/eventbus"
|
"projects.blender.org/studio/flamenco/internal/manager/eventbus"
|
||||||
"projects.blender.org/studio/flamenco/pkg/crosspath"
|
"projects.blender.org/studio/flamenco/pkg/crosspath"
|
||||||
|
"projects.blender.org/studio/flamenco/pkg/duration"
|
||||||
shaman_config "projects.blender.org/studio/flamenco/pkg/shaman/config"
|
shaman_config "projects.blender.org/studio/flamenco/pkg/shaman/config"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -76,7 +77,7 @@ type Base struct {
|
|||||||
ManagerName string `yaml:"manager_name"`
|
ManagerName string `yaml:"manager_name"`
|
||||||
|
|
||||||
DatabaseDSN string `yaml:"database"`
|
DatabaseDSN string `yaml:"database"`
|
||||||
DBIntegrityCheck Duration `yaml:"database_check_period"`
|
DBIntegrityCheck duration.Duration `yaml:"database_check_period"`
|
||||||
|
|
||||||
Listen string `yaml:"listen"`
|
Listen string `yaml:"listen"`
|
||||||
|
|
||||||
@ -92,8 +93,8 @@ type Base struct {
|
|||||||
|
|
||||||
Shaman shaman_config.Config `yaml:"shaman"`
|
Shaman shaman_config.Config `yaml:"shaman"`
|
||||||
|
|
||||||
TaskTimeout Duration `yaml:"task_timeout"`
|
TaskTimeout duration.Duration `yaml:"task_timeout"`
|
||||||
WorkerTimeout Duration `yaml:"worker_timeout"`
|
WorkerTimeout duration.Duration `yaml:"worker_timeout"`
|
||||||
|
|
||||||
/* This many failures (on a given job+task type combination) will ban a worker
|
/* This many failures (on a given job+task type combination) will ban a worker
|
||||||
* from that task type on that job. */
|
* from that task type on that job. */
|
||||||
|
@ -5,6 +5,7 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"projects.blender.org/studio/flamenco/internal/manager/eventbus"
|
"projects.blender.org/studio/flamenco/internal/manager/eventbus"
|
||||||
|
"projects.blender.org/studio/flamenco/pkg/duration"
|
||||||
shaman_config "projects.blender.org/studio/flamenco/pkg/shaman/config"
|
shaman_config "projects.blender.org/studio/flamenco/pkg/shaman/config"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -20,7 +21,7 @@ var defaultConfig = Conf{
|
|||||||
ManagerName: "Flamenco",
|
ManagerName: "Flamenco",
|
||||||
Listen: ":8080",
|
Listen: ":8080",
|
||||||
DatabaseDSN: "flamenco-manager.sqlite",
|
DatabaseDSN: "flamenco-manager.sqlite",
|
||||||
DBIntegrityCheck: Duration(10 * time.Minute),
|
DBIntegrityCheck: duration.Duration(10 * time.Minute),
|
||||||
SSDPDiscovery: true,
|
SSDPDiscovery: true,
|
||||||
LocalManagerStoragePath: "./flamenco-manager-storage",
|
LocalManagerStoragePath: "./flamenco-manager-storage",
|
||||||
SharedStoragePath: "", // Empty string means "first run", and should trigger the config setup assistant.
|
SharedStoragePath: "", // Empty string means "first run", and should trigger the config setup assistant.
|
||||||
@ -29,13 +30,13 @@ var defaultConfig = Conf{
|
|||||||
// Enable Shaman by default, except on Windows where symlinks are still tricky.
|
// Enable Shaman by default, except on Windows where symlinks are still tricky.
|
||||||
Enabled: runtime.GOOS != "windows",
|
Enabled: runtime.GOOS != "windows",
|
||||||
GarbageCollect: shaman_config.GarbageCollect{
|
GarbageCollect: shaman_config.GarbageCollect{
|
||||||
Period: 24 * time.Hour,
|
Period: duration.Duration(24 * time.Hour),
|
||||||
MaxAge: 31 * 24 * time.Hour,
|
MaxAge: duration.Duration(31 * 24 * time.Hour),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
TaskTimeout: Duration(10 * time.Minute),
|
TaskTimeout: duration.Duration(10 * time.Minute),
|
||||||
WorkerTimeout: Duration(1 * time.Minute),
|
WorkerTimeout: duration.Duration(1 * time.Minute),
|
||||||
|
|
||||||
BlocklistThreshold: 3,
|
BlocklistThreshold: 3,
|
||||||
TaskFailAfterSoftFailCount: 3,
|
TaskFailAfterSoftFailCount: 3,
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
package config
|
package duration
|
||||||
|
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
@ -1,4 +1,4 @@
|
|||||||
package config
|
package duration
|
||||||
|
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
@ -57,13 +57,13 @@ func (s *Server) periodicCleanup() {
|
|||||||
select {
|
select {
|
||||||
case <-s.shutdownChan:
|
case <-s.shutdownChan:
|
||||||
return
|
return
|
||||||
case <-time.After(s.config.GarbageCollect.Period):
|
case <-time.After(time.Duration(s.config.GarbageCollect.Period)):
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Server) gcAgeThreshold() time.Time {
|
func (s *Server) gcAgeThreshold() time.Time {
|
||||||
return time.Now().Add(-s.config.GarbageCollect.MaxAge).Round(1 * time.Second)
|
return time.Now().Add(time.Duration(-s.config.GarbageCollect.MaxAge).Round(1 * time.Second))
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -58,7 +58,7 @@ func makeOld(shaman *Server, expectOld mtimeMap, relPath string) {
|
|||||||
shaman.config.GarbageCollect.MaxAge))
|
shaman.config.GarbageCollect.MaxAge))
|
||||||
}
|
}
|
||||||
age := -2 * shaman.config.GarbageCollect.MaxAge
|
age := -2 * shaman.config.GarbageCollect.MaxAge
|
||||||
oldTime := time.Now().Add(age)
|
oldTime := time.Now().Add(time.Duration(age))
|
||||||
absPath := filepath.Join(shaman.config.FileStorePath(), relPath)
|
absPath := filepath.Join(shaman.config.FileStorePath(), relPath)
|
||||||
|
|
||||||
err := os.Chtimes(absPath, oldTime, oldTime)
|
err := os.Chtimes(absPath, oldTime, oldTime)
|
||||||
@ -76,7 +76,7 @@ func makeOld(shaman *Server, expectOld mtimeMap, relPath string) {
|
|||||||
|
|
||||||
log.Debug().
|
log.Debug().
|
||||||
Str("relPath", relPath).
|
Str("relPath", relPath).
|
||||||
Stringer("age", age).
|
Stringer("age", time.Duration(age)).
|
||||||
Stringer("stamp", oldTime).
|
Stringer("stamp", oldTime).
|
||||||
Stringer("actual", osModTime).
|
Stringer("actual", osModTime).
|
||||||
Msg("makeOld")
|
Msg("makeOld")
|
||||||
@ -93,7 +93,7 @@ func TestGCCanary(t *testing.T) {
|
|||||||
server, cleanup := createTestShaman()
|
server, cleanup := createTestShaman()
|
||||||
defer cleanup()
|
defer cleanup()
|
||||||
|
|
||||||
assert.True(t, server.config.GarbageCollect.MaxAge > 10*time.Minute,
|
assert.True(t, time.Duration(server.config.GarbageCollect.MaxAge) > 10*time.Minute,
|
||||||
"config.GarbageCollect.MaxAge must be big enough for this test to be reliable, is %v",
|
"config.GarbageCollect.MaxAge must be big enough for this test to be reliable, is %v",
|
||||||
server.config.GarbageCollect.MaxAge)
|
server.config.GarbageCollect.MaxAge)
|
||||||
}
|
}
|
||||||
|
@ -24,7 +24,8 @@ package config
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"time"
|
|
||||||
|
"projects.blender.org/studio/flamenco/pkg/duration"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@ -52,9 +53,9 @@ type Config struct {
|
|||||||
// GarbageCollect contains the config options for the GC.
|
// GarbageCollect contains the config options for the GC.
|
||||||
type GarbageCollect struct {
|
type GarbageCollect struct {
|
||||||
// How frequently garbage collection is performed on the file store:
|
// How frequently garbage collection is performed on the file store:
|
||||||
Period time.Duration `yaml:"period"`
|
Period duration.Duration `yaml:"period"`
|
||||||
// How old files must be before they are GC'd:
|
// How old files must be before they are GC'd:
|
||||||
MaxAge time.Duration `yaml:"maxAge"`
|
MaxAge duration.Duration `yaml:"maxAge"`
|
||||||
|
|
||||||
// Used by the -gc CLI arg to silently disable the garbage collector
|
// Used by the -gc CLI arg to silently disable the garbage collector
|
||||||
// while we're performing a manual sweep.
|
// while we're performing a manual sweep.
|
||||||
|
@ -26,6 +26,8 @@ import (
|
|||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"projects.blender.org/studio/flamenco/pkg/duration"
|
||||||
)
|
)
|
||||||
|
|
||||||
// CreateTestConfig creates a configuration + cleanup function.
|
// CreateTestConfig creates a configuration + cleanup function.
|
||||||
@ -46,8 +48,8 @@ func CreateTestConfig() (conf Config, cleanup func()) {
|
|||||||
StoragePath: tempDir,
|
StoragePath: tempDir,
|
||||||
|
|
||||||
GarbageCollect: GarbageCollect{
|
GarbageCollect: GarbageCollect{
|
||||||
Period: 8 * time.Hour,
|
Period: duration.Duration(8 * time.Hour),
|
||||||
MaxAge: 31 * 24 * time.Hour,
|
MaxAge: duration.Duration(31 * 24 * time.Hour),
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user