v1_id_service.go 1.0 KB

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