Skip to content
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

docstore/mongodocstore: Update Mongo dialer when MONGO_SERVER_URL rotates #3429

Merged
merged 1 commit into from May 1, 2024

Conversation

concaf
Copy link
Contributor

@concaf concaf commented Apr 30, 2024

Prior to this commit, the dialer for MongoDB was generated once from MONGO_SERVER_URL environment variable but was never updated even when the environment variable was updated in subsequent calls. While this works fine when MONGO_SERVER_URL is not expected to update, but as MONGO_SERVER_URL also contains the credentials to connect to MongoDB, it's a fairly common use case to rotate these credentials (and hence the environment variable) at regular intervals.

This commit fixes that and updates the dialer when MONGO_SERVER_URL is updated.

This PR blocks tektoncd/chains#1089

}

func (o *defaultDialer) OpenCollectionURL(ctx context.Context, u *url.URL) (*docstore.Collection, error) {
o.init.Do(func() {
serverURL := os.Getenv("MONGO_SERVER_URL")
serverURL := os.Getenv("MONGO_SERVER_URL")
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is not thread-safe (OpenCollectionURL can be called concurrently on the same o).

You can protect it with a sync.Mutex.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

makes sense, updated 👍🏼

o.init.Do(func() {
serverURL := os.Getenv("MONGO_SERVER_URL")
serverURL := os.Getenv("MONGO_SERVER_URL")
if serverURL != o.mongoServerURL {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This doesn't work. If MONGO_SERVER_URL isn't set, then both of these will be the empty string and we'll fall through without returning an error.

How about something like if o.opener == nil || serverURL != o.openerServerURL ... ?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

good catch 👍🏼

i've updated this to check for an empty MONGO_SERVER_URL outside the if condition, so it should fail each time the env var is empty

	if currentEnv == "" {
		o.err = errors.New("MONGO_SERVER_URL environment variable is not set")
		return nil, fmt.Errorf("open collection %s: %v", u, o.err)
	}

	// If MONGO_SERVER_URL has been updated, then update o.opener as well
	if currentEnv != o.mongoServerURL {
		client, err := Dial(ctx, currentEnv)
...
...

wdyt?

@concaf concaf force-pushed the concaf/fix/mongo-server-url-rotation branch 2 times, most recently from 18ee57d to cd0e696 Compare May 1, 2024 14:23
@concaf
Copy link
Contributor Author

concaf commented May 1, 2024

@vangent thanks for the quick review 🚀 🙂 - i've updated the PR and also added some tests.

Prior to this commit, the dialer for MongoDB was generated once from
MONGO_SERVER_URL environment variable but was never updated even when
the environment variable was updated in subsequent calls. While this
works fine when MONGO_SERVER_URL is not expected to update, but as
MONGO_SERVER_URL also contains the credentials to connect to MongoDB,
it's a fairly common use case to rotate these credentials (and hence the
environment variable) at regular intervals.

This commit fixes that and updates the dialer when MONGO_SERVER_URL is
updated.
@concaf concaf force-pushed the concaf/fix/mongo-server-url-rotation branch from cd0e696 to 024ea8c Compare May 1, 2024 14:25
Copy link

codecov bot commented May 1, 2024

Codecov Report

Attention: Patch coverage is 81.81818% with 2 lines in your changes are missing coverage. Please review.

Project coverage is 73.20%. Comparing base (3f641fd) to head (024ea8c).

Files Patch % Lines
docstore/mongodocstore/urls.go 81.81% 2 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##           master    #3429      +/-   ##
==========================================
+ Coverage   73.17%   73.20%   +0.03%     
==========================================
  Files         113      113              
  Lines       14872    14873       +1     
==========================================
+ Hits        10882    10888       +6     
+ Misses       3216     3213       -3     
+ Partials      774      772       -2     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

@vangent vangent merged commit d8b9c94 into google:master May 1, 2024
5 checks passed
concaf added a commit to concaf/chains that referenced this pull request May 6, 2024
This commit bumps gocloud.dev/docstore/mongodocstore to the commit at
google/go-cloud#3429 that allows
MONGO_SERVER_URL rotation.
concaf added a commit to concaf/chains that referenced this pull request May 8, 2024
This commit bumps gocloud.dev/docstore/mongodocstore to the commit at
google/go-cloud#3429 that allows
MONGO_SERVER_URL rotation.
concaf added a commit to concaf/chains that referenced this pull request May 14, 2024
This commit bumps gocloud.dev/docstore/mongodocstore to the commit at
google/go-cloud#3429 that allows MONGO_SERVER_URL rotation.
concaf added a commit to concaf/chains that referenced this pull request May 15, 2024
This commit bumps gocloud.dev/docstore/mongodocstore to the commit at
google/go-cloud#3429 that allows MONGO_SERVER_URL rotation.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants