On 9/3/2025 8:44 AM, Štefan Miklošovič wrote:

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.

A user might not be concerned about how the CLI is created, but as a project there could be a lot of long-term benefit from vending a generated CLI (and generated client) in terms of functional consistency, reduced development time for new features, language coverage and so on. And all that ultimately benefits the end users.

If there's a pressing, critical need for a CLI today that might change the equation, but I don't sense such a need. This sounds more like an opportunity relatively early in the project's lifecycle to invest a little more heavily now in automation and reap the benefit with each new feature that sidecar rolls out.

Thanks -- Joel.

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
                >



Reply via email to