From a274d4e56506b4b6100ed14ea1d2b51bf25eb70f Mon Sep 17 00:00:00 2001 From: Sunil Narasimhamurthy Date: Wed, 29 Nov 2023 00:04:43 +0000 Subject: [PATCH] disable hot restart capability in Envoy --- agent/agent.go | 4 ++++ agent/agent_test.go | 7 ++++++- agent/config/agent_config.go | 3 +++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/agent/agent.go b/agent/agent.go index 0cf608de..016f0414 100644 --- a/agent/agent.go +++ b/agent/agent.go @@ -73,6 +73,10 @@ func buildCommandArgs(agentConfig config.AgentConfig) []string { args = append(args, strconv.Itoa(listenerDrainWaitTime)) } + if agentConfig.DisableHotRestart { + args = append(args, "--disable-hot-restart") + } + if len(agentConfig.CommandArgs) > 0 { args = append(args, agentConfig.CommandArgs...) } diff --git a/agent/agent_test.go b/agent/agent_test.go index 44c41efd..744d03c8 100644 --- a/agent/agent_test.go +++ b/agent/agent_test.go @@ -49,7 +49,7 @@ func TestBuildCommandArgs(t *testing.T) { arguments := buildCommandArgs(agentConfig) - assert.Equal(t, len(arguments), 7) + assert.Equal(t, len(arguments), 8) assert.ElementsMatch(t, []string{ agentConfig.CommandPath, "-c", @@ -58,6 +58,7 @@ func TestBuildCommandArgs(t *testing.T) { agentConfig.EnvoyLogLevel, "--drain-time-s", strconv.Itoa(int(agentConfig.ListenerDrainWaitTime / time.Second)), + "--disable-hot-restart", }, arguments) } @@ -68,6 +69,7 @@ func TestBuildCommandArgsNoEnvoyParameters(t *testing.T) { agentConfig.EnvoyConfigPath = "" agentConfig.EnvoyLogLevel = "" agentConfig.ListenerDrainWaitTime = 0 + agentConfig.DisableHotRestart = false arguments := buildCommandArgs(agentConfig) @@ -128,6 +130,7 @@ func TestKeepCommandAlive(t *testing.T) { agentConfig.EnvoyConfigPath = "" agentConfig.EnvoyLogLevel = "" agentConfig.ListenerDrainWaitTime = 0 + agentConfig.DisableHotRestart = false agentConfig.CommandPath, _ = exec.LookPath("sleep") agentConfig.CommandArgs = []string{sleepTime.String()} @@ -167,6 +170,7 @@ func TestKeepCommandAliveWithRestart(t *testing.T) { agentConfig.EnvoyConfigPath = "" agentConfig.EnvoyLogLevel = "" agentConfig.ListenerDrainWaitTime = 0 + agentConfig.DisableHotRestart = false agentConfig.EnvoyRestartCount = 2 agentConfig.CommandPath, _ = exec.LookPath("sleep") agentConfig.CommandArgs = []string{"3"} @@ -365,6 +369,7 @@ func TestLoggingToFileWithCommandExecution(t *testing.T) { agentConfig.EnvoyConfigPath = "" agentConfig.EnvoyLogLevel = "" agentConfig.ListenerDrainWaitTime = 0 + agentConfig.DisableHotRestart = false agentConfig.CommandPath, _ = exec.LookPath("echo") agentConfig.CommandArgs = []string{ "this", "is", "my", "test.", diff --git a/agent/config/agent_config.go b/agent/config/agent_config.go index 01f47c22..b2148141 100644 --- a/agent/config/agent_config.go +++ b/agent/config/agent_config.go @@ -65,6 +65,7 @@ const ( ENVOY_LISTENER_DRAINING_ENDPOINT_URL = "/drain_listeners" ENVOY_CONCURRENCY_DEFAULT = -1 // we will not set concurrency [envoy --concurrency] by default. ENVOY_CONCURRENCY_FOR_RELAY_DEFAULT = "1" // For relay we are defaulting it to 1 + DISABLE_HOT_RESTART_DEFAULT = true // agent relay mode ENABLE_RELAY_MODE_FOR_XDS_DEFAULT = false @@ -157,6 +158,7 @@ type AgentConfig struct { ListenerPortMapping string MaxLogFileSizeMB float64 MaxLogCount int + DisableHotRestart bool XdsEndpointUdsPath string @@ -499,6 +501,7 @@ func (config *AgentConfig) SetDefaults() { } config.EnvoyConcurrency = getEnvValueAsInt("ENVOY_CONCURRENCY", ENVOY_CONCURRENCY_DEFAULT) + config.DisableHotRestart = getEnvValueAsBool("DISABLE_HOT_RESTART", DISABLE_HOT_RESTART_DEFAULT) validateEnvoyLogLevel(&config.EnvoyLogLevel)