I don't think you can add a new not null column to the ds table because that would break the DS api. For example, on DS create/update you are saying routing_name is now required, right? This is an API breaking change that would require a new version of the API, no?
Hence my suggestion for a default. But, yes, i forgot about the per CDN thing. Jeremy On Mon, Aug 14, 2017 at 5:25 PM, Peters, Rawlin <rawlin_pet...@comcast.com> wrote: > Jeremy’s suggestion could work, but the param would probably be created in > a TR_PROFILE per-CDN. However, that still wouldn’t fix the visibility > problem. If a CDN isn’t using the default “tr” HTTP routing name, operators > would still need to know that there is a new profile parameter that needs > updating post-upgrade but before a snap/queue. So either way there needs to > be sufficient upgrade notes, but personally I still prefer keeping the > routing_name column non-null. > > That said, this is my current proposal for the DB migration which also > gets us past the upgrade issue: > 1. Add a routing_name column to the DeliveryService table. > 2. Update the routing_name for DNS Delivery Services to “edge”. > 3. Update the routing_name of non-DNS Delivery Services to the value of a > temporary upgrade parameter associated with the Delivery Service’s CDN (if > the upgrade parameter doesn’t exist, the routing_names will remain null). > 4. Update the remaining null routing_names to “tr”. > 5. Make the routing_name column non-null and add a non-empty constraint. > > So these would be an operator’s pre-upgrade steps: > 1. Verify if a custom http.routing.name has been configured for Traffic > Routers in their CDNs. > 2. If custom http.routing.name, do the following. Otherwise, no > pre-upgrade steps needed (for per-DS routing names at least): > a. create a parameter named “upgrade_http_routing_name” with the value > of the target CDN’s custom http.routing.name > b. associate this parameter to the TR_PROFILE belonging to the target > CDN > c. repeat steps 2a and 2b for each CDN using a custom > http.routing.name > > This would keep everything working the same post-upgrade as it did > pre-upgrade, and from that point on you’d be able to change a Delivery > Service’s routing name to any arbitrary hostname (without periods). > > --Rawlin > > On 8/14/17, 4:22 PM, "Dave Neuman" <neu...@apache.org> wrote: > > I don't think that solves the issue Rawlin was describing. The issue > that > Rawlin was describing is that someone has already defined a different > routing name in traffic_router/http.properties which is no longer > going to > be used after the upgrade. The upgrade needs to somehow know about > this > other routing name and use that when it creates the database column and > populates it with the pre-defined defaults (edge, tr). > > Also, creating a global param doesn't help those with more than 1 CDN. > > On Mon, Aug 14, 2017 at 4:09 PM, Jeremy Mitchell < > mitchell...@gmail.com> > wrote: > > > Adding a temp parameter would work but I worry that someone won't > read the > > upgrade documentation and forget to create this temporary parameter > before > > running the upgrade. > > > > Here's another option. > > > > Create 2 global TO parameters (http.routing.name and > dns.routing.name > > <http://http.routing.name/>) that default to tr and edge > respectively and > > make the ds.routing_name an optional field. > > > > in seeds.sql > > > > insert into parameter (name, config_file, value) values (' > > http.routing.name', > > 'global', 'tr') ON CONFLICT (name, config_file, value) DO NOTHING; > > insert into parameter (name, config_file, value) values (' > dns.routing.name > > ', > > 'global', 'edge') ON CONFLICT (name, config_file, value) DO NOTHING; > > > > in code (warning. ugly pseudo code to follow): > > > > function getRoutingName(ds) { > > return ds.routing_name if not null > > if (ds.type = HTTP) { > > return parameter.http.routing.name > > } else > > return parameter.dns.routing.name > > } > > } > > > > Just my 2 cents. > > > > On Mon, Aug 14, 2017 at 10:55 AM, Dave Neuman <neu...@apache.org> > wrote: > > > > > Good info Rawlin. > > > My vote would be for a parameter to be used during the upgrade. > We can > > set > > > a param called `upgrade_routing_name` or something similiar so > that it is > > > obvious that it is a param used for upgrade only. We should also > > document > > > that A) the param needs to be set before upgrade and B) TR will now > > ignore > > > the setting in the config file. Ideally we would remove the param > from > > the > > > default config and the need for the param in the code. > > > > > > On Wed, Aug 9, 2017 at 4:28 PM, Peters, Rawlin < > > rawlin_pet...@comcast.com> > > > wrote: > > > > > > > Hey all, > > > > > > > > I’ve dug through this a bit more, and defaulting a new > > > > DeliveryService.routing_name > > > > column to ‘tr’ for HTTP delivery services presents an upgrade > issue if > > a > > > > CDN has > > > > chosen to use a custom “http.routing.name” parameter for the > Traffic > > > > Routers > > > > in that CDN (by editing the http.properties files of the Traffic > > > Routers). > > > > > > > > For instance, if “http.routing.name” has been set to “ccr”, the > new > > > > routing name > > > > “tr” will break all of the clients using the old “ccr” delivery > service > > > > URL. > > > > > > > > Basically we need to provide a one-time upgrade step to allow > CDNs > > using > > > a > > > > custom > > > > “http.routing.name” to default the new routing_name column to > that > > value > > > > for > > > > existing HTTP delivery services. What would be the best way to > do this? > > > > Some options > > > > might be: > > > > 1. Add a profile parameter to the TR_PROFILE for that CDN. On > upgrade, > > > > read that > > > > parameter and use it to update the routing_name for existing > HTTP > > > > delivery services. > > > > After upgrade, you can safely remove the profile parameter. > > > > 2. Let the upgrade automatically default the routing_name to > ‘tr’ or > > > > ‘edge’. After > > > > upgrading, manually update each HTTP delivery service to use > the > > > > current > > > > “http.routing.name” in use (we could provide an API > endpoint to > > > “bulk > > > > update” the > > > > routing names for all HTTP delivery services in a CDN). > > > > > > > > Note this is not an exhaustive list, this is a just a couple > options > > that > > > > have come up in > > > > discussion so far. Feel free to add any more ideas to this list. > > > > > > > > After the upgrade has been completed, the “http.routing.name” > > parameter > > > > in the > > > > Traffic Router’s “http.properties” file will be ignored (same > with the > > “ > > > > dns.routing.name” > > > > parameter in “dns.properties” which I’m not sure can even be > changed > > > > safely today). > > > > > > > > Thoughts? > > > > > > > > --Rawlin > > > > > > > > On 8/4/17, 10:19 AM, "Peters, Rawlin" <rawlin_pet...@comcast.com > > > > wrote: > > > > > > > > @Dave @JvD > > > > > > > > Thanks for the feedback. I think I can get on board with > defaulting > > > > the DS columns to ‘edge’ and ‘tr’. I was thinking the CDN > columns might > > > be > > > > useful if the user just wants to set it CDN-wide and not > individually > > on > > > > each DS, but I guess if we default it as part of the upgrade > migration, > > > we > > > > should also provide an API endpoint to set the routing names on > all > > DSes > > > in > > > > a CDN to a single value, thus still providing a “per-CDN” option. > > Would a > > > > “bulk” update also be useful, in case a user wants to update a > handful > > of > > > > DSes to the same routing names at once? > > > > > > > > @JvD Re: TR_PROFILE vs. DS_PROFILE > > > > The default would come from a TR_PROFILE linked to the CDN, > and the > > > > override would come from a DS_PROFILE linked to that specific > DS. I > > > looked > > > > into those options to cover all my bases, but I think adding > columns to > > > at > > > > least the DS table and not touching profiles at all is the better > > option. > > > > > > > > -Rawlin > > > > > > > > On 8/4/17, 8:04 AM, "Jan van Doorn" <j...@knutsel.com> wrote: > > > > > > > > Agree with Dave on > > > > > > > > [*DN] we should default the database column to "edge" > for DNS > > and > > > > "tr" for* > > > > *http. Then we don't have to do the null check.* > > > > > > > > If we do that, we can make the columns mandatory, and it > makes > > > > sense > > > > they're not in the DS_PROFILE. Also makes it so we don't > have > > to > > > > have a CDN > > > > wide setting. (and Rawlin, I think you mean to say > DS_PROFILE > > > > rather than > > > > TR_PROFILE type to add the param to if we chose to do > that?? Or > > > > was it the > > > > default that goes into TR_PROFILE and the override into > > > > DS_PROFILE?). > > > > In any case - if we make the columns NOT NULL and > default them > > to > > > > "tr" and > > > > "edge", I'm +1 on columns in the deliveryservice table. > > > > > > > > > > > > > > > > Cheers, > > > > JvD > > > > > > > > On Fri, Aug 4, 2017 at 7:12 AM Eric Friedrich (efriedri) > < > > > > efrie...@cisco.com> > > > > wrote: > > > > > > > > > Hey Rawlin- > > > > > Zhilin has also been working on a very similar > feature > > which > > > > was > > > > > proposed on this mailer last month: > > > > > https://lists.apache.org/thread.html/ > > > > 51d7ed1ae65a3697c39edd00236e6f3897da37ef5b24ac452a17cabb@% > > > > 3Cdev.trafficcontrol.apache.org%3E > > > > > < > > > > > https://lists.apache.org/thread.html/ > > > > 51d7ed1ae65a3697c39edd00236e6f3897da37ef5b24ac452a17cabb@ > > > > > <dev.trafficcontrol.apache.org>> > > > > > > > > > > Can you please work him to ensure we don’t duplicate > work and > > > > that if both > > > > > solutions are needed they will work together? > > > > > > > > > > On Aug 3, 2017, at 3:57 PM, Peters, Rawlin < > > > > rawlin_pet...@comcast.com > > > > > <mailto:rawlin_pet...@comcast.com>> wrote: > > > > > > > > > > Sorry, Outlook converted my numbered list poorly. I’ve > > > corrected > > > > the > > > > > numbering (items 1-3) below. > > > > > > > > > > On 8/3/17, 1:52 PM, "Peters, Rawlin" < > > > rawlin_pet...@comcast.com< > > > > mailto: > > > > > rawlin_pet...@comcast.com>> wrote: > > > > > > > > > > Hello All, > > > > > > > > > > I’ve been working on adding support for configurable > > per-CDN > > > > and > > > > > per-DeliveryService routing names [1] (what are > currently > > > > > hardcoded/defaulted to ‘edge’ and ‘tr’ for DNS and HTTP > > > Delivery > > > > Services, > > > > > respectively), and I have a few things to propose. > > > > > > > > > > > > > > > 1. Add a column to the CDN table for the DNS and > HTTP > > > > routing names. > > > > > > > > > > > > > > > > > > > > I’ve currently been working off the assumption that > > per-CDN > > > > routing > > > > > names would be configurable by adding ‘ > http.routing.name’ > > and > > > ‘ > > > > > dns.routing.name’ parameters to a profile of type > TR_PROFILE > > > > using the > > > > > ‘CRConfig.json’ config file. To me this seems like bad > UX > > > > because the user > > > > > has to click through multiple steps and fill in > multiple > > fields > > > > in the UI > > > > > just to change the CDN’s routing names. It also > requires > > > joining > > > > a few > > > > > different tables in the DB just to find the parameters > > per-CDN. > > > > For that > > > > > reason, I think it would be better if > ‘dns_routing_name’ and > > > > > ‘http_routing_name’ were added as columns of the ‘cdn’ > table, > > > > and changing > > > > > them via the UI would follow the same process as > choosing the > > > > CDN’s domain > > > > > name. Because the routing names would be the CDN-wide > > defaults, > > > > the ‘Edit > > > > > CDN’ window feels like the most natural place to put > it. > > > > > > > > > > > > > > > 2. Values for per-DeliveryService routing names > could > > > live > > > > in one of > > > > > a couple different areas: > > > > > * New columns in the delivery_service table > > > > > * Parameters in a DS Profile > > > > > > > > > > As the developer, my vote would be for Option A > because it > > > > seems like > > > > > it would lead to cleaner code in Traffic Ops because > the > > > routing > > > > names > > > > > would be readily-available when handling a > DeliveryService. > > You > > > > wouldn’t > > > > > have to also fetch its profile then dig through it to > find > > the > > > > routing > > > > > names. A downside could be that adding columns to an > > > > already-overcrowded > > > > > table isn’t ideal. > > > > > > > > > > Option B is less appealing to me but might have some > > > > advantages such as > > > > > keeping the number of columns down in the > DeliveryService > > > table. > > > > However, > > > > > DS Profiles currently seem to be geared more towards > the > > > > Multi-site Origin > > > > > feature in generating specific ATS configuration > > > (parent.config) > > > > and less > > > > > towards a “junk drawer for optional config”. As the > routing > > > > names would > > > > > affect the entire DS and multiple config files, it > doesn’t > > seem > > > > right to > > > > > have it as a profile parameter using ‘CRConfig.json’ > as the > > > > config file. I > > > > > wasn’t around when DS Profiles were introduced, so if > you are > > > > more familiar > > > > > with their purpose/origin and think this is a good fit > for > > > them, > > > > I’d like > > > > > to hear your advice. > > > > > > > > > > > > > > > 3. If per-DeliveryService routing names are not > set > > > > explicitly for a > > > > > DS (i.e. the column is null), then the DS will use the > > per-CDN > > > > routing > > > > > names as a default. If the per-CDN routing names are > unset, > > > they > > > > will > > > > > default to the current values of ‘edge’ and ‘tr’. So > the > > lookup > > > > hierarchy > > > > > would be DS.routing_names -> CDN.routing_names -> > default > > > > ‘edge/tr’. > > > > > > > > > > I’d like to know what you think of these proposals, > and > > any > > > > > advice/feedback is welcome. > > > > > > > > > > Best regards, > > > > > Rawlin > > > > > > > > > > [1] https://issues.apache.org/jira/browse/TC-287 > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >