# File lib/moped/node.rb, line 183
    def ensure_connected(&block)
      unless (conn = stack(:connection)).empty?
        return yield(conn.first)
      end

      begin
        connection do |conn|
          connect(conn) unless conn.alive?
          conn.apply_credentials(@credentials)
          stack(:connection) << conn
          yield(conn)
        end
      rescue Exception => e
        if e.kind_of?(ConnectionPool::PoolShuttingDownError)
          @pool = nil
          Connection::Manager.delete_pool(self)
        end
        Failover.get(e).execute(e, self, &block)
      ensure
        end_execution(:connection)
      end
    end