Netflix / dynomite

A generic dynamo implementation for different k-v storage engines
Apache License 2.0
4.2k stars 533 forks source link

Dynomite cluster throwing PoolOfflineException some times when connecting with dyno client #644

Closed ghost closed 5 years ago

ghost commented 5 years ago

hi I build a dynomite cluster with 3 racks which consists of 2 nodes. both reads and write consistency are dc_one. using dyno client. I am getting some times Pool offline exceptions and after some time again working fine . Please give any clue why I am getting whether I am missing configuration like number of connections per host through dyno client . I have also confusion how we can decide the number of connections per host. please help error :

2019-03-27 12:34:05,985 ERROR Consumer_metric_data-cassandra_metric_worker_rc-2-thread-274 com.vistara.cache.redis.dynomite.DynomiteStrConnection - Error setting into redis through dynomite PoolOfflineException: [host=Host [hostname=UNKNOWN, ipAddress=UNKNOWN, port=0, rack: UNKNOWN, datacenter: UNKNOW, status: Down, hashtag=null, password=null], latency=0(0), attempts=0]host pool is offline and no Racks available for fallback com.netflix.dyno.connectionpool.exception.PoolOfflineException: PoolOfflineException: [host=Host [hostname=UNKNOWN, ipAddress=UNKNOWN, port=0, rack: UNKNOWN, datacenter: UNKNOW, status: Down, hashtag=null, password=null], latency=0(0), attempts=0]host pool is offline and no Racks available for fallback at com.netflix.dyno.connectionpool.impl.lb.HostSelectionWithFallback.getConnection(HostSelectionWithFallback.java:152) at com.netflix.dyno.connectionpool.impl.lb.HostSelectionWithFallback.getConnectionUsingRetryPolicy(HostSelectionWithFallback.java:111) at com.netflix.dyno.connectionpool.impl.ConnectionPoolImpl.executeWithFailover(ConnectionPoolImpl.java:295) at com.netflix.dyno.jedis.DynoJedisClient.d_get(DynoJedisClient.java:527) at com.netflix.dyno.jedis.DynoJedisClient.get(DynoJedisClient.java:521) at com.vistara.cache.redis.dynomite.DynomiteStrConnection.get(DynomiteStrConnection.java:38) at com.vistara.cache.redis.dynomite.DynomiteStrConnection.get(DynomiteStrConnection.java:24) at com.vistara.timeseries.common.CassandraCache.getMetricRowKey(CassandraCache.java:118) at com.vistara.timeseries.service.impl.MetricServiceImpl.saveMetric(MetricServiceImpl.java:121) at com.vistara.cs.mq.notifier.CassandraMetricMessageHandler.recvdMetric(CassandraMetricMessageHandler.java:34) at com.vistara.cs.mq.notifier.MetricMessageHandler.messageRecvd(MetricMessageHandler.java:32) at com.vistara.mq.msg.JSONMessageHandler.messageRecvd(JSONMessageHandler.java:42) at com.vistara.mq.ConsumerThread$MessageProcessor.call(ConsumerThread.java:261) at com.vistara.mq.ConsumerThread$MessageProcessor.call(ConsumerThread.java:245) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748)

ramuvistara commented 5 years ago

I observed connections are dropping in between my host server to the dynomite cluster. I build a cluster of 3racks and each rack contains 2 nodes. if I require 9000 connections. how can I set setMaxConnsPerHost

smukil commented 5 years ago

@chinmayvenkat & @ramuvistara It depends on how you've configured discovery for the instances, i.e. what HostSupplier are you using? https://github.com/Netflix/dyno/wiki/Configuration#hostsupplier

If your HostSupplier tells the client that a node is down, that connection pool will be torn down.

Also, a recent bug fix that went in to address more connection issues is here: https://github.com/Netflix/dyno/commit/1472c1f2371bbe5c757e2e101b0f67d0a8bc7baf

If you can make sure you have that patch, it would alleviate some of these issues.

Since this is related to Dyno, please reopen this issue in the Dyno repo if you have further requests. https://github.com/Netflix/dyno