Skip to content

Commit c4def50

Browse files
Merge pull request #1581 from openshift-cherrypick-robot/cherry-pick-1556-to-release-4.3
[release-4.3] Bug 1846220: Update PkgManifest upon catsrc update
2 parents 53643ae + 7a6949b commit c4def50

File tree

2 files changed

+69
-3
lines changed

2 files changed

+69
-3
lines changed

pkg/package-server/provider/registry.go

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import (
99
"sync"
1010
"time"
1111

12-
"github.com/operator-framework/operator-registry/pkg/api"
1312
"github.com/sirupsen/logrus"
1413
"google.golang.org/grpc"
1514
"google.golang.org/grpc/connectivity"
@@ -29,6 +28,7 @@ import (
2928
"github.com/operator-framework/operator-lifecycle-manager/pkg/lib/queueinformer"
3029
"github.com/operator-framework/operator-lifecycle-manager/pkg/package-server/apis/operators"
3130
pkglisters "github.com/operator-framework/operator-lifecycle-manager/pkg/package-server/client/listers/operators/internalversion"
31+
"github.com/operator-framework/operator-registry/pkg/api"
3232
)
3333

3434
const (
@@ -189,9 +189,17 @@ func (p *RegistryProvider) syncCatalogSource(obj interface{}) (syncError error)
189189
Namespace: source.GetNamespace(),
190190
Name: source.GetName(),
191191
}
192+
192193
if sourceMeta := p.sources.GetMeta(key); sourceMeta != nil && sourceMeta.Address == address {
193-
// If the address hasn't changed, don't bother creating a new source
194-
logger.Debug("catalog address unchanged, skipping source creation")
194+
logger.Infof("updating PackageManifest based on CatalogSource changes: %v", key)
195+
timeout, cancel := context.WithTimeout(context.Background(), cacheTimeout)
196+
defer cancel()
197+
var client *registryClient
198+
client, syncError = p.registryClient(key)
199+
if syncError != nil {
200+
return
201+
}
202+
syncError = p.refreshCache(timeout, client)
195203
return
196204
}
197205

test/e2e/packagemanifest_e2e_test.go

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,3 +118,61 @@ func TestPackageManifestLoading(t *testing.T) {
118118
require.NotNil(t, pmList.ListMeta, "package manifest list metadata empty")
119119
require.NotNil(t, pmList.Items)
120120
}
121+
122+
func TestPkgManifestsFromCatsrc(t *testing.T) {
123+
defer cleaner.NotifyTestComplete(t, true)
124+
125+
sourceName := genName("catalog-")
126+
packageName := "etcd-test"
127+
displayName := "etcd test catalog"
128+
image := "quay.io/olmtest/catsrc-update-test:related"
129+
crc := newCRClient(t)
130+
pmc := newPMClient(t)
131+
132+
catalogSource := &v1alpha1.CatalogSource{
133+
TypeMeta: metav1.TypeMeta{
134+
Kind: v1alpha1.CatalogSourceKind,
135+
APIVersion: v1alpha1.CatalogSourceCRDAPIVersion,
136+
},
137+
ObjectMeta: metav1.ObjectMeta{
138+
Name: sourceName,
139+
Namespace: testNamespace,
140+
Labels: map[string]string{"olm.catalogSource": sourceName},
141+
},
142+
Spec: v1alpha1.CatalogSourceSpec{
143+
SourceType: v1alpha1.SourceTypeGrpc,
144+
Image: image,
145+
DisplayName: displayName,
146+
},
147+
}
148+
149+
catalogSource, err := crc.OperatorsV1alpha1().CatalogSources(catalogSource.GetNamespace()).Create(catalogSource)
150+
require.NoError(t, err, "error creating Catalog Sources")
151+
require.NotNil(t, catalogSource)
152+
153+
pm, err := fetchPackageManifest(t, pmc, testNamespace, packageName, packageManifestHasStatus)
154+
require.NoError(t, err, "error getting package manifest")
155+
require.NotNil(t, pm)
156+
require.Equal(t, packageName, pm.GetName())
157+
require.Equal(t, displayName, pm.Status.CatalogSourceDisplayName)
158+
159+
catalogSource, err = crc.OperatorsV1alpha1().CatalogSources(testNamespace).Get(catalogSource.GetName(), metav1.GetOptions{})
160+
require.NoError(t, err, "error getting catalogSource")
161+
162+
displayName = "updated Name"
163+
catalogSource.Spec.DisplayName = displayName
164+
catalogSource, err = crc.OperatorsV1alpha1().CatalogSources(testNamespace).Update(catalogSource)
165+
require.NoError(t, err, "error updating catalogSource")
166+
require.Equal(t, displayName, catalogSource.Spec.DisplayName)
167+
168+
// waiting for the update to complete
169+
err = wait.Poll(pollInterval, 1*time.Minute, func() (bool, error) {
170+
t.Logf("Polling package-server...")
171+
pm, err := fetchPackageManifest(t, pmc, testNamespace, packageName, packageManifestHasStatus)
172+
if err != nil {
173+
return false, err
174+
}
175+
return pm.Status.CatalogSourceDisplayName == displayName, nil
176+
})
177+
require.NoError(t, err, "error package manifest Status.CatalogSourceDisplayName is not updated to catsrc Spec.DisplayName")
178+
}

0 commit comments

Comments
 (0)