~juju-qa/ubuntu/xenial/juju/xenial-2.0-beta3

« back to all changes in this revision

Viewing changes to src/github.com/juju/juju/state/binarystorage.go

  • Committer: Martin Packman
  • Date: 2016-03-30 19:31:08 UTC
  • mfrom: (1.1.41)
  • Revision ID: martin.packman@canonical.com-20160330193108-h9iz3ak334uk0z5r
Merge new upstream source 2.0~beta3

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
// Copyright 2014 Canonical Ltd.
 
2
// Licensed under the AGPLv3, see LICENCE file for details.
 
3
 
 
4
package state
 
5
 
 
6
import (
 
7
        jujutxn "github.com/juju/txn"
 
8
        "gopkg.in/juju/blobstore.v2"
 
9
        "gopkg.in/mgo.v2"
 
10
 
 
11
        "github.com/juju/juju/state/binarystorage"
 
12
)
 
13
 
 
14
var binarystorageNew = binarystorage.New
 
15
 
 
16
// ToolsStorage returns a new binarystorage.StorageCloser that stores tools
 
17
// metadata in the "juju" database "toolsmetadata" collection.
 
18
//
 
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
 
22
}
 
23
 
 
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
 
28
}
 
29
 
 
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}
 
40
}
 
41
 
 
42
type storageCloser struct {
 
43
        binarystorage.Storage
 
44
        session *mgo.Session
 
45
}
 
46
 
 
47
func (t *storageCloser) Close() error {
 
48
        t.session.Close()
 
49
        return nil
 
50
}