~nskaggs/+junk/xenial-test

« back to all changes in this revision

Viewing changes to src/gopkg.in/mgo.v2/testdb/init.js

  • Committer: Nicholas Skaggs
  • Date: 2016-10-24 20:56:05 UTC
  • Revision ID: nicholas.skaggs@canonical.com-20161024205605-z8lta0uvuhtxwzwl
Initi with beta15

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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