@@ -131,6 +131,7 @@ type Operator struct {
131
131
clientFactory clients.Factory
132
132
muInstallPlan sync.Mutex
133
133
resolverSourceProvider * resolver.RegistrySourceProvider
134
+ operatorCacheProvider resolvercache.OperatorCacheProvider
134
135
}
135
136
136
137
type CatalogSourceSyncFunc func (logger * logrus.Entry , in * v1alpha1.CatalogSource ) (out * v1alpha1.CatalogSource , continueSync bool , syncError error )
@@ -217,8 +218,9 @@ func NewOperator(ctx context.Context, kubeconfigPath string, clock utilclock.Clo
217
218
}
218
219
op .sources = grpc .NewSourceStore (logger , 10 * time .Second , 10 * time .Minute , op .syncSourceState )
219
220
op .resolverSourceProvider = resolver .SourceProviderFromRegistryClientProvider (op .sources , lister .OperatorsV1alpha1 ().CatalogSourceLister (), logger )
221
+ op .operatorCacheProvider = resolver .NewOperatorCacheProvider (lister , crClient , op .resolverSourceProvider , logger )
220
222
op .reconciler = reconciler .NewRegistryReconcilerFactory (lister , opClient , configmapRegistryImage , op .now , ssaClient , workloadUserID , opmImage , utilImage )
221
- res := resolver .NewOperatorStepResolver (lister , crClient , operatorNamespace , op .resolverSourceProvider , logger )
223
+ res := resolver .NewOperatorStepResolver (lister , crClient , operatorNamespace , op .operatorCacheProvider , logger )
222
224
op .resolver = resolver .NewInstrumentedResolver (res , metrics .RegisterDependencyResolutionSuccess , metrics .RegisterDependencyResolutionFailure )
223
225
224
226
// Wire OLM CR sharedIndexInformers
@@ -360,7 +362,7 @@ func NewOperator(ctx context.Context, kubeconfigPath string, clock utilclock.Clo
360
362
subscription .WithAppendedReconcilers (subscription .ReconcilerFromLegacySyncHandler (op .syncSubscriptions )),
361
363
subscription .WithRegistryReconcilerFactory (op .reconciler ),
362
364
subscription .WithGlobalCatalogNamespace (op .namespace ),
363
- subscription .WithSourceProvider (op .resolverSourceProvider ),
365
+ subscription .WithOperatorCacheProvider (op .operatorCacheProvider ),
364
366
)
365
367
if err != nil {
366
368
return nil , err
@@ -781,6 +783,7 @@ func (o *Operator) syncSourceState(state grpc.SourceState) {
781
783
782
784
o .logger .Infof ("state.Key.Namespace=%s state.Key.Name=%s state.State=%s" , state .Key .Namespace , state .Key .Name , state .State .String ())
783
785
metrics .RegisterCatalogSourceState (state .Key .Name , state .Key .Namespace , state .State )
786
+ metrics .RegisterCatalogSourceSnapshotsTotal (state .Key .Name , state .Key .Namespace )
784
787
785
788
switch state .State {
786
789
case connectivity .Ready :
@@ -896,6 +899,7 @@ func (o *Operator) handleCatSrcDeletion(obj interface{}) {
896
899
o .logger .WithField ("source" , sourceKey ).Info ("removed client for deleted catalogsource" )
897
900
898
901
metrics .DeleteCatalogSourceStateMetric (catsrc .GetName (), catsrc .GetNamespace ())
902
+ metrics .DeleteCatalogSourceSnapshotsTotal (catsrc .GetName (), catsrc .GetNamespace ())
899
903
}
900
904
901
905
func validateSourceType (logger * logrus.Entry , in * v1alpha1.CatalogSource ) (out * v1alpha1.CatalogSource , continueSync bool , _ error ) {
@@ -914,6 +918,7 @@ func validateSourceType(logger *logrus.Entry, in *v1alpha1.CatalogSource) (out *
914
918
err = fmt .Errorf ("unknown sourcetype: %s" , sourceType )
915
919
}
916
920
if err != nil {
921
+ logger .WithError (err ).Error ("error validating catalog source type" )
917
922
out .SetError (v1alpha1 .CatalogSourceSpecInvalidError , err )
918
923
return
919
924
}
@@ -925,7 +930,6 @@ func validateSourceType(logger *logrus.Entry, in *v1alpha1.CatalogSource) (out *
925
930
}
926
931
}
927
932
continueSync = true
928
-
929
933
return
930
934
}
931
935
@@ -938,27 +942,22 @@ func (o *Operator) syncConfigMap(logger *logrus.Entry, in *v1alpha1.CatalogSourc
938
942
939
943
out = in .DeepCopy ()
940
944
941
- logger = logger .WithFields (logrus.Fields {
942
- "configmap.namespace" : in .Namespace ,
943
- "configmap.name" : in .Spec .ConfigMap ,
944
- })
945
- logger .Info ("checking catsrc configmap state" )
946
-
947
945
var updateLabel bool
948
946
// Get the catalog source's config map
949
947
configMap , err := o .lister .CoreV1 ().ConfigMapLister ().ConfigMaps (in .GetNamespace ()).Get (in .Spec .ConfigMap )
950
948
// Attempt to look up the CM via api call if there is a cache miss
951
949
if apierrors .IsNotFound (err ) {
950
+ // TODO: Don't reach out via live client if its not found in the cache (https://github.com/operator-framework/operator-lifecycle-manager/issues/3415)
952
951
configMap , err = o .opClient .KubernetesInterface ().CoreV1 ().ConfigMaps (in .GetNamespace ()).Get (context .TODO (), in .Spec .ConfigMap , metav1.GetOptions {})
953
952
// Found cm in the cluster, add managed label to configmap
954
953
if err == nil {
955
- labels := configMap .GetLabels ()
956
- if labels == nil {
957
- labels = make (map [string ]string )
954
+ cmLabels := configMap .GetLabels ()
955
+ if cmLabels == nil {
956
+ cmLabels = make (map [string ]string )
958
957
}
959
958
960
- labels [install .OLMManagedLabelKey ] = "false"
961
- configMap .SetLabels (labels )
959
+ cmLabels [install .OLMManagedLabelKey ] = "false"
960
+ configMap .SetLabels (cmLabels )
962
961
updateLabel = true
963
962
}
964
963
}
@@ -975,12 +974,9 @@ func (o *Operator) syncConfigMap(logger *logrus.Entry, in *v1alpha1.CatalogSourc
975
974
out .SetError (v1alpha1 .CatalogSourceConfigMapError , syncError )
976
975
return
977
976
}
978
-
979
- logger .Info ("adopted configmap" )
980
977
}
981
978
982
979
if in .Status .ConfigMapResource == nil || ! in .Status .ConfigMapResource .IsAMatch (& configMap .ObjectMeta ) {
983
- logger .Info ("updating catsrc configmap state" )
984
980
// configmap ref nonexistent or updated, write out the new configmap ref to status and exit
985
981
out .Status .ConfigMapResource = & v1alpha1.ConfigMapResourceReference {
986
982
Name : configMap .GetName (),
@@ -1000,7 +996,6 @@ func (o *Operator) syncConfigMap(logger *logrus.Entry, in *v1alpha1.CatalogSourc
1000
996
func (o * Operator ) syncRegistryServer (logger * logrus.Entry , in * v1alpha1.CatalogSource ) (out * v1alpha1.CatalogSource , continueSync bool , syncError error ) {
1001
997
out = in .DeepCopy ()
1002
998
1003
- logger .Info ("synchronizing registry server" )
1004
999
sourceKey := registry.CatalogKey {Name : in .GetName (), Namespace : in .GetNamespace ()}
1005
1000
srcReconciler := o .reconciler .ReconcilerForSource (in )
1006
1001
if srcReconciler == nil {
@@ -1017,21 +1012,15 @@ func (o *Operator) syncRegistryServer(logger *logrus.Entry, in *v1alpha1.Catalog
1017
1012
return
1018
1013
}
1019
1014
1020
- logger .WithField ("health" , healthy ).Infof ("checked registry server health" )
1021
-
1022
1015
if healthy && in .Status .RegistryServiceStatus != nil {
1023
- logger .Info ("registry state good" )
1024
1016
continueSync = true
1025
1017
// return here if catalog does not have polling enabled
1026
1018
if ! out .Poll () {
1027
- logger .Info ("polling not enabled, nothing more to do" )
1028
1019
return
1029
1020
}
1030
1021
}
1031
1022
1032
1023
// Registry pod hasn't been created or hasn't been updated since the last configmap update, recreate it
1033
- logger .Info ("ensuring registry server" )
1034
-
1035
1024
err = srcReconciler .EnsureRegistryServer (logger , out )
1036
1025
if err != nil {
1037
1026
if _ , ok := err .(reconciler.UpdateNotReadyErr ); ok {
@@ -1044,8 +1033,6 @@ func (o *Operator) syncRegistryServer(logger *logrus.Entry, in *v1alpha1.Catalog
1044
1033
return
1045
1034
}
1046
1035
1047
- logger .Info ("ensured registry server" )
1048
-
1049
1036
// requeue the catalog sync based on the polling interval, for accurate syncs of catalogs with polling enabled
1050
1037
if out .Spec .UpdateStrategy != nil && out .Spec .UpdateStrategy .RegistryPoll != nil {
1051
1038
if out .Spec .UpdateStrategy .Interval == nil {
@@ -1054,16 +1041,17 @@ func (o *Operator) syncRegistryServer(logger *logrus.Entry, in *v1alpha1.Catalog
1054
1041
return
1055
1042
}
1056
1043
if out .Spec .UpdateStrategy .RegistryPoll .ParsingError != "" && out .Status .Reason != v1alpha1 .CatalogSourceIntervalInvalidError {
1057
- out .SetError (v1alpha1 .CatalogSourceIntervalInvalidError , errors .New (out .Spec .UpdateStrategy .RegistryPoll .ParsingError ))
1044
+ err := errors .New (out .Spec .UpdateStrategy .RegistryPoll .ParsingError )
1045
+ logger .WithError (err ).Error ("registry server sync error: failed to parse registry poll interval" )
1046
+ out .SetError (v1alpha1 .CatalogSourceIntervalInvalidError , err )
1058
1047
}
1059
- logger .Infof ("requeuing registry server sync based on polling interval %s" , out .Spec .UpdateStrategy .Interval .Duration .String ())
1060
1048
resyncPeriod := reconciler .SyncRegistryUpdateInterval (out , time .Now ())
1061
1049
o .catsrcQueueSet .RequeueAfter (out .GetNamespace (), out .GetName (), queueinformer .ResyncWithJitter (resyncPeriod , 0.1 )())
1062
1050
return
1063
1051
}
1064
1052
1065
1053
if err := o .sources .Remove (sourceKey ); err != nil {
1066
- o .logger .WithError (err ).Debug ( " error closing client connection" )
1054
+ o .logger .WithError (err ).Error ( "registry server sync error: error closing client connection" )
1067
1055
}
1068
1056
1069
1057
return
@@ -1154,7 +1142,6 @@ func (o *Operator) syncCatalogSources(obj interface{}) (syncError error) {
1154
1142
"catalogsource.name" : catsrc .Name ,
1155
1143
"id" : queueinformer .NewLoopID (),
1156
1144
})
1157
- logger .Info ("syncing catalog source" )
1158
1145
1159
1146
syncFunc := func (in * v1alpha1.CatalogSource , chain []CatalogSourceSyncFunc ) (out * v1alpha1.CatalogSource , syncErr error ) {
1160
1147
out = in
0 commit comments