Uploaded image for project: 'Core Server'
  1. Core Server
  2. SERVER-13628

Votes:0 node can call election and become primary

    XMLWordPrintableJSON

Details

    • Icon: Question Question
    • Resolution: Done
    • Icon: Major - P3 Major - P3
    • None
    • None
    • Replication
    • None

    Description

      I'm not 100% clear on whether this is an arbiter bug or vote:0 node bug.

      I created rs.conf()

      [
                 { _id: 0.0, host: "localhost:27017", priority: 2.0, votes: 0 },
                 { _id: 1.0, host: "localhost:29017", votes: 0.0, priority: 0.0, hidden: true },
                 { _id: 2.0, host: "localhost:33333", arbiterOnly: true }
      ]

      So there is one vote only in the cluster and it belongs to the arbiter. I was under the impression that a non-voting node cannot call for an election (can only veto an election). Clearly arbiter, who is not eligible to be a primary cannot call for an election (right?).

      And yet when I started up node _id:0 (only eligible for primary node) it got elected.

      _id:0 node log:

      2014-04-16T12:25:58.002-0400 [rsStart] replSet STARTUP2
      2014-04-16T12:25:58.003-0400 [rsSync] replSet SECONDARY
      2014-04-16T12:25:58.284-0400 [rsHealthPoll] replSet member localhost:33333 is up
      2014-04-16T12:25:58.284-0400 [rsHealthPoll] replSet member localhost:33333 is now in state ARBITER
      2014-04-16T12:25:58.285-0400 [rsHealthPoll] replSet member localhost:29017 is up
      2014-04-16T12:25:58.285-0400 [rsHealthPoll] replSet member localhost:29017 is now in state SECONDARY
      2014-04-16T12:25:58.302-0400 [rsMgr] not electing self, localhost:33333 would veto with 'I don't think localhost:27017 is electable'
      2014-04-16T12:25:58.304-0400 [rsMgr] not electing self, localhost:33333 would veto with 'I don't think localhost:27017 is electable'
      2014-04-16T12:25:58.452-0400 [conn1] end connection 127.0.0.1:63684 (1 connection now open)
      2014-04-16T12:25:58.452-0400 [initandlisten] connection accepted from 127.0.0.1:63689 #4 (3 connections now open)
      2014-04-16T12:26:04.288-0400 [rsMgr] replSet info electSelf 0
      2014-04-16T12:26:04.458-0400 [conn4] end connection 127.0.0.1:63689 (1 connection now open)
      2014-04-16T12:26:04.458-0400 [initandlisten] connection accepted from 127.0.0.1:63690 #5 (3 connections now open)
      2014-04-16T12:26:05.011-0400 [rsMgr] replSet PRIMARY
      2014-04-16T12:26:05.146-0400 [conn3] end connection 127.0.0.1:63686 (1 connection now open)
      2014-04-16T12:26:05.147-0400 [initandlisten] connection accepted from 127.0.0.1:63693 #6 (2 connections now open)

      arbiter log:

      2014-04-16T12:25:57.065-0400 [conn1589] run command admin.$cmd { replSetHeartbeat: "asyaRS", v: 64513, pv: 1, checkEmpty: false, from: "localhost:33333", fromId: 2 }
      2014-04-16T12:25:57.065-0400 [conn1589] command: { replSetHeartbeat: "asyaRS", v: 64513, pv: 1, checkEmpty: false, from: "localhost:33333", fromId: 2 }
      2014-04-16T12:25:57.065-0400 [conn1589] command admin.$cmd command: replSetHeartbeat { replSetHeartbeat: "asyaRS", v: 64513, pv: 1, checkEmpty: false, from: "localhost:33333", fromId: 2 } ntoreturn:1 keyUpdates:0 numYields:0  reslen:149 0ms
      2014-04-16T12:25:57.140-0400 [rsHealthPoll] replset info localhost:27017 thinks that we are down
      2014-04-16T12:25:57.141-0400 [rsHealthPoll] replSet member localhost:27017 is up
      2014-04-16T12:25:57.141-0400 [rsHealthPoll] replSet member localhost:27017 is now in state STARTUP
      2014-04-16T12:25:58.284-0400 [conn1590] run command admin.$cmd { replSetHeartbeat: "asyaRS", v: 64513, pv: 1, checkEmpty: false, from: "localhost:27017", fromId: 0 }
      2014-04-16T12:25:58.284-0400 [conn1590] command: { replSetHeartbeat: "asyaRS", v: 64513, pv: 1, checkEmpty: false, from: "localhost:27017", fromId: 0 }
      2014-04-16T12:25:58.284-0400 [conn1590] command admin.$cmd command: replSetHeartbeat { replSetHeartbeat: "asyaRS", v: 64513, pv: 1, checkEmpty: false, from: "localhost:27017", fromId: 0 } ntoreturn:1 keyUpdates:0 numYields:0  reslen:149 0ms
      2014-04-16T12:25:58.285-0400 [conn1590] run command admin.$cmd { replSetFresh: 1, set: "asyaRS", opTime: new Date(6002926844448342017), who: "localhost:27017", cfgver: 64513, id: 0 }
      2014-04-16T12:25:58.285-0400 [conn1590] command: { replSetFresh: 1, set: "asyaRS", opTime: new Date(6002926844448342017), who: "localhost:27017", cfgver: 64513, id: 0 }
      2014-04-16T12:25:58.286-0400 [conn1590] command admin.$cmd command: replSetFresh { replSetFresh: 1, set: "asyaRS", opTime: new Date(6002926844448342017), who: "localhost:27017", cfgver: 64513, id: 0 } ntoreturn:1 keyUpdates:0 numYields:0  reslen:125 0ms
      2014-04-16T12:25:58.303-0400 [conn1590] run command admin.$cmd { replSetFresh: 1, set: "asyaRS", opTime: new Date(6002926844448342017), who: "localhost:27017", cfgver: 64513, id: 0 }
      2014-04-16T12:25:58.303-0400 [conn1590] command: { replSetFresh: 1, set: "asyaRS", opTime: new Date(6002926844448342017), who: "localhost:27017", cfgver: 64513, id: 0 }
      2014-04-16T12:25:58.303-0400 [conn1590] command admin.$cmd command: replSetFresh { replSetFresh: 1, set: "asyaRS", opTime: new Date(6002926844448342017), who: "localhost:27017", cfgver: 64513, id: 0 } ntoreturn:1 keyUpdates:0 numYields:0  reslen:125 0ms
      2014-04-16T12:25:59.067-0400 [conn1589] run command admin.$cmd { replSetHeartbeat: "asyaRS", v: 64513, pv: 1, checkEmpty: false, from: "localhost:33333", fromId: 2 }
      2014-04-16T12:25:59.067-0400 [conn1589] command: { replSetHeartbeat: "asyaRS", v: 64513, pv: 1, checkEmpty: false, from: "localhost:33333", fromId: 2 }
      2014-04-16T12:25:59.067-0400 [conn1589] command admin.$cmd command: replSetHeartbeat { replSetHeartbeat: "asyaRS", v: 64513, pv: 1, checkEmpty: false, from: "localhost:33333", fromId: 2 } ntoreturn:1 keyUpdates:0 numYields:0  reslen:149 0ms
      2014-04-16T12:25:59.142-0400 [rsHealthPoll] replSet member localhost:27017 is now in state SECONDARY
      2014-04-16T12:26:00.286-0400 [conn1590] run command admin.$cmd { replSetHeartbeat: "asyaRS", v: 64513, pv: 1, checkEmpty: false, from: "localhost:27017", fromId: 0 }
      2014-04-16T12:26:00.286-0400 [conn1590] command: { replSetHeartbeat: "asyaRS", v: 64513, pv: 1, checkEmpty: false, from: "localhost:27017", fromId: 0 }
      2014-04-16T12:26:00.286-0400 [conn1590] command admin.$cmd command: replSetHeartbeat { replSetHeartbeat: "asyaRS", v: 64513, pv: 1, checkEmpty: false, from: "localhost:27017", fromId: 0 } ntoreturn:1 keyUpdates:0 numYields:0  reslen:149 0ms
      2014-04-16T12:26:01.068-0400 [conn1589] run command admin.$cmd { replSetHeartbeat: "asyaRS", v: 64513, pv: 1, checkEmpty: false, from: "localhost:33333", fromId: 2 }
      2014-04-16T12:26:01.068-0400 [conn1589] command: { replSetHeartbeat: "asyaRS", v: 64513, pv: 1, checkEmpty: false, from: "localhost:33333", fromId: 2 }
      2014-04-16T12:26:01.068-0400 [conn1589] command admin.$cmd command: replSetHeartbeat { replSetHeartbeat: "asyaRS", v: 64513, pv: 1, checkEmpty: false, from: "localhost:33333", fromId: 2 } ntoreturn:1 keyUpdates:0 numYields:0  reslen:149 0ms
      2014-04-16T12:26:02.288-0400 [conn1590] run command admin.$cmd { replSetHeartbeat: "asyaRS", v: 64513, pv: 1, checkEmpty: false, from: "localhost:27017", fromId: 0 }
      2014-04-16T12:26:02.288-0400 [conn1590] command: { replSetHeartbeat: "asyaRS", v: 64513, pv: 1, checkEmpty: false, from: "localhost:27017", fromId: 0 }
      2014-04-16T12:26:02.288-0400 [conn1590] command admin.$cmd command: replSetHeartbeat { replSetHeartbeat: "asyaRS", v: 64513, pv: 1, checkEmpty: false, from: "localhost:27017", fromId: 0 } ntoreturn:1 keyUpdates:0 numYields:0  reslen:149 0ms
      2014-04-16T12:26:03.070-0400 [conn1589] run command admin.$cmd { replSetHeartbeat: "asyaRS", v: 64513, pv: 1, checkEmpty: false, from: "localhost:33333", fromId: 2 }
      2014-04-16T12:26:03.070-0400 [conn1589] command: { replSetHeartbeat: "asyaRS", v: 64513, pv: 1, checkEmpty: false, from: "localhost:33333", fromId: 2 }
      2014-04-16T12:26:03.070-0400 [conn1589] command admin.$cmd command: replSetHeartbeat { replSetHeartbeat: "asyaRS", v: 64513, pv: 1, checkEmpty: false, from: "localhost:33333", fromId: 2 } ntoreturn:1 keyUpdates:0 numYields:0  reslen:149 0ms
      2014-04-16T12:26:04.287-0400 [conn1590] run command admin.$cmd { replSetFresh: 1, set: "asyaRS", opTime: new Date(6002926844448342017), who: "localhost:27017", cfgver: 64513, id: 0 }
      2014-04-16T12:26:04.287-0400 [conn1590] command: { replSetFresh: 1, set: "asyaRS", opTime: new Date(6002926844448342017), who: "localhost:27017", cfgver: 64513, id: 0 }
      2014-04-16T12:26:04.287-0400 [conn1590] command admin.$cmd command: replSetFresh { replSetFresh: 1, set: "asyaRS", opTime: new Date(6002926844448342017), who: "localhost:27017", cfgver: 64513, id: 0 } ntoreturn:1 keyUpdates:0 numYields:0  reslen:70 0ms
      2014-04-16T12:26:04.288-0400 [conn1590] run command admin.$cmd { replSetElect: 1, set: "asyaRS", who: "localhost:27017", whoid: 0, cfgver: 64513, round: ObjectId('534eaf1c89732754cb5d8646') }
      2014-04-16T12:26:04.289-0400 [conn1590] command: { replSetElect: 1, set: "asyaRS", who: "localhost:27017", whoid: 0, cfgver: 64513, round: ObjectId('534eaf1c89732754cb5d8646') }
      2014-04-16T12:26:04.289-0400 [conn1590] replSet received elect msg { replSetElect: 1, set: "asyaRS", who: "localhost:27017", whoid: 0, cfgver: 64513, round: ObjectId('534eaf1c89732754cb5d8646') }
      2014-04-16T12:26:04.289-0400 [conn1590] replSet info voting yea for localhost:27017 (0)
      2014-04-16T12:26:04.289-0400 [conn1590] command admin.$cmd command: replSetElect { replSetElect: 1, set: "asyaRS", who: "localhost:27017", whoid: 0, cfgver: 64513, round: ObjectId('534eaf1c89732754cb5d8646') } ntoreturn:1 keyUpdates:0 numYields:0  reslen:66 0ms
      2014-04-16T12:26:04.289-0400 [conn1590] run command admin.$cmd { replSetHeartbeat: "asyaRS", v: 64513, pv: 1, checkEmpty: false, from: "localhost:27017", fromId: 0 }
      2014-04-16T12:26:04.290-0400 [conn1590] command: { replSetHeartbeat: "asyaRS", v: 64513, pv: 1, checkEmpty: false, from: "localhost:27017", fromId: 0 }
      2014-04-16T12:26:04.290-0400 [conn1590] command admin.$cmd command: replSetHeartbeat { replSetHeartbeat: "asyaRS", v: 64513, pv: 1, checkEmpty: false, from: "localhost:27017", fromId: 0 } ntoreturn:1 keyUpdates:0 numYields:0  reslen:149 0ms
      2014-04-16T12:26:05.071-0400 [conn1589] Socket recv() conn closed? 127.0.0.1:63559
      2014-04-16T12:26:05.072-0400 [conn1589] SocketException: remote: 127.0.0.1:63559 error: 9001 socket exception [CLOSED] server [127.0.0.1:63559]
      2014-04-16T12:26:05.073-0400 [conn1591] run command admin.$cmd { replSetHeartbeat: "asyaRS", v: 64513, pv: 1, checkEmpty: false, from: "localhost:33333", fromId: 2 }
      2014-04-16T12:26:05.073-0400 [conn1591] command: { replSetHeartbeat: "asyaRS", v: 64513, pv: 1, checkEmpty: false, from: "localhost:33333", fromId: 2 }
      2014-04-16T12:26:05.074-0400 [conn1591] command admin.$cmd command: replSetHeartbeat { replSetHeartbeat: "asyaRS", v: 64513, pv: 1, checkEmpty: false, from: "localhost:33333", fromId: 2 } ntoreturn:1 keyUpdates:0 numYields:0  reslen:149 0ms
      2014-04-16T12:26:05.148-0400 [rsHealthPoll] replSet member localhost:27017 is now in state PRIMARY

      I think if votes:0 nodes can call for election and can become primaries it becomes really difficult to reason about majorities and various failure scenarios.

      Attachments

        Activity

          People

            asya.kamsky@mongodb.com Asya Kamsky
            asya.kamsky@mongodb.com Asya Kamsky
            Votes:
            0 Vote for this issue
            Watchers:
            6 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: