mirror of https://github.com/docker/docs.git
cleaning up some dead code and fixing memorystore consistency
Signed-off-by: David Lawrence <david.lawrence@docker.com> (github: endophage)
This commit is contained in:
parent
637a2331d4
commit
dec9a5a95c
|
@ -6,7 +6,6 @@ import (
|
||||||
"encoding/hex"
|
"encoding/hex"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
|
||||||
|
|
||||||
"github.com/Sirupsen/logrus"
|
"github.com/Sirupsen/logrus"
|
||||||
"github.com/docker/notary"
|
"github.com/docker/notary"
|
||||||
|
@ -541,18 +540,3 @@ func (c Client) TargetMeta(role, path string, excludeRoles ...string) (*data.Fil
|
||||||
}
|
}
|
||||||
return meta, ""
|
return meta, ""
|
||||||
}
|
}
|
||||||
|
|
||||||
// DownloadTarget downloads the target to dst from the remote
|
|
||||||
func (c Client) DownloadTarget(dst io.Writer, path string, meta *data.FileMeta) error {
|
|
||||||
reader, err := c.remote.GetTarget(path)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
defer reader.Close()
|
|
||||||
r := io.TeeReader(
|
|
||||||
io.LimitReader(reader, meta.Length),
|
|
||||||
dst,
|
|
||||||
)
|
|
||||||
err = utils.ValidateTarget(r, meta)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
package store
|
package store
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"io"
|
|
||||||
|
|
||||||
"github.com/docker/notary/tuf/data"
|
"github.com/docker/notary/tuf/data"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -23,17 +21,9 @@ type PublicKeyStore interface {
|
||||||
GetKey(role string) ([]byte, error)
|
GetKey(role string) ([]byte, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TargetStore represents a collection of targets that can be walked similarly
|
|
||||||
// to walking a directory, passing a callback that receives the path and meta
|
|
||||||
// for each target
|
|
||||||
type TargetStore interface {
|
|
||||||
WalkStagedTargets(paths []string, targetsFn targetsWalkFunc) error
|
|
||||||
}
|
|
||||||
|
|
||||||
// LocalStore represents a local TUF sture
|
// LocalStore represents a local TUF sture
|
||||||
type LocalStore interface {
|
type LocalStore interface {
|
||||||
MetadataStore
|
MetadataStore
|
||||||
TargetStore
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// RemoteStore is similar to LocalStore with the added expectation that it should
|
// RemoteStore is similar to LocalStore with the added expectation that it should
|
||||||
|
@ -41,5 +31,4 @@ type LocalStore interface {
|
||||||
type RemoteStore interface {
|
type RemoteStore interface {
|
||||||
MetadataStore
|
MetadataStore
|
||||||
PublicKeyStore
|
PublicKeyStore
|
||||||
GetTarget(path string) (io.ReadCloser, error)
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,10 +1,8 @@
|
||||||
package store
|
package store
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
|
||||||
"crypto/sha256"
|
"crypto/sha256"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
|
||||||
|
|
||||||
"github.com/docker/notary"
|
"github.com/docker/notary"
|
||||||
"github.com/docker/notary/tuf/data"
|
"github.com/docker/notary/tuf/data"
|
||||||
|
@ -45,7 +43,10 @@ type MemoryStore struct {
|
||||||
keys map[string][]data.PrivateKey
|
keys map[string][]data.PrivateKey
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetMeta returns up to size bytes of data references by name.
|
||||||
// If size is -1, this corresponds to "infinite," but we cut off at 100MB
|
// If size is -1, this corresponds to "infinite," but we cut off at 100MB
|
||||||
|
// as we will always know the size for everything but a timestamp and
|
||||||
|
// sometimes a root, neither of which should be exceptionally large
|
||||||
func (m *MemoryStore) GetMeta(name string, size int64) ([]byte, error) {
|
func (m *MemoryStore) GetMeta(name string, size int64) ([]byte, error) {
|
||||||
d, ok := m.meta[name]
|
d, ok := m.meta[name]
|
||||||
if ok {
|
if ok {
|
||||||
|
@ -67,6 +68,7 @@ func (m *MemoryStore) GetMeta(name string, size int64) ([]byte, error) {
|
||||||
return nil, ErrMetaNotFound{Resource: name}
|
return nil, ErrMetaNotFound{Resource: name}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SetMeta sets the metadata value for the given name
|
||||||
func (m *MemoryStore) SetMeta(name string, meta []byte) error {
|
func (m *MemoryStore) SetMeta(name string, meta []byte) error {
|
||||||
m.meta[name] = meta
|
m.meta[name] = meta
|
||||||
|
|
||||||
|
@ -76,6 +78,8 @@ func (m *MemoryStore) SetMeta(name string, meta []byte) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SetMultiMeta sets multiple pieces of metadata for multiple names
|
||||||
|
// in a single operation.
|
||||||
func (m *MemoryStore) SetMultiMeta(metas map[string][]byte) error {
|
func (m *MemoryStore) SetMultiMeta(metas map[string][]byte) error {
|
||||||
for role, blob := range metas {
|
for role, blob := range metas {
|
||||||
m.SetMeta(role, blob)
|
m.SetMeta(role, blob)
|
||||||
|
@ -86,56 +90,22 @@ func (m *MemoryStore) SetMultiMeta(metas map[string][]byte) error {
|
||||||
// RemoveMeta removes the metadata for a single role - if the metadata doesn't
|
// RemoveMeta removes the metadata for a single role - if the metadata doesn't
|
||||||
// exist, no error is returned
|
// exist, no error is returned
|
||||||
func (m *MemoryStore) RemoveMeta(name string) error {
|
func (m *MemoryStore) RemoveMeta(name string) error {
|
||||||
|
if meta, ok := m.meta[name]; ok {
|
||||||
|
checksum := sha256.Sum256(meta)
|
||||||
|
path := utils.URLFilePath(name, checksum[:], true)
|
||||||
delete(m.meta, name)
|
delete(m.meta, name)
|
||||||
return nil
|
delete(m.consistent, path)
|
||||||
}
|
|
||||||
|
|
||||||
func (m *MemoryStore) GetTarget(path string) (io.ReadCloser, error) {
|
|
||||||
return &utils.NoopCloser{Reader: bytes.NewReader(m.files[path])}, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *MemoryStore) WalkStagedTargets(paths []string, targetsFn targetsWalkFunc) error {
|
|
||||||
if len(paths) == 0 {
|
|
||||||
for path, dat := range m.files {
|
|
||||||
meta, err := data.NewFileMeta(bytes.NewReader(dat), "sha256")
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if err = targetsFn(path, meta); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, path := range paths {
|
// GetKey returns the public key for the given role
|
||||||
dat, ok := m.files[path]
|
|
||||||
if !ok {
|
|
||||||
return ErrMetaNotFound{Resource: path}
|
|
||||||
}
|
|
||||||
meta, err := data.NewFileMeta(bytes.NewReader(dat), "sha256")
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if err = targetsFn(path, meta); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *MemoryStore) Commit(map[string][]byte, bool, map[string]data.Hashes) error {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *MemoryStore) GetKey(role string) ([]byte, error) {
|
func (m *MemoryStore) GetKey(role string) ([]byte, error) {
|
||||||
return nil, fmt.Errorf("GetKey is not implemented for the MemoryStore")
|
return nil, fmt.Errorf("GetKey is not implemented for the MemoryStore")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Clear this existing memory store by setting this store as new empty one
|
// RemoveAll clears the existing memory store by setting this store as new empty one
|
||||||
func (m *MemoryStore) RemoveAll() error {
|
func (m *MemoryStore) RemoveAll() error {
|
||||||
m.meta = make(map[string][]byte)
|
*m = *NewMemoryStore(nil, nil)
|
||||||
m.files = make(map[string][]byte)
|
|
||||||
m.keys = make(map[string][]data.PrivateKey)
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,11 +9,15 @@ type CorruptingMemoryStore struct {
|
||||||
store.MemoryStore
|
store.MemoryStore
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewCorruptingMemoryStore returns a new instance of memory store that
|
||||||
|
// corrupts all data requested from it.
|
||||||
func NewCorruptingMemoryStore(meta map[string][]byte, files map[string][]byte) *CorruptingMemoryStore {
|
func NewCorruptingMemoryStore(meta map[string][]byte, files map[string][]byte) *CorruptingMemoryStore {
|
||||||
s := store.NewMemoryStore(meta, files)
|
s := store.NewMemoryStore(meta, files)
|
||||||
return &CorruptingMemoryStore{MemoryStore: *s}
|
return &CorruptingMemoryStore{MemoryStore: *s}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetMeta returns up to size bytes of meta identified by string. It will
|
||||||
|
// always be corrupted by setting the first character to }
|
||||||
func (cm CorruptingMemoryStore) GetMeta(name string, size int64) ([]byte, error) {
|
func (cm CorruptingMemoryStore) GetMeta(name string, size int64) ([]byte, error) {
|
||||||
d, err := cm.MemoryStore.GetMeta(name, size)
|
d, err := cm.MemoryStore.GetMeta(name, size)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
Loading…
Reference in New Issue