diff --git a/lib/moped/node.rb b/lib/moped/node.rb index bef10ef..4168c8f 100644 --- a/lib/moped/node.rb +++ b/lib/moped/node.rb @@ -187,7 +187,11 @@ def ensure_connected(&block) begin connection do |conn| - connect(conn) unless conn.alive? + if conn.alive? + @down_at = nil + else + connect(conn) + end conn.apply_credentials(@credentials) stack(:connection) << conn yield(conn) diff --git a/spec/moped/node_spec.rb b/spec/moped/node_spec.rb index 1013c2f..33a6215 100644 --- a/spec/moped/node_spec.rb +++ b/spec/moped/node_spec.rb @@ -309,6 +309,21 @@ end end end + + context 'when node was down' do + before { node.down! } + + context 'and good connection popped out of the pool' do + before { allow_any_instance_of(Moped::Connection).to receive(:alive?).and_return true } + + it 'marks node as not down' do + node.ensure_connected do + node.command("admin", ping: 1) + end + expect(node).not_to be_down + end + end + end end describe "#initialize" do