|
|
@@ -665,10 +665,12 @@ func (st *State) AddCharm(ch charm.Charm, curl *charm.URL, storagePath, bundleSh |
|
|
charms, closer := st.getCollection(charmsC)
|
|
|
defer closer()
|
|
|
|
|
|
- err = charms.Find(bson.D{{"_id", curl.String()}, {"placeholder", true}}).One(&existing)
|
|
|
+ err = charms.Find(bson.D{{"_id", st.docID(curl.String())}, {"placeholder", true}}).One(&existing)
|
|
|
if err == mgo.ErrNotFound {
|
|
|
cdoc := &charmDoc{
|
|
|
+ DocID: st.docID(curl.String()),
|
|
|
URL: curl,
|
|
|
+ EnvUUID: st.EnvironTag().Id(),
|
|
|
Meta: ch.Meta(),
|
|
|
Config: ch.Config(),
|
|
|
Actions: ch.Actions(),
|
|
|
@@ -707,7 +709,7 @@ func (st *State) Charm(curl *charm.URL) (*Charm, error) { |
|
|
|
|
|
cdoc := &charmDoc{}
|
|
|
what := bson.D{
|
|
|
- {"_id", curl},
|
|
|
+ {"_id", st.docID(curl.String())},
|
|
|
{"placeholder", bson.D{{"$ne", true}}},
|
|
|
{"pendingupload", bson.D{{"$ne", true}}},
|
|
|
}
|
|
|
@@ -731,7 +733,7 @@ func (st *State) LatestPlaceholderCharm(curl *charm.URL) (*Charm, error) { |
|
|
defer closer()
|
|
|
|
|
|
noRevURL := curl.WithRevision(-1)
|
|
|
- curlRegex := "^" + regexp.QuoteMeta(noRevURL.String())
|
|
|
+ curlRegex := "^" + regexp.QuoteMeta(st.docID(noRevURL.String()))
|
|
|
var docs []charmDoc
|
|
|
err := charms.Find(bson.D{{"_id", bson.D{{"$regex", curlRegex}}}, {"placeholder", true}}).All(&docs)
|
|
|
if err != nil {
|
|
|
@@ -766,15 +768,15 @@ func (st *State) PrepareLocalCharmUpload(curl *charm.URL) (chosenUrl *charm.URL, |
|
|
}
|
|
|
// Get a regex with the charm URL and no revision.
|
|
|
noRevURL := curl.WithRevision(-1)
|
|
|
- curlRegex := "^" + regexp.QuoteMeta(noRevURL.String())
|
|
|
+ curlRegex := "^" + regexp.QuoteMeta(st.docID(noRevURL.String()))
|
|
|
|
|
|
charms, closer := st.getCollection(charmsC)
|
|
|
defer closer()
|
|
|
|
|
|
buildTxn := func(attempt int) ([]txn.Op, error) {
|
|
|
// Find the highest revision of that charm in state.
|
|
|
var docs []charmDoc
|
|
|
- err = charms.Find(bson.D{{"_id", bson.D{{"$regex", curlRegex}}}}).Select(bson.D{{"_id", 1}}).All(&docs)
|
|
|
+ err = charms.Find(bson.D{{"_id", bson.D{{"$regex", curlRegex}}}}).Select(bson.D{{"_id", 1}, {"url", 1}}).All(&docs)
|
|
|
if err != nil {
|
|
|
return nil, errors.Trace(err)
|
|
|
}
|
|
|
@@ -795,12 +797,14 @@ func (st *State) PrepareLocalCharmUpload(curl *charm.URL) (chosenUrl *charm.URL, |
|
|
chosenUrl = curl.WithRevision(chosenRevision)
|
|
|
|
|
|
uploadedCharm := &charmDoc{
|
|
|
+ DocID: st.docID(chosenUrl.String()),
|
|
|
+ EnvUUID: st.EnvironTag().Id(),
|
|
|
URL: chosenUrl,
|
|
|
PendingUpload: true,
|
|
|
}
|
|
|
ops := []txn.Op{{
|
|
|
C: charmsC,
|
|
|
- Id: uploadedCharm.URL,
|
|
|
+ Id: uploadedCharm.DocID,
|
|
|
Assert: txn.DocMissing,
|
|
|
Insert: uploadedCharm,
|
|
|
}}
|
|
|
@@ -839,7 +843,7 @@ func (st *State) PrepareStoreCharmUpload(curl *charm.URL) (*Charm, error) { |
|
|
)
|
|
|
buildTxn := func(attempt int) ([]txn.Op, error) {
|
|
|
// Find an uploaded or pending charm with the given exact curl.
|
|
|
- err := charms.FindId(curl).One(&uploadedCharm)
|
|
|
+ err := charms.FindId(st.docID(curl.String())).One(&uploadedCharm)
|
|
|
if err != nil && err != mgo.ErrNotFound {
|
|
|
return nil, errors.Trace(err)
|
|
|
} else if err == nil && !uploadedCharm.Placeholder {
|
|
|
@@ -850,6 +854,8 @@ func (st *State) PrepareStoreCharmUpload(curl *charm.URL) (*Charm, error) { |
|
|
} else if err == mgo.ErrNotFound {
|
|
|
// Prepare the pending charm document for insertion.
|
|
|
uploadedCharm = charmDoc{
|
|
|
+ DocID: st.docID(curl.String()),
|
|
|
+ EnvUUID: st.EnvironTag().Id(),
|
|
|
URL: curl,
|
|
|
PendingUpload: true,
|
|
|
Placeholder: false,
|
|
|
@@ -863,7 +869,7 @@ func (st *State) PrepareStoreCharmUpload(curl *charm.URL) (*Charm, error) { |
|
|
// changed yet.
|
|
|
ops = []txn.Op{{
|
|
|
C: charmsC,
|
|
|
- Id: curl,
|
|
|
+ Id: uploadedCharm.DocID,
|
|
|
Assert: bson.D{
|
|
|
{"bundlesha256", ""},
|
|
|
{"pendingupload", false},
|
|
|
@@ -881,7 +887,7 @@ func (st *State) PrepareStoreCharmUpload(curl *charm.URL) (*Charm, error) { |
|
|
// No charm document with this curl yet, insert it.
|
|
|
ops = []txn.Op{{
|
|
|
C: charmsC,
|
|
|
- Id: curl,
|
|
|
+ Id: uploadedCharm.DocID,
|
|
|
Assert: txn.DocMissing,
|
|
|
Insert: uploadedCharm,
|
|
|
}}
|
|
|
@@ -916,7 +922,7 @@ func (st *State) AddStoreCharmPlaceholder(curl *charm.URL) (err error) { |
|
|
buildTxn := func(attempt int) ([]txn.Op, error) {
|
|
|
// See if the charm already exists in state and exit early if that's the case.
|
|
|
var doc charmDoc
|
|
|
- err := charms.Find(bson.D{{"_id", curl.String()}}).Select(bson.D{{"_id", 1}}).One(&doc)
|
|
|
+ err := charms.Find(bson.D{{"_id", st.docID(curl.String())}}).Select(bson.D{{"_id", 1}}).One(&doc)
|
|
|
if err != nil && err != mgo.ErrNotFound {
|
|
|
return nil, errors.Trace(err)
|
|
|
}
|
|
|
@@ -931,12 +937,14 @@ func (st *State) AddStoreCharmPlaceholder(curl *charm.URL) (err error) { |
|
|
}
|
|
|
// Add the new charm doc.
|
|
|
placeholderCharm := &charmDoc{
|
|
|
+ DocID: st.docID(curl.String()),
|
|
|
+ EnvUUID: st.EnvironTag().Id(),
|
|
|
URL: curl,
|
|
|
Placeholder: true,
|
|
|
}
|
|
|
ops = append(ops, txn.Op{
|
|
|
C: charmsC,
|
|
|
- Id: placeholderCharm.URL.String(),
|
|
|
+ Id: placeholderCharm.DocID,
|
|
|
Assert: txn.DocMissing,
|
|
|
Insert: placeholderCharm,
|
|
|
})
|
|
|
@@ -950,14 +958,13 @@ func (st *State) AddStoreCharmPlaceholder(curl *charm.URL) (err error) { |
|
|
func (st *State) deleteOldPlaceholderCharmsOps(curl *charm.URL) ([]txn.Op, error) {
|
|
|
// Get a regex with the charm URL and no revision.
|
|
|
noRevURL := curl.WithRevision(-1)
|
|
|
- curlRegex := "^" + regexp.QuoteMeta(noRevURL.String())
|
|
|
-
|
|
|
+ curlRegex := "^" + regexp.QuoteMeta(st.docID(noRevURL.String()))
|
|
|
charms, closer := st.getCollection(charmsC)
|
|
|
defer closer()
|
|
|
|
|
|
var docs []charmDoc
|
|
|
err := charms.Find(
|
|
|
- bson.D{{"_id", bson.D{{"$regex", curlRegex}}}, {"placeholder", true}}).Select(bson.D{{"_id", 1}}).All(&docs)
|
|
|
+ bson.D{{"_id", bson.D{{"$regex", curlRegex}}}, {"placeholder", true}}).Select(bson.D{{"_id", 1}, {"url", 1}}).All(&docs)
|
|
|
if err != nil {
|
|
|
return nil, errors.Trace(err)
|
|
|
}
|
|
|
@@ -968,7 +975,7 @@ func (st *State) deleteOldPlaceholderCharmsOps(curl *charm.URL) ([]txn.Op, error |
|
|
}
|
|
|
ops = append(ops, txn.Op{
|
|
|
C: charmsC,
|
|
|
- Id: doc.URL.String(),
|
|
|
+ Id: doc.DocID,
|
|
|
Assert: stillPlaceholder,
|
|
|
Remove: true,
|
|
|
})
|
|
|
@@ -1015,7 +1022,7 @@ func (st *State) UpdateUploadedCharm(ch charm.Charm, curl *charm.URL, storagePat |
|
|
defer closer()
|
|
|
|
|
|
doc := &charmDoc{}
|
|
|
- err := charms.FindId(curl).One(&doc)
|
|
|
+ err := charms.FindId(st.docID(curl.String())).One(&doc)
|
|
|
if err == mgo.ErrNotFound {
|
|
|
return nil, errors.NotFoundf("charm %q", curl)
|
|
|
}
|
|
|
@@ -1055,7 +1062,7 @@ func (st *State) updateCharmDoc( |
|
|
}}}
|
|
|
ops := []txn.Op{{
|
|
|
C: charmsC,
|
|
|
- Id: curl,
|
|
|
+ Id: st.docID(curl.String()),
|
|
|
Assert: preReq,
|
|
|
Update: updateFields,
|
|
|
}}
|
|
|
|
0 comments on commit
45f84f5