func()

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
}