Isn't that what this code does?

      onDeckSearchers++;
      if (onDeckSearchers < 1) {
        // should never happen... just a sanity check
        log.error(logid+"ERROR!!! onDeckSearchers is " + onDeckSearchers);
        onDeckSearchers=1;  // reset
      } else if (onDeckSearchers > maxWarmingSearchers) {
        onDeckSearchers--;
        String msg="Error opening new searcher. exceeded limit of
maxWarmingSearchers="+maxWarmingSearchers + ", try again later.";
        log.warn(logid+""+ msg);
        // HTTP 503==service unavailable, or 409==Conflict
        throw new
SolrException(SolrException.ErrorCode.SERVICE_UNAVAILABLE,msg,true);
      } else if (onDeckSearchers > 1) {
        log.info(logid+"PERFORMANCE WARNING: Overlapping
onDeckSearchers=" + onDeckSearchers);
      }


On Tue, Nov 2, 2010 at 10:02 AM, Jonathan Rochkind <rochk...@jhu.edu> wrote:
> It's definitely a known 'issue' that you can't replicate (or do any other
> kind of index change, including a commit) at a faster frequency than your
> warming queries take to complete, or you'll wind up with something like
> you've seen.
>
> It's in some documentation somewhere I saw, for sure.
>
> The advice to 'just query against the master' is kind of odd, because,
> then... why have a slave at all, if you aren't going to query against it?  I
> guess just for backup purposes.
>
> But even with just one solr, or querying master, if you commit at rate such
> that commits come before the warming queries can complete, you're going to
> have the same issue.
>
> The only answer I know of is "Don't commit (or replicate) at a faster rate
> than it takes your warming to complete."  You can reduce your warming
> queries/operations, or reduce your commit/replicate frequency.
>
> Would be interesting/useful if Solr noticed this going on, and gave you some
> kind of error in the log (or even an exception when started with a certain
> parameter for testing) "Overlapping warming queries, you're committing too
> fast" or something. Because it's easy to make this happen without realizing
> it, and then your Solr does what Simon says, runs out of RAM and/or uses a
> whole lot of CPU and disk io.
>
> Lance Norskog wrote:
>>
>> You should query against the indexer. I'm impressed that you got 5s
>> replication to work reliably.
>>
>> On Mon, Nov 1, 2010 at 4:27 PM, Simon Wistow <si...@thegestalt.org> wrote:
>>
>>>
>>> We've been trying to get a setup in which a slave replicates from a
>>> master every few seconds (ideally every second but currently we have it
>>> set at every 5s).
>>>
>>> Everything seems to work fine until, periodically, the slave just stops
>>> responding from what looks like it running out of memory:
>>>
>>> org.apache.catalina.core.StandardWrapperValve invoke
>>> SEVERE: Servlet.service() for servlet jsp threw exception
>>> java.lang.OutOfMemoryError: Java heap space
>>>
>>>
>>> (our monitoring seems to confirm this).
>>>
>>> Looking around my suspicion is that it takes new Readers longer to warm
>>> than the gap between replication and thus they just build up until all
>>> memory is consumed (which, I suppose isn't really memory 'leaking' per
>>> se, more just resource consumption)
>>>
>>> That said, we've tried turning off caching on the slave and that didn't
>>> help either so it's possible I'm wrong.
>>>
>>> Is there anything we can do about this? I'm reluctant to increase the
>>> heap space since I suspect that will mean that there's just a longer
>>> period between failures. Might Zoie help here? Or should we just query
>>> against the Master?
>>>
>>>
>>> Thanks,
>>>
>>> Simon
>>>
>>>
>>
>>
>>
>>
>



-- 
Lance Norskog
goks...@gmail.com

Reply via email to