From 1a364572a5c1a7ef77eba51fc51cbd59075c869a Mon Sep 17 00:00:00 2001 From: Michael Peter Christen Date: Thu, 20 Feb 2014 00:03:35 +0100 Subject: [PATCH] fix for "org.apache.solr.core.SolrCore Too many close [count:-1] on org.apache.solr.core.SolrCore@51af7c57" -error --- .../federate/solr/connector/CachedSolrConnector.java | 4 ++++ .../federate/solr/connector/EmbeddedSolrConnector.java | 10 ++++++++-- .../cora/federate/solr/instance/EmbeddedInstance.java | 9 ++++++++- 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/source/net/yacy/cora/federate/solr/connector/CachedSolrConnector.java b/source/net/yacy/cora/federate/solr/connector/CachedSolrConnector.java index a22ecf4ed..58705b5d9 100644 --- a/source/net/yacy/cora/federate/solr/connector/CachedSolrConnector.java +++ b/source/net/yacy/cora/federate/solr/connector/CachedSolrConnector.java @@ -73,6 +73,10 @@ public class CachedSolrConnector extends AbstractSolrConnector implements SolrCo this.documentCache.clear(); if (this.solr != null) this.solr.commit(true); } + + protected void finalize() throws Throwable { + this.close(); + } @Override public synchronized void close() { diff --git a/source/net/yacy/cora/federate/solr/connector/EmbeddedSolrConnector.java b/source/net/yacy/cora/federate/solr/connector/EmbeddedSolrConnector.java index 5ea2df3a9..263579c87 100644 --- a/source/net/yacy/cora/federate/solr/connector/EmbeddedSolrConnector.java +++ b/source/net/yacy/cora/federate/solr/connector/EmbeddedSolrConnector.java @@ -141,12 +141,18 @@ public class EmbeddedSolrConnector extends SolrServerConnector implements SolrCo public SolrConfig getConfig() { return this.core.getSolrConfig(); } + + protected void finalize() throws Throwable { + this.close(); + } @Override public synchronized void close() { - try {this.commit(false);} catch (final Throwable e) {ConcurrentLog.logException(e);} + if (this.core != null && !this.core.isClosed()) try {this.commit(false);} catch (final Throwable e) {ConcurrentLog.logException(e);} try {super.close();} catch (final Throwable e) {ConcurrentLog.logException(e);} - try {this.core.close();} catch (final Throwable e) {ConcurrentLog.logException(e);} + // we do NOT close the core here because that is closed if the enclosing instance is closed + // do NOT uncomment the following line, which caused a "org.apache.solr.core.SolrCore Too many close [count:-1] on org.apache.solr.core.SolrCore@51af7c57" error + // try {this.core.close();} catch (final Throwable e) {ConcurrentLog.logException(e);} } @Override diff --git a/source/net/yacy/cora/federate/solr/instance/EmbeddedInstance.java b/source/net/yacy/cora/federate/solr/instance/EmbeddedInstance.java index b50495801..f94fce2ee 100644 --- a/source/net/yacy/cora/federate/solr/instance/EmbeddedInstance.java +++ b/source/net/yacy/cora/federate/solr/instance/EmbeddedInstance.java @@ -205,10 +205,17 @@ public class EmbeddedInstance implements SolrInstance { this.cores.put(name, c); return c; } + + protected void finalize() throws Throwable { + this.close(); + } @Override public synchronized void close() { - try {this.coreContainer.shutdown();} catch (final Throwable e) {ConcurrentLog.logException(e);} + if (this.coreContainer != null) try { + this.coreContainer.shutdown(); + this.coreContainer = null; + } catch (final Throwable e) {ConcurrentLog.logException(e);} } }