[ 
https://issues.apache.org/jira/browse/SOLR-7789?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14709774#comment-14709774
 ] 

Gregory Chanan commented on SOLR-7789:
--------------------------------------

{quote}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.{quote}

I think part of the difference of opinion here is you are viewing the interface 
as "this is the collection queue and this is the configset queue" -- given that 
the interface is a queue your line of thinking makes sense, but perhaps having 
queue as part of the interface is leaking too many implementation details 
already.  I'm viewing the interface as "this is where I send Collection 
operation requests and this is where I send ConfigSet operation requests."  
There's no same vs separate queue discussion if that is the interface.  If that 
were the interface, you would be arguing for a single "this is where I send 
Overseer operation requests."

To be honest, I don't think this makes a huge difference either way right now.  
The central issue, imo, is how you the RequestHandler differentiates which 
messages are intended for which MessageHandler.  In the naive way of just 
throwing everything in the OCP (not saying you are arguing for that), you'd 
have conflicts with say, the Collection.CREATE and ConfigSet.CREATE and would 
need to make sure all the names don't conflict (a mess).  So, you'd either need 
to differentiate the message at the Overseer interface level "this is where I 
send Collection requests and this is where I send ConfigSet operation requests" 
(this is essentially what I've chosen) or each handler puts enough content in 
the message so that the overseer can differentiate itself.  The later could 
certainly be the right way to go -- I just didn't choose it because 1) it would 
require changing the existing message format and we'd have to deal with 
backwards incompatibility 2) we'd need to invent some grouping concept of 
operations (what are CollectionActions vs ConfigSetActions -- groups of 
actions?  action sets?).  If we solve #1 and #2 I certainly have no objection 
to having a single "this is where I send Overseer operation requests" interface.

{quote}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}

Sure, that's just a hypothetical.  I think what I wrote above is the central 
issue.

{quote}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.{quote}

Well there are two OverseerMessageHandlers now :).  I see below your concern is 
mainly with the Selector.

{quote}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?{quote}

The OverseerMessageHandlerSelector was really just some scaffolding to help me 
with the refactor.  I don't have an objection to making a single non-interface 
implementation of it.  Or even a canonical implementation if we adopt the 
"single this is where I send Overseer operation requests" interface (e.g. it 
could just do some generic logic mapping the expanded info in the message with 
the set of available message handlers).  That should be another jira though.

> 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]

Reply via email to