artifact

package
v0.0.0-...-50b27ac Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 3, 2023 License: MIT Imports: 11 Imported by: 9

README

artifact

Пакет artifact реализует кеш хранения артефактов и протокол для передачи артефактов между воркерами.

Артефакт - это директория, содержащая в себе результат работы джоба. Артефакт может состоять из произвольного набора файлов и директорий.

Основной тип artifact.Cache занимается хранением артефактов на диске и контролем одновременного доступа. Все методы artifact.Cache concurrency safe.

Одна горутина может начать писать артефакт. Начало записи берёт лок на запись. Никто другой не может работать с артефактом, на который взят лок на запись. Горутина должна позвать commit или abort после того, как она закончила работать с артефактом.

commit помещает артефакт в кеш. abort отменяет запись артефакта, удаляя все данные.

Реализация artifact.Cache вам дана.

Скачивание артефакта

*artifact.Handler должен реализовывать один метод GET /artifact?id=1234. Хендлер отвечает на запрос содержимым артефакта в формате tarstream.

Функция Download должна скачивать артефакт из удалённого кеша в локальный.

Обратите внимание, что конструктор хендлера принимает *zap.Logger. Запишите в этот логгер интересные события, это поможет при отладке в следующих частях задачи.

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrNotFound    = errors.New("artifact not found")
	ErrExists      = errors.New("artifact exists")
	ErrWriteLocked = errors.New("artifact is locked for write")
	ErrReadLocked  = errors.New("artifact is locked for read")
)

Functions

func Download

func Download(ctx context.Context, endpoint string, c *Cache, artifactID build.ID) error

Download artifact from remote cache into local cache.

Types

type Cache

type Cache struct {
	// contains filtered or unexported fields
}

func NewCache

func NewCache(root string) (*Cache, error)

func (*Cache) Create

func (c *Cache) Create(artifact build.ID) (path string, commit, abort func() error, err error)

func (*Cache) Get

func (c *Cache) Get(artifact build.ID) (path string, unlock func(), err error)

func (*Cache) Range

func (c *Cache) Range(artifactFn func(artifact build.ID) error) error

func (*Cache) Remove

func (c *Cache) Remove(artifact build.ID) error

type Handler

type Handler struct {
}

func NewHandler

func NewHandler(l *zap.Logger, c *Cache) *Handler

func (*Handler) Register

func (h *Handler) Register(mux *http.ServeMux)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL