Make tailnet updates check configurable

This commit is contained in:
Juan Font Alonso 2022-07-12 12:27:28 +02:00
parent e0b15c18ce
commit cf3fc85196
3 changed files with 24 additions and 3 deletions

View File

@ -103,6 +103,12 @@ disable_check_updates: false
# Time before an inactive ephemeral node is deleted? # Time before an inactive ephemeral node is deleted?
ephemeral_node_inactivity_timeout: 30m ephemeral_node_inactivity_timeout: 30m
# Period to check for changes in the tailnet. A value too low will severily affect
# CPU consumption of Headscale. A value too high (over 60s) will cause problems
# to the nodes, as they won't get updates or keep alive messages on time.
# In case of doubts, do not touch the default 10s.
changes_check_interval: 10s
# SQLite config # SQLite config
db_type: sqlite3 db_type: sqlite3
db_path: /var/lib/headscale/db.sqlite db_path: /var/lib/headscale/db.sqlite

View File

@ -26,6 +26,7 @@ type Config struct {
GRPCAddr string GRPCAddr string
GRPCAllowInsecure bool GRPCAllowInsecure bool
EphemeralNodeInactivityTimeout time.Duration EphemeralNodeInactivityTimeout time.Duration
ChangesCheckInterval time.Duration
IPPrefixes []netaddr.IPPrefix IPPrefixes []netaddr.IPPrefix
PrivateKeyPath string PrivateKeyPath string
BaseDomain string BaseDomain string
@ -162,6 +163,8 @@ func LoadConfig(path string, isFile bool) error {
viper.SetDefault("ephemeral_node_inactivity_timeout", "120s") viper.SetDefault("ephemeral_node_inactivity_timeout", "120s")
viper.SetDefault("changes_check_interval", "10s")
if err := viper.ReadInConfig(); err != nil { if err := viper.ReadInConfig(); err != nil {
log.Warn().Err(err).Msg("Failed to read configuration from disk") log.Warn().Err(err).Msg("Failed to read configuration from disk")
@ -217,6 +220,15 @@ func LoadConfig(path string, isFile bool) error {
) )
} }
maxChangesCheckInterval, _ := time.ParseDuration("60s")
if viper.GetDuration("changes_check_interval") > maxChangesCheckInterval {
errorText += fmt.Sprintf(
"Fatal config error: changes_check_interval (%s) is set too high, must be less than %s",
viper.GetString("changes_check_interval"),
maxChangesCheckInterval,
)
}
if errorText != "" { if errorText != "" {
//nolint //nolint
return errors.New(strings.TrimSuffix(errorText, "\n")) return errors.New(strings.TrimSuffix(errorText, "\n"))
@ -478,6 +490,10 @@ func GetHeadscaleConfig() (*Config, error) {
"ephemeral_node_inactivity_timeout", "ephemeral_node_inactivity_timeout",
), ),
ChangesCheckInterval: viper.GetDuration(
"changes_check_interval",
),
DBtype: viper.GetString("db_type"), DBtype: viper.GetString("db_type"),
DBpath: AbsolutePathFromConfigPath(viper.GetString("db_path")), DBpath: AbsolutePathFromConfigPath(viper.GetString("db_path")),
DBhost: viper.GetString("db_host"), DBhost: viper.GetString("db_host"),

View File

@ -16,8 +16,7 @@ import (
) )
const ( const (
keepAliveInterval = 60 * time.Second keepAliveInterval = 60 * time.Second
updateCheckInterval = 10 * time.Second
) )
type contextKey string type contextKey string
@ -640,7 +639,7 @@ func (h *Headscale) scheduledPollWorker(
machine *Machine, machine *Machine,
) { ) {
keepAliveTicker := time.NewTicker(keepAliveInterval) keepAliveTicker := time.NewTicker(keepAliveInterval)
updateCheckerTicker := time.NewTicker(updateCheckInterval) updateCheckerTicker := time.NewTicker(h.cfg.ChangesCheckInterval)
defer closeChanWithLog( defer closeChanWithLog(
updateChan, updateChan,