mirror of
https://github.com/ClusterCockpit/cc-backend
synced 2026-03-15 04:17:30 +01:00
83 lines
2.9 KiB
Go
83 lines
2.9 KiB
Go
// Copyright (C) NHR@FAU, University Erlangen-Nuremberg.
|
|
// All rights reserved. This file is part of cc-backend.
|
|
// Use of this source code is governed by a MIT-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package repository
|
|
|
|
import "time"
|
|
|
|
// RepositoryConfig holds configuration for repository operations.
|
|
// All fields have sensible defaults, so this configuration is optional.
|
|
type RepositoryConfig struct {
|
|
// CacheSize is the LRU cache size in bytes for job metadata and energy footprints.
|
|
// Default: 1MB (1024 * 1024 bytes)
|
|
CacheSize int
|
|
|
|
// MaxOpenConnections is the maximum number of open database connections.
|
|
// Default: 4
|
|
MaxOpenConnections int
|
|
|
|
// MaxIdleConnections is the maximum number of idle database connections.
|
|
// Default: 4
|
|
MaxIdleConnections int
|
|
|
|
// ConnectionMaxLifetime is the maximum amount of time a connection may be reused.
|
|
// Default: 1 hour
|
|
ConnectionMaxLifetime time.Duration
|
|
|
|
// ConnectionMaxIdleTime is the maximum amount of time a connection may be idle.
|
|
// Default: 10 minutes
|
|
ConnectionMaxIdleTime time.Duration
|
|
|
|
// MinRunningJobDuration is the minimum duration in seconds for a job to be
|
|
// considered in "running jobs" queries. This filters out very short jobs.
|
|
// Default: 600 seconds (10 minutes)
|
|
MinRunningJobDuration int
|
|
|
|
// DbCacheSizeMB is the SQLite page cache size per connection in MB.
|
|
// Uses negative PRAGMA cache_size notation (KiB). With MaxOpenConnections=4
|
|
// and DbCacheSizeMB=2048, total page cache is up to 8GB.
|
|
// Default: 2048 (2GB)
|
|
DbCacheSizeMB int
|
|
|
|
// DbSoftHeapLimitMB is the process-wide SQLite soft heap limit in MB.
|
|
// SQLite will try to release cache pages to stay under this limit.
|
|
// It's a soft limit — queries won't fail, but cache eviction becomes more aggressive.
|
|
// Default: 16384 (16GB)
|
|
DbSoftHeapLimitMB int
|
|
}
|
|
|
|
// DefaultConfig returns the default repository configuration.
|
|
// These values are optimized for typical deployments.
|
|
func DefaultConfig() *RepositoryConfig {
|
|
return &RepositoryConfig{
|
|
CacheSize: 1 * 1024 * 1024, // 1MB
|
|
MaxOpenConnections: 4,
|
|
MaxIdleConnections: 4,
|
|
ConnectionMaxLifetime: time.Hour,
|
|
ConnectionMaxIdleTime: 10 * time.Minute,
|
|
MinRunningJobDuration: 600, // 10 minutes
|
|
DbCacheSizeMB: 2048, // 2GB per connection
|
|
DbSoftHeapLimitMB: 16384, // 16GB process-wide
|
|
}
|
|
}
|
|
|
|
// repoConfig is the package-level configuration instance.
|
|
// It is initialized with defaults and can be overridden via SetConfig.
|
|
var repoConfig *RepositoryConfig = DefaultConfig()
|
|
|
|
// SetConfig sets the repository configuration.
|
|
// This must be called before any repository initialization (Connect, GetJobRepository, etc.).
|
|
// If not called, default values from DefaultConfig() are used.
|
|
func SetConfig(cfg *RepositoryConfig) {
|
|
if cfg != nil {
|
|
repoConfig = cfg
|
|
}
|
|
}
|
|
|
|
// GetConfig returns the current repository configuration.
|
|
func GetConfig() *RepositoryConfig {
|
|
return repoConfig
|
|
}
|