Hi

For those interested in this topic, here is the JIRA, which has a Pull Request 
for review: https://issues.apache.org/jira/browse/SOLR-16954

Jan Høydahl

> 3. jul. 2023 kl. 22:28 skrev Pierre Salagnac <pierre.salag...@gmail.com>:
> 
> Hi Jan,
> 
> As far as I know, Solr only supports circuit breaks for queries at the
> moment.
> 
> We have a custom integration of circuit breakers for indexing (in Solr 8,
> so that's not fully aligned with what in solr 9) with a custom
> UpdateRequestProcessor. Basically, a new instance of every update processor
> is created by calling the corresponding factory. We then check system stats
> (CPU...) at the first handled doc.
> Maybe there are other ways of integrating circuit breakers, but at least
> doing so in an update processor was not intrusive in the code.
> 
> Probably it is worth it to have something standard in Solr. A "symetric"
> class of SearchHandler to add CB integration could be UpdateRequestHandler.
> 
> Pierre
> 
> 
> Le mar. 27 juin 2023 à 13:32, Jan Høydahl <jan....@cominvent.com> a écrit :
> 
>> Hi,
>> 
>> Solr has CPU and Memory circuit breakers that will terminate Search
>> Requests only.
>> See
>> https://solr.apache.org/guide/solr/latest/deployment-guide/circuit-breakers.html
>> for docs.
>> 
>> Example:
>> 
>>  <circuitBreaker class="solr.CircuitBreakerManager" enabled="true">
>>    <str name="memEnabled">true</str>
>>    <str name="memThreshold">75</str>
>>    <str name="cpuEnabled">true</str>
>>    <str name="cpuThreshold">75</str>
>>  </circuitBreaker>
>> 
>> 
>> A Solr node typically gets overloaded by the combined update and query
>> traffic, and
>> I'm looking into enabling ciricuit breakers for update requests. For many
>> workloads, pausing
>> update traffic would resolve the situation, with the benefit of users not
>> being affected by aborted
>> queries.
>> 
>> So ideally I'd want to be able to choose to enable/disable CB on
>> update/query individually.
>> Or better, to kill update requests on e.g. 80% threshold and search
>> requests on 90% threshold.
>> 
>> The current breaker impl for search <
>> https://github.com/apache/solr/blob/branch_9_2/solr/core/src/java/org/apache/solr/handler/component/SearchHandler.java#L372:380>
>> [1] is hardcoded into SearchHandler in such a way that if ANY
>> of the configured breakers trips, search requests are aborted. Also the
>> breakers seem to be generic
>> in nature, named CPUCircuitBreaker <
>> https://github.com/apache/solr/blob/branch_9_2/solr/core/src/java/org/apache/solr/util/circuitbreaker/CPUCircuitBreaker.java>
>> and MemoryCircuitBreaker <
>> https://github.com/apache/solr/blob/branch_9_2/solr/core/src/java/org/apache/solr/util/circuitbreaker/MemoryCircuitBreaker.java>,
>> so adding new UpdateCPUCircuitBreaker
>> does not seem to be the intention here.
>> 
>> I'm also unclear on the usefulness of having CB on the core level and not
>> the node level. If you have
>> 10 cores from 10 collections on a node, and only some have CBs while
>> others do not, the node will
>> still be overloaded unless the admin convinces every collection owner to
>> implement the same CBs?
>> 
>> So my question becomes - how do we enable CB for update requests into this
>> mix in a clean way?
>> 
>> Jan

Reply via email to