Details
-
Sub-task
-
Status: Resolved
-
Critical
-
Resolution: Fixed
-
None
-
None
-
None
-
Reviewed
Description
Connection creator thread is a single thread thats responsible for creating all downstream namenode connections.
This is very critical thread and hence should not die understand exception/error scenarios.
We saw this behavior in production systems where the thread died leaving the router process in bad state.
The thread should also catch a generic error/exception.
@Override public void run() { while (this.running) { try { ConnectionPool pool = this.queue.take(); try { int total = pool.getNumConnections(); int active = pool.getNumActiveConnections(); if (pool.getNumConnections() < pool.getMaxSize() && active >= MIN_ACTIVE_RATIO * total) { ConnectionContext conn = pool.newConnection(); pool.addConnection(conn); } else { LOG.debug("Cannot add more than {} connections to {}", pool.getMaxSize(), pool); } } catch (IOException e) { LOG.error("Cannot create a new connection", e); } } catch (InterruptedException e) { LOG.error("The connection creator was interrupted"); this.running = false; } }