Inline.
On Thu, Jul 5, 2018 at 9:00 AM, Rawlin Peters <[email protected]>
wrote:
> 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
>
+1. Well said.
>
> 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 array feels a little fragile, perhaps. Should we decorate each entry
with an "order", for completeness? (It's obvious to us that the order is
DEEP->CZ->GEO, but might not be for new users.)
> 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...
+1 here as well (without knowing the ins-and-outs of the Cachegroup
Fallback 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
> > > > >
> > > > >
> > > >
> > >
> >
> >
>