-
Notifications
You must be signed in to change notification settings - Fork 373
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
base: master
Are you sure you want to change the base?
Conversation
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.
LGTM with minor comments.
src/remote-config/remote-config.ts
Outdated
|
||
if (currentEtag === requestEtag) { | ||
this.response = { | ||
status: 304, |
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.
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', () => { |
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 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.
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.
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. |
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.
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?
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.
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
/** | ||
* @returns JSON representation of the fetch response that can be consumed | ||
* by the RC client SDK. | ||
*/ |
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.
Probably needs to be annotated with @public
to show up in the API docs?
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.
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; |
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.
What is the significance of this operation?
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 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; |
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 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.
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.
Comment added
Adds support for exporting a serialized config response from the RC server side SDK.