From 7ed744ad5e35ae19cdec55db70cbb393ecc79b00 Mon Sep 17 00:00:00 2001 From: Andrew Gizas Date: Mon, 13 Nov 2023 03:18:55 -0600 Subject: [PATCH] Adding config variables to leader_election provider (#3625) * Adding config variables to leader election process * Adding Debug message info * Adding Changelog fragment (cherry picked from commit bb5de530566a18813630b831bf9c4862fbb89777) --- .../1699010487-leaderelectionconfig.yaml | 32 +++++++++++++++++++ .../kubernetesleaderelection/config.go | 8 +++++ .../kubernetes_leaderelection.go | 7 ++-- 3 files changed, 44 insertions(+), 3 deletions(-) create mode 100644 changelog/fragments/1699010487-leaderelectionconfig.yaml diff --git a/changelog/fragments/1699010487-leaderelectionconfig.yaml b/changelog/fragments/1699010487-leaderelectionconfig.yaml new file mode 100644 index 00000000000..e965af360df --- /dev/null +++ b/changelog/fragments/1699010487-leaderelectionconfig.yaml @@ -0,0 +1,32 @@ +# Kind can be one of: +# - breaking-change: a change to previously-documented behavior +# - deprecation: functionality that is being removed in a later release +# - bug-fix: fixes a problem in a previous version +# - enhancement: extends functionality but does not break or fix existing behavior +# - feature: new functionality +# - known-issue: problems that we are aware of in a given version +# - security: impacts on the security of a product or a user’s deployment. +# - upgrade: important information for someone upgrading from a prior version +# - other: does not fit into any of the other categories +kind: enhancement + +# Change summary; a 80ish characters long description of the change. +summary: Added Kubernetes leader_election provider configuration parameters + +# Long description; in case the summary is not enough to describe the change +# this field accommodate a description without length limits. +# NOTE: This field will be rendered only for breaking-change and known-issue kinds at the moment. +#description: + +# Affected component; usually one of "elastic-agent", "fleet-server", "filebeat", "metricbeat", "auditbeat", "all", etc. +component: elastic-agent + +# PR URL; optional; the PR number that added the changeset. +# If not present is automatically filled by the tooling finding the PR where this changelog fragment has been added. +# NOTE: the tooling supports backports, so it's able to fill the original PR number instead of the backport PR number. +# Please provide it if you are adding a fragment for a different PR. +#pr: https://github.com/owner/repo/1234 + +# Issue URL; optional; the GitHub issue related to this changeset (either closes or is part of). +# If not present is automatically filled by the tooling with the issue linked to the PR number. +#issue: https://github.com/owner/repo/1234 diff --git a/internal/pkg/composable/providers/kubernetesleaderelection/config.go b/internal/pkg/composable/providers/kubernetesleaderelection/config.go index 7ccc2f9a799..7988fcd6fc2 100644 --- a/internal/pkg/composable/providers/kubernetesleaderelection/config.go +++ b/internal/pkg/composable/providers/kubernetesleaderelection/config.go @@ -13,10 +13,18 @@ type Config struct { // Name of the leaderelection lease LeaderLease string `config:"leader_lease"` + //Parameters to configure election process + LeaseDuration int `config:"leader_leaseduration"` + RenewDeadline int `config:"leader_renewdeadline"` + RetryPeriod int `config:"leader_retryperiod"` + KubeClientOptions kubernetes.KubeClientOptions `config:"kube_client_options"` } // InitDefaults initializes the default values for the config. func (c *Config) InitDefaults() { c.LeaderLease = "elastic-agent-cluster-leader" + c.LeaseDuration = 15 + c.RenewDeadline = 10 + c.RetryPeriod = 2 } diff --git a/internal/pkg/composable/providers/kubernetesleaderelection/kubernetes_leaderelection.go b/internal/pkg/composable/providers/kubernetesleaderelection/kubernetes_leaderelection.go index b1388005ab7..c32b57d78c8 100644 --- a/internal/pkg/composable/providers/kubernetesleaderelection/kubernetes_leaderelection.go +++ b/internal/pkg/composable/providers/kubernetesleaderelection/kubernetes_leaderelection.go @@ -83,12 +83,13 @@ func (p *contextProvider) Run(ctx context.Context, comm corecomp.ContextProvider }, }, ReleaseOnCancel: true, - LeaseDuration: 15 * time.Second, - RenewDeadline: 10 * time.Second, - RetryPeriod: 2 * time.Second, + LeaseDuration: time.Duration(p.config.LeaseDuration) * time.Second, + RenewDeadline: time.Duration(p.config.RenewDeadline) * time.Second, + RetryPeriod: time.Duration(p.config.RetryPeriod) * time.Second, Callbacks: leaderelection.LeaderCallbacks{ OnStartedLeading: func(ctx context.Context) { p.logger.Debugf("leader election lock GAINED, id %v", id) + p.logger.Debugf("leader configuration timings: LeaseDuration: %v , RenewDeadline: %v, RetryPeriod: %v", p.leaderElection.LeaseDuration, p.leaderElection.RenewDeadline, p.leaderElection.RetryPeriod) p.startLeading(comm) }, OnStoppedLeading: func() {