Netflix / dyno

Java client for Dynomite
https://github.com/Netflix/dynomite
Apache License 2.0
186 stars 94 forks source link

ArrayIndexOutOfBoundsException in HostUtils.calculateReplicationFactorForDC #287

Open skissane opened 4 years ago

skissane commented 4 years ago

I am using Dyno 1.7.2-rc2 as a dependency of Netflix Conductor v2.24.2. I am getting this error:

Exception in thread "main" com.google.inject.CreationException: Unable to create injector, see the following errors:

1) Error in custom provider, java.lang.RuntimeException: java.lang.ArrayIndexOutOfBoundsException: 0
  while locating com.netflix.conductor.jedis.DynomiteJedisProvider
  at com.netflix.conductor.server.DynomiteClusterModule.configure(DynomiteClusterModule.java:35) (via modules: com.google.inject.util.Modules$OverrideModule -> com.netflix.conductor.server.DynomiteClusterModule)
  while locating redis.clients.jedis.commands.JedisCommands
Caused by: java.lang.RuntimeException: java.lang.ArrayIndexOutOfBoundsException: 0
    at com.netflix.dyno.jedis.DynoJedisUtils.startConnectionPool(DynoJedisUtils.java:83)
    at com.netflix.dyno.jedis.DynoJedisUtils.createConnectionPool(DynoJedisUtils.java:60)
    at com.netflix.dyno.jedis.DynoJedisClient$Builder.buildDynoJedisClient(DynoJedisClient.java:4869)
    at com.netflix.dyno.jedis.DynoJedisClient$Builder.build(DynoJedisClient.java:4797)
    at com.netflix.conductor.jedis.DynomiteJedisProvider.get(DynomiteJedisProvider.java:59)
    at com.netflix.conductor.jedis.DynomiteJedisProvider.get(DynomiteJedisProvider.java:24)
    at com.google.inject.internal.ProviderInternalFactory.provision(ProviderInternalFactory.java:81)
    at com.google.inject.internal.BoundProviderFactory.provision(BoundProviderFactory.java:72)
    at com.google.inject.internal.ProviderInternalFactory$1.call(ProviderInternalFactory.java:65)
    at com.google.inject.internal.ProvisionListenerStackCallback$Provision.provision(ProvisionListenerStackCallback.java:115)
    at com.netflix.governator.event.ApplicationEventModule$ApplicationEventSubscribingProvisionListener.onProvision(ApplicationEventModule.java:89)
    at com.google.inject.internal.ProvisionListenerStackCallback$Provision.provision(ProvisionListenerStackCallback.java:126)
    at com.google.inject.internal.ProvisionListenerStackCallback$Provision.provision(ProvisionListenerStackCallback.java:133)
    at com.google.inject.internal.ProvisionListenerStackCallback.provision(ProvisionListenerStackCallback.java:68)
    at com.google.inject.internal.ProviderInternalFactory.circularGet(ProviderInternalFactory.java:63)
    at com.google.inject.internal.BoundProviderFactory.get(BoundProviderFactory.java:62)
    at com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46)
    at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1092)
    at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
    at com.google.inject.internal.SingletonScope$1.get(SingletonScope.java:194)
    at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:41)
    at com.google.inject.internal.InternalInjectorCreator$1.call(InternalInjectorCreator.java:205)
    at com.google.inject.internal.InternalInjectorCreator$1.call(InternalInjectorCreator.java:199)
    at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1085)
    at com.google.inject.internal.InternalInjectorCreator.loadEagerSingletons(InternalInjectorCreator.java:199)
    at com.google.inject.internal.InternalInjectorCreator.injectDynamically(InternalInjectorCreator.java:180)
    at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:110)
    at com.google.inject.Guice.createInjector(Guice.java:99)
    at com.google.inject.Guice.createInjector(Guice.java:73)
    at com.netflix.conductor.bootstrap.Main.main(Main.java:50)
Caused by: java.lang.ArrayIndexOutOfBoundsException: 0
    at com.netflix.dyno.connectionpool.impl.lb.HostUtils.calculateReplicationFactorForDC(HostUtils.java:71)
    at com.netflix.dyno.connectionpool.impl.lb.HostSelectionWithFallback.initWithHosts(HostSelectionWithFallback.java:368)
    at com.netflix.dyno.connectionpool.impl.ConnectionPoolImpl.initSelectionStrategy(ConnectionPoolImpl.java:641)
    at com.netflix.dyno.connectionpool.impl.ConnectionPoolImpl.start(ConnectionPoolImpl.java:543)
    at com.netflix.dyno.jedis.DynoJedisUtils.startConnectionPool(DynoJedisUtils.java:71)
    ... 29 more

I presume I have set the configuration to talk to the dynomite cluster wrong. But, it would be helpful for beginners if it could throw a more specific exception explaining how the configuration is wrong.

prkrishna commented 4 years ago

Is this resolved? I'm facing the same issue

abhinav0101 commented 3 years ago

same issue faced. Please help!

abhinav0101 commented 3 years ago

it comes when I set .setLocalDataCenter() is config

lijia-rengage commented 1 year ago

same problem. Is there any solution?