/
tools.go
43 lines (36 loc) · 1.16 KB
/
tools.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
// Copyright 2014 Canonical Ltd.
// Licensed under the AGPLv3, see LICENCE file for details.
package state
import (
jujutxn "github.com/juju/txn"
"gopkg.in/juju/blobstore.v2"
"gopkg.in/mgo.v2"
"github.com/juju/juju/state/toolstorage"
)
var (
toolstorageNewStorage = toolstorage.NewStorage
)
// ToolsStorage returns a new toolstorage.StorageCloser
// that stores tools metadata in the "juju" database''
// "toolsmetadata" collection.
//
// TODO(axw) remove this, add a constructor function in toolstorage.
func (st *State) ToolsStorage() (toolstorage.StorageCloser, error) {
uuid := st.ModelUUID()
session := st.session.Copy()
rs := blobstore.NewGridFS(blobstoreDB, uuid, session)
db := session.DB(jujuDB)
metadataCollection := db.C(toolsmetadataC)
txnRunner := jujutxn.NewRunner(jujutxn.RunnerParams{Database: db})
managedStorage := blobstore.NewManagedStorage(db, rs)
storage := toolstorageNewStorage(uuid, managedStorage, metadataCollection, txnRunner)
return &toolsStorageCloser{storage, session}, nil
}
type toolsStorageCloser struct {
toolstorage.Storage
session *mgo.Session
}
func (t *toolsStorageCloser) Close() error {
t.session.Close()
return nil
}