Skip to content

Instantly share code, notes, and snippets.

@tamalsaha
Last active March 3, 2023 08:37
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tamalsaha/b3360cd0410a8604fee1fb7d275d3628 to your computer and use it in GitHub Desktop.
Save tamalsaha/b3360cd0410a8604fee1fb7d275d3628 to your computer and use it in GitHub Desktop.

Background Reading

Cache Keys

  • cluster list: ctag.$group.$kind
  • namespace list: ctag.$group.$kind.ns.$ns
  • namespaced object: ctag.$group.$kind.ns.$ns.n.$name
  • non-namespaced object: ctag.$group.$kind.n.$name

Foreground List call

request:

if namespaced {
	key = 'ctag.$group.$kind.ns.$ns'
} else {
	key = 'ctag.$group.$kind'
}
?ctag=localStorage.getItem(key)

response:

if namespaced {
	suffix = '$group.$kind.ns.$ns'
} else {
	suffix = '$group.$kind'
}
if response.Headers["ETag"] != localStorage.getItem('etag.'+suffix) {
	localStorage.setItem('etag.'+suffix, response.Headers["ETag"])
}

Background List call

request:

?ctag=Date.now() // using unix epoch ms, as something random

response:

if namespaced {
	suffix = 'ctag.$group.$kind.ns.$ns'
} else {
	suffix = 'ctag.$group.$kind'
}
if response.Headers["ETag"] != localStorage.getItem('etag.'+suffix) {
	localStorage.setItem('ctag.'+suffix, request.Query['ctag'])
	localStorage.setItem('etag.'+suffix, response.Headers["ETag"]) // optimization, use cached background call
	if namespaced {
		reset_ctag = Date.Now(); // using unix epoch ms, as something random
		localStorage.setItem('ctag.$group.$kind', reset_ctag) // invalidate cluster list cache
	}
}

Foreground GET call

request:

if namespaced {
	key = 'ctag.$group.$kind.ns.$ns.n.$name'
} else {
	key = 'ctag.$group.$kind.n.$name'
}
?ctag=localStorage.getItem(key)

response:

if namespaced {
	suffix = '$group.$kind.ns.$ns.n.$name'
} else {
	suffix = '$group.$kind.n.$name'
}
if response.Headers["ETag"] != localStorage.getItem('etag.'+suffix) {
	localStorage.setItem('etag.'+suffix, response.Headers["ETag"])

	reset_ctag = Date.Now(); // using unix epoch ms, as something random
	if namespaced {
		localStorage.setItem('ctag.$group.$kind.ns.$ns', reset_ctag) // invalidate ns list cache
	}
	localStorage.setItem('ctag.$group.$kind', reset_ctag) // invalidate cluster list cache
}

Create/Update/Patch/Delete call:

request: No nothing

response:

if namespaced {
	keys = [
		'ctag.$group.$kind.ns.$ns.n.$name', // object ctag
		'ctag.$group.$kind.ns.$ns', // ns list ctag
		'ctag.$group.$kind' // cluster list ctag
		]
} else {
	keys = ['ctag.$group.$kind.n.$name', 'ctag.$group.$kind']
}

reset_ctag = Date.now() // using unix epoch ms, as something random
for key in keys {
	localStorage.setItem(key, reset_ctag) // invalidate cache
}
@tamalsaha
Copy link
Author

@tamalsaha
Copy link
Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment