Yes, nothing wrong with exploring the generation per se. However, I would not not spend too much time on that. The goal here is to have CLI to manage the cluster. Realistically by whatever means possible, generated or not. I would not like to see us spending the time on building "the ivory tower". A user does not mind how it is set up. Would it be nice to have? Sure.
On Tue, Sep 2, 2025 at 10:27 PM Yifan Cai <yc25c...@gmail.com> wrote: > Being able to remove the client code all together and generate from the > spec would be awesome. (It is off the topic of this thread; I am aware of > it :p). Way less code in Sidecar and Analytics; better decoupling. > > - Yifan > > On Tue, Sep 2, 2025 at 1:02 PM Doug Rohrer <droh...@apple.com> wrote: > >> I think, historically, we always wanted to be able to generate the client >> but there were some technical challenges to doing so, which led us to the >> hand-rolled client we have today. The less code we have to write by hand, >> and the more client languages we can support, the better. >> >> That said, there's some specifics in the current client that we'd like to >> maintain like the retry handling - perhaps the "generated" part is the bare >> request/response methods + POJOs, and then there's a bit of a wrapper >> around that with retry / instance selection logic, unless some >> auto-generator can handle all of that. >> >> Doug >> >> On Sep 2, 2025, at 12:27 PM, Bernardo Botella < >> conta...@bernardobotella.com> wrote: >> >> Regarding client generation. I am not completely sure I am getting this >> point. Is not there already SidecarClient class in Java, in the client >> artifact, written manually, to call all the endpoints programmatically? So >> if we had this artifact, what would be wrong with using that as a >> dependency in cli? I just do not see why we would want to generate it >> again. What is the purpose of SidecarClient then if not being used for >> cases like this? >> >> >> Yes, there is. What I am interested in here is to explore the possibility >> of just ditching that “manually” maintained class in favor of auto >> generated artifacts. That class is a Java client. If we can have official >> clients for other languages coming out of the openAPI spec, I think we >> should at least explore that. >> >> >> There would also need to be some extra sauce around this as "sidecar-cli" >> can be pointed to different clusters so there would need to be some >> "context switching" done as well, I guess. >> >> Yeah, and that should also be part of the openAPI spec. Similar answer >> for Francisco’s comment around authentication mechanisms. The current >> OpenAPI spec is probably not complete as it doesn’t describe auth >> mechanisms, but that is something that can be added as well: >> Describing API Security >> <https://learn.openapis.org/specification/security.html> >> learn.openapis.org >> <https://learn.openapis.org/specification/security.html> >> <favicon.ico> <https://learn.openapis.org/specification/security.html> >> <https://learn.openapis.org/specification/security.html> >> >> Regards, >> Bernardo >> >> >> On Sep 2, 2025, at 12:11 AM, Štefan Miklošovič <smikloso...@apache.org> >> wrote: >> >> Bulk API, yes. Definitely a good point. No reason to do the coordination >> in the CLI. Operations like "set guardrails" are very good candidates for >> that. Not so much for "restart" as that is another type of an operation >> done a little bit differently (albeit inherently coordinated as well). >> >> Regarding client generation. I am not completely sure I am getting this >> point. Is not there already SidecarClient class in Java, in the client >> artifact, written manually, to call all the endpoints programmatically? So >> if we had this artifact, what would be wrong with using that as a >> dependency in cli? I just do not see why we would want to generate it >> again. What is the purpose of SidecarClient then if not being used for >> cases like this? >> >> There would also need to be some extra sauce around this as "sidecar-cli" >> can be pointed to different clusters so there would need to be some >> "context switching" done as well, I guess. >> >> How I see it is that cli would be the part of Sidecar repository, no >> standalone project / repository. So it would share its release lifecycle / >> versioning. Same way nodetool is part of a concrete Cassandra version (even >> though one could technically use nodetool to connect to a cluster of a >> different version and some operations would work, it is in general not a >> good idea to mix nodetool from one Cassandra version against Cassandra node >> of another version). >> >> >> >> On Tue, Sep 2, 2025 at 4:08 AM Bernardo Botella < >> conta...@bernardobotella.com> wrote: >> >>> Yes to a Sidecar CLI. As Yifan mentioned, I think we should leverage the >>> OpenAPI specs yo autogenerate clients for different languages. I also see >>> this being a separate subproject consuming this spec to generate >>> release CLI artifacts, but I guess having separate subproject may come with >>> some other different logistic challenges. >>> >>> Bulk type operational calls using the CLI leveraging CEP-53 is, in my >>> opinion, the natural next step for this. >>> >>> Bernardo >>> >>> El sept 1, 2025, a las 3:26 p. m., Dinesh Joshi <djo...@apache.org> >>> escribió: >>> >>> +1 on the sidecar-cli and cluster-wide operations. Like Yifan said, >>> cluster-wide operations should be delegated to the C* Sidecar. The recent >>> CEP-53 for rolling restarts is an example of a cluster-wide operation and >>> was one of the original goal of CIP/CEP-1. >>> >>> On Mon, Sep 1, 2025 at 11:33 AM Yifan Cai <yc25c...@gmail.com> wrote: >>> >>>> I see the “guardrail by sidecar” as a feature can be leveraged by >>>> Sidecar’s (cluster-wide) bulk-api capability. It is not implemented, but >>>> planned. Rather than handling cluster-wide operations in the CLI, bulk api >>>> seems like a better fit. The client (CLI) just needs to call the API. In >>>> other words, the Sidecar server acts as the coordinator, not the client. >>>> >>>> - Yifan >>>> >>>> ------------------------------ >>>> *From:* Yifan Cai <yc25c...@gmail.com> >>>> *Sent:* Monday, September 1, 2025 10:25:52 AM >>>> *To:* dev@cassandra.apache.org <dev@cassandra.apache.org> >>>> *Subject:* Re: [DISCUSS] CLI for Sidecar and Guardrails By Sidecar >>>> >>>> I agree a CLI could unlock new use cases and help ops, but I’m a bit >>>> concerned about adding another interface for Sidecar to maintain on top of >>>> REST and the Client SDK. It cloud also create another potential attack >>>> surface and versioning challenge. >>>> >>>> Since Sidecar already vends an OpenAPI spec, maybe the CLI could be >>>> generated from that instead. The generator could live outside the repo >>>> (e.g. something like restish <https://github.com/rest-sh/restish>, >>>> though I haven’t used it myself). >>>> >>>> - Yifan >>>> >>>> ------------------------------ >>>> *From:* Francisco Guerrero <fran...@apache.org> >>>> *Sent:* Monday, September 1, 2025 7:42:36 AM >>>> *To:* dev@cassandra.apache.org <dev@cassandra.apache.org> >>>> *Subject:* Re: [DISCUSS] CLI for Sidecar and Guardrails By Sidecar >>>> >>>> Hi Stefan, >>>> >>>> I think the CLI is the natural evolution for the Sidecar Java client >>>> and it >>>> will help simplify the management of Cassandra. >>>> >>>> Thanks for bringing this up to the mailing list. >>>> >>>> Best, >>>> - Francisco >>>> >>>> On 2025/09/01 10:09:55 Štefan Miklošovič wrote: >>>> > Hi, >>>> > >>>> > I just ask two questions / discuss two topics at once to save time for >>>> > everybody. >>>> > >>>> > 1) CLI >>>> > >>>> > Seeing CEP-53 (and not only that), I am just asking myself, how are >>>> > operators actually going to use this on a daily basis when there are >>>> "just >>>> > endpoints" exposed? Somebody has to call them, right? What kind of >>>> tooling >>>> > do you plan to have for this? Are you going to literally call >>>> endpoints, >>>> > crafting the bodies etc? Hardly. >>>> > >>>> > So my idea is ... why not to have a Sidecar CLI? A command line tool >>>> which, >>>> > when invoked, would call these endpoints for you? For example when >>>> CEP-53 >>>> > is in place which is going to restart the cluster, I would love to use >>>> > something like >>>> > >>>> > $ sidecar-cli restart >>>> > >>>> > and be done with it? >>>> > >>>> > Then it would also display the progress and so on. >>>> > >>>> > I can imagine this would be used for other endpoints going to happen / >>>> > which are already there. We would have basically "nodetool for >>>> sidecar". >>>> > >>>> > 2) >>>> > >>>> > Guardrails are configured by YAML / JMX / nodetool (by >>>> > get/setguardrailsconfig added recently). However, this is still done >>>> _per >>>> > node_. >>>> > >>>> > Building on top of 1), could not we have >>>> > >>>> > $ sidecar-cli setguardrail xyx false >>>> > >>>> > which would basically call it for every node in the cluster? Sidecar >>>> can >>>> > just call whatever it wants. No point doing it per node by nodetool >>>> if one >>>> > deploys Sidecar. >>>> > >>>> > We could also have an endpoint which would display any discrepancies >>>> when >>>> > it comes to guardrails. E.g. we would know that a guardrail is >>>> configured >>>> > the same way, cluster-wide. Right now, you need to go node by node and >>>> > check it yourself: >>>> > >>>> > $ sidecar-cli guardrails --diff >>>> > >>>> > Would show which guardrails are not the same everywhere with nodes it >>>> > differs so you can fix this if you want. >>>> > >>>> > Regards >>>> > >>>> >>> >>> >> >>