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

Adds support for exporting a serialized config response from the RC server side SDK. #2829

Open
wants to merge 9 commits into
base: master
Choose a base branch
from

Conversation

kjelko
Copy link
Contributor

@kjelko kjelko commented Jan 9, 2025

Adds support for exporting a serialized config response from the RC server side SDK.

@kjelko kjelko requested a review from ashish-kothari January 9, 2025 16:19
@kjelko kjelko changed the title Rc client serialization Adds support for exporting a serialized config response from the RC server side SDK. Jan 9, 2025
Copy link

@ashish-kothari ashish-kothari left a comment

Choose a reason for hiding this comment

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

LGTM with minor comments.


if (currentEtag === requestEtag) {
this.response = {
status: 304,

Choose a reason for hiding this comment

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

Optional: replace the number with a readable constant?

@@ -1391,6 +1425,65 @@ describe('RemoteConfig', () => {
});
});

describe('RemoteConfigFetchResponse', () => {
it('should return a 200 response with no etag', () => {

Choose a reason for hiding this comment

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

I was thrown off by the description, can we rephrase it as - "should return a 200 response when supplied with no etag"? Similarly for the next test.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

sure thing!

/**
* @param app - The app for this RemoteConfig service.
* @param serverConfig - The server config for which to generate a fetch response.
* @param requestEtag - A request eTag with which to compare the current response.

Choose a reason for hiding this comment

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

What's the request in this context? Do we expect the client to pass an etag to the customer server which can be used to avoid a config pushdown?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

That's correct - this would come in from a client request. it should be the etag of the most recent config that the client has. Since our internal servers do this, it makes sense to allow customer servers to do it as well

Comment on lines +655 to +658
/**
* @returns JSON representation of the fetch response that can be consumed
* by the RC client SDK.
*/

Choose a reason for hiding this comment

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

Probably needs to be annotated with @public to show up in the API docs?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Hmm, I don't actually know - none of the other public methods are annotated with an @public...

for (let i = 0; i < configJson.length; i++) {
const char = configJson.charCodeAt(i);
hash = (hash << 5) - hash + char;
hash |= 0;

Choose a reason for hiding this comment

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

What is the significance of this operation?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Added a comment per below comment

let hash = 0;
for (let i = 0; i < configJson.length; i++) {
const char = configJson.charCodeAt(i);
hash = (hash << 5) - hash + char;

Choose a reason for hiding this comment

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

This is quite cool. Should we add a comment describing the equation and also that we're trying to replicate the String.hashcode() impl here for context? I see that the java hashcode implementation mentions it.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Comment added

@kjelko kjelko requested review from lahirumaramba and jenh January 14, 2025 12:48
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.

2 participants