From 9cdffd0c09861acec7a6844793067f367e1150b2 Mon Sep 17 00:00:00 2001
From: j2blake
Date: Wed, 26 Sep 2012 16:02:27 +0000
Subject: [PATCH] Merge from 1.5 branch: NIHVIVO-3973 If the Solr index is not
available, do not offer the user the ability to re-index. Show an error
message instead.
---
.../search/controller/IndexController.java | 20 ++++++++++++++---
.../freemarker/body/admin/searchIndex.ftl | 22 ++++++++++++++++---
2 files changed, 36 insertions(+), 6 deletions(-)
diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/search/controller/IndexController.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/search/controller/IndexController.java
index 90aa503fd..0738a5772 100644
--- a/webapp/src/edu/cornell/mannlib/vitro/webapp/search/controller/IndexController.java
+++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/search/controller/IndexController.java
@@ -15,6 +15,8 @@ import javax.servlet.http.HttpServletResponse;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.solr.client.solrj.SolrServer;
+import org.apache.solr.client.solrj.SolrServerException;
import edu.cornell.mannlib.vitro.webapp.auth.permissions.SimplePermission;
import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.Actions;
@@ -26,6 +28,7 @@ import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.Red
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.ResponseValues;
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.TemplateResponseValues;
import edu.cornell.mannlib.vitro.webapp.search.indexing.IndexBuilder;
+import edu.cornell.mannlib.vitro.webapp.search.solr.SolrSetup;
import edu.cornell.mannlib.vitro.webapp.utils.threads.VitroBackgroundThread.WorkLevel;
import edu.cornell.mannlib.vitro.webapp.utils.threads.VitroBackgroundThread.WorkLevelStamp;
@@ -151,9 +154,20 @@ public class IndexController extends FreemarkerHttpServlet {
body.put("elapsed", formatElapsedTime(since, new Date()));
body.put("expected", formatElapsedTime(since, expectedCompletion));
body.put("hasPreviousBuild", since.getTime() > 0L);
+ body.put("indexIsConnected", testIndexConnection());
return new TemplateResponseValues(TEMPLATE_NAME, body);
}
+ private Boolean testIndexConnection() {
+ try {
+ SolrSetup.getSolrServer(getServletContext()).ping();
+ return Boolean.TRUE;
+ } catch (Exception e) {
+ log.error("Can't connect to the Solr server.", e);
+ return Boolean.FALSE;
+ }
+ }
+
private Date figureExpectedCompletion(Date startTime, long totalToDo,
long completedCount) {
Date now = new Date();
@@ -183,11 +197,11 @@ public class IndexController extends FreemarkerHttpServlet {
private String figureCurrentTask(Collection flags) {
if (flags.contains(IndexBuilder.FLAG_REBUILDING)) {
- return "rebuilt";
+ return "Rebuilding";
} else if (flags.contains(IndexBuilder.FLAG_UPDATING)) {
- return "updated";
+ return "Updating";
} else {
- return "";
+ return "Not working on";
}
}
diff --git a/webapp/web/templates/freemarker/body/admin/searchIndex.ftl b/webapp/web/templates/freemarker/body/admin/searchIndex.ftl
index fb5a94b7c..ab5ee849e 100644
--- a/webapp/web/templates/freemarker/body/admin/searchIndex.ftl
+++ b/webapp/web/templates/freemarker/body/admin/searchIndex.ftl
@@ -6,9 +6,20 @@
Search Index Status
-<#if worklevel == "IDLE">
+<#if !indexIsConnected>
+
+
+
+ The search index is not connected.
+ SolrServer.ping() failed.
+
Check startup status page and/or Tomcat logs for more information.
+
+
+<#elseif worklevel == "IDLE">
+
+ The search indexer is idle.
<#if hasPreviousBuild??>
- Most recent update was at ${since?string("hh:mm:ss a, MMMM dd, yyyy")}
+ The most recent update was at ${since?string("hh:mm:ss a, MMMM dd, yyyy")}
#if>
+
<#elseif totalToDo == 0>
+
Preparing to rebuild the search index.
since ${since?string("hh:mm:ss a, MMMM dd, yyyy")}, elapsed time ${elapsed}
+
<#else>
- The search index is currently being ${currentTask}.
+
+ ${currentTask} the search index.
since ${since?string("hh:mm:ss a, MMMM dd, yyyy")}, elapsed time ${elapsed}, estimated total time ${expected}
Completed ${completedCount} out of ${totalToDo} index records.
+
#if>