~nskaggs/+junk/xenial-test

« back to all changes in this revision

Viewing changes to src/github.com/juju/juju/environs/storage/interfaces.go

  • Committer: Nicholas Skaggs
  • Date: 2016-10-24 20:56:05 UTC
  • Revision ID: nicholas.skaggs@canonical.com-20161024205605-z8lta0uvuhtxwzwl
Initi with beta15

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
// Copyright 2013 Canonical Ltd.
 
2
// Licensed under the AGPLv3, see LICENCE file for details.
 
3
 
 
4
package storage
 
5
 
 
6
import (
 
7
        "io"
 
8
 
 
9
        "github.com/juju/utils"
 
10
)
 
11
 
 
12
// A StorageReader can retrieve and list files from a storage provider.
 
13
type StorageReader interface {
 
14
        // Get opens the given storage file and returns a ReadCloser
 
15
        // that can be used to read its contents.  It is the caller's
 
16
        // responsibility to close it after use.  If the name does not
 
17
        // exist, it should return a *NotFoundError.
 
18
        Get(name string) (io.ReadCloser, error)
 
19
 
 
20
        // List lists all names in the storage with the given prefix, in
 
21
        // alphabetical order.  The names in the storage are considered
 
22
        // to be in a flat namespace, so the prefix may include slashes
 
23
        // and the names returned are the full names for the matching
 
24
        // entries.
 
25
        List(prefix string) ([]string, error)
 
26
 
 
27
        // URL returns a URL that can be used to access the given storage file.
 
28
        URL(name string) (string, error)
 
29
 
 
30
        // DefaultConsistencyStrategy returns the appropriate polling for waiting
 
31
        // for this storage to become consistent.
 
32
        // If the storage implementation has immediate consistency, the
 
33
        // strategy won't need to wait at all.  But for eventually-consistent
 
34
        // storage backends a few seconds of polling may be needed.
 
35
        //
 
36
        // TODO(katco): 2016-08-09: lp:1611427
 
37
        DefaultConsistencyStrategy() utils.AttemptStrategy
 
38
 
 
39
        // ShouldRetry returns true is the specified error is such that an
 
40
        // operation can be performed again with a chance of success. This is
 
41
        // typically the case where the storage implementation does not have
 
42
        // immediate consistency and needs to be given a chance to "catch up".
 
43
        ShouldRetry(error) bool
 
44
}
 
45
 
 
46
// A StorageWriter adds and removes files in a storage provider.
 
47
type StorageWriter interface {
 
48
        // Put reads from r and writes to the given storage file.
 
49
        // The length must give the total length of the file.
 
50
        Put(name string, r io.Reader, length int64) error
 
51
 
 
52
        // Remove removes the given file from the environment's
 
53
        // storage. It should not return an error if the file does
 
54
        // not exist.
 
55
        Remove(name string) error
 
56
 
 
57
        // RemoveAll deletes all files that have been stored here.
 
58
        // If the underlying storage implementation may be shared
 
59
        // with other actors, it must be sure not to delete their
 
60
        // file as well.
 
61
        // Nevertheless, use with care!  This method is only mean
 
62
        // for cleaning up an environment that's being destroyed.
 
63
        RemoveAll() error
 
64
}
 
65
 
 
66
// Storage represents storage that can be both
 
67
// read and written.
 
68
type Storage interface {
 
69
        StorageReader
 
70
        StorageWriter
 
71
}