github.com/pf-qiu/concourse/v6@v6.7.3-0.20201207032516-1f455d73275f/atc/db/task_cache_factory.go (about) 1 package db 2 3 //go:generate counterfeiter . TaskCacheFactory 4 5 type TaskCacheFactory interface { 6 Find(jobID int, stepName string, path string) (UsedTaskCache, bool, error) 7 FindOrCreate(jobID int, stepName string, path string) (UsedTaskCache, error) 8 } 9 10 type taskCacheFactory struct { 11 conn Conn 12 } 13 14 func NewTaskCacheFactory(conn Conn) TaskCacheFactory { 15 return &taskCacheFactory{ 16 conn: conn, 17 } 18 } 19 20 func (f *taskCacheFactory) Find(jobID int, stepName string, path string) (UsedTaskCache, bool, error) { 21 return usedTaskCache{ 22 jobID: jobID, 23 stepName: stepName, 24 path: path, 25 }.find(f.conn) 26 } 27 28 func (f *taskCacheFactory) FindOrCreate(jobID int, stepName string, path string) (UsedTaskCache, error) { 29 tx, err := f.conn.Begin() 30 if err != nil { 31 return nil, err 32 } 33 34 defer Rollback(tx) 35 36 utc, err := usedTaskCache{ 37 jobID: jobID, 38 stepName: stepName, 39 path: path, 40 }.findOrCreate(tx) 41 42 if err != nil { 43 return nil, err 44 } 45 46 err = tx.Commit() 47 if err != nil { 48 return nil, err 49 } 50 51 return utc, nil 52 }