Maybe I am wrong, but I was assuming the command "mvn dependency:build-classpath" will include the dependencies of all modules regardless of whether we include the elasticsearch2 target/classes or not.

Mit freundlichen Grüßen,
------------------------------------------------------------------------
*Christian Beikov*
Am 28.09.2017 um 19:16 schrieb Julian Hyde:
I understand that. But if we remove calcite-elasticsearch2 from sqlline’s 
classpath, sqlline will still get calcite-elasticsearch5 and the elastic search 
5.x client driver libraries that it depends upon.

And the elastic search 2.x client driver libraries will not be on sqlline's 
class path, because calcite-elasticsearch2 is the only module that depends on 
them. So there will be no clash.

Julian


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

The elasticsearch2 module depens on the elasticsearch client driver libraries 
with version 2.x and the elasticsearch5 module depends on the elasticsearch 
client driver libraries with version 5.x. That's the version conflict Kunwar 
was running into.


Mit freundlichen Grüßen,
------------------------------------------------------------------------
*Christian Beikov*
Am 28.09.2017 um 18:35 schrieb Julian Hyde:
Christian,

I don’t understand. The elasticsearch5 module does not depend on the 
elasticsearch2 module, only on core and linq4j. Therefore if it (and its 
dependencies) are added to sqlline’s class path, it should have everything it 
needs. What am I missing?

Julian


On Sep 27, 2017, at 11:02 PM, Christian Beikov <christian.bei...@gmail.com> 
wrote:

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