summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Peter Christen <mc@yacy.net>2013-05-29 13:09:34 +0200
committerMichael Peter Christen <mc@yacy.net>2013-05-29 13:09:34 +0200
commit281959a2d727d9c38f0d62aec4b8f91b5db91429 (patch)
treedb2efbe693085aeb519b83c2d74214b2b7f390dc
parent80a7989e8c4e5a42157d594d1e63d63ce34cb363 (diff)
added option to re-boot the embedded solr during run-time. Added also
API recording for this method so it can be repeated automatically. The index dump generation is now also available for API recording. Added some synchronization in backend which was necessary for this.
-rw-r--r--htroot/IndexControlURLs_p.html9
-rw-r--r--htroot/IndexControlURLs_p.java6
-rw-r--r--source/net/yacy/search/index/Fulltext.java46
3 files changed, 50 insertions, 11 deletions
diff --git a/htroot/IndexControlURLs_p.html b/htroot/IndexControlURLs_p.html
index 8dc15f2c9..c22c46516 100644
--- a/htroot/IndexControlURLs_p.html
+++ b/htroot/IndexControlURLs_p.html
@@ -161,6 +161,15 @@ function updatepage(str) {
</dd>
</dl>
</fieldset>
+ </form>
+ <form action="IndexControlURLs_p.html" method="post" enctype="multipart/form-data" accept-charset="UTF-8">
+ <fieldset><legend>Reboot Solr Core</legend>
+ <dl>
+ <dt class="TableCellLight">&nbsp;</dt>
+ <dd><input type="submit" name="rebootsolr" value="Shut Down and Re-Start Solr" class="submitready" style="width:240px;"/>
+ </dd>
+ </dl>
+ </fieldset>
</form>::
#(/dumprestore)#
diff --git a/htroot/IndexControlURLs_p.java b/htroot/IndexControlURLs_p.java
index 6d3fe2e59..69f43c97a 100644
--- a/htroot/IndexControlURLs_p.java
+++ b/htroot/IndexControlURLs_p.java
@@ -270,6 +270,7 @@ public class IndexControlURLs_p {
final File dump = segment.fulltext().dumpSolr();
prop.put("indexdump", 1);
prop.put("indexdump_dumpfile", dump.getAbsolutePath());
+ sb.tables.recordAPICall(post, "IndexControlURLs_p.html", WorkTables.TABLE_API_TYPE_STEERING, "solr dump generation");
}
if (post.containsKey("indexrestore")) {
@@ -277,6 +278,11 @@ public class IndexControlURLs_p {
segment.fulltext().restoreSolr(dump);
}
+ if (post.containsKey("rebootsolr")) {
+ segment.fulltext().rebootSolr();
+ sb.tables.recordAPICall(post, "IndexControlURLs_p.html", WorkTables.TABLE_API_TYPE_STEERING, "solr reboot");
+ }
+
if (post.containsKey("deletedomain")) {
final String domain = post.get("domain");
segment.fulltext().deleteDomainHostname(domain, null);
diff --git a/source/net/yacy/search/index/Fulltext.java b/source/net/yacy/search/index/Fulltext.java
index 54c5d8694..3e61c6975 100644
--- a/source/net/yacy/search/index/Fulltext.java
+++ b/source/net/yacy/search/index/Fulltext.java
@@ -221,11 +221,15 @@ public final class Fulltext {
}
public SolrConnector getDefaultConnector() {
- return this.solrInstances.getDefaultMirrorConnector();
+ synchronized (this.solrInstances) {
+ return this.solrInstances.getDefaultMirrorConnector();
+ }
}
public SolrConnector getWebgraphConnector() {
- return this.solrInstances.getMirrorConnector(WebgraphSchema.CORE_NAME);
+ synchronized (this.solrInstances) {
+ return this.solrInstances.getMirrorConnector(WebgraphSchema.CORE_NAME);
+ }
}
public void clearCache() {
@@ -247,20 +251,24 @@ public final class Fulltext {
}
public void clearLocalSolr() throws IOException {
- EmbeddedInstance instance = this.solrInstances.getSolr0();
- if (instance != null) {
- for (String name: instance.getCoreNames()) new EmbeddedSolrConnector(instance, name).clear();
+ synchronized (this.solrInstances) {
+ EmbeddedInstance instance = this.solrInstances.getSolr0();
+ if (instance != null) {
+ for (String name: instance.getCoreNames()) new EmbeddedSolrConnector(instance, name).clear();
+ }
+ this.commit(false);
+ this.solrInstances.clearCache();
}
- this.commit(false);
- this.solrInstances.clearCache();
}
public void clearRemoteSolr() throws IOException {
- ShardInstance instance = this.solrInstances.getSolr1();
- if (instance != null) {
- for (String name: instance.getCoreNames()) new RemoteSolrConnector(instance, name).clear();
+ synchronized (this.solrInstances) {
+ ShardInstance instance = this.solrInstances.getSolr1();
+ if (instance != null) {
+ for (String name: instance.getCoreNames()) new RemoteSolrConnector(instance, name).clear();
+ }
+ this.solrInstances.clearCache();
}
- this.solrInstances.clearCache();
}
/**
@@ -822,6 +830,22 @@ public final class Fulltext {
}
}
+ /**
+ * reboot solr (experimental to check resource management
+ */
+ public void rebootSolr() {
+ synchronized (this.solrInstances) {
+ this.disconnectLocalSolr();
+ this.solrInstances.close();
+ this.solrInstances = new InstanceMirror();
+ try {
+ this.connectLocalSolr();
+ } catch (IOException e) {
+ Log.logException(e);
+ }
+ }
+ }
+
// export methods
public Export export(final File f, final String filter, final int format, final boolean dom) {
if ((this.exportthread != null) && (this.exportthread.isAlive())) {