You're not mistaken, Jonathan, that is how the logic basically flows
today; however, with cachegroup fallback configuration now it can be
deep[if enabled] -> cz -> geo[if fallback config allows].
Marking a cachegroup as "CZ-only" is really about filtering possible
cachegroups in selection *after* a client's location is discovered (by
geoIP DB). So it can really be described as "given the method of
client localization, filter out certain cachegroup targets".
"Deep-only": filtered out after the "CZ localization" and "post-Geo
localization" steps
"CZ-only": filtered out after the "Geo localization" step
"Geo-only": filtered out after the "deep/regular-CZ" steps
Right now, those all seem somewhat mutually exclusive (except CZ kind
of includes both deep and regular CZ), unless you wanted to do
something like "Deep and Geo only". I don't know if that's a valid use
case, but maybe "CZ and Future-thing only" would make sense. So maybe
cachegroups should really be described as:
"Deep-enabled": allowed after "deep-CZ localization" step
"CZ-enabled": allowed after the "regular-CZ localization" step
"Geo-enabled": allowed after the "geo localization" step
"Future-thing-enabled": allowed after the "future-thing" step
Then we could add multiple permissions to a cachegroup rather than
making them mutually exclusive. For the initial use case I proposed
this for, I would just be marking the cachegroups that aren't directly
connected to the internet as "Deep-enabled, CZ-enabled,
future-thing-enabled" rather than "CZ-only". "Deep-only" cachegroups
would be marked "deep-enabled".
If no permissions are configured, all permissions are given. Enabling
one permission means all other permissions are disabled.
I think this could be done by adding an array-type column to the
cachegroup table/API like so:
{
"name": "cache_group_edge",
"shortName": "cg_edge",
"latitude": 12,
"longitude": 45,
"permissions": [
"DEEP",
"CZ",
"GEO"
],
"typeId": 6
}
The "permissions" field would remain optional, meaning that no
permissions chosen assumes *all* permissions are enabled (giving you
the existing default behavior). Postgres has array-type columns which
would map to this API quite nicely. In fact, I'm also kind of
rethinking the "Cachegroup Fallback" API after going over this,
because listing a cachegroup's fallbacks in an array like this could
make sense and remove the need for the new cachegroup_fallbacks API...
On Wed, Jul 4, 2018 at 3:47 PM Gray, Jonathan <[email protected]> wrote:
>
> If I'm not mistaken, today the logic is fall through on miss (deep[if
> enabled] -> cz -> geo). The suggestion to make a 1:* relationship moves that
> from being implicit in the code to explicit choice by the DS owner. Changing
> the database/apis is expensive enough that maybe we can't make that jump near
> term. If you do only add a single field for this using an enum, there should
> be a default 'fallthrough' or 'native' option to replicate the old behavior.
> Also, I misspoke earlier, this isn't about the routing methods it's about
> localization methods.
>
> On 7/4/18, 11:18 AM, "Jeremy Mitchell" <[email protected]> wrote:
>
> Can a cache group have many "routing methods". If not, would one column
> (cachegroup.routing_method) suffice where acceptable values are an enum? (
> CZ, DEEP, GEO)
>
> On Tue, Jul 3, 2018 at 7:05 PM, Mark Torluemke <[email protected]>
> wrote:
>
> > Feels like columns in the cachegroup table could go a long way in the
> short
> > term -- routing_cz, routing_geo, routing_deep?
> >
> > On Tue, Jul 3, 2018 at 1:04 PM, Rawlin Peters <[email protected]>
> > wrote:
> >
> > > Thanks for the suggestion, Jonathan. I wasn't even thinking about the
> > > possibility of "deep-only" cachegroups, but I could definitely see
> > > that as a future use case.
> > >
> > > Do you envision something like a table of cachegroup permissions
> > > (cachegroup_id, cachegroup_permission enum type), where the enums
> > > would be DEEP_ONLY and CZ_ONLY to start with? That would definitely
> > > increase initial dev time a bit and might require some new API
> > > endpoints to add/remove permissions unless we can make the new API
> > > field use an array value.
> > > On Tue, Jul 3, 2018 at 12:23 PM Gray, Jonathan
> > > <[email protected]> wrote:
> > > >
> > > > Rather than a cz_only flag, it might be more powerful to have a
> join
> > > table with allowed routing methods. You could cover the same use
> case,
> > but
> > > it would also allow you to do certain things like deep_only or
> > effectively
> > > not-geo.
> > > >
> > > > - Jonathan
> > > >
> > > > On 7/3/18, 12:03 PM, "Rawlin Peters" <[email protected]>
> wrote:
> > > >
> > > > Hey Traffic Controllers,
> > > >
> > > > I'd like to be able to mark a cachegroup as "CZ-only" via the
> API
> > so
> > > > that off-net clients (i.e. IPs that aren't included in the
> Coverage
> > > > Zone File) don't get routed to "CZ-only" cachegroups. This is
> > because
> > > > some cachegroups aren't directly connected to the internet and
> > > routing
> > > > off-net clients to those cachegroups is expensive. This proposal
> > > would
> > > > change Traffic Router behavior to route these clients to the
> > closest
> > > > available cachegroup that's NOT marked as "CZ-only".
> > > >
> > > > My proposal is to add a boolean column to the cachegroup table -
> > > > cz_only - which is then included in the CRConfig's
> "edgeLocations"
> > > for
> > > > Traffic Router to parse and look up when routing off-net
> clients.
> > By
> > > > default it will be false to keep the existing behavior. The new
> > field
> > > > will be optional in the API but NOT NULL in the DB, so null
> values
> > in
> > > > requests will explicitly be set to false in the DB.
> > > >
> > > > Questions/concerns?
> > > >
> > > > - Rawlin
> > > >
> > > >
> > >
> >
>
>