Java – elasticsearch RemoteTransportException on dedicated server

elasticsearchexceptionjava

i am trying to integrate elasticsearch with production but getting the following exception.
jvm i am using in both server 1.7.0_40

2015-01-12 21:29:06 DEBUG netty:94 – [Whitemane, Aelfyre] connected to
node [[#transport#-1][inet[/xxx.xxx.xx.xxx:9300]]] 2015-01-12 21:29:06
WARN netty:114 – [Whitemane, Aelfyre] Message not fully read
(response) for [63] handler
future(org.elasticsearch.client.transport.TransportClientNodesService$SimpleNodeSampler$1@4e70a141),
error [true], resetting 2015-01-12 21:29:06 INFO transport:109 –
[Whitemane, Aelfyre] failed to get node info for
[#transport#-1][inet[/xxx.xxx.xx.xxx:9300]], disconnecting…
org.elasticsearch.transport.RemoteTransportException: Failed to
deserialize exception response from stream Caused by:
org.elasticsearch.transport.TransportSerializationException: Failed to
deserialize exception response from stream at
org.elasticsearch.transport.netty.MessageChannelHandler.handlerResponseError(MessageChannelHandler.java:171)
at
org.elasticsearch.transport.netty.MessageChannelHandler.messageReceived(MessageChannelHandler.java:125)
at
org.elasticsearch.common.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70)
at
org.elasticsearch.common.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:560)
at
org.elasticsearch.common.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:787)
at
org.elasticsearch.common.netty.channel.Channels.fireMessageReceived(Channels.java:296)
at
org.elasticsearch.common.netty.handler.codec.frame.FrameDecoder.unfoldAndFireMessageReceived(FrameDecoder.java:462)
at
org.elasticsearch.common.netty.handler.codec.frame.FrameDecoder.callDecode(FrameDecoder.java:443)
at
org.elasticsearch.common.netty.handler.codec.frame.FrameDecoder.messageReceived(FrameDecoder.java:303)
at
org.elasticsearch.common.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70)
at
org.elasticsearch.common.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:560)
at
org.elasticsearch.common.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:555)
at
org.elasticsearch.common.netty.channel.Channels.fireMessageReceived(Channels.java:268)
at
org.elasticsearch.common.netty.channel.Channels.fireMessageReceived(Channels.java:255)
at
org.elasticsearch.common.netty.channel.socket.nio.NioWorker.read(NioWorker.java:88)
at
org.elasticsearch.common.netty.channel.socket.nio.AbstractNioWorker.process(AbstractNioWorker.java:107)
at
org.elasticsearch.common.netty.channel.socket.nio.AbstractNioSelector.run(AbstractNioSelector.java:312)
at
org.elasticsearch.common.netty.channel.socket.nio.AbstractNioWorker.run(AbstractNioWorker.java:88)
at
org.elasticsearch.common.netty.channel.socket.nio.NioWorker.run(NioWorker.java:178)
at
org.elasticsearch.common.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108)
at
org.elasticsearch.common.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:42)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724) Caused by:
java.io.InvalidClassException: failed to read class descriptor at
java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1601)
at
java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1515)
at
java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1620)
at
java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1515)
at
java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1620)
at
java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1515)
at
java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1620)
at
java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1515)
at
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1769)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1348)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)
at
org.elasticsearch.transport.netty.MessageChannelHandler.handlerResponseError(MessageChannelHandler.java:169)
… 23 more Caused by: java.lang.ClassNotFoundException:
org.elasticsearch.ElasticsearchException at
java.net.URLClassLoader$1.run(URLClassLoader.java:366) at
java.net.URLClassLoader$1.run(URLClassLoader.java:355) at
java.security.AccessController.doPrivileged(Native Method) at
java.net.URLClassLoader.findClass(URLClassLoader.java:354) at
java.lang.ClassLoader.loadClass(ClassLoader.java:424) at
sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) at
java.lang.ClassLoader.loadClass(ClassLoader.java:357) at
org.elasticsearch.common.io.ThrowableObjectInputStream.loadClass(ThrowableObjectInputStream.java:93)
at
org.elasticsearch.common.io.ThrowableObjectInputStream.readClassDescriptor(ThrowableObjectInputStream.java:67)
at
java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1599)
… 34 more

Best Answer

Judging by the root exception java.lang.ClassNotFoundException: org.elasticsearch.ElasticsearchException and whatever you integrate Elasticsearch with (integrate elasticsearch with production) I am guessing that either:

  • you are missing elasticsearch.jar from the classpath of your "production" system or you assume it's in classpath but, in fact, it isn't
  • you are using different Elasticsearch versions (the server has one version, your "production" system uses an ES jar from another version

In Elasticsearch 0.20.5 this is the class in question: https://github.com/elasticsearch/elasticsearch/blob/v0.20.5/src/main/java/org/elasticsearch/ElasticSearchException.java. Notice the name of the class - ElasticSearchException (capital letter "S").

In Elasticsearch 1.4.2 the class name is changed: https://github.com/elasticsearch/elasticsearch/blob/v1.4.2/src/main/java/org/elasticsearch/ElasticsearchException.java. Notice the name of the class - ElasticsearchException (lower case "s").

So, you really need to use the same Elasticsearch version on both your servers.

Related Topic