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