Skip to content

Commit 74f7c8e

Browse files
authored
Merge pull request #1725 from percona/K8SPSMDB-1174
K8SPSMDB-1174: Improve telemetry requests
2 parents 7556bbc + 9bf84ba commit 74f7c8e

29 files changed

+1808
-1488
lines changed

Makefile

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,10 @@ ENVTEST = $(shell pwd)/bin/setup-envtest
9494
envtest: ## Download envtest-setup locally if necessary.
9595
$(call go-get-tool,$(ENVTEST),sigs.k8s.io/controller-runtime/tools/setup-envtest@latest)
9696

97+
SWAGGER = $(shell pwd)/bin/swagger
98+
swagger: ## Download swagger locally if necessary.
99+
$(call go-get-tool,$(SWAGGER),github.com/go-swagger/go-swagger/cmd/swagger@latest)
100+
97101
# Prepare release
98102
CERT_MANAGER_VER := $(shell grep -Eo "cert-manager v.*" go.mod|grep -Eo "[0-9]+\.[0-9]+\.[0-9]+")
99103
release: manifests
@@ -124,3 +128,13 @@ after-release: manifests
124128
-e "/^ backup:/,/^ image:/{s#image: .*#image: perconalab/percona-server-mongodb-operator:main-backup#}" \
125129
-e "s#initImage: .*#initImage: perconalab/percona-server-mongodb-operator:main#g" \
126130
-e "/^ pmm:/,/^ image:/{s#image: .*#image: perconalab/pmm-client:dev-latest#}" deploy/cr.yaml
131+
132+
version-service-client: swagger
133+
curl https://raw.githubusercontent.com/Percona-Lab/percona-version-service/$(VS_BRANCH)/api/version.swagger.yaml \
134+
--output ./version.swagger.yaml
135+
rm -rf ./versionserviceclient
136+
swagger generate client \
137+
-f ./version.swagger.yaml \
138+
-c ./versionserviceclient/ \
139+
-m ./versionserviceclient/models
140+
rm ./version.swagger.yaml

pkg/controller/perconaservermongodb/connections_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,7 @@ func TestConnectionLeaks(t *testing.T) {
160160
r := buildFakeClient(obj...)
161161
r.mongoClientProvider = &fakeMongoClientProvider{pods: rsPods, cr: cr, connectionCount: connectionCount}
162162
r.serverVersion = &version.ServerVersion{Platform: version.PlatformKubernetes}
163+
r.crons = NewCronRegistry()
163164

164165
g, gCtx := errgroup.WithContext(ctx)
165166
gCtx, cancel := context.WithCancel(gCtx)

pkg/controller/perconaservermongodb/psmdb_controller.go

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -141,21 +141,27 @@ func add(mgr manager.Manager, r reconcile.Reconciler) error {
141141
var _ reconcile.Reconciler = &ReconcilePerconaServerMongoDB{}
142142

143143
type CronRegistry struct {
144-
crons *cron.Cron
145-
jobs map[string]Schedule
146-
backupJobs *sync.Map
144+
crons *cron.Cron
145+
ensureVersionJobs *sync.Map
146+
backupJobs *sync.Map
147147
}
148148

149-
type Schedule struct {
150-
ID int
151-
CronSchedule string
149+
// AddFuncWithSeconds does the same as cron.AddFunc but changes the schedule so that the function will run the exact second that this method is called.
150+
func (r *CronRegistry) AddFuncWithSeconds(spec string, cmd func()) (cron.EntryID, error) {
151+
schedule, err := cron.ParseStandard(spec)
152+
if err != nil {
153+
return 0, errors.Wrap(err, "failed to parse cron schedule")
154+
}
155+
schedule.(*cron.SpecSchedule).Second = uint64(1 << time.Now().Second())
156+
id := r.crons.Schedule(schedule, cron.FuncJob(cmd))
157+
return id, nil
152158
}
153159

154160
func NewCronRegistry() CronRegistry {
155161
c := CronRegistry{
156-
crons: cron.New(),
157-
jobs: make(map[string]Schedule),
158-
backupJobs: new(sync.Map),
162+
crons: cron.New(),
163+
ensureVersionJobs: new(sync.Map),
164+
backupJobs: new(sync.Map),
159165
}
160166

161167
c.crons.Start()
@@ -444,7 +450,12 @@ func (r *ReconcilePerconaServerMongoDB) Reconcile(ctx context.Context, request r
444450

445451
err = r.scheduleEnsureVersion(ctx, cr, VersionServiceClient{})
446452
if err != nil {
447-
return reconcile.Result{}, errors.Wrap(err, "failed to ensure version")
453+
return reconcile.Result{}, errors.Wrap(err, "schedule ensure version job")
454+
}
455+
456+
err = r.scheduleTelemetryRequests(ctx, cr, VersionServiceClient{})
457+
if err != nil {
458+
return reconcile.Result{}, errors.Wrap(err, "schedule telemetry job")
448459
}
449460

450461
if err = r.updatePITR(ctx, cr); err != nil {

0 commit comments

Comments
 (0)