Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(19)

Side by Side Diff: state/open.go

Issue 8823043: state: start allManager on demand
Patch Set: state: start allManager on demand Created 12 years ago
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments. Please Sign in to add in-line comments.
Jump to:
View unified diff | Download patch
« no previous file with comments | « [revision details] ('k') | state/state.go » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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 }
OLDNEW
« no previous file with comments | « [revision details] ('k') | state/state.go » ('j') | no next file with comments »

Powered by Google App Engine
RSS Feeds Recent Issues | This issue
This is Rietveld f62528b