Index: state/service.go |
=== modified file 'state/service.go' |
--- state/service.go 2014-01-15 06:52:56 +0000 |
+++ state/service.go 2014-02-17 16:32:56 +0000 |
@@ -37,7 +37,6 @@ |
CharmURL *charm.URL |
ForceCharm bool |
Life Life |
- UnitSeq int |
UnitCount int |
RelationCount int |
Exposed bool |
@@ -529,15 +528,11 @@ |
// newUnitName returns the next unit name. |
func (s *Service) newUnitName() (string, error) { |
- change := mgo.Change{Update: D{{"$inc", D{{"unitseq", 1}}}}} |
- result := serviceDoc{} |
- if _, err := s.st.services.Find(D{{"_id", s.doc.Name}}).Apply(change, &result); err == mgo.ErrNotFound { |
- return "", errors.NotFoundf("service %q", s) |
- } else if err != nil { |
- return "", fmt.Errorf("cannot increment unit sequence: %v", err) |
+ seq, err := s.st.sequence(s.globalKey() + "#unit") |
+ if err != nil { |
+ return "", err |
} |
- name := s.doc.Name + "/" + strconv.Itoa(result.UnitSeq) |
- return name, nil |
+ return s.doc.Name + "/" + strconv.Itoa(seq), nil |
} |
// addUnitOps returns a unique name for a new unit, and a list of txn operations |
@@ -591,7 +586,7 @@ |
}) |
} else { |
scons, err := s.Constraints() |
- if err != nil { |
+ if err != nil && !errors.IsNotFoundError(err) { |
return "", nil, err |
} |
econs, err := s.st.EnvironConstraints() |
@@ -631,7 +626,7 @@ |
if alive, err := isAlive(s.st.services, s.doc.Name); err != nil { |
return nil, err |
} else if !alive { |
- return nil, fmt.Errorf("service is not alive") |
+ return nil, fmt.Errorf("service is no longer alive") |
} |
return nil, fmt.Errorf("inconsistent state") |
} else if err != nil { |