Skip to content

Commit 3b01058

Browse files
authored
fix: context being cancelled prematurely and adjusting flux api version for objects (open-component-model#1830)
<!-- markdownlint-disable MD041 --> #### What this PR does / why we need it There have been a couple test failures in unit tests now https://github.com/open-component-model/open-component-model/actions/runs/22314682631/job/64556121953. It _looks_ like the context is cancelled before things have the chance to shut down properly. This prevents that from happening. I think this is a fix, but it might not be 100% true. It's two phase problem. First, the environment was tearing down too fast. Second, set a graceful shutdown deadline for the manager so it doesn't just hang around for too long after receiving a shutdown. #### Which issue(s) this PR fixes <!-- Usage: `Fixes #<issue number>`, or `Fixes (paste link of issue)`. --> #### Testing ##### How to test the changes <!-- Required files to test the changes: .ocmconfig ```yaml type: generic.config.ocm.software/v1 configurations: - type: credentials.config.ocm.software repositories: - repository: type: DockerConfig/v1 dockerConfigFile: "~/.docker/config.json" ``` Commands that test the change: ```bash ocm get cv xxx ocm transfer xxx ``` --> ##### Verification - [ ] I have tested the changes locally by running `ocm` --------- Signed-off-by: Gergely Brautigam <182850+Skarlso@users.noreply.github.com>
1 parent 4bbce8d commit 3b01058

File tree

16 files changed

+104
-79
lines changed

16 files changed

+104
-79
lines changed

kubernetes/controller/docs/adr/deployer.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ spec:
178178
interval: 10m
179179
- id: ocirepository
180180
template:
181-
apiVersion: source.toolkit.fluxcd.io/v1beta2
181+
apiVersion: source.toolkit.fluxcd.io/v1
182182
kind: OCIRepository
183183
metadata:
184184
name: "helm-simple-ocirepository"
@@ -349,7 +349,7 @@ spec:
349349
# Any deployer can be used. In this case we are using FluxCD HelmRelease that references FluxCD OCIRepository
350350
- id: ocirepository
351351
template:
352-
apiVersion: source.toolkit.fluxcd.io/v1beta2
352+
apiVersion: source.toolkit.fluxcd.io/v1
353353
kind: OCIRepository
354354
metadata:
355355
name: oci-repository

kubernetes/controller/docs/getting-started/deploy-helm-chart-bootstrap.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,7 @@ spec:
265265
# The Helm chart location (url) refers to the status of the resource helm-resource.
266266
- id: ocirepository
267267
template:
268-
apiVersion: source.toolkit.fluxcd.io/v1beta2
268+
apiVersion: source.toolkit.fluxcd.io/v1
269269
kind: OCIRepository
270270
metadata:
271271
name: bootstrap-ocirepository

kubernetes/controller/docs/getting-started/deploy-helm-chart.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ spec:
162162
# The Helm chart location (url) refers to the status of the above resource.
163163
- id: ocirepository
164164
template:
165-
apiVersion: source.toolkit.fluxcd.io/v1beta2
165+
apiVersion: source.toolkit.fluxcd.io/v1
166166
kind: OCIRepository
167167
metadata:
168168
name: simple-ocirepository

kubernetes/controller/examples/helm-configuration-localization/rgd.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ spec:
5050
interval: 10m
5151
- id: ocirepository
5252
template:
53-
apiVersion: source.toolkit.fluxcd.io/v1beta2
53+
apiVersion: source.toolkit.fluxcd.io/v1
5454
kind: OCIRepository
5555
metadata:
5656
name: "${schema.spec.prefix}-oci-repository-name"

kubernetes/controller/examples/helm-nested/rgd.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ spec:
3131
interval: 10m
3232
- id: ocirepository
3333
template:
34-
apiVersion: source.toolkit.fluxcd.io/v1beta2
34+
apiVersion: source.toolkit.fluxcd.io/v1
3535
kind: OCIRepository
3636
metadata:
3737
name: "${schema.spec.prefix}-oci-repository-name"

kubernetes/controller/examples/helm-signing/rgd.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ spec:
2929
interval: 10m
3030
- id: ocirepository
3131
template:
32-
apiVersion: source.toolkit.fluxcd.io/v1beta2
32+
apiVersion: source.toolkit.fluxcd.io/v1
3333
kind: OCIRepository
3434
metadata:
3535
name: "${schema.spec.prefix}-oci-repository-name"

kubernetes/controller/examples/helm-simple/rgd.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ spec:
2929
interval: 10m
3030
- id: ocirepository
3131
template:
32-
apiVersion: source.toolkit.fluxcd.io/v1beta2
32+
apiVersion: source.toolkit.fluxcd.io/v1
3333
kind: OCIRepository
3434
metadata:
3535
name: "${schema.spec.prefix}-oci-repository-name"

kubernetes/controller/internal/controller/component/suite_test.go

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ var _ = BeforeSuite(func() {
8181
cfg, err = testEnv.Start()
8282
Expect(err).NotTo(HaveOccurred())
8383
Expect(cfg).NotTo(BeNil())
84-
DeferCleanup(testEnv.Stop)
84+
8585

8686
Expect(v1alpha1.AddToScheme(scheme.Scheme)).Should(Succeed())
8787
Expect(err).NotTo(HaveOccurred())
@@ -93,16 +93,17 @@ var _ = BeforeSuite(func() {
9393

9494
komega.SetClient(k8sClient)
9595

96+
gracefulTimeout := 5 * time.Second
9697
k8sManager, err = ctrl.NewManager(cfg, ctrl.Options{
97-
Scheme: scheme.Scheme,
98+
Scheme: scheme.Scheme,
99+
GracefulShutdownTimeout: &gracefulTimeout,
98100
Metrics: metricserver.Options{
99101
BindAddress: "0",
100102
},
101103
})
102104
Expect(err).ToNot(HaveOccurred())
103105

104106
ctx, cancel := context.WithCancel(context.Background())
105-
DeferCleanup(cancel)
106107

107108
events := make(chan string)
108109
recorder = &record.FakeRecorder{
@@ -178,8 +179,16 @@ var _ = BeforeSuite(func() {
178179
PluginManager: pm,
179180
}).SetupWithManager(ctx, k8sManager)).To(Succeed())
180181

182+
mgrDone := make(chan struct{})
181183
go func() {
182184
defer GinkgoRecover()
183-
Expect(k8sManager.Start(ctx)).To(Succeed())
185+
defer close(mgrDone)
186+
Expect(k8sManager.Start(ctx)).To(Or(Succeed(), MatchError(ContainSubstring("grace period"))))
184187
}()
188+
189+
DeferCleanup(func() {
190+
cancel()
191+
<-mgrDone
192+
Expect(testEnv.Stop()).To(Succeed())
193+
})
185194
})

kubernetes/controller/internal/controller/deployer/suite_test.go

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ var _ = BeforeSuite(func() {
105105
cfg, err := testEnv.Start()
106106
Expect(err).NotTo(HaveOccurred())
107107
Expect(cfg).NotTo(BeNil())
108-
DeferCleanup(testEnv.Stop)
108+
109109

110110
Expect(v1alpha1.AddToScheme(scheme.Scheme)).Should(Succeed())
111111

@@ -116,16 +116,17 @@ var _ = BeforeSuite(func() {
116116

117117
komega.SetClient(k8sClient)
118118

119+
gracefulTimeout := 5 * time.Second
119120
k8sManager, err = ctrl.NewManager(cfg, ctrl.Options{
120-
Scheme: scheme.Scheme,
121+
Scheme: scheme.Scheme,
122+
GracefulShutdownTimeout: &gracefulTimeout,
121123
Metrics: metricserver.Options{
122124
BindAddress: "0",
123125
},
124126
})
125127
Expect(err).ToNot(HaveOccurred())
126128

127129
ctx, cancel = context.WithCancel(context.Background())
128-
DeferCleanup(cancel)
129130

130131
events := make(chan string)
131132
recorder = &record.FakeRecorder{
@@ -186,8 +187,16 @@ var _ = BeforeSuite(func() {
186187
PluginManager: pm,
187188
}).SetupWithManager(ctx, k8sManager)).To(Succeed())
188189

190+
mgrDone := make(chan struct{})
189191
go func() {
190192
defer GinkgoRecover()
191-
Expect(k8sManager.Start(ctx)).To(Succeed())
193+
defer close(mgrDone)
194+
Expect(k8sManager.Start(ctx)).To(Or(Succeed(), MatchError(ContainSubstring("grace period"))))
192195
}()
196+
197+
DeferCleanup(func() {
198+
cancel()
199+
<-mgrDone
200+
Expect(testEnv.Stop()).To(Succeed())
201+
})
193202
})

kubernetes/controller/internal/controller/repository/suite_test.go

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ var _ = BeforeSuite(func() {
7474
cfg, err = testEnv.Start()
7575
Expect(err).NotTo(HaveOccurred())
7676
Expect(cfg).NotTo(BeNil())
77-
DeferCleanup(testEnv.Stop)
77+
7878

7979
Expect(v1alpha1.AddToScheme(scheme.Scheme)).Should(Succeed())
8080
Expect(err).NotTo(HaveOccurred())
@@ -86,16 +86,17 @@ var _ = BeforeSuite(func() {
8686

8787
komega.SetClient(k8sClient)
8888

89+
gracefulTimeout := 5 * time.Second
8990
k8sManager, err = ctrl.NewManager(cfg, ctrl.Options{
90-
Scheme: scheme.Scheme,
91+
Scheme: scheme.Scheme,
92+
GracefulShutdownTimeout: &gracefulTimeout,
9193
Metrics: metricserver.Options{
9294
BindAddress: "0",
9395
},
9496
})
9597
Expect(err).ToNot(HaveOccurred())
9698

9799
ctx, cancel := context.WithCancel(context.Background())
98-
DeferCleanup(cancel)
99100

100101
events := make(chan string)
101102
recorder := &record.FakeRecorder{
@@ -168,8 +169,16 @@ var _ = BeforeSuite(func() {
168169
Resolver: resolver,
169170
}).SetupWithManager(ctx, k8sManager)).To(Succeed())
170171

172+
mgrDone := make(chan struct{})
171173
go func() {
172174
defer GinkgoRecover()
173-
Expect(k8sManager.Start(ctx)).To(Succeed())
175+
defer close(mgrDone)
176+
Expect(k8sManager.Start(ctx)).To(Or(Succeed(), MatchError(ContainSubstring("grace period"))))
174177
}()
178+
179+
DeferCleanup(func() {
180+
cancel()
181+
<-mgrDone
182+
Expect(testEnv.Stop()).To(Succeed())
183+
})
175184
})

0 commit comments

Comments
 (0)