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

Replica set secondary allows rs.initiate() while performing initial sync

    XMLWordPrintable

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Major - P3
    • Resolution: Works as Designed
    • Affects Version/s: 2.4.11, 2.6.8, 3.0.1
    • Fix Version/s: None
    • Component/s: Replication
    • Labels:
      None
    • Operating System:
      ALL
    • Steps To Reproduce:
      Hide

      See above.

      Show
      See above.

      Description

      Scenario:

      Create RS with two data nodes (A,B) and an arbiter.
      Give A priority 2, B priority 1 -> A becomes primary
      Kill A process -> B (with lower priority) becomes primary
      Delete all data files from A
      Connect to B and add data:

      for (var i = 1; i <= 200000; i++) { db.testData.insert( { x : i } ) }
      db.copyDatabase("test", "test1” )
      db.copyDatabase("test", "test2” )
      etc.
      

      The idea is to make initial sync take some time.

      Start A process as follows:

      mongod --replSet replset --dbpath <path> --logpath <path>/mongod.log --port <port> --logappend --fork ; mongo --port <port> --eval "printjson(rs.initiate())"
      

      This will start A, which will come up and start initial sync. rs.initiate() command will run while initial sync is taking place. Command should fail, but it will succeed.

      mongod --replSet replset --dbpath /Users/ericsommer/data/301rs/replset/rs2/db --logpath /Users/ericsommer/data/301rs/replset/rs2/mongod.log --port 30001 --logappend --fork ; mongo --port 30001 --eval "printjson(rs.initiate())"
      about to fork child process, waiting until server is ready for connections.
      forked process: 7005
      child process started successfully, parent exiting
      MongoDB shell version: 3.0.1
      connecting to: 127.0.0.1:30001/test
      {
      	"info2" : "no configuration explicitly specified -- making one",
      	"me" : "Erics-MBP.home:30001",
      	"ok" : 1
      }
      

      Command doesn’t succeed if:

      • mongod reaches secondary state before rs.initiate() is called
      • with default priorities

      See attached log mongodb.debug.log from node A.

      Customer found bug in 2.4.11. Tested with 3.0.1 and 2.6.8 – same behavior.

        Attachments

          Activity

            People

            Assignee:
            Unassigned Unassigned
            Reporter:
            eric.sommer Eric Sommer
            Participants:
            Votes:
            0 Vote for this issue
            Watchers:
            5 Start watching this issue

              Dates

              Created:
              Updated:
              Resolved: