Skip to content

Commit 1d09e26

Browse files
committed
Add chunksize variable to utilize
1 parent 6632d19 commit 1d09e26

File tree

13 files changed

+108
-30
lines changed

13 files changed

+108
-30
lines changed

manifests/02-rbac.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ rules:
4040
- apiGroups:
4141
- config.openshift.io
4242
resources:
43+
- clusterversions
44+
- featuregates
4345
- infrastructures
4446
verbs:
4547
- get

pkg/operator/azurepathfixcontroller.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import (
3030
configlisters "github.com/openshift/client-go/config/listers/config/v1"
3131
imageregistryv1informers "github.com/openshift/client-go/imageregistry/informers/externalversions/imageregistry/v1"
3232
imageregistryv1listers "github.com/openshift/client-go/imageregistry/listers/imageregistry/v1"
33+
"github.com/openshift/library-go/pkg/operator/configobserver/featuregates"
3334
"github.com/openshift/library-go/pkg/operator/v1helpers"
3435

3536
"github.com/openshift/cluster-image-registry-operator/pkg/defaults"
@@ -51,6 +52,8 @@ type AzurePathFixController struct {
5152

5253
cachesToSync []cache.InformerSynced
5354
queue workqueue.RateLimitingInterface
55+
56+
featureGateAccessor featuregates.FeatureGateAccess
5457
}
5558

5659
func NewAzurePathFixController(
@@ -64,6 +67,7 @@ func NewAzurePathFixController(
6467
proxyInformer configv1informers.ProxyInformer,
6568
openshiftConfigInformer corev1informers.ConfigMapInformer,
6669
podInformer corev1informers.PodInformer,
70+
featureGateAccessor featuregates.FeatureGateAccess,
6771
) (*AzurePathFixController, error) {
6872
c := &AzurePathFixController{
6973
batchClient: batchClient,
@@ -77,6 +81,7 @@ func NewAzurePathFixController(
7781
openshiftConfigLister: openshiftConfigInformer.Lister().ConfigMaps(defaults.OpenShiftConfigNamespace),
7882
kubeconfig: kubeconfig,
7983
queue: workqueue.NewNamedRateLimitingQueue(workqueue.DefaultControllerRateLimiter(), "AzurePathFixController"),
84+
featureGateAccessor: featureGateAccessor,
8085
}
8186

8287
if _, err := jobInformer.Informer().AddEventHandler(c.eventHandler()); err != nil {

pkg/operator/imageregistrycertificates.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
configv1listers "github.com/openshift/client-go/config/listers/config/v1"
2121
imageregistryv1informers "github.com/openshift/client-go/imageregistry/informers/externalversions/imageregistry/v1"
2222
imageregistryv1listers "github.com/openshift/client-go/imageregistry/listers/imageregistry/v1"
23+
"github.com/openshift/library-go/pkg/operator/configobserver/featuregates"
2324
"github.com/openshift/library-go/pkg/operator/v1helpers"
2425

2526
"github.com/openshift/cluster-image-registry-operator/pkg/client"
@@ -41,6 +42,8 @@ type ImageRegistryCertificatesController struct {
4142

4243
cachesToSync []cache.InformerSynced
4344
queue workqueue.RateLimitingInterface
45+
46+
featureGateAccessor featuregates.FeatureGateAccess
4447
}
4548

4649
func NewImageRegistryCertificatesController(
@@ -149,7 +152,7 @@ func (c *ImageRegistryCertificatesController) processNextWorkItem() bool {
149152
func (c *ImageRegistryCertificatesController) sync() error {
150153
ctx := context.TODO()
151154

152-
g := resource.NewGeneratorCAConfig(c.configMapLister, c.imageConfigLister, c.openshiftConfigLister, c.serviceLister, c.imageRegistryConfigLister, c.storageListers, c.kubeconfig, c.coreClient)
155+
g := resource.NewGeneratorCAConfig(c.configMapLister, c.imageConfigLister, c.openshiftConfigLister, c.serviceLister, c.imageRegistryConfigLister, c.storageListers, c.kubeconfig, c.coreClient, c.featureGateAccessor)
153156
err := resource.ApplyMutator(g)
154157
if err != nil {
155158
_, _, updateError := v1helpers.UpdateStatus(
@@ -174,6 +177,7 @@ func (c *ImageRegistryCertificatesController) sync() error {
174177
c.storageListers,
175178
c.kubeconfig,
176179
c.coreClient,
180+
c.featureGateAccessor,
177181
)
178182
err = resource.ApplyMutator(g)
179183
if err != nil {

pkg/operator/starter.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,7 @@ func RunOperator(ctx context.Context, kubeconfig *restclient.Config) error {
202202
configInformers.Config().V1().Proxies(),
203203
kubeInformersForOpenShiftConfig.Core().V1().ConfigMaps(),
204204
kubeInformers.Core().V1().Pods(),
205+
featureGateAccessor,
205206
)
206207
if err != nil {
207208
return err

pkg/resource/caconfig.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import (
1717
operatorv1 "github.com/openshift/api/operator/v1"
1818
configlisters "github.com/openshift/client-go/config/listers/config/v1"
1919
imageregistryv1listers "github.com/openshift/client-go/imageregistry/listers/imageregistry/v1"
20+
"github.com/openshift/library-go/pkg/operator/configobserver/featuregates"
2021

2122
"github.com/openshift/cluster-image-registry-operator/pkg/client"
2223
"github.com/openshift/cluster-image-registry-operator/pkg/defaults"
@@ -34,6 +35,7 @@ type generatorCAConfig struct {
3435
storageListers *client.StorageListers
3536
kubeconfig *restclient.Config
3637
client coreset.CoreV1Interface
38+
featureGateAccessor featuregates.FeatureGateAccess
3739
}
3840

3941
func NewGeneratorCAConfig(
@@ -45,6 +47,7 @@ func NewGeneratorCAConfig(
4547
storageListers *client.StorageListers,
4648
kubeconfig *restclient.Config,
4749
client coreset.CoreV1Interface,
50+
featureGateAccessor featuregates.FeatureGateAccess,
4851
) Mutator {
4952
return &generatorCAConfig{
5053
lister: lister,
@@ -55,6 +58,7 @@ func NewGeneratorCAConfig(
5558
storageListers: storageListers,
5659
kubeconfig: kubeconfig,
5760
client: client,
61+
featureGateAccessor: featureGateAccessor,
5862
}
5963
}
6064

@@ -84,7 +88,7 @@ func (gcac *generatorCAConfig) storageDriver() (storage.Driver, bool, error) {
8488
return nil, false, nil
8589
}
8690

87-
driver, err := storage.NewDriver(&imageRegistryConfig.Spec.Storage, gcac.kubeconfig, gcac.storageListers)
91+
driver, err := storage.NewDriver(&imageRegistryConfig.Spec.Storage, gcac.kubeconfig, gcac.storageListers, gcac.featureGateAccessor)
8892
if err == storage.ErrStorageNotConfigured || storage.IsMultiStoragesError(err) {
8993
return nil, false, nil
9094
} else if err != nil {

pkg/resource/generator.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ func (g *Generator) listRoutes(cr *imageregistryv1.Config) []Mutator {
9898
}
9999

100100
func (g *Generator) List(cr *imageregistryv1.Config) ([]Mutator, error) {
101-
driver, err := storage.NewDriver(&cr.Spec.Storage, g.kubeconfig, &g.listers.StorageListers)
101+
driver, err := storage.NewDriver(&cr.Spec.Storage, g.kubeconfig, &g.listers.StorageListers, g.featureGateAccessor)
102102
if err != nil && err != storage.ErrStorageNotConfigured {
103103
return nil, err
104104
} else if err == storage.ErrStorageNotConfigured {
@@ -128,13 +128,13 @@ func (g *Generator) List(cr *imageregistryv1.Config) ([]Mutator, error) {
128128
func (g *Generator) syncStorage(cr *imageregistryv1.Config) error {
129129
var runCreate bool
130130
// Create a driver with the current configuration
131-
driver, err := storage.NewDriver(&cr.Spec.Storage, g.kubeconfig, &g.listers.StorageListers)
131+
driver, err := storage.NewDriver(&cr.Spec.Storage, g.kubeconfig, &g.listers.StorageListers, g.featureGateAccessor)
132132
if err == storage.ErrStorageNotConfigured {
133133
cr.Spec.Storage, _, err = storage.GetPlatformStorage(&g.listers.StorageListers)
134134
if err != nil {
135135
return fmt.Errorf("unable to get storage configuration from cluster install config: %s", err)
136136
}
137-
driver, err = storage.NewDriver(&cr.Spec.Storage, g.kubeconfig, &g.listers.StorageListers)
137+
driver, err = storage.NewDriver(&cr.Spec.Storage, g.kubeconfig, &g.listers.StorageListers, g.featureGateAccessor)
138138
}
139139
if err != nil {
140140
return err
@@ -172,11 +172,11 @@ func (g *Generator) storageReconfigured(
172172
restCfg *rest.Config,
173173
listers *client.Listers,
174174
) bool {
175-
prev, err := storage.NewDriver(&regCfg.Status.Storage, restCfg, &listers.StorageListers)
175+
prev, err := storage.NewDriver(&regCfg.Status.Storage, restCfg, &listers.StorageListers, g.featureGateAccessor)
176176
if err != nil {
177177
return false
178178
}
179-
cur, err := storage.NewDriver(&regCfg.Spec.Storage, restCfg, &listers.StorageListers)
179+
cur, err := storage.NewDriver(&regCfg.Spec.Storage, restCfg, &listers.StorageListers, g.featureGateAccessor)
180180
if err != nil {
181181
return false
182182
}
@@ -292,7 +292,7 @@ func (g *Generator) Remove(cr *imageregistryv1.Config) error {
292292
klog.Infof("object %s deleted", Name(gen))
293293
}
294294

295-
driver, err := storage.NewDriver(&cr.Status.Storage, g.kubeconfig, &g.listers.StorageListers)
295+
driver, err := storage.NewDriver(&cr.Status.Storage, g.kubeconfig, &g.listers.StorageListers, g.featureGateAccessor)
296296
if err == storage.ErrStorageNotConfigured {
297297
return nil
298298
} else if err != nil {

pkg/resource/imageregistryca.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import (
1717
operatorv1 "github.com/openshift/api/operator/v1"
1818
configlisters "github.com/openshift/client-go/config/listers/config/v1"
1919
imageregistryv1listers "github.com/openshift/client-go/imageregistry/listers/imageregistry/v1"
20+
"github.com/openshift/library-go/pkg/operator/configobserver/featuregates"
2021

2122
"github.com/openshift/cluster-image-registry-operator/pkg/client"
2223
"github.com/openshift/cluster-image-registry-operator/pkg/defaults"
@@ -35,6 +36,7 @@ type generatorImageRegistryCA struct {
3536
storageListers *client.StorageListers
3637
kubeconfig *restclient.Config
3738
client coreset.CoreV1Interface
39+
featureGateAccessor featuregates.FeatureGateAccess
3840
}
3941

4042
func NewGeneratorImageRegistryCA(
@@ -47,6 +49,7 @@ func NewGeneratorImageRegistryCA(
4749
storageListers *client.StorageListers,
4850
kubeconfig *restclient.Config,
4951
client coreset.CoreV1Interface,
52+
featureGateAccessor featuregates.FeatureGateAccess,
5053
) Mutator {
5154
return &generatorImageRegistryCA{
5255
lister: lister,
@@ -58,6 +61,7 @@ func NewGeneratorImageRegistryCA(
5861
storageListers: storageListers,
5962
kubeconfig: kubeconfig,
6063
client: client,
64+
featureGateAccessor: featureGateAccessor,
6165
}
6266
}
6367

@@ -87,7 +91,7 @@ func (girca *generatorImageRegistryCA) storageDriver() (storage.Driver, bool, er
8791
return nil, false, nil
8892
}
8993

90-
driver, err := storage.NewDriver(&imageRegistryConfig.Spec.Storage, girca.kubeconfig, girca.storageListers)
94+
driver, err := storage.NewDriver(&imageRegistryConfig.Spec.Storage, girca.kubeconfig, girca.storageListers, girca.featureGateAccessor)
9195
if err == storage.ErrStorageNotConfigured || storage.IsMultiStoragesError(err) {
9296
return nil, false, nil
9397
} else if err != nil {

pkg/resource/podtemplatespec_test.go

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,14 @@ import (
1111
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1212

1313
configv1 "github.com/openshift/api/config/v1"
14-
imageregistryapiv1 "github.com/openshift/api/imageregistry/v1"
1514
v1 "github.com/openshift/api/imageregistry/v1"
15+
"github.com/openshift/library-go/pkg/operator/configobserver/featuregates"
1616

1717
cirofake "github.com/openshift/cluster-image-registry-operator/pkg/client/fake"
1818
"github.com/openshift/cluster-image-registry-operator/pkg/defaults"
1919
"github.com/openshift/cluster-image-registry-operator/pkg/storage/emptydir"
2020
"github.com/openshift/cluster-image-registry-operator/pkg/storage/s3"
21+
"github.com/openshift/cluster-image-registry-operator/pkg/storage/util"
2122
)
2223

2324
func buildFakeClient(config *v1.Config, nodes []*corev1.Node) *cirofake.Fixtures {
@@ -114,7 +115,7 @@ func TestMakePodTemplateSpecWithTopologySpread(t *testing.T) {
114115
},
115116
"testOmitsDefaultsWithNodeSelector": {
116117
nodes: []*corev1.Node{nodeMasterA, nodeWorkerA, nodeWorkerB},
117-
spec: imageregistryapiv1.ImageRegistrySpec{
118+
spec: v1.ImageRegistrySpec{
118119
NodeSelector: map[string]string{
119120
"node-role.kubernetes.io/master": "",
120121
},
@@ -464,9 +465,10 @@ func TestMakePodTemplateSpecS3CloudFront(t *testing.T) {
464465
Storage: v1.ImageRegistryConfigStorage{
465466
ManagementState: "Unmanaged",
466467
S3: &v1.ImageRegistryConfigStorageS3{
467-
Bucket: "bucket",
468-
Region: "region",
469-
Encrypt: true,
468+
Bucket: "bucket",
469+
Region: "region",
470+
ChunkSizeMiB: 10,
471+
Encrypt: true,
470472
CloudFront: &v1.ImageRegistryConfigStorageS3CloudFront{
471473
BaseURL: "https://cloudfront.example.com",
472474
KeypairID: "keypair-id",
@@ -507,7 +509,11 @@ func TestMakePodTemplateSpecS3CloudFront(t *testing.T) {
507509
testBuilder.AddNamespaces(imageRegNs)
508510

509511
fixture := testBuilder.Build()
510-
s3Storage := s3.NewDriver(ctx, config.Spec.Storage.S3, &fixture.Listers.StorageListers)
512+
ChunkSizeMiBFeatureGateAccessor := featuregates.NewHardcodedFeatureGateAccess(
513+
[]configv1.FeatureGateName{util.ChunkSizeMiBFeatureGateName},
514+
[]configv1.FeatureGateName{},
515+
)
516+
s3Storage := s3.NewDriver(ctx, config.Spec.Storage.S3, &fixture.Listers.StorageListers, ChunkSizeMiBFeatureGateAccessor)
511517
pod, _, err := makePodTemplateSpec(fixture.KubeClient.CoreV1(), fixture.Listers.ProxyConfigs, s3Storage, config)
512518
if err != nil {
513519
t.Fatalf("error creating pod template: %v", err)
@@ -516,9 +522,11 @@ func TestMakePodTemplateSpecS3CloudFront(t *testing.T) {
516522
ignoreEnvVar := func(name string) bool {
517523
return !strings.HasPrefix(name, "REGISTRY_STORAGE") && !strings.HasPrefix(name, "REGISTRY_MIDDLEWARE")
518524
}
525+
519526
expectedEnvVars := map[string]corev1.EnvVar{
520527
"REGISTRY_STORAGE": {Value: "s3"},
521528
"REGISTRY_STORAGE_S3_BUCKET": {Value: "bucket"},
529+
"REGISTRY_STORAGE_S3_CHUNKSIZE": {Value: "10485760"},
522530
"REGISTRY_STORAGE_S3_REGION": {Value: "region"},
523531
"REGISTRY_STORAGE_S3_ENCRYPT": {Value: "true"},
524532
"REGISTRY_STORAGE_S3_FORCEPATHSTYLE": {Value: "false"},

pkg/storage/s3/s3.go

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import (
3131
configv1 "github.com/openshift/api/config/v1"
3232
imageregistryv1 "github.com/openshift/api/imageregistry/v1"
3333
operatorapi "github.com/openshift/api/operator/v1"
34+
"github.com/openshift/library-go/pkg/operator/configobserver/featuregates"
3435

3536
regopclient "github.com/openshift/cluster-image-registry-operator/pkg/client"
3637
"github.com/openshift/cluster-image-registry-operator/pkg/defaults"
@@ -109,15 +110,19 @@ type driver struct {
109110

110111
// roundTripper is used only during tests.
111112
roundTripper http.RoundTripper
113+
114+
// featureGateAccessor is used to get a list of enabled and disabled featuregates
115+
featureGateAccessor featuregates.FeatureGateAccess
112116
}
113117

114118
// NewDriver creates a new s3 storage driver
115119
// Used during bootstrapping
116-
func NewDriver(ctx context.Context, c *imageregistryv1.ImageRegistryConfigStorageS3, listers *regopclient.StorageListers) *driver {
120+
func NewDriver(ctx context.Context, c *imageregistryv1.ImageRegistryConfigStorageS3, listers *regopclient.StorageListers, fg featuregates.FeatureGateAccess) *driver {
117121
return &driver{
118-
Context: ctx,
119-
Config: c,
120-
Listers: listers,
122+
Context: ctx,
123+
Config: c,
124+
Listers: listers,
125+
featureGateAccessor: fg,
121126
}
122127
}
123128

@@ -409,6 +414,16 @@ func (d *driver) ConfigEnv() (envs envvar.List, err error) {
409414
envs = append(envs, envvar.EnvVar{Name: "REGISTRY_STORAGE_S3_KEYID", Value: d.Config.KeyID})
410415
}
411416

417+
currentFeatureGates, err := d.featureGateAccessor.CurrentFeatureGates()
418+
if err != nil {
419+
return
420+
}
421+
422+
if currentFeatureGates.Enabled(util.ChunkSizeMiBFeatureGateName) && d.Config.ChunkSizeMiB > 0 {
423+
chunksize := int64(d.Config.ChunkSizeMiB) * 1024 * 1024
424+
envs = append(envs, envvar.EnvVar{Name: "REGISTRY_STORAGE_S3_CHUNKSIZE", Value: chunksize})
425+
}
426+
412427
// virtualHostedStyle tells the registry to use urls in the form of
413428
// bucket-name.s3-endpoint.etc.
414429
// the forcePathStyle setting was introduced to control the same

pkg/storage/s3/s3_test.go

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,12 @@ import (
2222

2323
configv1 "github.com/openshift/api/config/v1"
2424
imageregistryv1 "github.com/openshift/api/imageregistry/v1"
25+
"github.com/openshift/library-go/pkg/operator/configobserver/featuregates"
2526

2627
cirofake "github.com/openshift/cluster-image-registry-operator/pkg/client/fake"
2728
"github.com/openshift/cluster-image-registry-operator/pkg/defaults"
2829
"github.com/openshift/cluster-image-registry-operator/pkg/envvar"
30+
"github.com/openshift/cluster-image-registry-operator/pkg/storage/util"
2931
)
3032

3133
func TestEndpointsResolver(t *testing.T) {
@@ -256,7 +258,12 @@ func TestConfigEnv(t *testing.T) {
256258
})
257259
listers := testBuilder.BuildListers()
258260

259-
d := NewDriver(ctx, config, &listers.StorageListers)
261+
ChunkSizeMiBFeatureGateAccessor := featuregates.NewHardcodedFeatureGateAccess(
262+
[]configv1.FeatureGateName{util.ChunkSizeMiBFeatureGateName},
263+
[]configv1.FeatureGateName{},
264+
)
265+
266+
d := NewDriver(ctx, config, &listers.StorageListers, ChunkSizeMiBFeatureGateAccessor)
260267

261268
envvars, err := d.ConfigEnv()
262269
if err != nil {
@@ -320,7 +327,12 @@ func TestServiceEndpointCanBeOverwritten(t *testing.T) {
320327
})
321328
listers := testBuilder.BuildListers()
322329

323-
d := NewDriver(ctx, config, &listers.StorageListers)
330+
ChunkSizeMiBFeatureGateAccessor := featuregates.NewHardcodedFeatureGateAccess(
331+
[]configv1.FeatureGateName{util.ChunkSizeMiBFeatureGateName},
332+
[]configv1.FeatureGateName{},
333+
)
334+
335+
d := NewDriver(ctx, config, &listers.StorageListers, ChunkSizeMiBFeatureGateAccessor)
324336

325337
envvars, err := d.ConfigEnv()
326338
if err != nil {
@@ -504,8 +516,11 @@ func TestStorageManagementState(t *testing.T) {
504516
rt.AddResponse(code)
505517
}
506518
}
507-
508-
drv := NewDriver(context.Background(), tt.config.Spec.Storage.S3, &listers.StorageListers)
519+
ChunkSizeMiBFeatureGateAccessor := featuregates.NewHardcodedFeatureGateAccess(
520+
[]configv1.FeatureGateName{util.ChunkSizeMiBFeatureGateName},
521+
[]configv1.FeatureGateName{},
522+
)
523+
drv := NewDriver(context.Background(), tt.config.Spec.Storage.S3, &listers.StorageListers, ChunkSizeMiBFeatureGateAccessor)
509524

510525
drv.roundTripper = rt
511526

@@ -735,8 +750,11 @@ func TestUserProvidedTags(t *testing.T) {
735750
},
736751
})
737752
listers := builder.BuildListers()
738-
739-
drv := NewDriver(context.Background(), tt.config.Spec.Storage.S3, &listers.StorageListers)
753+
ChunkSizeMiBFeatureGateAccessor := featuregates.NewHardcodedFeatureGateAccess(
754+
[]configv1.FeatureGateName{util.ChunkSizeMiBFeatureGateName},
755+
[]configv1.FeatureGateName{},
756+
)
757+
drv := NewDriver(context.Background(), tt.config.Spec.Storage.S3, &listers.StorageListers, ChunkSizeMiBFeatureGateAccessor)
740758
rt := &tripper{}
741759
if len(tt.responseCodes) > 0 {
742760
for _, code := range tt.responseCodes {

0 commit comments

Comments
 (0)