Got you. 10x, Nir On Mon, Aug 14, 2017 at 5:37 PM, Dewayne Richardson <dewr...@gmail.com> wrote:
> The goal is to hit all the low hanging fruit first to discover all the > refactor points and infrastructure before we attempt to bite off the bigger > more impactful areas of Traffic Control like Tenancy and Capabilities. > > -Dew > > On Mon, Aug 14, 2017 at 5:22 AM, Nir Sopher <n...@qwilt.com> wrote: > > > +1! > > > > As far as tenancy is concerned, the main logic is held in the > > "Utils::Tenant" class. > > I would be happy to use this class as an entry point to the Golang TO > > development. > > > > BTW, the UT coverage of the tenancy checks is quite extensive. > > Are we going to migrate the UTs as well, write new UTs in Golang, or keep > > working with the Perl UTs? > > > > Nir > > > > On Wed, Aug 9, 2017 at 11:14 PM, Durfey, Ryan <ryan_dur...@comcast.com> > > wrote: > > > > > Great write up Dewayne. Given the length and forward looking nature of > > > the topic I created a wiki page around this under traffic ops. Please > > > continue discussion in the email thread and I will summarize any > changes > > > there. > > > > > > https://cwiki.apache.org/confluence/display/TC/Golang+ > > > Traffic+Ops+Replacement+-+Vampire+Proxy > > > > > > Ryan Durfey M | 303-524-5099 > > > CDN Support (24x7): 866-405-2993 or cdn_supp...@comcast.com<mailto: > > > cdn_supp...@comcast.com> > > > > > > > > > From: Dewayne Richardson <dewr...@gmail.com> > > > Reply-To: "dev@trafficcontrol.incubator.apache.org" < > > > dev@trafficcontrol.incubator.apache.org> > > > Date: Wednesday, August 9, 2017 at 1:03 PM > > > To: "dev@trafficcontrol.incubator.apache.org" < > > > dev@trafficcontrol.incubator.apache.org> > > > Subject: Traffic Ops Golang Rewrite > > > > > > Sorry for the TL;DR, but a lot of information needed to be conveyed. > So, > > > based upon the TO Rewrite discussions Rob Butts and I have been working > > on > > > a Golang proxy (Mark Torluemke, affectionately calls "the Vampire > Proxy") > > > that initially implements the */monitoring* endpoint to lay down the > > > foundation for rewriting more Traffic Ops endpoints in Go. The goal is > > to > > > do a straight rewrite in Go (that implements any old API's as well as > any > > > new ones that follows the /api/1.2 format). The intent is to make this > > > proxy 100% backward compatible (including any HTTP header requirements) > > to > > > keep the existing TO API clients from breaking. > > > > > > This PR is significant because when postinstall runs (after this PR is > > > merged) it switches the ports according to the following: > > > > > > *TO Port Change Overview* > > > Port *443* will be owned by Golang proxy > > > > > > Port *60443* will now be owned by the Mojolicious/Perl Hypnotoad > service > > > > > > See */opt/traffic_ops/app/conf/cdn.conf* for a new property > > > *traffic_ops_golang_port > > > => '443'*. > > > > > > *Important Operational Changes:* > > > > > > *traffic_ops service* > > > The Golang Proxy Service is now combined with the *traffic_ops* > service, > > so > > > when traffic_ops is restarted so is the Golang Proxy Service. Since > the > > > Golang service is a proxy any APIs that are not implemented in the > Golang > > > Service will be forwarded to the existing TO Perl API. Also, If the > API > > is > > > implemented in the Golang Service the response is serviced by the Proxy > > > (where it will access the Postgres database as needed). > > > > > > *traffic_ops logs* > > > *access.log - *old access.log is now renamed to *perl_access.log*, and > > the > > > Go proxy now takes over the *access.log* while logging in the *exact* > > > format > > > as before (no monitoring or tooling changes are required) > > > *traffic_ops_golang.log* - this is a new file where any errors/debug > will > > > be logged from the Go proxy. > > > *perl_access.log - the existing Mojolicious access.log gets a new name* > > > *traffic_ops.log* - existing Mojolicious debug file (no change) > > > > > > There was a lot of debate and discussion about how to move forward and > > this > > > approach was less impactful to operations (which basically means less > > work > > > to move toward Go). Overtime, the goal is to do a rewrite of all of > the > > > relevant endpoints that are in Mojolicious into Go (with a heavy focus > on > > > modularity and unit testing, for a future release with Micro Services). > > > > > > *What about the Qwilt contributions of API Gateway, Capabilities, and > > > Tenancy wasn't that a thing? * > > > Yes, and it still is. As for the API Gateway we will start "absorbing" > > the > > > code that *Amir* Yeshurun, so graciously contributed for the APIGW and > > > JWT. For the API Capabilities that *Naama Shoresh* also generously > > > contributed (all capabilities will be directly accessed from those > > > capability tables), please see the *Roadmap* below. And last but not > > > least, once once we are confident that tenancy works as designed, we > will > > > begin porting all the tenancy hooks as well as any apis related to > > tenancy > > > (tenant apis, user apis, delivery service apis). All of the features > that > > > Qwilt built will be used in some form or fashion. > > > > > > *How do I jump in?* > > > We are going to take a "Biggest Bang for our Buck" approach to the TPv2 > > UI > > > and TO Golang API. The following roadmap is an initial plan of attack > > (of > > > course subject to debate). > > > > > > *Roadmap* > > > - The TO API is READ heavy so all READ endpoints will be rewritten > first > > > (avoiding Tenancy endpoints, like Users and Delivery Services) > > > - Circle back to the CREATE, UPDATE, DELETEs where more Golang > foundation > > > will have to be developed (avoiding Tenancy endpoints) > > > - Implement Capabilities in the new TPv2 to help manage the > > > Roles/Capabilities with ease > > > - Evaluate Capabilities and design the api_capabilities data around > that > > > - Hook in capabilities (once the capabilities design has settled and > > > database is correct in production) > > > - Evaluating the existing Tenancy Rules > > > - Rewrite Tenancy in Golang > > > - Tackle the 'Tenancy' endpoints in Golang, /deliveryservices, /users > > etc. > > > > > > *Reasons to get excited!* > > > > > > - *Improved PR's: *(Dan Kirkwood is helping us automate Jenkins/CI for > > > better PR quality so components like Documentation, Unit Testing are > > first > > > class citizens. The more required items checked off the PR checklist > > makes > > > PR merging MUCH easier. > > > > > > - *Testing:* We have plans in the works to move testing to the > forefront > > > of our development discussions. The hope is a fresh approach to Unit > > > Testing (in a modern Golang world) where Go tools for topics like "Code > > > Coverage" will help us improve our automated testing, and allow us to > > > "Refactor Mercilessly" > > > > > > - *Performance:* My initial testing for the new* /monitoring* Go > endpoint > > > shows an average 20x faster than the Mojolicous Perl equivalent running > > on > > > the same host. More efficiency endpoints mean more "scale" and less > > > production $$. > > > > > > I will work to produce a list of initial endpoints and publish to the > dev > > > list (along with the JIRA Tickets with the requirements to help manage > > the > > > priorities). The following PR (which I plan on merging today, if not > > > tomorrow) has a section that highlights the foundational features that > > the > > > existing TO API had that we had to build in Go, ie: logging, config > > > files, etc. > > > > > > See the high level features implemented in the section *Things left > > before > > > this can be merged:* > > > > > > TC JIRA for this Change: > > > https://issues.apache.org/jira/browse/TC-447 > > > https://github.com/apache/incubator-trafficcontrol/pull/729 > > > > > > Expect more information about our progress and we hope to be as > > transparent > > > as possible, > > > > > > -Dewayne Richardson > > > > > > > > >