Hey Christos,

Thanks for raising this!

> without having worked on the API before and without participating in any 
> prior discussions

Quick summary of past discussions and decisions - not defending them
necessarily, but important context:

'/api/node' is reserved for APIs that only impact the receiving node
(and aren't otherwise proxied or distributed): node-healthcheck,
status-checking on node-level asynchronous operations, fetching
node-specific info (like the node's public-key, environment variables,
etc.), debug operations like triggering a thread-dump.  '/api/cluster'
has APIs that are only available in "SolrCloud" mode, and that
(secondarily) have to do with cluster topology/state: cluster
properties, setting node-roles, cross-node rebalancing, package and
filestore operations, etc.

That's not to say that we've gotta stick with those semantics; if
there's consensus in another direction we should act while v2 is still
"experimental".

> What prevents us from moving towards that direction?

I love these API suggestions, from a purely aesthetic/cosmetic
perspective.  But there are some obstacles IMO - the biggest one being
limitations in Solr's featureset as it stands today.

Take "cluster properties" and "node roles" as examples.  I agree that
it'd be great to offer them in standalone as well as SolrCloud, and to
change the API path to suit.  But that'd be a massive effort, and
while those gaps exist removing the "/cluster" bit of the path might
mislead as many users as it helps.

Best,

Jason

On Fri, Feb 14, 2025 at 12:15 PM Christos Malliaridis
<malliari...@apache.org> wrote:
>
> Hello everyone,
>
> I am looking into the v2 API and I was wondering what our final design will
> look like in terms of single- and multi-node setups.
>
> The main question I am trying to answer for myself is "Do we need to
> distinguish between the operation mode at API endpoints"?
>
> From what I can see in the API proposals and current state, some API
> endpoints operate inside a cluster context (like /api/cluster/properties),
> some inside a node context (like /api/node/logging), some other in cluster
> node context (like /api/cluster/nodes/{nodeName}/roles), and some in no
> context (which is I believe cluster and node, depending on operation mode?,
> like in /api/aliases/{aliasName}/properties).
>
> From a consumer's point of view, this may be a bit irritating, and without
> having worked on the API before and without participating in any prior
> discussions, I would believe that it could be simplified.
>
> Looking into where we are now and what we may expect from Solr in the
> future, we may not have to distinguish between the operation modes at the
> API endpoints. I am not aware of the historical background or any
> constraints that probably apply, so please educate me.
>
> From what little I know, the following changes would make sense to me:
> - GET /api/cluster/properties could be just GET /api/properties
>   - it would get the properties of Solr. If it is a cluster, whether it is
> a single node or multiple, it should not make a difference
> - GET /api/node/logging/messages could be
> /api/nodes/{nodeId}/logging/messages
>   - It would get the log messages of a specific node. For single node
> setups, the node ID is always the same, for multi-nodes it would have
> different node IDs
> - PUT /api/logging/levels could be added to reflect a cluster-wide log
> level configuration, which seems to be missing in the v2 API at the moment
> of writing
> - GET /api/cluster/nodes/{nodeId}/roles could be /api/nodes/{nodeName}/roles
>   - it would return the roles of a specific node (if the roles are per node
> configured)
> - GET /api/aliases/{aliasName}/properties would stay as is, as it is
> node-independent and therefore a nice and simple endpoint
>
> This way we would reduce the complexity of our API (for the consumers) and
> make it more intuitive. Additionally, the consumers would not need to know
> whether there are multiple nodes or a single node running Solr, and will
> always have a "collection of nodes", even if that collection contains only
> a single node at times. And when scaling from one node to multiple nodes,
> no changes at the consumer's side are required (which I'm not sure if this
> is currently the case).
>
> What prevents us from moving towards that direction?
>
> Best,
> Christos

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@solr.apache.org
For additional commands, e-mail: dev-h...@solr.apache.org

Reply via email to