Skip to content

Commit f6f9ae2

Browse files
authored
Merge pull request #61 from pwittrock/comments
Address Controller lib PR comments
2 parents bb5ef08 + 7d66afd commit f6f9ae2

File tree

2 files changed

+25
-22
lines changed

2 files changed

+25
-22
lines changed

pkg/manager/internal.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -137,10 +137,9 @@ func (cm *controllerManager) Start(stop <-chan struct{}) error {
137137
cm.mu.Lock()
138138
defer cm.mu.Unlock()
139139

140-
// Start the Cache.
141140
cm.stop = stop
142141

143-
// Allow the function to start the cache to be mocked out for testing
142+
// Start the Cache. Allow the function to start the cache to be mocked out for testing
144143
if cm.startCache == nil {
145144
cm.startCache = cm.cache.Start
146145
}
@@ -154,7 +153,7 @@ func (cm *controllerManager) Start(stop <-chan struct{}) error {
154153
// TODO(community): Check the return value and write a test
155154
cm.cache.WaitForCacheSync(stop)
156155

157-
// Start the runnables after the promises
156+
// Start the runnables after the cache has synced
158157
for _, c := range cm.runnables {
159158
// Controllers block, but we want to return an error if any have an error starting.
160159
// Write any Start errors to a channel so we can return them

pkg/manager/manager.go

Lines changed: 23 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ type Options struct {
7272
// Defaults to the kubernetes/client-go scheme.Scheme
7373
Scheme *runtime.Scheme
7474

75-
// Mapper is the rest mapper used to map go types to Kubernetes APIs
75+
// MapperProvider provides the rest mapper used to map go types to Kubernetes APIs
7676
MapperProvider func(c *rest.Config) (meta.RESTMapper, error)
7777

7878
// Dependency injection for testing
@@ -98,52 +98,57 @@ func (r RunnableFunc) Start(s <-chan struct{}) error {
9898

9999
// New returns a new Manager for creating Controllers.
100100
func New(config *rest.Config, options Options) (Manager, error) {
101-
cm := &controllerManager{config: config, scheme: options.Scheme, errChan: make(chan error)}
102-
103101
// Initialize a rest.config if none was specified
104-
if cm.config == nil {
102+
if config == nil {
105103
return nil, fmt.Errorf("must specify Config")
106104
}
107105

108-
// Use the Kubernetes client-go scheme if none is specified
109-
if cm.scheme == nil {
110-
cm.scheme = scheme.Scheme
111-
}
112-
113106
// Set default values for options fields
114107
options = setOptionsDefaults(options)
115108

116-
mapper, err := options.MapperProvider(cm.config)
109+
// Create the mapper provider
110+
mapper, err := options.MapperProvider(config)
117111
if err != nil {
118112
log.Error(err, "Failed to get API Group-Resources")
119113
return nil, err
120114
}
121115

122116
// Create the Client for Write operations.
123-
writeObj, err := options.newClient(cm.config, client.Options{Scheme: cm.scheme, Mapper: mapper})
117+
writeObj, err := options.newClient(config, client.Options{Scheme: options.Scheme, Mapper: mapper})
124118
if err != nil {
125119
return nil, err
126120
}
127121

128-
cm.cache, err = options.newCache(cm.config, cache.Options{Scheme: cm.scheme, Mapper: mapper})
122+
// Create the cache for the cached read client and registering informers
123+
cache, err := options.newCache(config, cache.Options{Scheme: options.Scheme, Mapper: mapper})
129124
if err != nil {
130125
return nil, err
131-
}
132-
133-
cm.fieldIndexes = cm.cache
134-
cm.client = client.DelegatingClient{Reader: cm.cache, Writer: writeObj}
135126

127+
}
136128
// Create the recorder provider to inject event recorders for the components.
137-
cm.recorderProvider, err = options.newRecorderProvider(cm.config, cm.scheme)
129+
recorderProvider, err := options.newRecorderProvider(config, options.Scheme)
138130
if err != nil {
139131
return nil, err
140132
}
141133

142-
return cm, nil
134+
return &controllerManager{
135+
config: config,
136+
scheme: options.Scheme,
137+
errChan: make(chan error),
138+
cache: cache,
139+
fieldIndexes: cache,
140+
client: client.DelegatingClient{Reader: cache, Writer: writeObj},
141+
recorderProvider: recorderProvider,
142+
}, nil
143143
}
144144

145145
// setOptionsDefaults set default values for Options fields
146146
func setOptionsDefaults(options Options) Options {
147+
// Use the Kubernetes client-go scheme if none is specified
148+
if options.Scheme == nil {
149+
options.Scheme = scheme.Scheme
150+
}
151+
147152
if options.MapperProvider == nil {
148153
options.MapperProvider = apiutil.NewDiscoveryRESTMapper
149154
}
@@ -154,7 +159,6 @@ func setOptionsDefaults(options Options) Options {
154159
}
155160

156161
// Allow newCache to be mocked
157-
// TODO(directxman12): Figure out how to allow users to request a client without requesting a watch
158162
if options.newCache == nil {
159163
options.newCache = cache.New
160164
}

0 commit comments

Comments
 (0)