1
// Copyright 2014 Canonical Ltd.
2
// Licensed under the AGPLv3, see LICENCE file for details.
7
jujutxn "github.com/juju/txn"
8
"gopkg.in/juju/blobstore.v2"
11
"github.com/juju/juju/state/binarystorage"
14
var binarystorageNew = binarystorage.New
16
// ToolsStorage returns a new binarystorage.StorageCloser that stores tools
17
// metadata in the "juju" database "toolsmetadata" collection.
19
// TODO(axw) remove this, add a constructor function in binarystorage.
20
func (st *State) ToolsStorage() (binarystorage.StorageCloser, error) {
21
return newStorage(st, toolsmetadataC), nil
24
// GUIStorage returns a new binarystorage.StorageCloser that stores GUI archive
25
// metadata in the "juju" database "guimetadata" collection.
26
func (st *State) GUIStorage() (binarystorage.StorageCloser, error) {
27
return newStorage(st, guimetadataC), nil
30
func newStorage(st *State, metadataCollection string) binarystorage.StorageCloser {
31
uuid := st.ModelUUID()
32
session := st.session.Copy()
33
rs := blobstore.NewGridFS(blobstoreDB, uuid, session)
34
db := session.DB(jujuDB)
35
c := db.C(metadataCollection)
36
txnRunner := jujutxn.NewRunner(jujutxn.RunnerParams{Database: db})
37
managedStorage := blobstore.NewManagedStorage(db, rs)
38
storage := binarystorageNew(uuid, managedStorage, c, txnRunner)
39
return &storageCloser{storage, session}
42
type storageCloser struct {
47
func (t *storageCloser) Close() error {