in plugins/storage/rdbms/request.go [66:120]
func (r *RDBMS) GetJobRequest(ctx xcontext.Context, jobID types.JobID) (*job.Request, error) {
r.lockTx()
defer r.unlockTx()
selectStatement := "select job_id, name, requestor, server_id, request_time, descriptor, extended_descriptor from jobs where job_id = ?"
ctx.Debugf("Executing query: %s", selectStatement)
rows, err := r.db.Query(selectStatement, jobID)
if err != nil {
return nil, fmt.Errorf("could not get job request with id %v: %v", jobID, err)
}
defer func() {
if err := rows.Close(); err != nil {
ctx.Warnf("could not close rows for job request: %v", err)
}
}()
var (
req *job.Request
extendedDescriptorJSON string
)
for rows.Next() {
if req != nil {
// We have already found a matching request. If we find more than one,
// then we have a problem
return nil, fmt.Errorf("multiple requests found with job id %v", jobID)
}
currRequest := job.Request{}
err := rows.Scan(
&currRequest.JobID,
&currRequest.JobName,
&currRequest.Requestor,
&currRequest.ServerID,
&currRequest.RequestTime,
&currRequest.JobDescriptor,
&extendedDescriptorJSON,
)
if err != nil {
return nil, fmt.Errorf("could not get job request with job id %v: %v", jobID, err)
}
req = &currRequest
}
if req == nil {
return nil, fmt.Errorf("could not find request with JobID %d", jobID)
}
extendedDescriptor := job.ExtendedDescriptor{}
if err := json.Unmarshal([]byte(extendedDescriptorJSON), &extendedDescriptor); err != nil {
return nil, fmt.Errorf("failed to unmarshal extended job descriptor: %w", err)
}
req.ExtendedDescriptor = &extendedDescriptor
return req, nil
}