From a0c53174c5a7b21df8dc3085dbbd51329c53cb7e Mon Sep 17 00:00:00 2001 From: Michael Peter Christen Date: Mon, 4 Aug 2014 13:00:45 +0200 Subject: [PATCH] better solr query logging to detect unnecessary sort requests for more performance profiling --- .../federate/solr/connector/EmbeddedSolrConnector.java | 9 ++++++++- .../federate/solr/connector/SolrServerConnector.java | 10 +++++----- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/source/net/yacy/cora/federate/solr/connector/EmbeddedSolrConnector.java b/source/net/yacy/cora/federate/solr/connector/EmbeddedSolrConnector.java index 231f52d92..f14964390 100644 --- a/source/net/yacy/cora/federate/solr/connector/EmbeddedSolrConnector.java +++ b/source/net/yacy/cora/federate/solr/connector/EmbeddedSolrConnector.java @@ -200,8 +200,9 @@ public class EmbeddedSolrConnector extends SolrServerConnector implements SolrCo // during the solr query we set the thread name to the query string to get more debugging info in thread dumps String q = req.getParams().get("q"); String fq = req.getParams().get("fq"); + String sort = req.getParams().get("sor"); String threadname = Thread.currentThread().getName(); - if (q != null) Thread.currentThread().setName("solr query: q = " + q + (fq == null ? "" : ", fq = " + fq)); + if (q != null) Thread.currentThread().setName("solr query: q = " + q + (fq == null ? "" : ", fq = " + fq) + (sort == null ? "" : ", sort = " + sort)); // for debugging in Threaddump SolrQueryResponse rsp = new SolrQueryResponse(); NamedList responseHeader = new SimpleOrderedMap(); @@ -332,8 +333,14 @@ public class EmbeddedSolrConnector extends SolrServerConnector implements SolrCo public SolrDocumentList getDocumentListByParams(ModifiableSolrParams params) throws IOException, SolrException { SolrQueryRequest req = this.request(params); SolrQueryResponse response = null; + String q = params.get("q"); + String fq = params.get("fq"); + String sort = params.get("sort"); + String threadname = Thread.currentThread().getName(); try { + if (q != null) Thread.currentThread().setName("solr query: q = " + q + (fq == null ? "" : ", fq = " + fq) + (sort == null ? "" : ", sort = " + sort)); // for debugging in Threaddump response = this.query(req); + if (q != null) Thread.currentThread().setName(threadname); if (response == null) throw new IOException("response == null"); return SolrQueryResponse2SolrDocumentList(req, response); } finally { diff --git a/source/net/yacy/cora/federate/solr/connector/SolrServerConnector.java b/source/net/yacy/cora/federate/solr/connector/SolrServerConnector.java index 18b6eaa7b..398fd6dbe 100644 --- a/source/net/yacy/cora/federate/solr/connector/SolrServerConnector.java +++ b/source/net/yacy/cora/federate/solr/connector/SolrServerConnector.java @@ -293,26 +293,26 @@ public abstract class SolrServerConnector extends AbstractSolrConnector implemen // during the solr query we set the thread name to the query string to get more debugging info in thread dumps String q = params.get("q"); String fq = params.get("fq"); + String sort = params.get("sort"); String threadname = Thread.currentThread().getName(); - if (q != null) Thread.currentThread().setName("solr query: q = " + q + (fq == null ? "" : ", fq = " + fq)); QueryResponse rsp; - int retry = 100; + int retry = 0; Throwable error = null; - while (retry-- > 0) { + while (retry++ < 60) { try { + if (q != null) Thread.currentThread().setName("solr query: q = " + q + (fq == null ? "" : ", fq = " + fq) + (sort == null ? "" : ", sort = " + sort) + "; retry = " + retry); // for debugging in Threaddump rsp = this.server.query(params); if (q != null) Thread.currentThread().setName(threadname); if (rsp != null) if (log.isFine()) log.fine(rsp.getResults().getNumFound() + " results for q=" + q); return rsp.getResults(); } catch (final SolrServerException e) { error = e; - clearCaches(); // prevent further OOM if this was caused by OOM } catch (final Throwable e) { error = e; clearCaches(); // prevent further OOM if this was caused by OOM } ConcurrentLog.severe("SolrServerConnector", "Failed to query remote Solr: " + error.getMessage() + ", query:" + q + (fq == null ? "" : ", fq = " + fq)); - try {Thread.sleep(100);} catch (InterruptedException e) {} + try {Thread.sleep(1000);} catch (InterruptedException e) {} } throw new IOException("Error executing query", error); }