Closed seaerchin closed 1 year ago
if we are invalidating on every API call, how exactly is the etag the same for 60 secs ah? wouldnt every call invalidate the sha already?
the sha
is different from the etag
- the etag
is the same not just for 60s, but until the content changes. we are invalidating our internal cached data and revalidating with github using the etag
to see if it's our cached data can be reused. if github returns 304, we reuse otherwise, we set the internal cache iwth the new data
hmm checking in, you mean
maxAge
property on the response right?
oops, yes!
[test]: lets run e2e on this! i think the command is !run-e2e iirc?
[test]: lets run e2e on this! i think the command is !run-e2e iirc?
sadly it's only available on the frontend. we'd have to push this to staging
first - i'll test this alongside another FE PR.
double checked failing test cases - all pass manually
Problem
Currently, Isomer uses a huge amount of tokens due to not caching. This leads to scaling issue, where our github token limits are quickly reached and users are unable to access the CMS.
Closes IS-172
Solution
axios-cache-interceptor
to utilise ETags for cache. See here for info on etags.maxAge
header ((in this case, 60s) but we have opted to remove this behaviour and revalidate. this is to avoid github returning 409s when we attempt to update using the oldsha
headerInterpreter
- the change made compared to the default one is that we don't use themaxAge
property on the request and instead default to amustRevalidate
behaviourTests
console.log
forremainingRequests
intorespHandler
forAxiosInstance.ts
, so that we know how much requests are remainingGET
request to thee2e-test-repo
's homepage (curl --request GET \ --url http://localhost:8081/v2/sites/e2e-test-repo/homepage
)New dependencies:
axios-cache-interceptor
: interceptor for axios to use etags. the current backing storage is in memory.Deploy notes
axios
got upgraded from0.21.x
to0.25.0
0.9.2
as a minimum foraxios-cache-interceptor
ETag
functionality only added in0.6
+ their import forobject-code
is an outdated one, which doesn't get fixed till0.9.2
.from @kishore03109 I remember testing this locally prior during the approval process + no good way to test this in staging