MCPcopy Create free account
hub / github.com/cloudbase/garm / LockJob

Method LockJob

database/sql/jobs.go:158–207  ·  view source on GitHub ↗
(_ context.Context, jobID int64, entityID string)

Source from the content-addressed store, hash-verified

156}
157
158func (s *sqlDatabase) LockJob(_ context.Context, jobID int64, entityID string) error {
159 entityUUID, err := uuid.Parse(entityID)
160 if err != nil {
161 return fmt.Errorf("error parsing entity id: %w", err)
162 }
163
164 var asParams params.Job
165
166 err = s.conn.Transaction(func(tx *gorm.DB) error {
167 var workflowJob WorkflowJob
168 q := tx.Preload("Instance").Where("workflow_job_id = ?", jobID).First(&workflowJob)
169
170 if q.Error != nil {
171 if errors.Is(q.Error, gorm.ErrRecordNotFound) {
172 return runnerErrors.ErrNotFound
173 }
174 return fmt.Errorf("error fetching job: %w", q.Error)
175 }
176
177 if workflowJob.LockedBy.String() == entityID {
178 // Already locked by us.
179 return nil
180 }
181
182 if workflowJob.LockedBy != uuid.Nil {
183 return runnerErrors.NewConflictError("job is locked by another entity %s", workflowJob.LockedBy.String())
184 }
185
186 workflowJob.LockedBy = entityUUID
187
188 if err := tx.Save(&workflowJob).Error; err != nil {
189 return fmt.Errorf("error saving job: %w", err)
190 }
191
192 var err error
193 asParams, err = sqlWorkflowJobToParamsJob(workflowJob)
194 if err != nil {
195 return fmt.Errorf("error converting job: %w", err)
196 }
197 return nil
198 })
199 if err != nil {
200 return err
201 }
202
203 if asParams.ID != 0 {
204 s.sendNotify(common.JobEntityType, common.UpdateOperation, asParams)
205 }
206 return nil
207}
208
209func (s *sqlDatabase) BreakLockJobIsQueued(_ context.Context, jobID int64) error {
210 var asParams params.Job

Callers

nothing calls this directly

Calls 3

sendNotifyMethod · 0.95
StringMethod · 0.45

Tested by

no test coverage detected