Multi-Region Policy Store
We mentioned MultiRegion policy-holder resources, and their importance
when it comes to evaluating region syncing information based on resource
name. There is a need to have a MultiRegion PolicyStore object, that
for any given resource name returns a managing MultiRegionPolicy object.
This object is defined in the Goten repository, file
runtime/multi_region/policy_store.go
. This file is important for this
design and worth remembering. As of now, it returns a nil object for global
resources though, the caller should in this case take MultiRegionPolicy
from the EnvRegistry component from the relevant Service.
It uses a cache that accumulates policy objects, so we should normally not use any IO operations, only initially. We have watch-based invalidation, which allows us to have a long-lived cache.
We have some code-generation that provides us functions needed to
initialize PolicyStore for a given Service in a given version, but
the caller is responsible for remembering to include them (All those
main.go
files for server runtimes!).
In this file, you can also see a function that sets/gets MultiRegionPolicy from a context object. In multi-region design, it is required from a server code, to store the MultiRegionPolicy object in a context if there will be updates to the database!