v1_id_service.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. package metadata
  2. import (
  3. "github.com/docker/docker/image/v1"
  4. "github.com/docker/docker/layer"
  5. "github.com/pkg/errors"
  6. )
  7. // V1IDService maps v1 IDs to layers on disk.
  8. type V1IDService struct {
  9. store Store
  10. }
  11. // NewV1IDService creates a new V1 ID mapping service.
  12. func NewV1IDService(store Store) *V1IDService {
  13. return &V1IDService{
  14. store: store,
  15. }
  16. }
  17. // namespace returns the namespace used by this service.
  18. func (idserv *V1IDService) namespace() string {
  19. return "v1id"
  20. }
  21. // Get finds a layer by its V1 ID.
  22. func (idserv *V1IDService) Get(v1ID, registry string) (layer.DiffID, error) {
  23. if idserv.store == nil {
  24. return "", errors.New("no v1IDService storage")
  25. }
  26. if err := v1.ValidateID(v1ID); err != nil {
  27. return layer.DiffID(""), err
  28. }
  29. idBytes, err := idserv.store.Get(idserv.namespace(), registry+","+v1ID)
  30. if err != nil {
  31. return layer.DiffID(""), err
  32. }
  33. return layer.DiffID(idBytes), nil
  34. }
  35. // Set associates an image with a V1 ID.
  36. func (idserv *V1IDService) Set(v1ID, registry string, id layer.DiffID) error {
  37. if idserv.store == nil {
  38. return nil
  39. }
  40. if err := v1.ValidateID(v1ID); err != nil {
  41. return err
  42. }
  43. return idserv.store.Set(idserv.namespace(), registry+","+v1ID, []byte(id))
  44. }