OK. Just typing out the question fixed it. Changing from post to get:
GetMethod method = new GetMethod(completeUrl); removed the errors. The reason, I cannot explain... On Tue, Apr 3, 2012 at 6:46 PM, janne mattila <jannepostilis...@gmail.com> wrote: > I have implemented dataimporthandler scheduling based on > http://wiki.apache.org/solr/DataImportHandler#Scheduling. It > periodically triggers full and delta updates. I'm unpacking the > original solr.war, adding a few scheduling-related classes such as > ApplicationListener etc (I have modified the example a lot) and > repacking the web application. > > The scheduling works fine, but when I undeploy solr web application, > Tomcat gives errors about ThreadLocals that were not cleared: > > SEVERE: The web application [/my-solr] created a ThreadLocal with key > of type [org.apache.solr.handler.dataimport.DataImporter$2] (value > [org.apache.solr. > handler.dataimport.DataImporter$2@b0e2096]) and a value of type > [java.util.concurrent.atomic.AtomicLong] (value [2]) but failed to > remove it when the web applic > ation was stopped. Threads are going to be renewed over time to try > and avoid a probable memory leak. > 3.4.2012 18:36:49 org.apache.catalina.loader.WebappClassLoader > checkThreadLocalMapForLeaks > SEVERE: The web application [/my-solr] created a ThreadLocal with key > of type [org.apache.solr.handler.dataimport.DataImporter$3] (value > [org.apache.solr. > handler.dataimport.DataImporter$3@4c7d5d85]) and a value of type > [java.text.SimpleDateFormat] (value > [java.text.SimpleDateFormat@4f76f1a0]) but failed to remove > it when the web application was stopped. Threads are going to be > renewed over time to try and avoid a probable memory leak. > 3.4.2012 18:36:49 org.apache.catalina.loader.WebappClassLoader > checkThreadLocalMapForLeaks > SEVERE: The web application [/my-solr] created a ThreadLocal with key > of type [java.lang.ThreadLocal] (value > [java.lang.ThreadLocal@3a86edfe]) and a value > of type [org.apache.solr.handler.dataimport.ContextImpl] (value > [org.apache.solr.handler.dataimport.ContextImpl@7072dcb6]) but failed > to remove it when the web > application was stopped. Threads are going to be renewed over time to > try and avoid a probable memory leak. > 3.4.2012 18:36:49 org.apache.catalina.loader.WebappClassLoader > checkThreadLocalMapForLeaks > SEVERE: The web application [/my-solr] created a ThreadLocal with key > of type [org.apache.solr.schema.DateField.ThreadLocalDateFormat] > (value [org.apache. > solr.schema.DateField$ThreadLocalDateFormat@4f86a67]) and a value of > type [org.apache.solr.schema.DateField.ISO8601CanonicalDateFormat] > (value [org.apache.solr. > schema.DateField$ISO8601CanonicalDateFormat@6b2ed43a]) but failed to > remove it when the web application was stopped. Threads are going to > be renewed over time t > o try and avoid a probable memory leak. > 3.4.2012 18:36:49 org.apache.catalina.loader.WebappClassLoader > checkThreadLocalMapForLeaks > SEVERE: The web application [/my-solr] created a ThreadLocal with key > of type [org.apache.solr.handler.dataimport.DataImporter$2] (value > [org.apache.solr. > handler.dataimport.DataImporter$2@b0e2096]) and a value of type > [java.util.concurrent.atomic.AtomicLong] (value [2]) but failed to > remove it when the web applic > ation was stopped. Threads are going to be renewed over time to try > and avoid a probable memory leak. > 3.4.2012 18:36:49 org.apache.catalina.loader.WebappClassLoader > checkThreadLocalMapForLeaks > SEVERE: The web application [/my-solr] created a ThreadLocal with key > of type [java.lang.ThreadLocal] (value > [java.lang.ThreadLocal@3a86edfe]) and a value > of type [org.apache.solr.handler.dataimport.ContextImpl] (value > [org.apache.solr.handler.dataimport.ContextImpl@511192bd]) but failed > to remove it when the web > application was stopped. Threads are going to be renewed over time to > try and avoid a probable memory leak. > 3.4.2012 18:36:49 org.apache.catalina.loader.WebappClassLoader > checkThreadLocalMapForLeaks > SEVERE: The web application [/my-solr] created a ThreadLocal with key > of type [org.apache.solr.handler.dataimport.DataImporter$3] (value > [org.apache.solr. > handler.dataimport.DataImporter$3@4c7d5d85]) and a value of type > [java.text.SimpleDateFormat] (value > [java.text.SimpleDateFormat@4f76f1a0]) but failed to remove > it when the web application was stopped. Threads are going to be > renewed over time to try and avoid a probable memory leak. > 3.4.2012 18:36:49 org.apache.catalina.loader.WebappClassLoader > checkThreadLocalMapForLeaks > SEVERE: The web application [/my-solr] created a ThreadLocal with key > of type [org.apache.solr.schema.DateField.ThreadLocalDateFormat] > (value [org.apache. > solr.schema.DateField$ThreadLocalDateFormat@4f86a67]) and a value of > type [org.apache.solr.schema.DateField.ISO8601CanonicalDateFormat] > (value [org.apache.solr. > schema.DateField$ISO8601CanonicalDateFormat@6b2ed43a]) but failed to > remove it when the web application was stopped. Threads are going to > be renewed over time t > o try and avoid a probable memory leak. > > I have rechecked my code to make sure it should not have any memory > leaks. I have identified the cause to method: > > private void sendHttpPost(String completeUrl, String coreName) { > HttpClient client = new HttpClient(); > PostMethod method = new PostMethod(completeUrl); > try { > int statusCode = client.executeMethod(method); > if (statusCode != HttpStatus.SC_OK) { > System.err.println("Method failed: " + method.getStatusLine()); > } > method.getResponseBody(); > } catch (HttpException e) { > System.err.println("Fatal protocol violation: " + e.getMessage()); > e.printStackTrace(); > } catch (IOException e) { > System.err.println("Fatal transport error: " + e.getMessage()); > e.printStackTrace(); > } finally { > // Release the connection. > method.releaseConnection(); > } > } > > If I comment out that code, the errors about memory leaks disappear. > This method simply starts solr indexing operation by calling localhost > url such as my-solr/mycore/dataimport?command=full-import > > The method is rewritten to use HttpClient but I got the same mem leak > errors when I used the original HTTPPostScheduler class from > http://wiki.apache.org/solr/DataImportHandler#Scheduling > > So it looks like the mem leak errors do not come from my added code > but from original Solr code (which receives the http requests). > > What is even more confusing is that if I disable the sendHttpPost(), > the errors disappear as I mentioned - but if I manually request the > same urls to initiate the full / delta imports, the mem leak errors do > not show up when webapp is undeployed....??