Assembly elasticsearch, Guice runtime problems

Hi,

We are using EC2 discovery mechanism and package our code using sbt
assembly plugin.

We are getting weird error from Elasticsearch DI:

  • it starts with a bunch of warnings
    WARN [transport] - [Balthakk] Registered two transport handlers for action
    discovery/zen/fd/masterPing, handlers:
    org.elasticsearch.discovery.zen.fd.MasterFaultDetection$MasterPingRequestHandler@3e1f1cf9,
    org.elasticsearch.discovery.zen.fd.MasterFaultDetection$MasterPingRequestHandler@6ca73f4b
    WARN [transport] - [Balthakk] Registered two transport handlers for action
    discovery/zen/fd/ping, handlers:
    org.elasticsearch.discovery.zen.fd.NodesFaultDetection$PingRequestHandler@582c8ca7,
    org.elasticsearch.discovery.zen.fd.NodesFaultDetection$PingRequestHandler@54c6552a

  • and then throws exceptions:
    Exception in thread "main" java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at com.simontuffs.onejar.Boot.run(Boot.java:340)
    at com.simontuffs.onejar.Boot.main(Boot.java:166)
    Caused by: org.elasticsearch.common.inject.CreationException: Guice
    creation errors:

  1. Error injecting constructor, java.lang.IllegalStateException: This is a
    proxy used to support circular references involving constructors. The
    object we're proxying is not constructed yet. Please wait until after
    injection has completed to use this object.
    at org.elasticsearch.cache.NodeCache.(Unknown Source)
    while locating org.elasticsearch.cache.NodeCache
    Caused by: java.lang.IllegalStateException: This is a proxy used to support
    circular references involving constructors. The object we're proxying is
    not constructed yet. Please wait until after injection has completed to use
    this object.
    at
    org.elasticsearch.common.inject.internal.ConstructionContext$DelegatingInvocationHandler.invoke(ConstructionContext.java:102)
    at $Proxy18.add(Unknown Source)
    at org.elasticsearch.cache.NodeCache.(NodeCache.java:44)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at
    sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at
    sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at
    org.elasticsearch.common.inject.DefaultConstructionProxyFactory$1.newInstance(DefaultConstructionProxyFactory.java:54)
    at
    org.elasticsearch.common.inject.ConstructorInjector.construct(ConstructorInjector.java:86)
    at
    org.elasticsearch.common.inject.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:98)
    at
    org.elasticsearch.common.inject.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:45)
    at
    org.elasticsearch.common.inject.InjectorImpl.callInContext(InjectorImpl.java:819)
    at
    org.elasticsearch.common.inject.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:42)
    at org.elasticsearch.common.inject.Scopes$1$1.get(Scopes.java:56)
    at
    org.elasticsearch.common.inject.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:45)
    at
    org.elasticsearch.common.inject.InjectorBuilder$1.call(InjectorBuilder.java:200)
    at
    org.elasticsearch.common.inject.InjectorBuilder$1.call(InjectorBuilder.java:193)
    at
    org.elasticsearch.common.inject.InjectorImpl.callInContext(InjectorImpl.java:812)
    at
    org.elasticsearch.common.inject.InjectorBuilder.loadEagerSingletons(InjectorBuilder.java:193)
    at
    org.elasticsearch.common.inject.InjectorBuilder.injectDynamically(InjectorBuilder.java:175)
    at
    org.elasticsearch.common.inject.InjectorBuilder.build(InjectorBuilder.java:110)
    at org.elasticsearch.common.inject.Guice.createInjector(Guice.java:93)
    at org.elasticsearch.common.inject.Guice.createInjector(Guice.java:70)
    at
    org.elasticsearch.common.inject.ModulesBuilder.createInjector(ModulesBuilder.java:59)
    at
    org.elasticsearch.node.internal.InternalNode.(InternalNode.java:155)
    at org.elasticsearch.node.NodeBuilder.build(NodeBuilder.java:159)

The problem only happens with EC2 discovery, with Zen everything works just
fine.
Looks like a dependencies problem during assembly merge but tried one-jar
assembly with the same result. Tried to provide elastic-cloud-aws
dependency separately but not luck.

I would appreciate any pointers to the solution of this issue.

Kind Regards,
Sergey

--