diff --git a/.devcontainer/setup.py b/.devcontainer/setup.py index bb2c043a67..f57267ac07 100755 --- a/.devcontainer/setup.py +++ b/.devcontainer/setup.py @@ -96,7 +96,7 @@ def setup(): def main(): install_packages() install_go() - # make_init() + make_init() # do basic setup # TODO: fix the setup and revert diff --git a/agent/agents/process/process_logger_test.go b/agent/agents/process/process_logger_test.go index 9117496d12..ccf7a53cf2 100644 --- a/agent/agents/process/process_logger_test.go +++ b/agent/agents/process/process_logger_test.go @@ -127,20 +127,6 @@ func TestProcessLogger(t *testing.T) { 0, 0, }, - { - "redact keywords with special symbols", - 3, - []string{ - "text\nsecond ", - "line\nthird r.o,w line\n", - "fourth ", - "line\nlast r.o,w\n", - }, - []string{"r.o,w"}, - []string{"third *** line", "fourth line", "last ***"}, - 0, - 0, - }, } for _, tt := range tests { t.Run(tt.testName, func(t *testing.T) { diff --git a/managed/cmd/pmm-managed-init/main.go b/managed/cmd/pmm-managed-init/main.go index 3e61334248..bed09643bb 100644 --- a/managed/cmd/pmm-managed-init/main.go +++ b/managed/cmd/pmm-managed-init/main.go @@ -55,7 +55,6 @@ func main() { pmmConfigParams := make(map[string]any) pmmConfigParams["DisableInternalDB"], _ = strconv.ParseBool(os.Getenv("PERCONA_TEST_PMM_DISABLE_BUILTIN_POSTGRES")) pmmConfigParams["DisableInternalClickhouse"], _ = strconv.ParseBool(os.Getenv("PERCONA_TEST_PMM_DISABLE_BUILTIN_CLICKHOUSE")) - pmmConfigParams["PassivePMM"], _ = strconv.ParseBool(os.Getenv("PERCONA_TEST_HA_PASSIVE")) if err := supervisord.SavePMMConfig(pmmConfigParams); err != nil { logrus.Errorf("PMM Server configuration error: %s.", err) os.Exit(1) diff --git a/managed/cmd/pmm-managed/main.go b/managed/cmd/pmm-managed/main.go index 658d66979f..dc4752ca29 100644 --- a/managed/cmd/pmm-managed/main.go +++ b/managed/cmd/pmm-managed/main.go @@ -252,7 +252,6 @@ func runGRPCServer(ctx context.Context, deps *gRPCServerDeps) { l.Debug("RPC response latency histogram enabled.") grpcMetrics.EnableHandlingTimeHistogram() } - serverpb.RegisterServerServer(gRPCServer, deps.server) agentpb.RegisterAgentServer(gRPCServer, agentgrpc.NewAgentServer(deps.handler)) @@ -747,10 +746,6 @@ func main() { //nolint:cyclop,maintidx Envar("PERCONA_TEST_GRAFANA_GOSSIP_PORT"). Default("9762"). Int() - // haGrafanaPort := kingpin.Flag("ha-grafana-port", "HA grafana port"). - // Envar("PERCONA_TEST_HA_GRAFANA_PORT"). - // Default("9760"). - // Int() supervisordConfigDirF := kingpin.Flag("supervisord-config-dir", "Supervisord configuration directory").Required().String() @@ -932,6 +927,15 @@ func main() { //nolint:cyclop,maintidx }, gRPCMessageMaxSize) + ha.AddLeaderService(highavailability.NewStandardService("pmm-agent-runner", func(ctx context.Context) error { + return supervisord.StartSupervisedService("pmm-agent") + }, func() { + err := supervisord.StopSupervisedService("pmm-agent") + if err != nil { + l.Warnf("couldn't stop pmm-agent: %q", err) + } + })) + platformAddress, err := envvars.GetPlatformAddress() if err != nil { l.Fatal(err) diff --git a/managed/models/params.go b/managed/models/params.go index 2be506c3c5..588ae8efa9 100644 --- a/managed/models/params.go +++ b/managed/models/params.go @@ -15,6 +15,7 @@ package models +// HAParams defines parameters related to High Availability. type HAParams struct { GrafanaGossipPort int Enabled bool @@ -26,6 +27,7 @@ type HAParams struct { GossipPort int } +// Params defines parameters for supervisor. type Params struct { HAParams *HAParams VMParams *VictoriaMetricsParams diff --git a/managed/services/agents/registry.go b/managed/services/agents/registry.go index 96e2f38d98..b3ca08631f 100644 --- a/managed/services/agents/registry.go +++ b/managed/services/agents/registry.go @@ -65,7 +65,7 @@ var ( ) type pmmAgentInfo interface { - Channel() communicationChannel + Channel() *channel.Channel ID() string StateChangeChan() chan struct{} KickChan() chan struct{} @@ -78,7 +78,7 @@ type localPMMAgentInfo struct { kickChan chan struct{} } -func (p *localPMMAgentInfo) Channel() communicationChannel { //nolint:ireturn +func (p *localPMMAgentInfo) Channel() *channel.Channel { //nolint:ireturn return p.channel } diff --git a/managed/services/supervisord/pmm_config.go b/managed/services/supervisord/pmm_config.go index c62becd409..e42db15e93 100644 --- a/managed/services/supervisord/pmm_config.go +++ b/managed/services/supervisord/pmm_config.go @@ -179,13 +179,12 @@ stdout_logfile = /srv/logs/pmm-managed.log stdout_logfile_maxbytes = 50MB stdout_logfile_backups = 2 redirect_stderr = true -{{- if not .PassivePMM }} [program:pmm-agent] priority = 15 command = /usr/sbin/pmm-agent --config-file=/usr/local/percona/pmm2/config/pmm-agent.yaml autorestart = true -autostart = true +autostart = false startretries = 1000 startsecs = 1 stopsignal = TERM @@ -194,7 +193,6 @@ stdout_logfile = /srv/logs/pmm-agent.log stdout_logfile_maxbytes = 50MB stdout_logfile_backups = 2 redirect_stderr = true -{{- end }} [program:pmm-update-perform] command = /usr/sbin/pmm-update -perform -playbook=/usr/share/pmm-update/ansible/playbook/tasks/update.yml diff --git a/managed/services/supervisord/pmm_config_test.go b/managed/services/supervisord/pmm_config_test.go index e67ed56c88..ff95d36cd4 100644 --- a/managed/services/supervisord/pmm_config_test.go +++ b/managed/services/supervisord/pmm_config_test.go @@ -34,19 +34,14 @@ func TestSavePMMConfig(t *testing.T) { }{ { description: "disable internal postgresql db", - params: map[string]any{"DisableInternalDB": true, "DisableSupervisor": false, "DisableInternalClickhouse": false, "PassivePMM": false}, + params: map[string]any{"DisableInternalDB": true, "DisableSupervisor": false, "DisableInternalClickhouse": false}, file: "pmm-db_disabled", }, { description: "enable internal postgresql db", - params: map[string]any{"DisableInternalDB": false, "DisableSupervisor": false, "DisableInternalClickhouse": false, "PassivePMM": false}, + params: map[string]any{"DisableInternalDB": false, "DisableSupervisor": false, "DisableInternalClickhouse": false}, file: "pmm-db_enabled", }, - { - description: "passive pmm", - params: map[string]any{"DisableInternalDB": true, "DisableSupervisor": false, "DisableInternalClickhouse": false, "PassivePMM": true}, - file: "pmm-passive", - }, } for _, test := range tests { test := test diff --git a/managed/services/supervisord/supervisord.go b/managed/services/supervisord/supervisord.go index b40ff1d081..3ca50828b6 100644 --- a/managed/services/supervisord/supervisord.go +++ b/managed/services/supervisord/supervisord.go @@ -625,6 +625,18 @@ func (s *Service) RestartSupervisedService(serviceName string) error { return err } +// StartSupervisedService starts given service. +func (s *Service) StartSupervisedService(serviceName string) error { + _, err := s.supervisorctl("start", serviceName) + return err +} + +// StopSupervisedService stops given service. +func (s *Service) StopSupervisedService(serviceName string) error { + _, err := s.supervisorctl("stop", serviceName) + return err +} + //nolint:lll var templates = template.Must(template.New("").Option("missingkey=error").Parse(` {{define "dbaas-controller"}} diff --git a/managed/testdata/pg/queries/grafana.sql b/managed/testdata/pg/queries/grafana.sql index 44b1d4bf72..5bdbb0b4c8 100644 --- a/managed/testdata/pg/queries/grafana.sql +++ b/managed/testdata/pg/queries/grafana.sql @@ -1,3 +1,3 @@ CREATE DATABASE "grafana"; CREATE USER "grafana" WITH PASSWORD 'grafana'; -GRANT ALL PRIVILEGES ON DATABASE "grafana" TO "grafana" +GRANT ALL PRIVILEGES ON DATABASE "grafana" TO "grafana"; \ No newline at end of file diff --git a/managed/testdata/supervisord.d/pmm-passive.ini b/managed/testdata/supervisord.d/pmm-passive.ini deleted file mode 100644 index c89b8bc9e3..0000000000 --- a/managed/testdata/supervisord.d/pmm-passive.ini +++ /dev/null @@ -1,89 +0,0 @@ - -[unix_http_server] -chmod = 0700 -username = dummy -password = dummy - -[supervisorctl] -username = dummy -password = dummy - -[program:pmm-update-perform-init] -command = /usr/sbin/pmm-update -run-playbook -playbook=/usr/share/pmm-update/ansible/playbook/tasks/init.yml -directory = / -autorestart = unexpected -priority=-1 -exitcodes = 0 -autostart = true -startretries = 3 -startsecs = 1 -stopsignal = TERM -stopwaitsecs = 300 -stdout_logfile = /srv/logs/pmm-update-perform-init.log -stdout_logfile_maxbytes = 50MB -stdout_logfile_backups = 3 -redirect_stderr = true - -[program:clickhouse] -priority = 2 -command = /usr/bin/clickhouse-server --config-file=/etc/clickhouse-server/config.xml -autorestart = true -autostart = true -startretries = 10 -startsecs = 1 -stopsignal = TERM -stopwaitsecs = 300 -; config.xml contains settings to log to stdout (console), -; so we delegate logfile managemenet to supervisord -stdout_logfile = /srv/logs/clickhouse-server.log -stdout_logfile_maxbytes = 50MB -stdout_logfile_backups = 2 -redirect_stderr = true - -[program:nginx] -priority = 4 -command = nginx -autorestart = true -autostart = true -startretries = 10 -startsecs = 1 -stopsignal = TERM -stopwaitsecs = 10 -; nginx.conf contains settings to log to /dev/sdtout and /dev/stderr, -; which allows supervisord to manage the logs further. -stdout_logfile = /srv/logs/nginx.log -stdout_logfile_maxbytes = 50MB -stdout_logfile_backups = 2 -redirect_stderr = true - -[program:pmm-managed] -priority = 14 -command = - /usr/sbin/pmm-managed - --victoriametrics-config=/etc/victoriametrics-promscrape.yml - --supervisord-config-dir=/etc/supervisord.d -autorestart = true -autostart = true -startretries = 1000 -startsecs = 1 -stopsignal = TERM -stopwaitsecs = 300 -stdout_logfile = /srv/logs/pmm-managed.log -stdout_logfile_maxbytes = 50MB -stdout_logfile_backups = 2 -redirect_stderr = true - -[program:pmm-update-perform] -command = /usr/sbin/pmm-update -perform -playbook=/usr/share/pmm-update/ansible/playbook/tasks/update.yml -directory = / -autorestart = unexpected -exitcodes = 0 -autostart = false -startretries = 10 -startsecs = 1 -stopsignal = TERM -stopwaitsecs = 300 -stdout_logfile = /srv/logs/pmm-update-perform.log -stdout_logfile_maxbytes = 50MB -stdout_logfile_backups = 3 -redirect_stderr = true