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();

Reply via email to