github.com/pf-qiu/concourse/v6@v6.7.3-0.20201207032516-1f455d73275f/atc/db/worker_task_cache_factory.go (about)

     1  package db
     2  
     3  //go:generate counterfeiter . WorkerTaskCacheFactory
     4  
     5  type WorkerTaskCacheFactory interface {
     6  	FindOrCreate(WorkerTaskCache) (*UsedWorkerTaskCache, error)
     7  	Find(WorkerTaskCache) (*UsedWorkerTaskCache, bool, error)
     8  }
     9  
    10  type workerTaskCacheFactory struct {
    11  	conn Conn
    12  }
    13  
    14  func NewWorkerTaskCacheFactory(conn Conn) WorkerTaskCacheFactory {
    15  	return &workerTaskCacheFactory{
    16  		conn: conn,
    17  	}
    18  }
    19  
    20  func (f *workerTaskCacheFactory) Find(workerTaskCache WorkerTaskCache) (*UsedWorkerTaskCache, bool, error) {
    21  	return workerTaskCache.find(f.conn)
    22  }
    23  
    24  func (f *workerTaskCacheFactory) FindOrCreate(workerTaskCache WorkerTaskCache) (*UsedWorkerTaskCache, error) {
    25  	tx, err := f.conn.Begin()
    26  	if err != nil {
    27  		return nil, err
    28  	}
    29  
    30  	defer Rollback(tx)
    31  
    32  	usedWorkerTaskCache, err := workerTaskCache.findOrCreate(tx)
    33  	if err != nil {
    34  		return nil, err
    35  	}
    36  
    37  	err = tx.Commit()
    38  	if err != nil {
    39  		return nil, err
    40  	}
    41  
    42  	return usedWorkerTaskCache, nil
    43  }