{"action":"closed","issue":{"url":"https://api.github.com/repos/mp911de/lettuce/issues/100","labels_url":"https://api.github.com/repos/mp911de/lettuce/issues/100/labels{/name}","comments_url":"https://api.github.com/repos/mp911de/lettuce/issues/100/comments","events_url":"https://api.github.com/repos/mp911de/lettuce/issues/100/events","html_url":"https://github.com/mp911de/lettuce/issues/100","id":93753886,"number":100,"title":"Decouple ConnectionWatchdog reconnect from timer thread","user":{"login":"mp911de","id":1035015,"avatar_url":"https://avatars.githubusercontent.com/u/1035015?v=3","gravatar_id":"","url":"https://api.github.com/users/mp911de","html_url":"https://github.com/mp911de","followers_url":"https://api.github.com/users/mp911de/followers","following_url":"https://api.github.com/users/mp911de/following{/other_user}","gists_url":"https://api.github.com/users/mp911de/gists{/gist_id}","starred_url":"https://api.github.com/users/mp911de/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mp911de/subscriptions","organizations_url":"https://api.github.com/users/mp911de/orgs","repos_url":"https://api.github.com/users/mp911de/repos","events_url":"https://api.github.com/users/mp911de/events{/privacy}","received_events_url":"https://api.github.com/users/mp911de/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/mp911de/lettuce/labels/bug","name":"bug","color":"fc2929"}],"state":"closed","locked":false,"assignee":null,"milestone":null,"comments":0,"created_at":"2015-07-08T10:10:45Z","updated_at":"2015-07-08T13:22:47Z","closed_at":"2015-07-08T13:22:47Z","body":"Netty's `HashedWheelTimer` runs single threaded and processes, therefore, one task at a time. lettuce's `ConnectionWatchdog` uses a blocking call (without a timeout) to the initializing future that may block the timer thread indefinitely. The blocking call stops the reconnection for all connections because the processing thread is blocked.\r\n\r\nApproach to fix: \r\n* Use a timeout\r\n* Perform the reconnect on the event loop group which provides more than one thread"}}