Better error messaging when postings_format can be resolved or when a custom postings_format type can't be instantiated.

Relates to #2893
This commit is contained in:
Martijn van Groningen 2013-04-16 16:29:54 +02:00
parent 9a1c03408b
commit bcc16654d2
3 changed files with 13 additions and 7 deletions

View File

@ -25,6 +25,7 @@ import org.elasticsearch.common.inject.AbstractModule;
import org.elasticsearch.common.inject.Scopes;
import org.elasticsearch.common.inject.assistedinject.FactoryProvider;
import org.elasticsearch.common.inject.multibindings.MapBinder;
import org.elasticsearch.common.settings.NoClassSettingsException;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.index.codec.postingsformat.PostingFormats;
import org.elasticsearch.index.codec.postingsformat.PostingsFormatProvider;
@ -92,13 +93,17 @@ public class CodecModule extends AbstractModule {
String name = entry.getKey();
Settings settings = entry.getValue();
Class<? extends PostingsFormatProvider> type =
settings.getAsClass("type", null, "org.elasticsearch.index.codec.postingsformat.", "PostingsFormatProvider");
if (type == null) {
// nothing found, see if its in bindings as a binding name
String sType = settings.get("type");
if (sType == null || sType.trim().isEmpty()) {
throw new ElasticSearchIllegalArgumentException("PostingsFormat Factory [" + name + "] must have a type associated with it");
}
Class<? extends PostingsFormatProvider> type;
try {
type = settings.getAsClass("type", null, "org.elasticsearch.index.codec.postingsformat.", "PostingsFormatProvider");
} catch (NoClassSettingsException e) {
throw new ElasticSearchIllegalArgumentException("The specified type [" + sType + "] for postingsFormat Factory [" + name + "] can't be found");
}
postingFormatProviders.put(name, type);
}

View File

@ -84,7 +84,7 @@ public class PostingsFormatService extends AbstractIndexComponent {
public PostingsFormatProvider get(String name) throws ElasticSearchIllegalArgumentException {
PostingsFormatProvider provider = providers.get(name);
if (name == null) {
if (provider == null) {
throw new ElasticSearchIllegalArgumentException("failed to find postings_format [" + name + "]");
}
return provider;

View File

@ -19,12 +19,13 @@
package org.elasticsearch.indices;
import org.elasticsearch.ElasticSearchWrapperException;
import org.elasticsearch.index.Index;
import org.elasticsearch.index.IndexException;
/**
*/
public class IndexCreationException extends IndexException {
public class IndexCreationException extends IndexException implements ElasticSearchWrapperException {
public IndexCreationException(Index index, Throwable cause) {
super(index, "failed to create index", cause);