~rogpeppe/juju-core/azure

« back to all changes in this revision

Viewing changes to state/life.go

  • Committer: Gustavo Niemeyer
  • Date: 2011-09-26 14:48:45 UTC
  • mto: This revision was merged to the branch mainline in revision 34.
  • Revision ID: gustavo@niemeyer.net-20110926144845-atwp3u6blqngmhel
Bootstrapping store package.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
// Copyright 2012, 2013 Canonical Ltd.
2
 
// Licensed under the AGPLv3, see LICENCE file for details.
3
 
 
4
 
package state
5
 
 
6
 
import (
7
 
        "labix.org/v2/mgo"
8
 
 
9
 
        "launchpad.net/juju-core/state/api/params"
10
 
)
11
 
 
12
 
// Life represents the lifecycle state of the entities
13
 
// Relation, Unit, Service and Machine.
14
 
type Life int8
15
 
 
16
 
const (
17
 
        Alive Life = iota
18
 
        Dying
19
 
        Dead
20
 
        nLife
21
 
)
22
 
 
23
 
var lifeStrings = [nLife]params.Life{
24
 
        Alive: params.Alive,
25
 
        Dying: params.Dying,
26
 
        Dead:  params.Dead,
27
 
}
28
 
 
29
 
func (l Life) String() string {
30
 
        return string(lifeStrings[l])
31
 
}
32
 
 
33
 
var isAliveDoc = D{{"life", Alive}}
34
 
var isDeadDoc = D{{"life", Dead}}
35
 
var notDeadDoc = D{{"life", D{{"$ne", Dead}}}}
36
 
 
37
 
// Living describes state entities with a lifecycle.
38
 
type Living interface {
39
 
        Life() Life
40
 
        Destroy() error
41
 
        EnsureDead() error
42
 
        Refresh() error
43
 
}
44
 
 
45
 
func isAlive(coll *mgo.Collection, id interface{}) (bool, error) {
46
 
        n, err := coll.Find(D{{"_id", id}, {"life", Alive}}).Count()
47
 
        return n == 1, err
48
 
}
49
 
 
50
 
func isNotDead(coll *mgo.Collection, id interface{}) (bool, error) {
51
 
        n, err := coll.Find(D{{"_id", id}, {"life", D{{"$ne", Dead}}}}).Count()
52
 
        return n == 1, err
53
 
}