METAMODEL-106: Added error handling/logging when index/docType not found Project: http://git-wip-us.apache.org/repos/asf/metamodel/repo Commit: http://git-wip-us.apache.org/repos/asf/metamodel/commit/6095d1c5 Tree: http://git-wip-us.apache.org/repos/asf/metamodel/tree/6095d1c5 Diff: http://git-wip-us.apache.org/repos/asf/metamodel/diff/6095d1c5
Branch: refs/heads/master Commit: 6095d1c5290b7d0aea6ccd34c23dcd523724cbdd Parents: ab12454 Author: Kasper Sørensen <[email protected]> Authored: Sun Jan 25 17:51:08 2015 +0100 Committer: Kasper Sørensen <[email protected]> Committed: Sun Jan 25 17:51:08 2015 +0100 ---------------------------------------------------------------------- .../elasticsearch/ElasticSearchDataContext.java | 36 ++++++++++++++------ 1 file changed, 26 insertions(+), 10 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/metamodel/blob/6095d1c5/elasticsearch/src/main/java/org/apache/metamodel/elasticsearch/ElasticSearchDataContext.java ---------------------------------------------------------------------- diff --git a/elasticsearch/src/main/java/org/apache/metamodel/elasticsearch/ElasticSearchDataContext.java b/elasticsearch/src/main/java/org/apache/metamodel/elasticsearch/ElasticSearchDataContext.java index 60b2274..06353f1 100644 --- a/elasticsearch/src/main/java/org/apache/metamodel/elasticsearch/ElasticSearchDataContext.java +++ b/elasticsearch/src/main/java/org/apache/metamodel/elasticsearch/ElasticSearchDataContext.java @@ -142,6 +142,8 @@ public class ElasticSearchDataContext extends QueryPostprocessDataContext implem * user. */ public static SimpleTableDef[] detectSchema(Client client, String indexName) { + logger.info("Detecting schema for index '{}'", indexName); + final ClusterState cs; final ClusterStateRequestBuilder clusterStateRequestBuilder = client.admin().cluster().prepareState(); @@ -163,18 +165,24 @@ public class ElasticSearchDataContext extends QueryPostprocessDataContext implem } cs = clusterStateRequestBuilder.execute().actionGet().getState(); + final List<SimpleTableDef> result = new ArrayList<SimpleTableDef>(); + final IndexMetaData imd = cs.getMetaData().index(indexName); - final ImmutableOpenMap<String, MappingMetaData> mappings = imd.getMappings(); - final ObjectLookupContainer<String> documentTypes = mappings.keys(); + if (imd == null) { + // index does not exist + logger.warn("No metadata returned for index name '{}' - no tables will be detected."); + } else { + final ImmutableOpenMap<String, MappingMetaData> mappings = imd.getMappings(); + final ObjectLookupContainer<String> documentTypes = mappings.keys(); - final List<SimpleTableDef> result = new ArrayList<SimpleTableDef>(); - for (final Object documentTypeCursor : documentTypes) { - final String documentType = ((ObjectCursor<?>) documentTypeCursor).value.toString(); - try { - final SimpleTableDef table = detectTable(cs, indexName, documentType); - result.add(table); - } catch (Exception e) { - logger.error("Unexpected error during detectTable for document type: {}", documentType, e); + for (final Object documentTypeCursor : documentTypes) { + final String documentType = ((ObjectCursor<?>) documentTypeCursor).value.toString(); + try { + final SimpleTableDef table = detectTable(cs, indexName, documentType); + result.add(table); + } catch (Exception e) { + logger.error("Unexpected error during detectTable for document type '{}'", documentType, e); + } } } final SimpleTableDef[] tableDefArray = (SimpleTableDef[]) result.toArray(new SimpleTableDef[result.size()]); @@ -202,8 +210,16 @@ public class ElasticSearchDataContext extends QueryPostprocessDataContext implem * @return a table definition for ElasticSearch. */ public static SimpleTableDef detectTable(ClusterState cs, String indexName, String documentType) throws Exception { + logger.debug("Detecting table for document type '{}' in index '{}'", documentType, indexName); final IndexMetaData imd = cs.getMetaData().index(indexName); + if (imd == null) { + // index does not exist + throw new IllegalArgumentException("No such index: " + indexName); + } final MappingMetaData mappingMetaData = imd.mapping(documentType); + if (mappingMetaData == null) { + throw new IllegalArgumentException("No such document type in index '" + indexName + "': " + documentType); + } final Map<String, Object> mp = mappingMetaData.getSourceAsMap(); final Iterator<Map.Entry<String, Object>> it = mp.entrySet().iterator(); final Map.Entry<String, Object> pair = it.next();
