Yes, API v2.0 would be all Go, and in TC 5.0 we would drop support for
API 1.x and remove the Perl implementation.

- Rawlin

On Tue, Dec 3, 2019 at 11:04 AM Schmidt, Andrew (Contractor)
<[email protected]> wrote:
>
> +1 Makes sense to me. Is 2.0 the target for dropping the PERL implementation?
>
> On 12/2/19, 12:19 PM, "Gray, Jonathan" <[email protected]> wrote:
>
>     +1
>
>     I think the only point of contention was if the API v2.0 would be in ATC 
> v4.0 or not.  Either way is fine with me, and more time to know this is 
> coming makes sense.
>
>     Jonathan G
>
>
>     On 12/2/19, 11:32 AM, "Rawlin Peters" <[email protected]> wrote:
>
>         Hey all,
>
>         A bunch of us got together and discussed this issue offline, and we
>         got consensus to go with Option 1 - Graduate current API from 1.x to
>         2.x - allowing us to leave behind routes in 1.x that are
>         dangerous/deprecated. Deprecated endpoints will not be rewritten from
>         Perl to Go.
>
>         So, we will graduate the latest minor version of existing 1.x Go
>         endpoints to 2.0. For example, today we have
>         /api/1.2/deliveryservices, /api/1.3/deliveryservices, and
>         /api/1.4/deliveryservices. We will take the existing handler for
>         /api/1.4/deliveryservices and promote it to /api/2.0/deliveryservices.
>         We will follow this example for other 1.x Go endpoints with multiple
>         minor versions as well.
>
>         API endpoints that are deemed broken, dangerous, or deprecated will
>         not be promoted to API 2.0. This will likely include the ~7 endpoints
>         that I've mentioned in this thread already, but we haven't yet
>         compiled the full list of endpoints that won't be promoted to 2.0. We
>         will come up with that list (along with its criteria) soon and bring
>         that list to the mailing list for everyone to look over and agree
>         upon. Deprecated endpoints will be updated to return deprecation
>         alerts where applicable.
>
>         This API graduation will likely miss the boat for 4.0 but will
>         hopefully land in 4.1 or 4.2 depending on how long it takes. So this
>         would be the tentative timetable:
>
>         TC 4.0:
>         - API 1.x supported, some deprecation notices
>
>         TC 4.1:
>         - API 1.x still supported, deprecation notices added to endpoints not
>         graduated to 2.0
>         - API 2.0 supported, consisting of 1.x endpoints that were graduated
>         - starting with this release, you need to start migrating external
>         clients off of 1.x over to 2.0
>
>         TC 4.2:
>         - internal clients (e.g. TM, TR, etc) will be migrated off API 1.x
>         over to 2.0. Doing this step after 4.1 adds confidence that 1.x is
>         still supported alongside 2.0 in order to provide a smooth migration
>         period for API clients.
>
>         TC 5.0:
>         - API 1.x no longer supported, only API 2.x is supported
>
>         Those who took part in that offline discussion, please keep me honest
>         here with a +1 if we did in fact come to a rough consensus on this
>         option. If you weren't part of that offline discussion, feel free to
>         voice your vote on this issue as well (I believe a bunch of people
>         were already +1 on this option a few weeks ago).
>
>         - Rawlin
>
>         On Tue, Nov 19, 2019 at 12:23 PM Robert O Butts <[email protected]> 
> wrote:
>         >
>         > > - /riak/stats
>         >
>         > Looking at the Perl, this looks easy to rewrite. It's just proxying 
> a
>         > request to Riak.
>         >
>         > +1 on rewriting this, for API stability, even if we don't "value" 
> the
>         > endpoint as a project.
>         >
>         > >- /cachegroup_fallbacks
>         >
>         > Likewise +1 on rewriting. Not as trivial as /riak/stats, but it 
> also looks
>         > easy to me, looks like a standard CRUD endpoint. +1 on leaving a
>         > "deprecated, please prefer X" message in, and +1 in removing in the 
> big API
>         > rewrite/refactor/2.0.
>         >
>         > > - /capabilities (all methods except for GET) -- capabilities are
>         > built-in, should not be changed at runtime
>         > > - /api_capabilities (all methods except for GET) -- same reasons 
> as
>         > /capabilities
>         >
>         > I actually don't agree with this - because they're useful to 
> plugins. IMO
>         > it should be possible to add and modify Capabilities and API 
> Capabilities,
>         > because they can be used by plugins which add new endpoints, to 
> control
>         > access to them. If there's disagreement there, I'd vote we take 
> that to a
>         > separate thread.
>         >
>         > But in terms of the endpoints themselves, the Perl also looks easy 
> to
>         > rewrite, looks like standard CRUD. -1 on deprecating or removing, 
> +1 on
>         > rewriting.
>         >
>         > > - /cdns/{name}/configs/routing -- this was a half-baked attempt at
>         > redoing CrConfig.json -- cannot possibly be of use to anyone in its 
> current
>         > state
>         >
>         > Ugh. I agree with the sentiment; and this one looks slightly less 
> trivial.
>         > But I personally don't see it as an unreasonable amount of work. 
> For the
>         > sake of API stability, I'm personally willing to volunteer to 
> rewrite this
>         > one, including API tests to make fixing easy if the schema changes 
> (which
>         > it appears to have in master). And hopefully it can just exist 
> until the
>         > fabled API Rewrite. Is that acceptable?
>         >
>         > > - the ATS config generation endpoints -- Rob actually proposed to 
> remove
>         > these from 1.x due to danger of being out of sync w/ cache-side 
> config
>         > generator
>         >
>         > I'm personally on the fence about this one. Like I said in that 
> thread, I'm
>         > the last one to want to break users, and I don't take this lightly. 
> If,
>         > after I made the case for it, I'm the only one, I might be inclined 
> to
>         > retract my proposal, and just continue to maintain them. Maybe some 
> more
>         > API tests would help with that. I think I'm the primary dev on the 
> ATS
>         > config gen at this point anyway.
>         >
>         > > - ATS Config Files Stuff Aren't these all already in Go anyway? 
> Whether
>         > or not they should be removed from the API aside, I don't think 
> anything
>         > actually needs to hit Perl anymore.
>         >
>         > Correct.
>         >
>         > > - /hwinfo/dtdata
>         >
>         > I think the 'render' call here is just rendering the JSON. But, the
>         > endpoint itself is just hanging and not returning for me, I'm not 
> sure why.
>         > I'd like to volunteer to look into this endpoint as well. I think 
> you might
>         > be right, this one might be unreasonable to rewrite. But if it is
>         > reasonable, I'd like to just do it. I'd like to at least look into 
> it.
>         >
>         >
>         > On Tue, Nov 19, 2019 at 12:05 PM ocket 8888 <[email protected]> 
> wrote:
>         >
>         > > I'm generally +1 for option 2
>         > >
>         > > regarding those specific endpoints:
>         > >
>         > > - /riak/stats if this is easy and doesn't expose anything 
> dangerous, we
>         > > should do it IMO.
>         > > - /cachegroup_fallbacks should be pretty trivial, so I still say 
> do it
>         > > - /capabilities since these aren't actually used for anything, I 
> think it's
>         > > pretty safe (and easy) to rewrite. Plus there's already a PR open 
> for
>         > > exactly that
>         > > - /api_capabilities dropping this one could be problematic, just 
> because
>         > > people may depend on it to tell them what endpoints exist. To be 
> clear, I
>         > > think it ought to be deprecated, but unfortunately I just don't 
> think it's
>         > > terribly unlikely that this is built into scripts and tools. The 
> actual
>         > > code for the rewrite should be easy too, although maintaining it 
> is a pain.
>         > >
>         > > - ATS Config Files Stuff Aren't these all already in Go anyway? 
> Whether or
>         > > not they should be removed from the API aside, I don't think 
> anything
>         > > actually needs to hit Perl anymore.
>         > >
>         > > - /cdn/{{name}}/configs/routing CRConfigs are large and complex, 
> so if this
>         > > never worked anyway maybe we should just add a Go handler for it 
> that
>         > > returns a '410 Gone' response (or '501 Not Implemented' is the 
> other one
>         > > I've heard suggested) and leave the actual logic behind in the 
> Perl
>         > > - /hwinfo/dtdata if this calls into Mojolicious rendering, 
> returns a
>         > > non-json response, and/or contains information that in either 
> content or
>         > > encoding is meaningless to any sane client then it should also 
> return a
>         > > 410/501 and get left behind in Perl.
>         > >
>         > > On Tue, Nov 19, 2019 at 11:08 AM Rawlin Peters 
> <[email protected]> wrote:
>         > >
>         > > > While I appreciate and mostly agree with your essay on the 
> importance
>         > > > of not breaking users (or rather, breaking them in predictable 
> ways),
>         > > > I for one would really like to meet at some middle ground with 
> option
>         > > > 2. I'm not asking to remove 50 high-usage endpoints from 1.x. 
> IIRC
>         > > > I've only specifically proposed "leaving behind" a few specific 
> Perl
>         > > > endpoints that I believe serve no purpose, have no valid reason 
> to be
>         > > > used, and/or are dangerous to the system:
>         > > >
>         > > > - /riak/stats -- informational, was used for debugging the 
> initial
>         > > > Riak integration. This one might be pretty easy to rewrite 
> since it
>         > > > just calls a corresponding riak API and returns the result via 
> TO, so
>         > > > I could be on board with rewriting it if necessary.
>         > > > - /cachegroup_fallbacks -- these endpoints were released in 3.0 
> before
>         > > > we managed to augment the existing /cachegroups API to handle
>         > > > fallbacks, so I could get on board with rewriting these if we 
> really
>         > > > think it's important.
>         > > > - /capabilities (all methods except for GET) -- capabilities are
>         > > > built-in, should not be changed at runtime
>         > > > - /api_capabilities (all methods except for GET) -- same 
> reasons as
>         > > > /capabilities
>         > > > - /cdns/{name}/configs/routing -- this was a half-baked attempt 
> at
>         > > > redoing CrConfig.json -- cannot possibly be of use to anyone in 
> its
>         > > > current state
>         > > > - the ATS config generation endpoints -- Rob actually proposed 
> to
>         > > > remove these from 1.x due to danger of being out of sync w/ 
> cache-side
>         > > > config generator
>         > > > - /hwinfo/dtdata -- AFAIK the "dtdata" endpoints were only
>         > > > used/required by the old Perl Mojolicious UI, no valid reason 
> to be
>         > > > using this as an external API client. In fact, I'm not even 
> sure _how_
>         > > > this endpoint can be used outside of the Mojolicious 
> framework/UI. It
>         > > > calls the Mojolicious `render` function, which usually means 
> rendering
>         > > > an embedded Perl HTML template given some data. This is one I 
> would
>         > > > consider completely unreasonable to rewrite to Go.
>         > > >
>         > > > Can we get on board with leaving at least these 1.x endpoints 
> behind
>         > > > in the Perl? Doing a cursory skim over the remaining 1.x 
> endpoints to
>         > > > rewrite, it _seems_ like everything else would fall into the 
> "simpler
>         > > > to just rewrite rather than gain consensus to remove" category.
>         > > >
>         > > > - Rawlin
>         > > >
>         > > > On Tue, Nov 19, 2019 at 9:19 AM Robert O Butts 
> <[email protected]> wrote:
>         > > > >
>         > > > > >Option 1 - Graduate current API from 1.x to 2.x - allowing 
> us to leave
>         > > > > behind routes in 1.x that are dangerous or deprecated
>         > > > > >Option 2 - Rewrite all endpoints from Perl to Golang in 
> current
>         > > version
>         > > > as
>         > > > > we are doing now.
>         > > > >
>         > > > > +1 on either Option 1 or Option 2, without a strong 
> preference. Option
>         > > 1
>         > > > > has advantages of letting us also safely remove the Cache 
> Config
>         > > > endpoints
>         > > > > and implement Layered Profiles. But Option 2 also has the 
> advantage of
>         > > > not
>         > > > > requiring users to upgrade.
>         > > > >
>         > > > > > Option 3 - Only rewrite endpoints from Perl to Golang in 
> current
>         > > > version
>         > > > > that we agree are not dangerous or should deprecate
>         > > > >
>         > > > > -1. As before, it breaks users unpredictably.
>         > > > >
>         > > > > >It will literally outright break clients (*all* of them, not 
> just
>         > > > *some*)
>         > > > >
>         > > > > This is technically correct: technically, new versions 
> 'break' all
>         > > users.
>         > > > > The difference is, it does it in a predictable, safe way that 
> users can
>         > > > > handle, inspect, and safely upgrade.
>         > > > >
>         > > > > >Can someone please explain to me why (A) artificially 
> graduating the
>         > > > > current 1.x API to 2.x, and removing the deprecated endpoints 
> from 1.x,
>         > > > is
>         > > > > better for API clients overall than (B) just removing 
> deprecated
>         > > > endpoints
>         > > > > from 1.x? Existing 1.x clients would gain absolutely nothing 
> from being
>         > > > > forced to update to 2.x like this.
>         > > > >
>         > > > > >for zero gain in value
>         > > > >
>         > > > > Users would gain something. There is a very specific gain.
>         > > > >
>         > > > > The gain is that the breakage is predictable. People 
> frequently upgrade
>         > > > > minor versions automatically, either running commands without 
> thinking,
>         > > > or
>         > > > > even automating the entire process.
>         > > > >
>         > > > > For TC, this applies to both CDN operators, and their 
> end-users.
>         > > > >
>         > > > > When the minor versions contain breaking changes, that 
> automatic
>         > > upgrade
>         > > > > then breaks. In this case, any scripts or tools they have 
> using the
>         > > > removed
>         > > > > endpoints will break. If those scripts are important, this 
> could bring
>         > > > down
>         > > > > their CDN, or break their Delivery Service, or otherwise 
> cause an
>         > > outage.
>         > > > >
>         > > > > Contrawise, users expect breaking changes in Major versions, 
> and don't
>         > > > > typically automatically upgrade them. Rather, they'll 
> manually inspect
>         > > > the
>         > > > > update, do testing, and check the changelog for breaking 
> changes.
>         > > > >
>         > > > > It's not a technical thing, it's a human thing. Humans 
> automatically
>         > > > > upgrade minor versions, and write scripts to do so, and 
> dependency
>         > > files
>         > > > to
>         > > > > allow it, because the software industry taught people that 
> minor
>         > > versions
>         > > > > shouldn't break anything.
>         > > > >
>         > > > > If we start breaking minor versions, initially users will 
> experience
>         > > > > breakage. Not all users, and not all catastrophic. But some 
> users will
>         > > > > experience catastrophic outages. And it will be our fault as 
> a project.
>         > > > And
>         > > > > after enough times, they'll fork TC, or find another product, 
> or write
>         > > > > their own; and stop participating in the community, or never 
> start.
>         > > > >
>         > > > > Then, once they've learned that we can't be trusted not to 
> break
>         > > things,
>         > > > > they'll experience the 2nd problem: where nothing can be 
> safely
>         > > upgraded,
>         > > > > and the smallest change requires long and expensive testing 
> to verify a
>         > > > > single minor version or even patch upgrade, and still risk 
> missing
>         > > > > something and bringing their CDN down. To be honest, we're 
> pretty much
>         > > > > already here. It already costs our dev and ops teams 
> unbelievable
>         > > amounts
>         > > > > of time and person-hours of testing for every minor upgrade. 
> That time
>         > > > far
>         > > > > exceeds the development time to just rewrite the small 
> endpoints we
>         > > don't
>         > > > > like anymore (and tangentially, also the time to write the 
> Integration
>         > > > and
>         > > > > E2E tests TC desperately needs).
>         > > > >
>         > > > > ATC has so much potential. There aren't many OSS CDNs out 
> there, and
>         > > > > there's certainly the demand. We have the potential to become 
> a huge
>         > > > > project, which for us existing users, translates into 
> potentially an
>         > > > > enormous amount of free development. But we'll never get 
> there if we
>         > > keep
>         > > > > breaking things.
>         > > > >
>         > > > > And for my particular organization (Comcast), we have a hard 
> enough
>         > > time
>         > > > > upgrading. Our upgrades, especially Traffic Ops, are 
> extremely painful,
>         > > > and
>         > > > > require enormous amounts of manual testing. Even then, we 
> frequently
>         > > have
>         > > > > issues that require rollback, sometimes even an outage; even 
> after
>         > > those
>         > > > > unbelievably amounts of developer and operator time testing. 
> We
>         > > > desperately
>         > > > > need a system that is safer and easier to upgrade. Breaking 
> changes are
>         > > > > always going to require more testing; but we can at least 
> make minor
>         > > > > versions safe to upgrade.
>         > > > >
>         > > > > > I know I am changing my initial stance but I am +1 on 
> rewriting all
>         > > the
>         > > > > Perl endpoints to Golang and not breaking the API contract we 
> have in
>         > > > > place. Most of the API routes to rewrite are rather simple to 
> port and
>         > > I
>         > > > > think would be faster than getting consensus on actually 
> deprecating it
>         > > > > from the mailing list.
>         > > > >
>         > > > > I'm inclined to agree with this. The things I've seen marked
>         > > "deprecated"
>         > > > > seem to mostly be small, and look like they'd be pretty easy 
> to
>         > > rewrite.
>         > > > > But I haven't seen the whole list. Is there a list somewhere, 
> so the
>         > > > > community can see it to better decide?
>         > > > >
>         > > > >
>         > > > > On Tue, Nov 19, 2019 at 7:24 AM Hoppal, Michael <
>         > > > [email protected]>
>         > > > > wrote:
>         > > > >
>         > > > > > I would love to drive this to some type of consensus on 
> rewrite
>         > > > strategy
>         > > > > > as we have a good amount of resources (and growing) working 
> on the
>         > > > rewrite
>         > > > > > and I want to keep that momentum.
>         > > > > >
>         > > > > > Sounds like there is three options from the email thread 
> (please add
>         > > > any I
>         > > > > > missed)
>         > > > > >
>         > > > > > Option 1 - Graduate current API from 1.x to 2.x - allowing 
> us to
>         > > leave
>         > > > > > behind routes in 1.x that are dangerous or deprecated
>         > > > > > Option 2 - Rewrite all endpoints from Perl to Golang in 
> current
>         > > > version as
>         > > > > > we are doing now.
>         > > > > > Option 3 - Only rewrite endpoints from Perl to Golang in 
> current
>         > > > version
>         > > > > > that we agree are not dangerous or should deprecate
>         > > > > >
>         > > > > > I am +1 for option 2 (which I know is different from my 
> original
>         > > > stance).
>         > > > > >
>         > > > > > Which direction would others like to go?
>         > > > > >
>         > > > > > Thanks,
>         > > > > >
>         > > > > > Michael
>         > > > > >
>         > > > > >
>         > > > > > I know I am changing my initial stance but I am +1 on 
> rewriting all
>         > > the
>         > > > > > Perl endpoints to Golang and not breaking the API contract 
> we have in
>         > > > > > place. Most of the API routes to rewrite are rather simple 
> to port
>         > > and
>         > > > I
>         > > > > > think would be faster than getting consensus on actually 
> deprecating
>         > > it
>         > > > > > from the mailing list.
>         > > > > >
>         > > > > > On 11/16/19, 3:31 PM, "Rawlin Peters" <[email protected]> 
> wrote:
>         > > > > >
>         > > > > >     > Moving to 2.x means that it's my fault as a consumer 
> of the API
>         > > > if I
>         > > > > > was still using the deprecated endpoint (and that change 
> should be
>         > > > part of
>         > > > > > a larger upgrade plan).  Simply removing the deprecated 
> routes,
>         > > > > > retroactively, means I can't rely on having a transition 
> period to
>         > > get
>         > > > to
>         > > > > > 2.0 outside of a large completely down upgrade window.
>         > > > > >
>         > > > > >     There would be a transition period either way. 
> Endpoints would be
>         > > > > >     deprecated in ATC 4.0 and removed in 5.0. The release 
> notes for
>         > > 4.0
>         > > > > >     would clearly list out the deprecated endpoints. If 
> they have
>         > > > > >     replacements, there would be instructions on how to 
> transition to
>         > > > the
>         > > > > >     replacement. Deprecated endpoints would return alerts. 
> After
>         > > > upgrading
>         > > > > >     to 4.0, operators should be well aware that certain 
> endpoints are
>         > > > > >     being removed in 5.0, and it's on them to start using 
> new
>         > > > endpoints,
>         > > > > >     change workflows, etc.
>         > > > > >
>         > > > > >     By forcing operators to upgrade all of their clients to 
> start
>         > > using
>         > > > > >     API 2.x, it just adds to their burden of upgrading when 
> that time
>         > > > > >     comes. Rather than surgically fixing the clients of the 
> 2% of
>         > > > > >     deprecated API endpoints before upgrading to ATC 5.0, 
> operators
>         > > > would
>         > > > > >     have to fix every single client they have to use API 
> 2.x before
>         > > > > >     upgrading to 5.0. Is that exercise really worth it? 
> Most people
>         > > > would
>         > > > > >     probably be blissfully unaware that the "POST
>         > > > /api/1.1/capabilities"
>         > > > > >     endpoint disappeared (among other deprecated 
> endpoints). Less
>         > > > footguns
>         > > > > >     in the system, and they didn't even have to update 
> their clients.
>         > > > > >
>         > > > > >     Anyways, circling back to Michael's original question, 
> it sounds
>         > > > like
>         > > > > >     either option we choose, we at least have consensus on 
> this
>         > > > > >     deprecation strategy:
>         > > > > >     - The route IS NOT rewritten from Perl to Golang and a
>         > > deprecation
>         > > > > >     notice is added to the alert response in the Perl 
> handler
>         > > > > >
>         > > > > >     If we're content to force all API clients to update 
> their clients
>         > > > to
>         > > > > >     2.x for zero gain in value, at least we won't be 
> wasting work by
>         > > > > >     rewriting deprecated Perl endpoints to Go.
>         > > > > >
>         > > > > >     - Rawlin
>         > > > > >
>         > > > > >     On Fri, Nov 15, 2019 at 7:06 PM Gray, Jonathan
>         > > > > >     <[email protected]> wrote:
>         > > > > >     >
>         > > > > >     > Moving to 2.x means that it's my fault as a consumer 
> of the API
>         > > > if I
>         > > > > > was still using the deprecated endpoint (and that change 
> should be
>         > > > part of
>         > > > > > a larger upgrade plan).  Simply removing the deprecated 
> routes,
>         > > > > > retroactively, means I can't rely on having a transition 
> period to
>         > > get
>         > > > to
>         > > > > > 2.0 outside of a large completely down upgrade window.  
> Depending on
>         > > > how
>         > > > > > the API is used, even in our own components such as TM, 
> that could
>         > > > prove
>         > > > > > disastrous.  For the older minor revs like 1.1/1.2, I could 
> live with
>         > > > > > dropping those as part of a major project release 
> (including upgrade
>         > > > > > instructions outlining what releases you must be on 
> beforehand).
>         > > > Currently
>         > > > > > 1.3 I view as stable enough to code to or use a native 
> client library
>         > > > from,
>         > > > > > and 1.4 is my risk/overhead to take for new stuff as it's 
> still
>         > > > evolving
>         > > > > > and improving.  Going to 1.5 or 2.0 moves that forward.  
> The path of
>         > > > least
>         > > > > > surprise for humans is to expect big shifts on those major 
> revs.
>         > > > Removal
>         > > > > > falls under that umbrella and gets as a consumer not to 
> strictly
>         > > focus
>         > > > on
>         > > > > > endpoint->endpoint moves, but rather workflow shifts and 
> maybe now I
>         > > > have
>         > > > > > to use the API a different way than before.  I believe 
> getting this
>         > > > right
>         > > > > > is something that would greatly help us understand does X 
> component
>         > > at
>         > > > > > version 1 work with Y component at version 2, because now 
> you're
>         > > > asking do
>         > > > > > components X and Y both speak protocol A.  With major 
> releases we can
>         > > > work
>         > > > > > through that each time, but it's error prone and requires 
> experts in
>         > > > all
>         > > > > > products to agree upon.  If you do nothing but consume major
>         > > releases,
>         > > > and
>         > > > > > then conduct your own impact evaluation having read the 
> upgrade
>         > > > > > instructions thoroughly, maybe you'd be able to smoothly 
> transition.
>         > > > > >     >
>         > > > > >     > Jonathan G
>         > > > > >     >
>         > > > > >     >
>         > > > > >     > On 11/15/19, 5:24 PM, "Rawlin Peters" 
> <[email protected]>
>         > > wrote:
>         > > > > >     >
>         > > > > >     >     Can someone please explain to me why (A) 
> artificially
>         > > > graduating
>         > > > > > the
>         > > > > >     >     current 1.x API to 2.x, and removing the 
> deprecated
>         > > endpoints
>         > > > > > from
>         > > > > >     >     1.x, is better for API clients overall than (B) 
> just
>         > > removing
>         > > > > >     >     deprecated endpoints from 1.x? Existing 1.x 
> clients would
>         > > > gain
>         > > > > >     >     absolutely nothing from being forced to update to 
> 2.x like
>         > > > this.
>         > > > > >     >
>         > > > > >     >     The way I see the two choices:
>         > > > > >     >     A) break every single API client out there
>         > > > > >     >     B) break only clients of APIs that we've decided 
> upon as a
>         > > > > > community
>         > > > > >     >     to be deprecated
>         > > > > >     >
>         > > > > >     >     IMO, when we have to break things, we should try 
> break the
>         > > > least
>         > > > > >     >     amount of clients possible. All I'm looking for 
> is a
>         > > valuable
>         > > > > > reason
>         > > > > >     >     to choose option A over option B, that isn't just 
> "because
>         > > > > > SemVer".
>         > > > > >     >
>         > > > > >     >     - Rawlin
>         > > > > >     >
>         > > > > >     >     On Wed, Nov 13, 2019 at 3:24 PM Schmidt, Andrew
>         > > (Contractor)
>         > > > > >     >     <[email protected]> wrote:
>         > > > > >     >     >
>         > > > > >     >     > If we decide to get rid of the API versioning 
> it makes
>         > > > sense
>         > > > > > to me that we would do that on a major version upgrade, 
> probably to
>         > > > the ATC
>         > > > > > version. But I think it would be too early to do it on the 
> 2.0 API
>         > > > version.
>         > > > > > I like this compromise +1. I was wondering why we were 
> stuck on the
>         > > > idea
>         > > > > > that 2.0 had to be an API rewrite. That seems like it’s a 
> long way
>         > > > out. 2.0
>         > > > > > = deprecations and fixes. 3.0 or 5.0 = api rewrite and 
> maybe version
>         > > > > > convergence.
>         > > > > >     >     >
>         > > > > >     >     > On 11/13/19, 11:52 AM, "[email protected]" <
>         > > > > > [email protected]> wrote:
>         > > > > >     >     >
>         > > > > >     >     >     Lemme lead with: making breaking changes on 
> a major
>         > > > > > version boundary
>         > > > > >     >     >     gets +1 from me - no reason the API needs 
> to be fully
>         > > > > > redesigned for
>         > > > > >     >     >     any particular number.
>         > > > > >     >     >
>         > > > > >     >     >     But I just gotta bring this up again: if we 
> want to
>         > > be
>         > > > > > able to
>         > > > > >     >     >     deprecate an endpoint for a major release 
> and remove
>         > > > it in
>         > > > > > the next
>         > > > > >     >     >     without needing to deal with the messiness 
> of API
>         > > > > > versions, we could
>         > > > > >     >     >     always just get rid of API versions. Major 
> ATC
>         > > > revisions
>         > > > > > should be
>         > > > > >     >     >     easier to come by with our new release 
> strategy.
>         > > > > >     >     >
>         > > > > >     >     >     On Wed, 2019-11-13 at 10:23 -0700, Rawlin 
> Peters
>         > > wrote:
>         > > > > >     >     >     > > It is a compromise - it's an 
> inconvenience to
>         > > > users,
>         > > > > > forcing them
>         > > > > >     >     >     > > to fix
>         > > > > >     >     >     > scripts to upgrade. Which isn't good for 
> user
>         > > > experience
>         > > > > > either; but
>         > > > > >     >     >     > it
>         > > > > >     >     >     > doesn't outright break people. It's a 
> compromise
>         > > I'm
>         > > > > > willing to live
>         > > > > >     >     >     > with.
>         > > > > >     >     >     >
>         > > > > >     >     >     > It will literally outright break clients 
> (*all* of
>         > > > them,
>         > > > > > not just
>         > > > > >     >     >     > *some*). We have been down this road 
> before, so
>         > > I'll
>         > > > > > just repeat what
>         > > > > >     >     >     > I said when this exact conversation came 
> up months
>         > > > > > ago[1]:
>         > > > > >     >     >     >
>         > > > > >     >     >     > "So it basically boils down to:
>         > > > > >     >     >     > A) promote Go 1.x routes to 2.x and 
> eventually
>         > > break
>         > > > ALL
>         > > > > > users of the
>         > > > > >     >     >     > 1.x API when the time comes to remove 1.x
>         > > > > >     >     >     > B) deprecate and remove some 1.x Perl 
> routes and
>         > > > > > POSSIBLY break SOME
>         > > > > >     >     >     > users"
>         > > > > >     >     >     >
>         > > > > >     >     >     > Either way we slice and dice it with 
> versioning,
>         > > > > > removing an endpoint
>         > > > > >     >     >     > means that clients of that endpoint will 
> break. By
>         > > > > > graduating only
>         > > > > >     >     >     > the
>         > > > > >     >     >     > "good stuff" from 1.x to 2.x, and removing
>         > > endpoints
>         > > > > > from 1.x, we
>         > > > > >     >     >     > will
>         > > > > >     >     >     > unnecessarily break all 1.x clients when 
> the time
>         > > > comes
>         > > > > > to remove the
>         > > > > >     >     >     > rest of 1.x. Instead, we can choose to 
> break only
>         > > > > > clients of 1.x APIs
>         > > > > >     >     >     > that we already deemed dangerous, 
> unnecessary,
>         > > > useless,
>         > > > > > etc. enough
>         > > > > >     >     >     > to
>         > > > > >     >     >     > deprecate.
>         > > > > >     >     >     >
>         > > > > >     >     >     > Why break 100% of our API clients when we 
> can
>         > > choose
>         > > > to
>         > > > > > break only a
>         > > > > >     >     >     > small number of clients that happen to use
>         > > > > >     >     >     > dangerous/unnecessary/useless APIs? Why 
> would we
>         > > > break
>         > > > > > our API
>         > > > > >     >     >     > clients
>         > > > > >     >     >     > unnecessarily for no added value? There 
> is no sense
>         > > > in
>         > > > > > blindly
>         > > > > >     >     >     > adhering to Semantic Versioning just for 
> the sake
>         > > of
>         > > > > > adhering to
>         > > > > >     >     >     > Semantic Versioning. Instead, use it as a
>         > > guideline,
>         > > > and
>         > > > > > break the
>         > > > > >     >     >     > rules where it makes the most sense to do 
> so.
>         > > > > >     >     >     >
>         > > > > >     >     >     > - Rawlin
>         > > > > >     >     >     >
>         > > > > >     >     >     > [1]
>         > > > > >     >     >     >
>         > > > > >
>         > > >
>         > > 
> https://urldefense.com/v3/__https://lists.apache.org/thread.html/15c6bfcdce0ac00a3a8612a96c3d668a8a5a16c6ca9401de9473d31c@*3Cdev.trafficcontrol.apache.org*3E__;JSU!rx_L75ITgOQ!V_b3E9iEYqNlZus18f-sVuofwuyxapCthg3LdO4NxyMCU39b7mdf4klP5KNR7XZ7d3Uc$
>         > > > > >     >     >     >
>         > > > > >     >     >     > On Wed, Nov 13, 2019 at 9:43 AM Robert O 
> Butts <
>         > > > > > [email protected]>
>         > > > > >     >     >     > wrote:
>         > > > > >     >     >     > > > But if it's really valuable to remove 
> these
>         > > > > > endpoints, maybe it's
>         > > > > >     >     >     > > appropriate to bump the major version 
> and ask
>         > > > > > everybody to update
>         > > > > >     >     >     > > their
>         > > > > >     >     >     > > clients?
>         > > > > >     >     >     > >
>         > > > > >     >     >     > > +1
>         > > > > >     >     >     > >
>         > > > > >     >     >     > > This sounds like the best compromise to 
> me. It
>         > > > > > addresses both sides
>         > > > > >     >     >     > > - it
>         > > > > >     >     >     > > lets us remove endpoints, and it also 
> prevents
>         > > > > > breaking users.
>         > > > > >     >     >     > >
>         > > > > >     >     >     > > It is a compromise - it's an 
> inconvenience to
>         > > > users,
>         > > > > > forcing them
>         > > > > >     >     >     > > to fix
>         > > > > >     >     >     > > scripts to upgrade. Which isn't good 
> for user
>         > > > > > experience either;
>         > > > > >     >     >     > > but it
>         > > > > >     >     >     > > doesn't outright break people. It's a 
> compromise
>         > > > I'm
>         > > > > > willing to
>         > > > > >     >     >     > > live with.
>         > > > > >     >     >     > >
>         > > > > >     >     >     > > This actually lets us do at least 3 
> things:
>         > > > > >     >     >     > > 1. Remove "deprecated" endpoints.
>         > > > > >     >     >     > > 2. Remove the unmaintained 
> dangerously-large
>         > > Cache
>         > > > > > Config
>         > > > > >     >     >     > > endpoints.
>         > > > > >     >     >     > > 3. Lets us do Layered Profiles, 
> changing Servers
>         > > > and
>         > > > > > DSes to have
>         > > > > >     >     >     > > arrays of
>         > > > > >     >     >     > > Profiles instead of a single Profile, 
> without
>         > > hacky
>         > > > > > backward-
>         > > > > >     >     >     > > compatibility
>         > > > > >     >     >     > > attempts.
>         > > > > >     >     >     > >
>         > > > > >     >     >     > > To clarify, `/api/2.0` would be 
> essentially the
>         > > > > > current API, just
>         > > > > >     >     >     > > with the
>         > > > > >     >     >     > > above breaking changes (possibly 
> others) which
>         > > > require
>         > > > > > a SemVer
>         > > > > >     >     >     > > major
>         > > > > >     >     >     > > version increase. And the big API
>         > > rewrite/redesign
>         > > > > > we've been
>         > > > > >     >     >     > > calling "2.0"
>         > > > > >     >     >     > > would become `/api/3.0` or some future 
> version.
>         > > > > >     >     >     > >
>         > > > > >     >     >     > > It's not perfect, but it seems to 
> address the
>         > > most
>         > > > > > concerns on all
>         > > > > >     >     >     > > sides.
>         > > > > >     >     >     > > Thoughts? Objections?
>         > > > > >     >     >     > >
>         > > > > >     >     >     > >
>         > > > > >     >     >     > > On Wed, Nov 13, 2019 at 8:45 AM Chris 
> Lemmons <
>         > > > > > [email protected]>
>         > > > > >     >     >     > > wrote:
>         > > > > >     >     >     > >
>         > > > > >     >     >     > > > For the endpoints, I agree in part 
> and disagree
>         > > > in
>         > > > > > part.
>         > > > > >     >     >     > > >
>         > > > > >     >     >     > > > Agree for these two:
>         > > > > >     >     >     > > > - the endpoints are dangerous and 
> pose a risk
>         > > to
>         > > > the
>         > > > > > overall
>         > > > > >     >     >     > > > Traffic
>         > > > > >     >     >     > > > Control system
>         > > > > >     >     >     > > > - the task of rewriting the endpoints 
> from Perl
>         > > > to
>         > > > > > Go represents
>         > > > > >     >     >     > > > an
>         > > > > >     >     >     > > > unreasonable amount of work for the 
> project
>         > > > > >     >     >     > > >
>         > > > > >     >     >     > > > And I would add:
>         > > > > >     >     >     > > > - the endpoint does not serve its 
> intended
>         > > > purpose
>         > > > > > and cannot
>         > > > > >     >     >     > > > reasonably
>         > > > > >     >     >     > > > be used
>         > > > > >     >     >     > > > - the endpoint has been made unsafe 
> or unusable
>         > > > by
>         > > > > > new features
>         > > > > >     >     >     > > > added to TC
>         > > > > >     >     >     > > >
>         > > > > >     >     >     > > > Disagree for these two:
>         > > > > >     >     >     > > > - the endpoints have been obsoleted 
> by other
>         > > > > > endpoints
>         > > > > >     >     >     > > > - the endpoints don't seem to serve a 
> true
>         > > > purpose
>         > > > > > or don't seem
>         > > > > >     >     >     > > > to be
>         > > > > >     >     >     > > > valuable to the project anymore
>         > > > > >     >     >     > > >
>         > > > > >     >     >     > > > For the most part, obsoleted 
> endpoints can be
>         > > > > > maintained with a
>         > > > > >     >     >     > > > shim
>         > > > > >     >     >     > > > into the new code. If they would 
> require "an
>         > > > > > unreasonable amount
>         > > > > >     >     >     > > > of
>         > > > > >     >     >     > > > work", it might make sense to remove 
> them,
>         > > then.
>         > > > > >     >     >     > > >
>         > > > > >     >     >     > > > Things that don't seem valuable 
> usually fall
>         > > into
>         > > > > > another
>         > > > > >     >     >     > > > category
>         > > > > >     >     >     > > > like "cannot reasonably be used", but 
> if the
>         > > only
>         > > > > > reason for
>         > > > > >     >     >     > > > deprecation is that the feature is 
> going away,
>         > > we
>         > > > > > should really
>         > > > > >     >     >     > > > support it according to our promise.
>         > > > > >     >     >     > > >
>         > > > > >     >     >     > > > But if it's really valuable to remove 
> these
>         > > > > > endpoints, maybe it's
>         > > > > >     >     >     > > > appropriate to bump the major version 
> and ask
>         > > > > > everybody to update
>         > > > > >     >     >     > > > their clients?
>         > > > > >     >     >     > > >
>         > > > > >     >     >     > > > On Tue, Nov 12, 2019 at 5:27 PM 
> Rawlin Peters <
>         > > > > > [email protected]>
>         > > > > >     >     >     > > > wrote:
>         > > > > >     >     >     > > > > The real crux of the issue here is 
> whether or
>         > > > not
>         > > > > > we agree as a
>         > > > > >     >     >     > > > > project that we can move forward 
> with this
>         > > plan
>         > > > > > that I believe
>         > > > > >     >     >     > > > > to be a
>         > > > > >     >     >     > > > > good compromise that meets most 
> concerns but
>         > > > > > "breaks the
>         > > > > >     >     >     > > > > Semantic
>         > > > > >     >     >     > > > > Versioning promise":
>         > > > > >     >     >     > > > > 1) don't rewrite deprecated 
> endpoints from
>         > > > Perl to
>         > > > > > Go
>         > > > > >     >     >     > > > > 2) in the Perl handler, add a 
> deprecation
>         > > > notice
>         > > > > > to the
>         > > > > >     >     >     > > > > "alerts"
>         > > > > >     >     >     > > > > section of the response
>         > > > > >     >     >     > > > > 3) once a deprecated API has been 
> deprecated
>         > > > for
>         > > > > > one major
>         > > > > >     >     >     > > > > release,
>         > > > > >     >     >     > > > > delete it from the API in the 
> subsequent
>         > > major
>         > > > > > release (e.g. if
>         > > > > >     >     >     > > > > deprecation notices are added and 
> released in
>         > > > ATC
>         > > > > > 4.x, we can
>         > > > > >     >     >     > > > > remove
>         > > > > >     >     >     > > > > the deprecated endpoint in ATC 5.x)
>         > > > > >     >     >     > > > >
>         > > > > >     >     >     > > > > Rob, from your latest proposal to 
> remove the
>         > > > ATS
>         > > > > > config API
>         > > > > >     >     >     > > > > endpoints
>         > > > > >     >     >     > > > > from 1.x, I thought we were past 
> this issue
>         > > > > > already and could
>         > > > > >     >     >     > > > > finally
>         > > > > >     >     >     > > > > agree to remove deprecated 
> endpoints from 1.x
>         > > > > > (following steps
>         > > > > >     >     >     > > > > 1-3
>         > > > > >     >     >     > > > > above) without requiring an all-new 
> 2.x API.
>         > > > Are
>         > > > > > we not
>         > > > > >     >     >     > > > > actually past
>         > > > > >     >     >     > > > > that? You came up with valid 
> reasons for
>         > > > applying
>         > > > > > these steps
>         > > > > >     >     >     > > > > to the
>         > > > > >     >     >     > > > > ATS config API endpoints, and I 
> think it's
>         > > > fair to
>         > > > > > say that we
>         > > > > >     >     >     > > > > can
>         > > > > >     >     >     > > > > come up with valid reasons for 
> applying these
>         > > > > > steps to other
>         > > > > >     >     >     > > > > deprecated API endpoints as well.
>         > > > > >     >     >     > > > >
>         > > > > >     >     >     > > > > It seems like the real problem is 
> actually
>         > > > > > agreeing on which
>         > > > > >     >     >     > > > > _specific_ endpoints we should be 
> able to
>         > > > follow
>         > > > > > steps 1-3 for.
>         > > > > >     >     >     > > > > IMO I
>         > > > > >     >     >     > > > > think it should apply to any 1.x 
> endpoints
>         > > > that we
>         > > > > > have valid
>         > > > > >     >     >     > > > > reasons
>         > > > > >     >     >     > > > > for not carrying forward to Go, 
> including but
>         > > > not
>         > > > > > limited to:
>         > > > > >     >     >     > > > > - the endpoints are dangerous and 
> pose a risk
>         > > > to
>         > > > > > the overall
>         > > > > >     >     >     > > > > Traffic
>         > > > > >     >     >     > > > > Control system
>         > > > > >     >     >     > > > > - the endpoints have been obsoleted 
> by other
>         > > > > > endpoints
>         > > > > >     >     >     > > > > - the endpoints don't seem to serve 
> a true
>         > > > purpose
>         > > > > > or don't
>         > > > > >     >     >     > > > > seem to be
>         > > > > >     >     >     > > > > valuable to the project anymore
>         > > > > >     >     >     > > > > - the task of rewriting the 
> endpoints from
>         > > > Perl to
>         > > > > > Go
>         > > > > >     >     >     > > > > represents an
>         > > > > >     >     >     > > > > unreasonable amount of work for the 
> project
>         > > > > >     >     >     > > > >
>         > > > > >     >     >     > > > > Obviously most of these reasons are
>         > > > subjective, so
>         > > > > > we'd have to
>         > > > > >     >     >     > > > > come
>         > > > > >     >     >     > > > > to some level of consensus on 
> deprecating
>         > > > > > particular endpoints
>         > > > > >     >     >     > > > > first,
>         > > > > >     >     >     > > > > but we should be able to follow 
> steps 1-3 for
>         > > > > > whatever
>         > > > > >     >     >     > > > > endpoints we
>         > > > > >     >     >     > > > > decide.
>         > > > > >     >     >     > > > >
>         > > > > >     >     >     > > > > Making breaking changes shouldn't 
> be taken
>         > > > > > lightly, but we need
>         > > > > >     >     >     > > > > a path
>         > > > > >     >     >     > > > > forward that allows some 
> calculated, breaking
>         > > > > > changes where
>         > > > > >     >     >     > > > > necessary.
>         > > > > >     >     >     > > > > Otherwise, we are unnecessarily 
> holding the
>         > > > > > project back.
>         > > > > >     >     >     > > > >
>         > > > > >     >     >     > > > > - Rawlin
>         > > > > >     >     >     > > > >
>         > > > > >     >     >     > > > > On Tue, Nov 12, 2019 at 11:44 AM 
> Jeremy
>         > > > Mitchell <
>         > > > > >     >     >     > > > > [email protected]>
>         > > > > >     >     >     > > > wrote:
>         > > > > >     >     >     > > > > > Yeah, technically a "rewrite" of 
> 1.x means
>         > > > > > shifting the
>         > > > > >     >     >     > > > > > implementation
>         > > > > >     >     >     > > > from
>         > > > > >     >     >     > > > > > Perl to Go for ALL of 1.x. If you 
> leave a
>         > > > subset
>         > > > > > of 1.x in
>         > > > > >     >     >     > > > > > Perl, then
>         > > > > >     >     >     > > > you
>         > > > > >     >     >     > > > > > have to call it a "partial 
> rewrite".
>         > > > > >     >     >     > > > > >
>         > > > > >     >     >     > > > > > So, assuming we want to do a full 
> rewrite
>         > > (no
>         > > > > > more perl for
>         > > > > >     >     >     > > > > > the api
>         > > > > >     >     >     > > > > > whatsoever), I think that means 
> every 1.x
>         > > api
>         > > > > > endpoint (good
>         > > > > >     >     >     > > > > > or bad)
>         > > > > >     >     >     > > > needs
>         > > > > >     >     >     > > > > > to be rewritten to Go so we can 
> remove the
>         > > > > > dependency on
>         > > > > >     >     >     > > > > > perl.
>         > > > > >     >     >     > > > > >
>         > > > > >     >     >     > > > > > However, I still like marking 
> many as
>         > > > > > "deprecated" so we
>         > > > > >     >     >     > > > > > train users
>         > > > > >     >     >     > > > to use
>         > > > > >     >     >     > > > > > "better" endpoints that we 
> envision will
>         > > > exist
>         > > > > > in 2.x and
>         > > > > >     >     >     > > > > > beyond.
>         > > > > >     >     >     > > > > >
>         > > > > >     >     >     > > > > > Jeremy
>         > > > > >     >     >     > > > > >
>         > > > > >     >     >     > > > > > On Tue, Nov 12, 2019 at 11:22 AM 
> Hoppal,
>         > > > Michael
>         > > > > > <
>         > > > > >     >     >     > > > [email protected]>
>         > > > > >     >     >     > > > > > wrote:
>         > > > > >     >     >     > > > > >
>         > > > > >     >     >     > > > > > > We do not have a lot of 
> deprecated routes
>         > > > as
>         > > > > > of now as we
>         > > > > >     >     >     > > > > > > focused on
>         > > > > >     >     >     > > > > > > routes that are more used first.
>         > > > > >     >     >     > > > > > >
>         > > > > >     >     >     > > > > > > I know on a lot of the 
> remaining rewrites
>         > > > > > there has been
>         > > > > >     >     >     > > > > > > discussion
>         > > > > >     >     >     > > > on the
>         > > > > >     >     >     > > > > > > matching Github issues on 
> potential
>         > > > > > deprecation (I cannot
>         > > > > >     >     >     > > > > > > think of
>         > > > > >     >     >     > > > the
>         > > > > >     >     >     > > > > > > exact count but enough to 
> warrant this
>         > > > email
>         > > > > > __)
>         > > > > >     >     >     > > > > > >
>         > > > > >     >     >     > > > > > > It is key to note that I am not 
> arguing
>         > > for
>         > > > > > removal of
>         > > > > >     >     >     > > > > > > endpoints
>         > > > > >     >     >     > > > within
>         > > > > >     >     >     > > > > > > the current API version but if 
> there is
>         > > an
>         > > > > > endpoint we
>         > > > > >     >     >     > > > > > > agree should
>         > > > > >     >     >     > > > be
>         > > > > >     >     >     > > > > > > deprecated going forward to put 
> a message
>         > > > > > within the
>         > > > > >     >     >     > > > > > > response and on
>         > > > > >     >     >     > > > the
>         > > > > >     >     >     > > > > > > docs.
>         > > > > >     >     >     > > > > > >
>         > > > > >     >     >     > > > > > > And thanks for the input sounds 
> like you
>         > > > are
>         > > > > > +1 on
>         > > > > >     >     >     > > > > > > rewriting all
>         > > > > >     >     >     > > > routes to
>         > > > > >     >     >     > > > > > > Golang as Brennan is.
>         > > > > >     >     >     > > > > > >
>         > > > > >     >     >     > > > > > > On 11/12/19, 9:06 AM, "Robert O 
> Butts" <
>         > > > > > [email protected]>
>         > > > > >     >     >     > > > > > > wrote:
>         > > > > >     >     >     > > > > > >
>         > > > > >     >     >     > > > > > >     Whether we rewrite a route 
> in Go is
>         > > an
>         > > > > > implementation
>         > > > > >     >     >     > > > > > > detail. To
>         > > > > >     >     >     > > > the
>         > > > > >     >     >     > > > > > >     interface, to users, it 
> doesn't
>         > > matter
>         > > > > > whether a route
>         > > > > >     >     >     > > > > > > is
>         > > > > >     >     >     > > > rewritten or
>         > > > > >     >     >     > > > > > > not.
>         > > > > >     >     >     > > > > > >
>         > > > > >     >     >     > > > > > >     But our API follows Semantic
>         > > > Versioning,
>         > > > > > in order to
>         > > > > >     >     >     > > > > > > not break
>         > > > > >     >     >     > > > users.
>         > > > > >     >     >     > > > > > > We
>         > > > > >     >     >     > > > > > >     can't just remove endpoints 
> that some
>         > > > of
>         > > > > > us don't use,
>         > > > > >     >     >     > > > > > > and
>         > > > > >     >     >     > > > assume other
>         > > > > >     >     >     > > > > > >     people don't, maybe people 
> who never
>         > > > speak
>         > > > > > up on the
>         > > > > >     >     >     > > > > > > mailing
>         > > > > >     >     >     > > > list.
>         > > > > >     >     >     > > > > > > We'll
>         > > > > >     >     >     > > > > > >     never gain a big userbase 
> if we keep
>         > > > > > breaking users.
>         > > > > >     >     >     > > > > > >
>         > > > > >     >     >     > > > > > >     Per the _project_ SemVer, 
> once we
>         > > have
>         > > > API
>         > > > > > 2.0, we can
>         > > > > >     >     >     > > > > > > deprecate
>         > > > > >     >     >     > > > API
>         > > > > >     >     >     > > > > > > 1.x,
>         > > > > >     >     >     > > > > > >     and in the next major 
> _project_
>         > > > release,
>         > > > > > remove API
>         > > > > >     >     >     > > > > > > 1.x.
>         > > > > >     >     >     > > > Irrespective
>         > > > > >     >     >     > > > > > > of
>         > > > > >     >     >     > > > > > >     Perl or Go.
>         > > > > >     >     >     > > > > > >
>         > > > > >     >     >     > > > > > >     My big concern is, API 2.0 
> is a big
>         > > > > > project. How long
>         > > > > >     >     >     > > > > > > has the
>         > > > > >     >     >     > > > rewrite
>         > > > > >     >     >     > > > > > > to Go
>         > > > > >     >     >     > > > > > >     taken? Do we really believe 
> designing
>         > > > and
>         > > > > > implementing
>         > > > > >     >     >     > > > > > > a
>         > > > > >     >     >     > > > completely
>         > > > > >     >     >     > > > > > > new API
>         > > > > >     >     >     > > > > > >     will be any less time?
>         > > > > >     >     >     > > > > > >
>         > > > > >     >     >     > > > > > >     I don't want killing Perl 
> to have to
>         > > > wait
>         > > > > > on that.
>         > > > > >     >     >     > > > > > >
>         > > > > >     >     >     > > > > > >     I know it feels like a 
> waste to
>         > > rewrite
>         > > > > > routes that you
>         > > > > >     >     >     > > > > > > don't
>         > > > > >     >     >     > > > use, and
>         > > > > >     >     >     > > > > > >     probably few people do. But 
> that's
>         > > the
>         > > > > > cost of a stable
>         > > > > >     >     >     > > > > > > project.
>         > > > > >     >     >     > > > How
>         > > > > >     >     >     > > > > > > many
>         > > > > >     >     >     > > > > > >     "deprecated" routes are 
> there? If it
>         > > > comes
>         > > > > > down to
>         > > > > >     >     >     > > > > > > taking the
>         > > > > >     >     >     > > > > > > development
>         > > > > >     >     >     > > > > > >     time to rewrite them so we 
> can kill
>         > > > Perl
>         > > > > > faster, or
>         > > > > >     >     >     > > > > > > leaving Perl
>         > > > > >     >     >     > > > > > > around, I
>         > > > > >     >     >     > > > > > >     vote we just do the work 
> and kill
>         > > Perl.
>         > > > > >     >     >     > > > > > >
>         > > > > >     >     >     > > > > > >     >If we don't rewrite them, 
> then Perl
>         > > > will
>         > > > > > last until
>         > > > > >     >     >     > > > > > > API 2.0 has
>         > > > > >     >     >     > > > been
>         > > > > >     >     >     > > > > > >     designed, released and then 
> *another
>         > > > full
>         > > > > > major release
>         > > > > >     >     >     > > > > > > cycle*.
>         > > > > >     >     >     > > > That's
>         > > > > >     >     >     > > > > > > way
>         > > > > >     >     >     > > > > > >     too long to have two 
> codebases for
>         > > the
>         > > > > > same component,
>         > > > > >     >     >     > > > > > > IMO,
>         > > > > >     >     >     > > > especially
>         > > > > >     >     >     > > > > > >     since the rewrite is 
> already 50%
>         > > > complete.
>         > > > > >     >     >     > > > > > >
>         > > > > >     >     >     > > > > > >     +1
>         > > > > >     >     >     > > > > > >
>         > > > > >     >     >     > > > > > >
>         > > > > >     >     >     > > > > > >     On Tue, Nov 12, 2019 at 
> 8:54 AM ocket
>         > > > 8888
>         > > > > > <
>         > > > > >     >     >     > > > > > > [email protected]>
>         > > > > >     >     >     > > > > > > wrote:
>         > > > > >     >     >     > > > > > >
>         > > > > >     >     >     > > > > > >     > I vote that by and large 
> we DO
>         > > > rewrite
>         > > > > > them, with
>         > > > > >     >     >     > > > > > > exceptions
>         > > > > >     >     >     > > > for
>         > > > > >     >     >     > > > > > > routes
>         > > > > >     >     >     > > > > > >     > that just plain don't 
> work, even in
>         > > > > > Perl. Those are
>         > > > > >     >     >     > > > > > > few,
>         > > > > >     >     >     > > > though.
>         > > > > >     >     >     > > > > > >     >
>         > > > > >     >     >     > > > > > >     > If we don't rewrite them, 
> then Perl
>         > > > will
>         > > > > > last until
>         > > > > >     >     >     > > > > > > API 2.0
>         > > > > >     >     >     > > > has been
>         > > > > >     >     >     > > > > > >     > designed, released and 
> then
>         > > *another
>         > > > > > full major
>         > > > > >     >     >     > > > > > > release cycle*.
>         > > > > >     >     >     > > > > > > That's way
>         > > > > >     >     >     > > > > > >     > too long to have two 
> codebases for
>         > > > the
>         > > > > > same
>         > > > > >     >     >     > > > > > > component, IMO,
>         > > > > >     >     >     > > > > > > especially
>         > > > > >     >     >     > > > > > >     > since the rewrite is 
> already 50%
>         > > > > > complete.
>         > > > > >     >     >     > > > > > >     >
>         > > > > >     >     >     > > > > > >     > On Tue, Nov 12, 2019 at 
> 8:43 AM
>         > > > Hoppal,
>         > > > > > Michael <
>         > > > > >     >     >     > > > > > >     > 
> [email protected]>
>         > > > > >     >     >     > > > > > >     > wrote:
>         > > > > >     >     >     > > > > > >     >
>         > > > > >     >     >     > > > > > >     > > As the Traffic Ops API 
> is being
>         > > > > > rewritten from Perl
>         > > > > >     >     >     > > > > > > to Golang
>         > > > > >     >     >     > > > > > > there has
>         > > > > >     >     >     > > > > > >     > > been several routes 
> that have
>         > > been
>         > > > > > deprecated and
>         > > > > >     >     >     > > > > > > probably
>         > > > > >     >     >     > > > more to
>         > > > > >     >     >     > > > > > > come.
>         > > > > >     >     >     > > > > > >     > >
>         > > > > >     >     >     > > > > > >     > > In the deprecation 
> efforts I have
>         > > > seen
>         > > > > > two
>         > > > > >     >     >     > > > > > > strategies:
>         > > > > >     >     >     > > > > > >     > >
>         > > > > >     >     >     > > > > > >     > >
>         > > > > >     >     >     > > > > > >     > >   *   The route IS NOT 
> rewritten
>         > > > from
>         > > > > > Perl to
>         > > > > >     >     >     > > > > > > Golang and a
>         > > > > >     >     >     > > > > > > deprecation
>         > > > > >     >     >     > > > > > >     > > notice is added to the 
> alert
>         > > > response
>         > > > > > in the Perl
>         > > > > >     >     >     > > > > > > handler
>         > > > > >     >     >     > > > > > >     > >   *   The route IS 
> rewritten from
>         > > > Perl
>         > > > > > to Golang
>         > > > > >     >     >     > > > > > > and a
>         > > > > >     >     >     > > > deprecation
>         > > > > >     >     >     > > > > > > notice
>         > > > > >     >     >     > > > > > >     > > is added to the alert 
> response in
>         > > > the
>         > > > > > Golang
>         > > > > >     >     >     > > > > > > handler
>         > > > > >     >     >     > > > > > >     > >
>         > > > > >     >     >     > > > > > >     > > I think we should have
>         > > consistency
>         > > > in
>         > > > > > our approach
>         > > > > >     >     >     > > > > > > and
>         > > > > >     >     >     > > > wanted to
>         > > > > >     >     >     > > > > > > get
>         > > > > >     >     >     > > > > > >     > > people’s thoughts.
>         > > > > >     >     >     > > > > > >     > >
>         > > > > >     >     >     > > > > > >     > > I would vote that we do 
> not
>         > > > rewrite a
>         > > > > > deprecated
>         > > > > >     >     >     > > > > > > route from
>         > > > > >     >     >     > > > Perl to
>         > > > > >     >     >     > > > > > >     > Golang.
>         > > > > >     >     >     > > > > > >     > >
>         > > > > >     >     >     > > > > > >     > > Thanks,
>         > > > > >     >     >     > > > > > >     > >
>         > > > > >     >     >     > > > > > >     > > Michael
>         > > > > >     >     >     > > > > > >     > >
>         > > > > >     >     >     > > > > > >     >
>         > > > > >     >     >     > > > > > >
>         > > > > >     >     >     > > > > > >
>         > > > > >     >     >     > > > > > >
>         > > > > >     >     >
>         > > > > >     >     >
>         > > > > >     >
>         > > > > >     >
>         > > > > >
>         > > > > >
>         > > > > >
>         > > >
>         > >
>
>
>
>

Reply via email to