Well it's not so simple I suppose. You also need to exclude the elasticsearch2 maven module from the pom.xml since that one is actually contributing the elasticsearch client to the classpath. For the sake of simplicity, we could introduce profiles that only have a specific ES version, but that doesn't scale obviously regarding possible other version combinations.

I can introduce a profile if you want, but a real fix as I said needs classloader magic like what e.g. JBoss Modules does.


Mit freundlichen Grüßen,
------------------------------------------------------------------------
*Christian Beikov*
Am 27.09.2017 um 20:28 schrieb Julian Hyde:
I agree with Christian that it’s just a problem with sqlline’s class path. The 
simplest solution is to remove elasticsearch2 from the line that builds the 
class path:

for module in core cassandra druid elasticsearch2 elasticsearch5 file mongodb 
spark splunk example/csv example/function; do
   CP=${CP}${module}/target/classes:
   CP=${CP}${module}/target/test-classes:
done

Then sqlline will work out of the box for ES5. People who want to run ES2 will 
have to edit the script.

Kunwar, Can you please log a JIRA case?

Christian, Can you you fix it?

It’s conceivable that someone would want to combine data from an ES2 and ES5 
instance, but we don’t have an answer for them, whether they invoke Calcite via 
sqlline or any other way. The incompatible libraries will clash, unless there 
is some class-loader magic keeping them in different namespaces. The right 
answer is probably something like Jboss modules, but it’s low priority.

Julian


On Sep 27, 2017, at 9:29 AM, Christian Beikov <christian.bei...@gmail.com> 
wrote:

Depends if you want to be able to connect to an ES2 and ES5 server at the
same time through sqlline.

Am 27.09.2017 17:53 schrieb "Josh Elser" <josh.el...@gmail.com>:

A quick solution is to add some documentation around how to give a
specific version of ElasticSearch at build-time. This would help folks
build Calcite with the exact version that they want (assuming that the API
hasn't changed and the adapter actually works with that version of ES)

We don't need to have multiple versions of ElasticSearch on the classpath
at once, right?

On 9/27/17 2:13 AM, Christian Beikov wrote:

Sqlline is problematic as it will have both elastic search versions on
the classpath. I haven't thought about that before. In the meantime you
could remove old versions of libraries from the "target/fullclasspath.txt"
file to workaround the classpath problem.

@Julian Hyde: How should we deal with something like this? We'd need
isolated "modules" instead of a flat class path for sqlline. Maybe we could
build sqlline on JBoss Modules(https://github.com/jbo
ss-modules/jboss-modules) to achieve that?


Mit freundlichen Grüßen,
------------------------------------------------------------------------
*Christian Beikov*
Am 27.09.2017 um 01:30 schrieb Kunwar Deep Singh Toor:

---------- Forwarded message ----------
From: Kunwar Deep Singh Toor <kt...@g.clemson.edu>
Date: Mon, Sep 25, 2017 at 8:16 PM
Subject: ElasticSearch5 not working
To: dev-i...@calcite.apache.org


Hi,

  I have been trying to connect to the ElasticSearch  suing ES adapter
through sqlline. I was able to connect to ES 2.1.4 using the ES2 adapter
but when I try connecting to ES 5.1.1 using the ES5 adapter the following
error pops up, I checked the logs for ElasticSearch and it does not
show  a
connection attempt being made.

The following is the error:
java.lang.NoSuchMethodError: org.elasticsearch.transport.cl
ient.PreBuiltTransportClient.addPlugins(Ljava/util/Collectio
n;Ljava/util/Collection;)Ljava/util/Collection;
     at org.elasticsearch.transport.client.PreBuiltTransportClient.<
init>(PreBuiltTransportClient.java:130)
     at org.elasticsearch.transport.client.PreBuiltTransportClient.<
init>(PreBuiltTransportClient.java:116)
     at org.elasticsearch.transport.client.PreBuiltTransportClient.<
init>(PreBuiltTransportClient.java:106)
     at org.apache.calcite.adapter.elasticsearch5.Elasticsearch5Sche
ma.open(Elasticsearch5Schema.java:119)
     at org.apache.calcite.adapter.elasticsearch5.Elasticsearch5Sche
ma.<init>(Elasticsearch5Schema.java:74)
     at org.apache.calcite.adapter.elasticsearch5.Elasticsearch5Sche
maFactory.create(Elasticsearch5SchemaFactory.java:56)
     at org.apache.calcite.model.ModelHandler.visit(ModelHandler.
java:269)
     at org.apache.calcite.model.JsonCustomSchema.accept(JsonCustomS
chema.java:45)
     at org.apache.calcite.model.ModelHandler.visit(ModelHandler.
java:195)
     at org.apache.calcite.model.ModelHandler.<init>(ModelHandler.
java:87)
     at org.apache.calcite.jdbc.Driver$1.onConnectionInit(Driver.
java:104)
     at org.apache.calcite.avatica.UnregisteredDriver.connect(Unregi
steredDriver.java:139)
     at sqlline.DatabaseConnection.connect(DatabaseConnection.java:156)
     at sqlline.DatabaseConnection.getConnection(DatabaseConnection.
java:204)
     at sqlline.Commands.connect(Commands.java:1095)
     at sqlline.Commands.connect(Commands.java:1001)
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAcce
ssorImpl.java:62)
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMe
thodAccessorImpl.java:43)
     at java.lang.reflect.Method.invoke(Method.java:498)
     at sqlline.ReflectiveCommandHandler.execute(ReflectiveCommandHa
ndler.java:38)
     at sqlline.SqlLine.dispatch(SqlLine.java:791)
     at sqlline.SqlLine.begin(SqlLine.java:668)
     at sqlline.SqlLine.start(SqlLine.java:373)
     at sqlline.SqlLine.main(SqlLine.java:265)

I have recently started working on calcite and any help would be much
appreciated.

Thanks,

Kunwar Singh





Reply via email to