It seems you have a very specific set of goals with this proposal rather than a 
general practice here, and possibly a very limited duration for this proposal.  
While yes you’ve thought through t3c in this case and it might be ok if 
everything works as it should, the general objection is still true.  It’s not 
possible to know all API consumer behavior.  This is why API versioning 
practices are so critically important in addition to supported upgrade 
practices.  My objection stands, but as the implementor and with the additional 
+1 you have, you’re welcome to ignore and proceed anyway.

Jonathan G


From: Rawlin Peters <raw...@apache.org>
Date: Wednesday, September 8, 2021 at 9:39 AM
To: dev@trafficcontrol.apache.org <dev@trafficcontrol.apache.org>
Subject: Re: [EXTERNAL] Proposal: stable vs unstable TO API versions
I understand your point, Jonathan and Rob, but I think it is a bit
much to assume that every upgrade of components that use the unstable
API will break them entirely and cause a customer impact/outage. For
the 3 things we're planning on breaking (jobs, users, servers), I'm
pretty sure `t3c` is the only component truly affected that could
potentially create bad ATS configs. Let's look at each in turn:

Jobs:
If TO is upgraded first, `t3c` requests will get a 200, but it will
just ignore the new field returned in the JSON, meaning jobs will
still be "refresh" instead of "refetch." No impact here.
If `t3c` is upgraded first, the new field will be empty, meaning `t3c`
should just treat it as "refresh." No impact here either.

Users:
`t3c` does not use this API and will not be impacted.

 Servers:
If TO is upgraded first, `t3c` requests will get a 200, but it will
think all server profile IDs = 0 (because the field will be missing
from the response, it will get unmarshalled as the int's "empty"
value). `t3c` will then attempt to get parameters of profile 0 and get
404'd, causing the run to fail, leaving old configs in place. No real
impact here other than not being able to change ATS configs until
`t3c` is upgraded.
If `t3c` is upgraded first, `t3c` requests will get a 200, but since
the resulting profile arrays would be empty, it will cause the `t3c`
run to fail, leaving old configs in place. Again, no real impact other
than not being able to change ATS configs until TO is also upgraded.

As you can see, this single coordinated upgrade would not cause any
real impact. Would you at least be willing to try it out for the next
release cycle in order to get these 3 breaking changes into API 4.0?
That alone would be a major savings, and we'd only have to coordinate
a single upgrade.

- Rawlin

Reply via email to