You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@metamodel.apache.org by ka...@apache.org on 2015/03/26 20:00:50 UTC
metamodel git commit: METAMODEL-124: Fixed
Repository: metamodel
Updated Branches:
refs/heads/master 61479411c -> 889075cda
METAMODEL-124: Fixed
Project: http://git-wip-us.apache.org/repos/asf/metamodel/repo
Commit: http://git-wip-us.apache.org/repos/asf/metamodel/commit/889075cd
Tree: http://git-wip-us.apache.org/repos/asf/metamodel/tree/889075cd
Diff: http://git-wip-us.apache.org/repos/asf/metamodel/diff/889075cd
Branch: refs/heads/master
Commit: 889075cda8e471627241ca980441e6fb67236173
Parents: 6147941
Author: Kasper Sørensen <i....@gmail.com>
Authored: Sat Mar 21 17:28:26 2015 +0100
Committer: Kasper Sørensen <i....@gmail.com>
Committed: Sat Mar 21 17:28:26 2015 +0100
----------------------------------------------------------------------
CHANGES.md | 1 +
.../ElasticSearchDropTableBuilder.java | 43 ++++++++++++++++++--
2 files changed, 41 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/metamodel/blob/889075cd/CHANGES.md
----------------------------------------------------------------------
diff --git a/CHANGES.md b/CHANGES.md
index da76568..0925565 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -1,6 +1,7 @@
### Apache MetaModel work-in-progress
* [METAMODEL-123] - Added compatibility with ElasticSearch version 1.4.x
+ * [METAMODEL-124] - Invoked ElasticSearch cross-version incompatible methods via reflection
### Apache MetaModel 4.3.2
http://git-wip-us.apache.org/repos/asf/metamodel/blob/889075cd/elasticsearch/src/main/java/org/apache/metamodel/elasticsearch/ElasticSearchDropTableBuilder.java
----------------------------------------------------------------------
diff --git a/elasticsearch/src/main/java/org/apache/metamodel/elasticsearch/ElasticSearchDropTableBuilder.java b/elasticsearch/src/main/java/org/apache/metamodel/elasticsearch/ElasticSearchDropTableBuilder.java
index 32becdf..e691ff2 100644
--- a/elasticsearch/src/main/java/org/apache/metamodel/elasticsearch/ElasticSearchDropTableBuilder.java
+++ b/elasticsearch/src/main/java/org/apache/metamodel/elasticsearch/ElasticSearchDropTableBuilder.java
@@ -18,6 +18,8 @@
*/
package org.apache.metamodel.elasticsearch;
+import java.lang.reflect.Method;
+
import org.apache.metamodel.MetaModelException;
import org.apache.metamodel.drop.AbstractTableDropBuilder;
import org.apache.metamodel.drop.TableDropBuilder;
@@ -37,7 +39,7 @@ import org.slf4j.LoggerFactory;
final class ElasticSearchDropTableBuilder extends AbstractTableDropBuilder {
private static final Logger logger = LoggerFactory.getLogger(ElasticSearchDropTableBuilder.class);
-
+
private final ElasticSearchUpdateCallback _updateCallback;
public ElasticSearchDropTableBuilder(ElasticSearchUpdateCallback updateCallback, Table table) {
@@ -56,11 +58,46 @@ final class ElasticSearchDropTableBuilder extends AbstractTableDropBuilder {
final String indexName = dataContext.getIndexName();
final DeleteMappingRequestBuilder requestBuilder = new DeleteMappingRequestBuilder(indicesAdminClient)
- .setIndices(indexName).setType(documentType);
+ .setIndices(indexName);
+ setType(requestBuilder, documentType);
+
final DeleteMappingResponse result = requestBuilder.execute().actionGet();
logger.debug("Delete mapping response: acknowledged={}", result.isAcknowledged());
-
+
final MutableSchema schema = (MutableSchema) table.getSchema();
schema.removeTable(table);
}
+
+ /**
+ * Invokes the {@link DeleteMappingRequestBuilder#setType(String...)} method
+ * using reflection. This is done because the API of ElasticSearch was
+ * changed and the method signature differes between different versions.
+ *
+ * @param requestBuilder
+ * @param documentType
+ */
+ private void setType(DeleteMappingRequestBuilder requestBuilder, String documentType) {
+ Object argument;
+ Method method;
+ try {
+ try {
+ method = requestBuilder.getClass().getDeclaredMethod("setType", String[].class);
+ argument = new String[] {documentType};
+ } catch (NoSuchMethodException e) {
+ logger.debug("No setType(String[]) method found, trying with a single String instead", e);
+ method = requestBuilder.getClass().getDeclaredMethod("setType", String.class);
+ argument = documentType;
+ }
+ } catch (Exception e) {
+ logger.error("Failed to resolve DeleteMappingRequestBuilder.setType(...) method", e);
+ throw new IllegalStateException("Failed to resolve DeleteMappingRequestBuilder.setType(...) method", e);
+ }
+ try {
+ method.setAccessible(true);
+ method.invoke(requestBuilder, argument);
+ } catch (Exception e) {
+ logger.error("Failed to invoke {}", method, e);
+ throw new IllegalStateException("Failed to invoke " + method, e);
+ }
+ }
}