-
Notifications
You must be signed in to change notification settings - Fork 305
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add ProviderConfig Controller #2792
Add ProviderConfig Controller #2792
Conversation
8ca2383
to
64a3448
Compare
/retest |
64a3448
to
63b6cbe
Compare
/retest |
0c861ed
to
fd75ee7
Compare
6fde296
to
717f4c9
Compare
Thanks @panslava! I'm yet to take a look, but glancing through: now that we've started making use of our libraries/packages, are there some useful unit / integration tests that we can add? |
12a0122
to
262703c
Compare
00d673c
to
013fb0a
Compare
Added unit tests Ready for review This PR has a bit too many commits now, integration tests will be done in next PR |
f413eeb
to
1a7e4d5
Compare
- Introduced a new ProviderConfigController to track ProviderConfig resources and start NEG controllers. - Added initialization and running the ProviderConfigController in multi-project mode in main.go.
…nt have specific purpose
5fe5c23
to
3156e41
Compare
3156e41
to
bc8909a
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looking good. Two comments.
Reviewing the tests separately.
}, rOption.wg) | ||
|
||
// Wait for the multi-project syncer to finish. | ||
waitWithTimeout(rOption.wg, rootLogger) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is a very strange function. It just waits for 30 seconds and then stops waiting. Do we actually need such a behaviour for some reason?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
added waiting for stopCh to close before this
|
||
// initializeInformers wraps the base SharedIndexInformers in a providerConfig filter | ||
// and runs them. | ||
func initializeInformers( |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I wonder if it'd be better that initializeInformers also returns a hasSynced function. It minimizes potential for future issues where initializeInformers and createHasSyncedFunc diverge. Basically this helps establish the invariant that if you're Run()ing and informer, it needs a corresponding hasSynced invocation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Added returning hasSynced from this func
/hold found some problems on integration tests |
if err != nil { | ||
t.Fatalf("failed to add ProviderConfig to indexer: %v", err) | ||
} | ||
time.Sleep(100 * time.Millisecond) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If these are helper functions, shouldn't waiting for any expected delays happen as part of the actual Test?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Moved waiting to test body
} | ||
|
||
// TestProcessUpdateFunc ensures UpdateFunc enqueues the item, triggers re-sync. | ||
func TestProcessUpdateFunc(t *testing.T) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
As far as being a unit test goes, I think this test is sufficient.
But this does make me wonder about the "immutability" of ProviderConfig. (Thanks to @swetharepakula for reminding me about this aspect a few days back)
-
We should assume that the ProviderConfig is immutable, in which case our current logic is correct. But if that is true, do we need a "UpdateFunc" handler for it? I'd say yes, it's good to have. But our actual code won't really do anything if the ProviderConfig is updated, and perhaps we should log it somewhere. The only kind of update which our code cares about is a DeletionEvent.
-
While assuming immutability is sufficient for now, if on the other hand you really did want to support an actual "Update" to the ProviderConfig, than perhaps the code still needs some work with how it will stop the previous ProviderConfig controller and start the new one.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
yeah, maybe we just don't need this test for now, removed
Current implementation will not start any new controllers if providerConfig was updated, as we start only once per ProviderConfig key (which is namespace+name)
/retest |
- Remove Update Unit test - Add waiting for stopCh to close - Return HasSynced from initializeInformers
5819664
to
663e98b
Compare
Thanks! /lgtm |
[APPROVALNOTIFIER] This PR is APPROVED This pull-request has been approved by: gauravkghildiyal, panslava The full list of commands accepted by this bot can be found here. The pull request process is described here
Needs approval from an approver in each of these files:
Approvers can indicate their approval by writing |
/unhold |
/assign @gauravkghildiyal
This will be the very last to review