You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ho...@apache.org on 2012/08/21 19:25:34 UTC
svn commit: r1375674 - in /lucene/dev/trunk/solr: CHANGES.txt
core/src/java/org/apache/solr/core/SolrCore.java
core/src/java/org/apache/solr/update/VersionInfo.java
core/src/test/org/apache/solr/core/TestBadConfig.java
Author: hossman
Date: Tue Aug 21 17:25:34 2012
New Revision: 1375674
URL: http://svn.apache.org/viewvc?rev=1375674&view=rev
Log:
SOLR-3746: Proper error reporting if updateLog is configured w/o necessary _version_ field in schema.xml
Modified:
lucene/dev/trunk/solr/CHANGES.txt
lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/SolrCore.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/VersionInfo.java
lucene/dev/trunk/solr/core/src/test/org/apache/solr/core/TestBadConfig.java
Modified: lucene/dev/trunk/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/CHANGES.txt?rev=1375674&r1=1375673&r2=1375674&view=diff
==============================================================================
--- lucene/dev/trunk/solr/CHANGES.txt (original)
+++ lucene/dev/trunk/solr/CHANGES.txt Tue Aug 21 17:25:34 2012
@@ -82,6 +82,9 @@ Bug Fixes
conjunction with stored copyField targets by making real-time get never
return copyField targets. (yonik)
+* SOLR-3746: Proper error reporting if updateLog is configured w/o necessary
+ "_version_" field in schema.xml (hossman)
+
Other Changes
----------------------
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/SolrCore.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/SolrCore.java?rev=1375674&r1=1375673&r2=1375674&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/SolrCore.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/SolrCore.java Tue Aug 21 17:25:34 2012
@@ -479,6 +479,13 @@ public final class SolrCore implements S
} catch (SolrException e) {
throw e;
} catch (Exception e) {
+ // The JVM likes to wrap our helpful SolrExceptions in things like
+ // "InvocationTargetException" that have no useful getMessage
+ if (null != e.getCause() && e.getCause() instanceof SolrException) {
+ SolrException inner = (SolrException) e.getCause();
+ throw inner;
+ }
+
throw new SolrException(SolrException.ErrorCode.SERVER_ERROR,"Error Instantiating "+msg+", "+className+ " failed to instantiate " +cast.getName(), e);
}
}
@@ -502,6 +509,13 @@ public final class SolrCore implements S
} catch (SolrException e) {
throw e;
} catch (Exception e) {
+ // The JVM likes to wrap our helpful SolrExceptions in things like
+ // "InvocationTargetException" that have no useful getMessage
+ if (null != e.getCause() && e.getCause() instanceof SolrException) {
+ SolrException inner = (SolrException) e.getCause();
+ throw inner;
+ }
+
throw new SolrException(SolrException.ErrorCode.SERVER_ERROR,"Error Instantiating "+msg+", "+className+ " failed to instantiate " + UpdateHandler.class.getName(), e);
}
}
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/VersionInfo.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/VersionInfo.java?rev=1375674&r1=1375673&r2=1375674&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/VersionInfo.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/VersionInfo.java Tue Aug 21 17:25:34 2012
@@ -28,6 +28,7 @@ import org.apache.lucene.util.BitUtil;
import org.apache.lucene.util.BytesRef;
import org.apache.solr.common.SolrException;
import org.apache.solr.core.SolrCore;
+import org.apache.solr.schema.IndexSchema;
import org.apache.solr.schema.SchemaField;
import org.apache.solr.search.SolrIndexSearcher;
import org.apache.solr.util.RefCounted;
@@ -41,10 +42,45 @@ public class VersionInfo {
private SchemaField idField;
final ReadWriteLock lock = new ReentrantReadWriteLock(true);
+ /**
+ * Gets and returns the {@link #VERSION_FIELD} from the specified
+ * schema, after verifying that it is indexed, stored, and single-valued.
+ * If any of these pre-conditions are not met, it throws a SolrException
+ * with a user suitable message indicating the problem.
+ */
+ public static SchemaField getAndCheckVersionField(IndexSchema schema)
+ throws SolrException {
+ final String errPrefix = VERSION_FIELD + "field must exist in schema, using indexed=\"true\" stored=\"true\" and multiValued=\"false\"";
+ SchemaField sf = schema.getFieldOrNull(VERSION_FIELD);
+
+ if (null == sf) {
+ throw new SolrException
+ (SolrException.ErrorCode.SERVER_ERROR,
+ errPrefix + " (" + VERSION_FIELD + " does not exist)");
+ }
+ if ( !sf.indexed() ) {
+ throw new SolrException
+ (SolrException.ErrorCode.SERVER_ERROR,
+ errPrefix + " (" + VERSION_FIELD + " is not indexed");
+ }
+ if ( !sf.stored() ) {
+ throw new SolrException
+ (SolrException.ErrorCode.SERVER_ERROR,
+ errPrefix + " (" + VERSION_FIELD + " is not stored");
+ }
+ if ( sf.multiValued() ) {
+ throw new SolrException
+ (SolrException.ErrorCode.SERVER_ERROR,
+ errPrefix + " (" + VERSION_FIELD + " is not multiValued");
+ }
+
+ return sf;
+ }
+
public VersionInfo(UpdateLog ulog, int nBuckets) {
this.ulog = ulog;
SolrCore core = ulog.uhandler.core;
- versionField = core.getSchema().getFieldOrNull(VERSION_FIELD);
+ versionField = getAndCheckVersionField(core.getSchema());
idField = core.getSchema().getUniqueKeyField();
buckets = new VersionBucket[ BitUtil.nextHighestPowerOfTwo(nBuckets) ];
for (int i=0; i<buckets.length; i++) {
Modified: lucene/dev/trunk/solr/core/src/test/org/apache/solr/core/TestBadConfig.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/test/org/apache/solr/core/TestBadConfig.java?rev=1375674&r1=1375673&r2=1375674&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/test/org/apache/solr/core/TestBadConfig.java (original)
+++ lucene/dev/trunk/solr/core/src/test/org/apache/solr/core/TestBadConfig.java Tue Aug 21 17:25:34 2012
@@ -27,6 +27,21 @@ public class TestBadConfig extends Abstr
assertConfigs("bad_solrconfig.xml","schema.xml","unset.sys.property");
}
+ public void testUpdateLogButNoVersionField() throws Exception {
+
+ // :TODO: neccessary until SOLR-3699 is fixed
+ System.setProperty("solr.directoryFactory",
+ "org.apache.solr.core.SimpleFSDirectoryFactory");
+
+
+ System.setProperty("enable.update.log", "true");
+ try {
+ assertConfigs("solrconfig.xml", "schema12.xml", "_version_");
+ } finally {
+ System.clearProperty("enable.update.log");
+ }
+ }
+
public void testBogusScriptEngine() throws Exception {
// sanity check
Assume.assumeTrue(null == (new ScriptEngineManager()).getEngineByName("giberish"));