github.com/lianghucheng/zrddz@v0.0.0-20200923083010-c71f680932e2/src/gopkg.in/mgo.v2/harness/mongojs/init.js (about)

     1  //var settings = {heartbeatSleep: 0.05, heartbeatTimeout: 0.5}
     2  var settings = {};
     3  
     4  // We know the master of the first set (pri=1), but not of the second.
     5  var rs1cfg = {_id: "rs1",
     6                members: [{_id: 1, host: "127.0.0.1:40011", priority: 1, tags: {rs1: "a"}},
     7                          {_id: 2, host: "127.0.0.1:40012", priority: 0, tags: {rs1: "b"}},
     8                          {_id: 3, host: "127.0.0.1:40013", priority: 0, tags: {rs1: "c"}}],
     9                settings: settings}
    10  var rs2cfg = {_id: "rs2",
    11                members: [{_id: 1, host: "127.0.0.1:40021", priority: 1, tags: {rs2: "a"}},
    12                          {_id: 2, host: "127.0.0.1:40022", priority: 1, tags: {rs2: "b"}},
    13                          {_id: 3, host: "127.0.0.1:40023", priority: 1, tags: {rs2: "c"}}],
    14                settings: settings}
    15  var rs3cfg = {_id: "rs3",
    16                members: [{_id: 1, host: "127.0.0.1:40031", priority: 1, tags: {rs3: "a"}},
    17                          {_id: 2, host: "127.0.0.1:40032", priority: 1, tags: {rs3: "b"}},
    18                          {_id: 3, host: "127.0.0.1:40033", priority: 1, tags: {rs3: "c"}}],
    19                settings: settings}
    20  
    21  for (var i = 0; i != 60; i++) {
    22  	try {
    23  		db1 = new Mongo("127.0.0.1:40001").getDB("admin")
    24  		db2 = new Mongo("127.0.0.1:40002").getDB("admin")
    25  		rs1a = new Mongo("127.0.0.1:40011").getDB("admin")
    26  		rs2a = new Mongo("127.0.0.1:40021").getDB("admin")
    27  		rs3a = new Mongo("127.0.0.1:40031").getDB("admin")
    28  		break
    29  	} catch(err) {
    30  		print("Can't connect yet...")
    31  	}
    32  	sleep(1000)
    33  }
    34  
    35  function hasSSL() {
    36      return Boolean(db1.serverBuildInfo().OpenSSLVersion)
    37  }
    38  
    39  rs1a.runCommand({replSetInitiate: rs1cfg})
    40  rs2a.runCommand({replSetInitiate: rs2cfg})
    41  rs3a.runCommand({replSetInitiate: rs3cfg})
    42  
    43  function configShards() {
    44      cfg1 = new Mongo("127.0.0.1:40201").getDB("admin")
    45      cfg1.runCommand({addshard: "127.0.0.1:40001"})
    46      cfg1.runCommand({addshard: "rs1/127.0.0.1:40011"})
    47  
    48      cfg2 = new Mongo("127.0.0.1:40202").getDB("admin")
    49      cfg2.runCommand({addshard: "rs2/127.0.0.1:40021"})
    50  
    51      cfg3 = new Mongo("127.0.0.1:40203").getDB("admin")
    52      cfg3.runCommand({addshard: "rs3/127.0.0.1:40031"})
    53  }
    54  
    55  function configAuth() {
    56      var addrs = ["127.0.0.1:40002", "127.0.0.1:40203", "127.0.0.1:40031"]
    57      if (hasSSL()) {
    58          addrs.push("127.0.0.1:40003")
    59      }
    60      for (var i in addrs) {
    61          print("Configuring auth for", addrs[i])
    62          var db = new Mongo(addrs[i]).getDB("admin")
    63          var v = db.serverBuildInfo().versionArray
    64          var timedOut = false
    65          if (v < [2, 5]) {
    66              db.addUser("root", "rapadura")
    67          } else {
    68              try {
    69                  db.createUser({user: "root", pwd: "rapadura", roles: ["root"]})
    70              } catch (err) {
    71                  // 3.2 consistently fails replication of creds on 40031 (config server) 
    72                  print("createUser command returned an error: " + err)
    73                  if (String(err).indexOf("timed out") >= 0) {
    74                      timedOut = true;
    75                  }
    76              }
    77          }
    78          for (var i = 0; i < 60; i++) {
    79              var ok = db.auth("root", "rapadura")
    80              if (ok || !timedOut) {
    81                  break
    82              }
    83              sleep(1000);
    84          }
    85          if (v >= [2, 6]) {
    86              db.createUser({user: "reader", pwd: "rapadura", roles: ["readAnyDatabase"]})
    87          } else if (v >= [2, 4]) {
    88              db.addUser({user: "reader", pwd: "rapadura", roles: ["readAnyDatabase"]})
    89          } else {
    90              db.addUser("reader", "rapadura", true)
    91          }
    92      }
    93  }
    94  
    95  function countHealthy(rs) {
    96      var status = rs.runCommand({replSetGetStatus: 1})
    97      var count = 0
    98      var primary = 0
    99      if (typeof status.members != "undefined") {
   100          for (var i = 0; i != status.members.length; i++) {
   101              var m = status.members[i]
   102              if (m.health == 1 && (m.state == 1 || m.state == 2)) {
   103                  count += 1
   104                  if (m.state == 1) {
   105                      primary = 1
   106                  }
   107              }
   108          }
   109      }
   110      if (primary == 0) {
   111  	    count = 0
   112      }
   113      return count
   114  }
   115  
   116  var totalRSMembers = rs1cfg.members.length + rs2cfg.members.length + rs3cfg.members.length
   117  
   118  for (var i = 0; i != 60; i++) {
   119      var count = countHealthy(rs1a) + countHealthy(rs2a) + countHealthy(rs3a)
   120      print("Replica sets have", count, "healthy nodes.")
   121      if (count == totalRSMembers) {
   122          configShards()
   123          configAuth()
   124          quit(0)
   125      }
   126      sleep(1000)
   127  }
   128  
   129  print("Replica sets didn't sync up properly.")
   130  quit(12)
   131  
   132  // vim:ts=4:sw=4:et