It sounds like the only -1 is having a unified Service and RPM. How about the following compromise: a separate RPM and Service for the New TO, and the New TO RPM is a dependency of Old TO, and likewise the Service is a dependency of `traffic_ops`. This way, upgrades will still require building the New TO RPM and adding it to Yum, but `yum upgrade` will automatically install it without additional ops work, and `service traffic_ops start` will also start the New TO. Bearing in mind this double-service awkwardness will go away when all endpoints are migrated.
Also, @alficles suggested configuring the New TO Config in Postinstall (which must be run after upgrading anyway). Because the New is a dependency of the Old, we're guaranteed `/opt/traffic_ops_golang` exists in Postinstall, and can populate its config. Also, I realized the New TO needs moved from `/traffic_ops/traffic_ops_golang` to `/traffic_ops_golang`, because `build_all.sh` requires projects be in the root directory. Also, I will add tests, docs, and configurable logging before the PR is merged. (Just wanted to wait until we had consensus before putting more work into it.) How does that sound? On Thu, Jul 13, 2017 at 1:00 PM, Robert Butts <[email protected]> wrote: > @dewrich It's not that putting both services in the same Service and RPM > is a good long-term solution; it's that it's easier to configure and > deploy. A separate RPM and service is another step to install, and another > step to start the service. It's not that it's good, it's that it's the > lesser of two evils. My fear is, the more complex we make this, the less > chance of getting it done at all. > > @efriedri > 1. Same answer: long-term, I absolutely agree proxies should be separate. > But this is the simplest way to deploy an incremental migration. > 2. Yes, the Perl GUI can transparently request what it needs. That's a > goal of this: transparent new endpoints, that existing services don't know > or care that they come from a different backend. > > Also bear in mind, this "proxy" only exists until Perl TO goes away. > Having it in the same Service and RPM as old TO, and having the proxy be > the same binary as the new endpoints, makes it easier to completely remove > the Proxy and Perl, once every endpoint is rewritten. If we make the > Service and RPM separate, you have to change configs and uninstall the > separate Service and RPM of the Perl TO. If the Proxy is a separate binary, > you have to uninstall that, and then change the config of the Golang TO to > serve on the real port (443). As proposed, once all endpoints are > rewritten, we simply remove the old TO from the RPM and Service, and users > just upgrade, and it keeps working, with no changes to config, Puppet, RPM, > or anything else. > > I'd fully support different RPMs, different Services, and a separate > Proxy, once this is deployed. The fear is that the more complex we make > this, the less chance it gets deployed at all. > > > On Thu, Jul 13, 2017 at 12:23 PM, Eric Friedrich (efriedri) < > [email protected]> wrote: > >> Rob- >> Two minor questions: >> >> 1) An alternative approach could have been using an LB/proxy to choose >> between perl and golang TO’s. Any particular reason you chose to proxy >> requests to the perl TO instead? >> >> 2) As APIs are rebuilt in golang which effect GUI components, what does >> this mean for the perl GUI? Will we continue updating the perl GUI to >> interact with updated golang APIs? (until we cut over to Jeremy’s Angular >> UI) >> >> —Eric >> >> >> >> > On Jul 13, 2017, at 12:39 PM, Eric Covener <[email protected]> wrote: >> > >> > On Thu, Jul 13, 2017 at 11:11 AM, Robert Butts < >> [email protected]> wrote: >> >> A Golang application which serves endpoints which have been rewritten, >> and >> >> reverse-proxies the old Perl Traffic Ops for all other requests. This >> app >> >> can be included in the RPM and Service files for Traffic Ops. Then, >> the old >> >> Traffic Ops config can be changed to a different port (say, 60443), >> and the >> >> new Go Traffic Ops can be configured to serve on 443, and >> reverse-proxy to >> >> the old application. Both applications will run on the same machine. >> > >> > >> > Sounds neat and you didn't resort to saying "microservices"! >> > >> > -- >> > Eric Covener >> > [email protected] >> >> >
