> One of the explicit goals of making an official sidecar project was to > try to make it something the project does not break compatibility with > as one of the main issues the third-party sidecars (that handle > distributed control, backup, repair, etc ...) have is they break > constantly because C* breaks the control interfaces (JMX and config > files in particular) constantly. If it helps with the mental model, > maybe think of the Cassandra sidecar as part of the Cassandra > distribution and we try not to break the distribution? Just like we > can't break CQL and break the CQL client ecosystem, we hopefully don't > break control interfaces of the sidecar either.
Do we have tests which enforce this? I agree we said we won’t break stuff, agreeing to something and actually doing it are different things. We have for years said “we won’t break interface X in a patch release”, but we always end up doing it if there is no test enforcing the contract with a comment saying not to break it. Without such guards a contributor who has no clue about the “what we said” changes it, and the reviewer misses it (and possible also doesn’t know/remember “what we said” because we said it 3 years back)… This is not impossible, we just need to make sure that we are pro-active about marking such things. Maybe the answer is “running the side car integration tests” as part of C* patch CI? > In addition to that, having > this in a separate process gives us access to easy-to-use OS level > protections over CPU time, memory, network, and disk via cgroups; as > well as taking advantage of the existing isolation techniques kernels > already offer to protect processes from each other e.g. CPU schedulers > like CFS [1], network qdiscs like tc-fq/tc-prio[2, 3], and io > schedulers like kyber/bfq [4]. How do we get this tuning to be part of the default install for all users of C* + sidecar?