OLD | NEW |
1 package state | 1 package state |
2 | 2 |
3 import ( | 3 import ( |
4 "crypto/tls" | 4 "crypto/tls" |
5 "crypto/x509" | 5 "crypto/x509" |
6 "errors" | 6 "errors" |
7 "fmt" | 7 "fmt" |
8 "net" | 8 "net" |
9 "time" | 9 "time" |
10 | 10 |
11 "labix.org/v2/mgo" | 11 "labix.org/v2/mgo" |
12 "labix.org/v2/mgo/txn" | 12 "labix.org/v2/mgo/txn" |
13 "launchpad.net/juju-core/cert" | 13 "launchpad.net/juju-core/cert" |
14 "launchpad.net/juju-core/constraints" | 14 "launchpad.net/juju-core/constraints" |
15 "launchpad.net/juju-core/environs/config" | 15 "launchpad.net/juju-core/environs/config" |
16 "launchpad.net/juju-core/log" | 16 "launchpad.net/juju-core/log" |
17 "launchpad.net/juju-core/state/multiwatcher" | |
18 "launchpad.net/juju-core/state/presence" | 17 "launchpad.net/juju-core/state/presence" |
19 "launchpad.net/juju-core/state/watcher" | 18 "launchpad.net/juju-core/state/watcher" |
20 "launchpad.net/juju-core/utils" | 19 "launchpad.net/juju-core/utils" |
21 ) | 20 ) |
22 | 21 |
23 // Info encapsulates information about cluster of | 22 // Info encapsulates information about cluster of |
24 // servers holding juju state and can be used to make a | 23 // servers holding juju state and can be used to make a |
25 // connection to that cluster. | 24 // connection to that cluster. |
26 type Info struct { | 25 type Info struct { |
27 // Addrs gives the addresses of the MongoDB servers for the state. | 26 // Addrs gives the addresses of the MongoDB servers for the state. |
(...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
267 st.runner = txn.NewRunner(db.C("txns")) | 266 st.runner = txn.NewRunner(db.C("txns")) |
268 st.runner.ChangeLog(db.C("txns.log")) | 267 st.runner.ChangeLog(db.C("txns.log")) |
269 st.watcher = watcher.New(db.C("txns.log")) | 268 st.watcher = watcher.New(db.C("txns.log")) |
270 st.pwatcher = presence.NewWatcher(pdb.C("presence")) | 269 st.pwatcher = presence.NewWatcher(pdb.C("presence")) |
271 for _, item := range indexes { | 270 for _, item := range indexes { |
272 index := mgo.Index{Key: item.key} | 271 index := mgo.Index{Key: item.key} |
273 if err := db.C(item.collection).EnsureIndex(index); err != nil { | 272 if err := db.C(item.collection).EnsureIndex(index); err != nil { |
274 return nil, fmt.Errorf("cannot create database index: %v
", err) | 273 return nil, fmt.Errorf("cannot create database index: %v
", err) |
275 } | 274 } |
276 } | 275 } |
277 st.allManager = multiwatcher.NewStoreManager(newAllWatcherStateBacking(s
t)) | |
278 return st, nil | 276 return st, nil |
279 } | 277 } |
280 | 278 |
281 // Addresses returns the list of addresses used to connect to the state. | 279 // Addresses returns the list of addresses used to connect to the state. |
282 func (st *State) Addresses() (addrs []string) { | 280 func (st *State) Addresses() (addrs []string) { |
283 return append(addrs, st.info.Addrs...) | 281 return append(addrs, st.info.Addrs...) |
284 } | 282 } |
285 | 283 |
286 // CACert returns the certificate used to validate the state connection. | 284 // CACert returns the certificate used to validate the state connection. |
287 func (st *State) CACert() (cert []byte) { | 285 func (st *State) CACert() (cert []byte) { |
288 return append(cert, st.info.CACert...) | 286 return append(cert, st.info.CACert...) |
289 } | 287 } |
290 | 288 |
291 func (st *State) Close() error { | 289 func (st *State) Close() error { |
292 err1 := st.watcher.Stop() | 290 err1 := st.watcher.Stop() |
293 err2 := st.pwatcher.Stop() | 291 err2 := st.pwatcher.Stop() |
294 » err3 := st.allManager.Stop() | 292 » st.mu.Lock() |
| 293 » var err3 error |
| 294 » if st.allManager != nil { |
| 295 » » err3 = st.allManager.Stop() |
| 296 » } |
| 297 » st.mu.Unlock() |
295 st.db.Session.Close() | 298 st.db.Session.Close() |
296 for _, err := range []error{err1, err2, err3} { | 299 for _, err := range []error{err1, err2, err3} { |
297 if err != nil { | 300 if err != nil { |
298 return err | 301 return err |
299 } | 302 } |
300 } | 303 } |
301 return nil | 304 return nil |
302 } | 305 } |
OLD | NEW |