Netty-based safely network reconnection
A netty Channel can be open and not connected so your NettyConnection.isConnected is not correct. See this.
and 3.


It's pointless to write such code in scala. What you need is just a scala lazy val. Try this:

class NettyConnectionManager(val config: NettyConfig) extends ConnectionManager {
  lazy val connection = {
    val newConnection = new NettyConnection(config)
    newConnection.connect()
    newConnection
  }

  def close = connection.close
  def connected = connection.isConnected
}


scala lazy vals already use double check locking to initial the val only once, you don't have to do all the primitive stuff yourself as in NettyConnectionManager or NettyConnection. Next time you think about using var of Option, use lazy val instead. See SIP-20 to know more about how scala community is trying to improving this strategy.

And, wrapping a Channel in two classes like NettyConnection and NettyConnectionManager is also bad design decision. You gain little and add much unnecessary complexity.