Skip to content

Commit

Permalink
Added fallback configuration property for legacy Solr configurations.
Browse files Browse the repository at this point in the history
  • Loading branch information
ivanmrsulja committed Aug 28, 2024
1 parent fa52b27 commit 8059404
Show file tree
Hide file tree
Showing 4 changed files with 40 additions and 14 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@

import javax.servlet.ServletContext;

import edu.cornell.mannlib.vitro.webapp.servlet.setup.SearchEngineSmokeTest;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.client.StandardHttpRequestRetryHandler;
import org.apache.solr.client.solrj.SolrClient;
Expand All @@ -19,7 +20,6 @@
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.client.solrj.response.QueryResponse;

import edu.cornell.mannlib.vitro.webapp.config.ConfigurationProperties;
import edu.cornell.mannlib.vitro.webapp.modules.Application;
import edu.cornell.mannlib.vitro.webapp.modules.ComponentStartupStatus;
import edu.cornell.mannlib.vitro.webapp.modules.searchEngine.SearchEngine;
Expand All @@ -44,8 +44,7 @@ public class SolrSearchEngine implements SearchEngine {
@Override
public void startup(Application application, ComponentStartupStatus css) {
ServletContext ctx = application.getServletContext();
String solrServerUrlString = ConfigurationProperties.getBean(ctx)
.getProperty("vitro.local.searchengine.url");
String solrServerUrlString = SearchEngineSmokeTest.getSearchEngineURLProperty();
if (solrServerUrlString == null) {
css.fatal("Could not find vitro.local.searchengine.url in "
+ "runtime.properties. Vitro application needs the URL of "
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,12 +77,30 @@ private static String getBaseServiceUrl(String url) {
return url;
}

public static String getSearchEngineURLProperty() {
ConfigurationProperties config = ConfigurationProperties.getInstance();
if (config.getProperty("vitro.local.searchengine.url", "").isEmpty()) {
return tryFetchLegacySolrConfiguration(config);
}

return config.getProperty("vitro.local.searchengine.url", "");
}

private static String tryFetchLegacySolrConfiguration(ConfigurationProperties config) {
String legacyConfigValue = config.getProperty("vitro.local.solr.url", "");
if (!legacyConfigValue.isEmpty()) {
log.warn(
"vitro.local.solr.url is deprecated, switch to using vitro.local.searchengine.url as soon as possible.");
}

return legacyConfigValue;
}

@Override
public void contextInitialized(ServletContextEvent sce) {
final StartupStatus ss = StartupStatus.getBean(sce.getServletContext());

String searchEngineUrlString =
ConfigurationProperties.getInstance().getProperty("vitro.local.searchengine.url", "");
String searchEngineUrlString = getSearchEngineURLProperty();

if (searchEngineUrlString.isEmpty()) {
ss.fatal(this, "No search engine is configured");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;

import edu.cornell.mannlib.vitro.webapp.config.ConfigurationProperties;
import edu.cornell.mannlib.vitro.webapp.startup.StartupStatus;
import edu.cornell.mannlib.vitro.webapp.utils.threads.VitroBackgroundThread;
import org.apache.http.util.EntityUtils;
Expand Down Expand Up @@ -52,12 +51,11 @@ public SolrSmokeTest(ServletContextListener listener) {
public void doTest(ServletContextEvent sce) {
final StartupStatus ss = StartupStatus.getBean(sce.getServletContext());

String solrUrlString = ConfigurationProperties.getInstance()
.getProperty("vitro.local.searchengine.url", "");
String solrUrlString = SearchEngineSmokeTest.getSearchEngineURLProperty();
if (solrUrlString.isEmpty()) {
ss.fatal(listener, "Can't connect to Solr search engine. "
+ "runtime.properties must contain a value for "
+ "vitro.local.searchengine.url");
+ "vitro.local.searchengine.url (vitro.local.solr.url)");
return;
}

Expand All @@ -67,7 +65,7 @@ public void doTest(ServletContextEvent sce) {
solrUrl = new URL(solrUrlString);
} catch (MalformedURLException e) {
ss.fatal(listener, "Can't connect to Solr search engine. "
+ "The value for vitro.local.searchengine.url "
+ "The value for vitro.local.searchengine.url (vitro.local.solr.url) "
+ "in runtime.properties is not a valid URL: '"
+ solrUrlString + "'", e);
}
Expand Down Expand Up @@ -151,14 +149,14 @@ private void reportPingProblem(SolrProblemException e) {
private void warnSocketTimeout() {
ss.warning(listener, "Can't connect to the Solr search engine. "
+ "The socket connection has repeatedly timed out. "
+ "Check the value of vitro.local.searchengine.url in "
+ "Check the value of vitro.local.searchengine.url (vitro.local.solr.url) in "
+ "runtime.properties. Is Solr responding at that URL?");
}

private void warnBadHttpStatus(int status) {
ss.warning(listener, "Can't connect to the Solr search engine. "
+ "The Solr server returned a status code of " + status
+ ". Check the value of vitro.local.searchengine.url in "
+ ". Check the value of vitro.local.searchengine.url (vitro.local.solr.url) in "
+ "runtime.properties.");
}

Expand All @@ -170,15 +168,15 @@ private void warnProtocolViolation(HttpException e) {
private void warnUnknownHost(UnknownHostException e) {
ss.warning(listener, "Can't connect to the Solr search engine. '"
+ e.getMessage() + "' is an unknown host."
+ "Check the value of vitro.local.searchengine.url in "
+ "Check the value of vitro.local.searchengine.url (vitro.local.solr.url) in "
+ "runtime.properties.", e);
}

private void warnConnectionRefused(ConnectException e) {
ss.warning(listener, "Can't connect to the Solr search engine. "
+ "The host refused the connection. "
+ "Is it possible that the port number is incorrect? "
+ "Check the value of vitro.local.searchengine.url in "
+ "Check the value of vitro.local.searchengine.url (vitro.local.solr.url) in "
+ "runtime.properties.", e);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
import java.security.NoSuchAlgorithmException;

import edu.cornell.mannlib.vitro.webapp.config.ConfigurationProperties;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
Expand All @@ -18,6 +20,8 @@

public class ESHttpsBasicClientFactory {

private static final Log log = LogFactory.getLog(ESHttpsBasicClientFactory.class);

private static volatile CloseableHttpClient httpsClient;

private static void initializeClient() {
Expand All @@ -26,6 +30,13 @@ private static void initializeClient() {
String elasticPassword =
ConfigurationProperties.getInstance().getProperty("vitro.local.searchengine.password", "");

if (elasticUsername.isEmpty() && elasticPassword.isEmpty()) {
log.warn(
"You haven't set up username and password for your ES/OS client. " +
"If this is intentional, it is strongly recommended to switch to " +
"basic authentication as well as https.)");
}

CredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(
new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT),
Expand Down

0 comments on commit 8059404

Please sign in to comment.