thanks for the example, rob.

On Tue, Dec 18, 2018 at 1:10 PM Robert Butts <r...@apache.org> wrote:

> Here's a SQL query, to find duplicate origins on different delivery
> services:
>
> ```
> WITH duplicate_origins as (
>   SELECT fqdn FROM origin
>   where is_primary
>   GROUP BY fqdn
>   HAVING COUNT(*) > 1
> )
> SELECT o.fqdn, ds.xml_id AS ds_name
> FROM origin o
> JOIN duplicate_origins du on du.fqdn = o.fqdn
> JOIN deliveryservice ds ON ds.id = o.deliveryservice
> WHERE o.is_primary
> ORDER BY fqdn;
> ```
>
>
> On Tue, Dec 18, 2018 at 1:09 PM Robert Butts <r...@apache.org> wrote:
>
> > >can you give an example of what parent.config looks like when 2 ds's
> > share an origin and have different a different topology?
> >
> > Answering because I encountered this directly, when rewriting
> > parent.config.
> >
> > For example: Suppose you have one Delivery Service:
> > XML_ID: foo
> > Type: HTPT_LIVE_NATL
> > Query String Handling: 1 - ignore in cache key, and pass up
> > Origin Server Base URL: http://foo.example.net
> >
> > And another Delivery Service:
> > XML_ID: bar
> > Type: HTPT_LIVE_NATL
> > Query String Handling: 1 - ignore in cache key, and pass up
> > Origin Server Base URL: http://foo.example.net
> >
> > ATS only supports unique `dest_domain` entries in parent.config.
> > Therefore, the parent.config generated for a server assigned to both of
> > these Delivery Services with either be:
> >
> > dest_domain=foo.example.net port=80 go_direct=true
> >
> > Or
> >
> > dest_domain=foo.example.net port=80 go_direct=false qstring=consider
> >
> > Right now, it's arbitrary which Perl Traffic Ops inserts, and Perl
> > provides no warning or error of any kind (the pending Go parent.config PR
> > logs an error).
> >
> > Whichever is arbitrarily inserted, the resulting remaps for the other
> > delivery service will be wrong. Either `foo` requests will drop the query
> > string when they shouldn't, and go to the mid when they shouldn't; or
> `bar`
> > requests will use the query string and skip the mid when it shouldn't.
> >
> >
> > Does that make sense? The only correct solution, is to somehow prevent
> > different DSes having the same origin, and tell tenants they must use
> > CNAMEs if they need.
> >
> > This isn't a bug in Traffic Control. ATS fundamentally doesn't support
> > multiple remap rules with the same parent FQDN with different
> > configurations. Hence, Traffic Control needs to prohibit that.
> >
> >
> > On Tue, Dec 18, 2018 at 12:24 PM Jeremy Mitchell <mitchell...@gmail.com>
> > wrote:
> >
> >> brennan,
> >>
> >> can you give an example of what parent.config looks like when 2 ds's
> share
> >> an origin and have different a different topology?
> >>
> >> jeremy
> >>
> >> On Tue, Dec 18, 2018 at 11:39 AM Fieck, Brennan <
> >> brennan_fi...@comcast.com>
> >> wrote:
> >>
> >> > To be clear, the "Warning" I'm talking about would happen at startup,
> >> but
> >> > I'd like a UI-only constraint to come with that to disallow using the
> >> API
> >> > to bind the same origin to multiple Delivery Services with varying
> >> > topography requirements. It wouldn't change the existing data, but
> >> prevent
> >> > users from creating more bad data.
> >> >
> >> > "warning" doesn't really sufficiently describe that, my bad.
> >> > ________________________________________
> >> > From: Fieck, Brennan <brennan_fi...@comcast.com>
> >> > Sent: Tuesday, December 18, 2018 11:24 AM
> >> > To: dev@trafficcontrol.apache.org
> >> > Subject: Re: [EXTERNAL] Re: Origins assigned to Multipe Delivery
> >> Services
> >> > produces indeterminate parent.config
> >> >
> >> > Well the cost of fixing this bug is a constraint on the data. Unless
> we
> >> > make it a UI-only constraint - which I'm personally against - there
> >> must be
> >> > some point in the future where ATC cannot reasonably be expected to
> work
> >> > with data that violates that constraint. The question is when that
> >> should
> >> > occur, which should likely happen at a minor version release. Minor
> not
> >> > major because it doesn't involve a change in data structures, merely
> >> > relationships between them - in my opinion that's a minor version
> change
> >> > but that's definitely up for debate. With several release candidates
> for
> >> > 3.0.0 that _doesn't_ include this restriction already in the wild, I
> >> > wouldn't recommend putting it in there. That means to fix the bug as
> >> soon
> >> > as possible it should go in 3.1.0 which should be the target of
> "master"
> >> > after the 3.0.0 release is cut from it.
> >> >
> >> > So I'd recommend immediately implementing the constraint in master
> with
> >> a
> >> > refusal to upgrade with bad data, and backport a warning about the
> >> future
> >> > behavior into 3.0.0 or as part of a 3.0.1 provided we had more changes
> >> that
> >> > would warrant a micro version bump.
> >> > ________________________________________
> >> > From: Gray, Jonathan <jonathan_g...@comcast.com>
> >> > Sent: Tuesday, December 18, 2018 9:34 AM
> >> > To: dev@trafficcontrol.apache.org
> >> > Subject: Re: [EXTERNAL] Re: Origins assigned to Multipe Delivery
> >> Services
> >> > produces indeterminate parent.config
> >> >
> >> > -1 Holding an ATC upgrade hostage to data cleanup seems like a bad
> idea.
> >> > The issue isn't great, but it's also not new.  We should allow teams
> to
> >> fix
> >> > their data at their normal paces if it doesn't create significant
> >> overhead
> >> > or an inherant blocker for new functionality or correction of other
> >> major
> >> > problems imho.
> >> >
> >> > Jonathan G
> >> >
> >> >
> >> > On 12/18/18, 9:28 AM, "Fieck, Brennan" <brennan_fi...@comcast.com>
> >> wrote:
> >> >
> >> >     Another option is we could detect collisions at startup and simply
> >> > refuse to continue with the upgrade until the data is fixed. That
> would
> >> > allow people using the now-unsupported data format to continue to use
> >> their
> >> > old versions of Traffic Ops without wrecking their database, but also
> >> > provide an incentive to clean up the data.
> >> >     ________________________________________
> >> >     From: Gray, Jonathan <jonathan_g...@comcast.com>
> >> >     Sent: Tuesday, December 18, 2018 5:12 AM
> >> >     To: dev@trafficcontrol.apache.org
> >> >     Subject: Re: [EXTERNAL] Re: Origins assigned to Multipe Delivery
> >> > Services produces indeterminate parent.config
> >> >
> >> >     I'm generally a fan of constrain your data in your database, but
> not
> >> > necessarily exclusively.  I see this as a one-way cleanup/conversion
> so
> >> it
> >> > doesn't need to be configurable; otherwise you have to ask the
> question
> >> > what happens if someone turns it off.  That said, something in the UI
> >> layer
> >> > would be nice to prevent spending significant quantities of time
> >> building a
> >> > complex DS only to have it fail to post for reasons that could have
> been
> >> > known earlier.
> >> >
> >> >     The way my brain works in this case:
> >> >     If !unique_constraint_exists_query()
> >> >             If has_duplicates_query()
> >> >                     show_warning()
> >> >             else
> >> >                     add_unique_constraint()
> >> >
> >> >     to which the API and UI configuration could also make use of
> >> > unique_constraint_exists_query() to drive additional layer constraints
> >> if
> >> > desired.
> >> >
> >> >     Jonathan G
> >> >
> >> >     On 12/17/18, 1:11 PM, "Rawlin Peters" <rawlin.pet...@gmail.com>
> >> wrote:
> >> >
> >> >         That is an interesting idea...detect at TO startup whether or
> >> not
> >> >         there are duplicate origins and operate in a "prevent
> duplicate
> >> >         origins" state if no duplicates are found or "prevent
> >> conflicting
> >> > DS
> >> >         topologies" state if duplicates are found? So once operators
> >> have
> >> >         replaced all the duplicate origins with CNAMEs, TO will
> >> essentially
> >> >         operate in a "prohibit all duplicate origins" state. That
> would
> >> >         probably make for a simpler transition, but I'd want to remove
> >> that
> >> >         logic in a following release that strictly prohibits duplicate
> >> > origins
> >> >         (assuming that the community agrees we should prohibit
> duplicate
> >> >         origins altogether).
> >> >
> >> >         As for DB constraints vs UI, I was thinking those DS-type
> >> > constraints
> >> >         I pointed out would live in the API. It would basically be
> added
> >> >         validation in the deliveryservices POST/PUT endpoint that
> checks
> >> > the
> >> >         DB for existing DSes that conflict with the requested DS.
> >> >
> >> >         - Rawlin
> >> >
> >> >         On Mon, Dec 17, 2018 at 12:35 PM Gray, Jonathan
> >> >         <jonathan_g...@comcast.com> wrote:
> >> >         >
> >> >         > These kinds of conditions should be detectable with a
> >> > sufficiently advanced SQL query.  Is it possible to add the constraint
> >> if
> >> > it passes and emit a warning during TO startup otherwise?  That would
> >> let
> >> > you know the condition exists at startup but not getting in your way
> and
> >> > keep you out of trouble once you've cleaned up.  We made a mistake
> early
> >> > on, but this would acknowledge it was bad and encourage it to be fixed
> >> at
> >> > the speed of operations teams.  Also this puts the constraint in the
> >> > database rather than the UI which is really where the contention is
> for
> >> > usability.
> >> >         >
> >> >         > Jonathan G
> >> >         >
> >> >         >
> >> >         > On 12/17/18, 11:38 AM, "Rawlin Peters" <
> >> rawlin.pet...@gmail.com>
> >> > wrote:
> >> >         >
> >> >         >     We occasionally discuss this issue but haven't tackled
> it
> >> > yet. I think
> >> >         >     the main issue is just that duplicate origins have been
> >> > allowed since
> >> >         >     the beginning, and now everyone's Traffic Ops could be
> >> > littered with
> >> >         >     duplicate origins. Also, depending on the config of the
> >> > duplicate
> >> >         >     delivery services, the origins might not be in conflict
> at
> >> > all (if
> >> >         >     they don't have different topology constraints). I would
> >> > love for us
> >> >         >     to just add a uniqueness constraint, but there would
> need
> >> to
> >> > be a fair
> >> >         >     amount of warning to the community before doing so and
> >> might
> >> >         >     invalidate a significant amount of valid use cases.
> >> > Operators would
> >> >         >     need time to make DNS CNAME records for the duplicate
> >> > origins and
> >> >         >     update their DSes to use the different CNAMEs.
> >> >         >
> >> >         >     I think as a good first step to eliminating the use of
> >> > duplicate
> >> >         >     origins altogether, we should identify which "topology
> >> > constraints"
> >> >         >     actually cause conflicting config when used with
> duplicate
> >> > origins and
> >> >         >     prevent creating DSes with duplicate origins _if it
> would
> >> > cause a
> >> >         >     conflict with an existing DS that uses the same origin_.
> >> >         >
> >> >         >     For instance, I believe an HTTP and DNS-type DS can live
> >> > happily
> >> >         >     side-by-side using the same origin (probably need
> >> different
> >> >         >     routing_names?), but scenarios like HTTP and HTTP_LIVE,
> or
> >> > DNS and
> >> >         >     HTTP_NO_CACHE sharing the same origin will cause
> conflicts
> >> > for sure.
> >> >         >     So maybe we can start by making sure the DS types
> "match"
> >> > when using
> >> >         >     the same origin:
> >> >         >     HTTP + DNS: possibly good, if they have different
> routing
> >> > names?
> >> >         >     HTTP_LIVE + HTTP_LIVE_NATNL: bad
> >> >         >     HTTP_NO_CACHE + [any other type]: bad
> >> >         >     HTTP_LIVE + HTTP: bad
> >> >         >     etc.
> >> >         >
> >> >         >     There are most likely other conflict scenarios that
> don't
> >> > involve the
> >> >         >     DS types, but I think this would be a good start. In the
> >> > future with
> >> >         >     Delivery Service Topologies (aka Flexible Cachegroups
> aka
> >> > Bring Your
> >> >         >     Own Topology), we might be able to prohibit assigning a
> DS
> >> > to a
> >> >         >     Topology if the DS's origin is already used by another
> DS
> >> in
> >> > a
> >> >         >     different Topology.
> >> >         >
> >> >         >     - Rawlin
> >> >         >
> >> >         >     On Mon, Dec 17, 2018 at 10:52 AM Fieck, Brennan
> >> >         >     <brennan_fi...@comcast.com> wrote:
> >> >         >     >
> >> >         >     > As some of you may be aware, `parent.config` files
> >> > generated by Traffic Ops can vary wildly when an origin is assigned to
> >> > multiple Delivery Services. This results in undefined behavior. I'm
> told
> >> > that the conflict only happens when two Delivery Services with
> different
> >> > "topology requirements" use the same origin, whatever that means
> >> (content
> >> > routing type?). Regardless, the issue should be addressed. The obvious
> >> > solution is to put in place a database constraint that prevents an
> >> origin
> >> > from being assigned to more that one Delivery Service with API checks
> in
> >> > place that would provide helpful error messages when an attempt is
> made
> >> to
> >> > violate the constraint. However, would that mess with things like
> >> > Multi-Site Origin? Or is it just not viable for some other reason? If
> >> it is
> >> > a good solution, I'm prepared to work on a fix that utilizes it.
> >> >         >
> >> >         >
> >> >
> >> >
> >> >
> >> >
> >> >
> >>
> >
>

Reply via email to