You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by th...@apache.org on 2014/07/01 16:49:27 UTC
svn commit: r1607102 - in /lucene/dev/trunk/solr/core/src:
java/org/apache/solr/rest/ java/org/apache/solr/rest/schema/analysis/
test/org/apache/solr/rest/
Author: thelabdude
Date: Tue Jul 1 14:49:26 2014
New Revision: 1607102
URL: http://svn.apache.org/r1607102
Log:
SOLR-6179: Better strategy for handling empty managed data to avoid spurious warning messages in the logs.
Modified:
lucene/dev/trunk/solr/core/src/java/org/apache/solr/rest/ManagedResource.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/rest/ManagedResourceStorage.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/rest/RestManager.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/rest/schema/analysis/ManagedWordSetResource.java
lucene/dev/trunk/solr/core/src/test/org/apache/solr/rest/TestRestManager.java
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/rest/ManagedResource.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/rest/ManagedResource.java?rev=1607102&r1=1607101&r2=1607102&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/rest/ManagedResource.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/rest/ManagedResource.java Tue Jul 1 14:49:26 2014
@@ -82,6 +82,7 @@ public abstract class ManagedResource {
*/
public void loadManagedDataAndNotify(List<ManagedResourceObserver> observers)
throws SolrException {
+
// load managed data from storage
reloadFromStorage();
@@ -89,7 +90,7 @@ public abstract class ManagedResource {
// also, as most analysis components will alter the initArgs it is processes them
// we need to clone the managed initArgs
notifyObserversDuringInit(managedInitArgs, observers);
-
+
// some basic date tracking around when the data was initialized and updated
initializedOn = new Date();
lastUpdateSinceInitialization = null;
@@ -105,10 +106,8 @@ public abstract class ManagedResource {
protected void notifyObserversDuringInit(NamedList<?> args, List<ManagedResourceObserver> observers)
throws SolrException {
- if (observers == null || observers.isEmpty()) {
- log.warn("No registered observers for {}", getResourceId());
+ if (observers == null || observers.isEmpty())
return;
- }
for (ManagedResourceObserver observer : observers) {
// clone the args for each observer as some components
@@ -163,7 +162,7 @@ public abstract class ManagedResource {
return false;
}
boolean madeChanges = false;
- if ( ! managedInitArgs.equals(updatedArgs)) {
+ if (!managedInitArgs.equals(updatedArgs)) {
managedInitArgs = (NamedList<Object>)updatedArgs.clone();
madeChanges = true;
}
@@ -251,14 +250,17 @@ public abstract class ManagedResource {
} catch (Throwable storeErr) {
// store failed, so try to reset the state of this object by reloading
- // from storage and then failing the store request
- try {
- reloadFromStorage();
- } catch (Exception reloadExc) {
- // note: the data we're managing now remains in a dubious state
- // however the text analysis component remains unaffected
- // (at least until core reload)
- log.error("Failed to load stop words from storage due to: "+reloadExc);
+ // from storage and then failing the store request, but only do that
+ // if we've successfully initialized before
+ if (initializedOn != null) {
+ try {
+ reloadFromStorage();
+ } catch (Exception reloadExc) {
+ // note: the data we're managing now remains in a dubious state
+ // however the text analysis component remains unaffected
+ // (at least until core reload)
+ log.error("Failed to load stop words from storage due to: "+reloadExc);
+ }
}
String errMsg = String.format(Locale.ROOT,
@@ -273,6 +275,9 @@ public abstract class ManagedResource {
* Returns this resource's initialization timestamp.
*/
public String getInitializedOn() {
+ if (initializedOn == null)
+ return null;
+
StringBuilder dateBuf = new StringBuilder();
try {
DateUtil.formatDate(initializedOn, null, dateBuf);
@@ -315,7 +320,10 @@ public abstract class ManagedResource {
toStore.put(INIT_ARGS_JSON_FIELD, convertNamedListToMap(managedInitArgs));
// report important dates when data was init'd / updated
- toStore.put(INITIALIZED_ON_JSON_FIELD, getInitializedOn());
+ String initializedOnStr = getInitializedOn();
+ if (initializedOnStr != null) {
+ toStore.put(INITIALIZED_ON_JSON_FIELD, initializedOnStr);
+ }
// if the managed data has been updated since initialization (ie. it's dirty)
// return that in the response as well ... which gives a good hint that the
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/rest/ManagedResourceStorage.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/rest/ManagedResourceStorage.java?rev=1607102&r1=1607101&r2=1607102&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/rest/ManagedResourceStorage.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/rest/ManagedResourceStorage.java Tue Jul 1 14:49:26 2014
@@ -135,10 +135,11 @@ public abstract class ManagedResourceSto
@Override
public void configure(SolrResourceLoader loader, NamedList<String> initArgs) throws SolrException {
- String storageDirArg = initArgs.get("storageDir");
+ String storageDirArg = initArgs.get(STORAGE_DIR_INIT_ARG);
if (storageDirArg == null || storageDirArg.trim().length() == 0)
- throw new IllegalArgumentException("Required configuration parameter 'storageDir' not provided!");
+ throw new IllegalArgumentException("Required configuration parameter '"+
+ STORAGE_DIR_INIT_ARG+"' not provided!");
File dir = new File(storageDirArg);
if (!dir.isDirectory())
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/rest/RestManager.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/rest/RestManager.java?rev=1607102&r1=1607101&r2=1607102&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/rest/RestManager.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/rest/RestManager.java Tue Jul 1 14:49:26 2014
@@ -452,7 +452,11 @@ public class RestManager {
throws SolrException {
if (managedData == null) {
- return; // this is OK, just means there are no stored registrations
+ // this is OK, just means there are no stored registrations
+ // storing an empty list is safe and avoid future warnings about
+ // the data not existing
+ storeManagedData(new ArrayList<Map<String,String>>(0));
+ return;
}
List<Object> managedList = (List<Object>)managedData;
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/rest/schema/analysis/ManagedWordSetResource.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/rest/schema/analysis/ManagedWordSetResource.java?rev=1607102&r1=1607101&r2=1607102&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/rest/schema/analysis/ManagedWordSetResource.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/rest/schema/analysis/ManagedWordSetResource.java Tue Jul 1 14:49:26 2014
@@ -16,9 +16,11 @@ package org.apache.solr.rest.schema.anal
* limitations under the License.
*/
+import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Locale;
+import java.util.Map;
import java.util.Set;
import java.util.SortedSet;
import java.util.TreeSet;
@@ -104,6 +106,8 @@ public class ManagedWordSetResource exte
} else {
managedWords.addAll(wordList);
}
+ } else {
+ storeManagedData(new ArrayList<String>(0)); // stores an empty word set
}
log.info("Loaded "+managedWords.size()+" words for "+getResourceId());
Modified: lucene/dev/trunk/solr/core/src/test/org/apache/solr/rest/TestRestManager.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/test/org/apache/solr/rest/TestRestManager.java?rev=1607102&r1=1607101&r2=1607102&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/test/org/apache/solr/rest/TestRestManager.java (original)
+++ lucene/dev/trunk/solr/core/src/test/org/apache/solr/rest/TestRestManager.java Tue Jul 1 14:49:26 2014
@@ -16,6 +16,7 @@ package org.apache.solr.rest;
* limitations under the License.
*/
+import java.io.File;
import java.util.Arrays;
import java.util.Locale;
import java.util.Set;
@@ -222,4 +223,29 @@ public class TestRestManager extends Sol
// make sure it's really gone
assertJQ("/config/managed", "/managedResources==[]");
}
+
+ @Test
+ public void testReloadFromPersistentStorage() throws Exception {
+ SolrResourceLoader loader = new SolrResourceLoader("./");
+ File unitTestStorageDir = createTempDir("testRestManager");
+ assertTrue(unitTestStorageDir.getAbsolutePath()+" is not a directory!",
+ unitTestStorageDir.isDirectory());
+ assertTrue(unitTestStorageDir.canRead());
+ assertTrue(unitTestStorageDir.canWrite());
+
+ NamedList<String> ioInitArgs = new NamedList<>();
+ ioInitArgs.add(ManagedResourceStorage.STORAGE_DIR_INIT_ARG,
+ unitTestStorageDir.getAbsolutePath());
+
+ StorageIO storageIO = new ManagedResourceStorage.FileStorageIO();
+ storageIO.configure(loader, ioInitArgs);
+
+ NamedList<String> initArgs = new NamedList<>();
+ RestManager restManager = new RestManager();
+ restManager.init(loader, initArgs, storageIO);
+
+ // verifies a RestManager can be reloaded from a previous RestManager's data
+ RestManager restManager2 = new RestManager();
+ restManager2.init(loader, initArgs, storageIO);
+ }
}
\ No newline at end of file