[
https://issues.apache.org/jira/browse/SOLR-7789?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14709658#comment-14709658
]
Shalin Shekhar Mangar commented on SOLR-7789:
---------------------------------------------
bq. There is a ConfigSetsHandler because it operates on a separate end point –
it doesn't make sense to send ConfigSet-related commands to /admin/collections,
it makes more sense from the end user perspective to send ConfigSet-related
commands to /admin/configs. Given separate end points, separate handlers also
make sense.
Okay, that is reasonable.
bq. The point I am trying to make is that how the Overseer processes ConfigSet
operations is an implementation detail of the Overseer. The ConfigSetHandler
(which is not part of the Overseer) just needs an interface in order to tell
the Overseer that it wants a ConfigSet operation processed, it shouldn't be
concerned with the implementation details.
In my mind, it makes the opposite impression. The fact that we have a
ZkController.getOverseerCollectionQueue and a different
ZkController.getOverseerConfigSetQueue() suggests that the two queues are
different but they are not, at least not yet. So why does this feature try to
suggest that their implementation might be different at all? These things are
easily changed so lets refactor it when we actually need to have different
queues.
bq. Right now we happen to use the same queue under the covers, but maybe we
find in the future that's a bad idea (e.g. users have different QoS
expectations between ConfigSet and Collection operations and we add ConfigSet
operations that are long lived and block important Collection operations). If
the interface between the Overseer and the ConfigSet handler doesn't refer to
collections, we don't need to change anything outside of the Overseer if we
change the processing in the future.
There are already different QoS expectations within the existing operations.
For example, operations for different collections never block each other and
operations such as cluster status, overseer status and request status never
block. However, they are all managed by the same overseer and it can continue
to be the case. Yes, what operations block what is not formally defined or
enforced, which is something that can use some love.
{quote}
bq. The only reason why it is called a OverseerCollectionQueue is to indicate
that it is the queue for OverseerCollectionProcessor.
That can be indicated with a variable/method name, not the type name.
{quote}
Sure it could be if it is a generic queue but it is only used for the overseer
collection processor and I don't see the need for another queue in Solr right
now.
bq. I don't wish to make the API/tasks pluggable so I understand your concern.
That being said, there is a middle ground between API/tasks being pluggable and
putting everything in the collection processor. All I'm arguing for is clean
interfaces. Take SOLR-7855 as an example; because we had Overseer/role related
commands in the collection processor it made refactoring much more difficult.
Doing what you suggest in my opinion would have the same effect
I understand what you are saying. I did the same for Overseer in SOLR-6554
which grouped all related operations and moved them into their own classes
(ClusterStateMutator, SliceMutator etc). In fact, I'd argue that SOLR-7855
didn't go far enough -- it'd be great to have individual operations completely
separate from the message processor such that they can be easily unit tested. I
am very much on board with that.
I'm just a bit confused why we have an interface if we have just one
implementation (YAGNI!) e.g. OverseerMessageHandler and
OverseerMessageHandlerSelector. Similarily, OverseerCollectionProcessor doesn't
add much over OverseerProcessor except for the static
getOverseerMessageHandlerSelector method.
bq. I don't think the dispatching here is complex and it is completely
contained in the Overseer. After SOLR-7855 we have an
OverseerCollectionMessageHandler to handle overseer collection messages. If you
are suggesting throwing the ConfigSet related commands in there (from
OverseerConfigSetMessageHandler), you've just moved the dispatch code somewhere
else.
I was referring to the OverseerMessageHandlerSelector actually. I assumed that
you foresee more than one implementation in the future which would make the
dispatching more complex, hence the comment. So to dispatch a request, at level
1, you have the OverseerMessageHandlerSelector and at level 2, you have an
OverseerMessageHandler and at level 3, you have the processMessage inside the
OverseerMessageHandler which sends the request to the right handler method.
This is the complexity that I was referring to. Perhaps, we can get rid of
OverseerMessageHandlerSelector?
Sorry for the vague comment earlier. I don't want to block you anymore than I
already have. We can always refactor this in future. Thank you for cleaning up
the mess in OverseerCollectionProcessor!
> Introduce a ConfigSet management API
> ------------------------------------
>
> Key: SOLR-7789
> URL: https://issues.apache.org/jira/browse/SOLR-7789
> Project: Solr
> Issue Type: New Feature
> Reporter: Gregory Chanan
> Assignee: Gregory Chanan
> Attachments: SOLR-7789.patch, SOLR-7789.patch, SOLR-7789.patch,
> SOLR-7789.patch
>
>
> SOLR-5955 describes a feature to automatically create a ConfigSet, based on
> another one, from a collection API call (i.e. one step collection creation).
> Discussion there yielded SOLR-7742, Immutable ConfigSet support. To close
> the loop, we need support for a ConfigSet management API.
> The simplest ConfigSet API could have one operation:
> create a new config set, based on an existing one, possible modifying the
> ConfigSet properties. Note you need to be able to modify the ConfigSet
> properties at creation time because otherwise Immutable could not be changed.
> Another logical operation to support is ConfigSet deletion; that may be more
> complicated to implement than creation because you need to handle the case
> where a collection is already using the configuration.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]