jobqueue: Replace JobArgs() with Job()

JobArgs() function replaced with more general Job() function that
returns all the parameters used to originally define a job during
Enqueue(). This new function enables access to the type of a job in the
queue, which wasn't available until now (except when Dequeueing).
This commit is contained in:
Achilleas Koutsou 2021-01-12 13:49:01 +01:00 committed by Ondřej Budai
parent 75a96bd99d
commit 668fb003ef
6 changed files with 26 additions and 18 deletions

View file

@ -287,13 +287,16 @@ func (q *fsJobQueue) JobStatus(id uuid.UUID) (result json.RawMessage, queued, st
return
}
func (q *fsJobQueue) JobArgs(id uuid.UUID) (args json.RawMessage, err error) {
func (q *fsJobQueue) Job(id uuid.UUID) (jobType string, args json.RawMessage, dependencies []uuid.UUID, err error) {
j, err := q.readJob(id)
if err != nil {
return
}
jobType = j.Type
args = j.Args
dependencies = j.Dependencies
return
}

View file

@ -103,10 +103,12 @@ func TestArgs(t *testing.T) {
require.NoError(t, err)
require.Equal(t, twoargs, parsedArgs)
// Read args after Dequeue
jargs, err := q.JobArgs(id)
// Read job params after Dequeue
jtype, jargs, jdeps, err := q.Job(id)
require.NoError(t, err)
require.Equal(t, args, jargs)
require.Equal(t, deps, jdeps)
require.Equal(t, typ, jtype)
id, deps, typ, args, err = q.Dequeue(context.Background(), []string{"fish"})
require.NoError(t, err)
@ -117,12 +119,13 @@ func TestArgs(t *testing.T) {
require.NoError(t, err)
require.Equal(t, oneargs, parsedArgs)
// Read args directly after Dequeue
jargs, err = q.JobArgs(id)
jtype, jargs, jdeps, err = q.Job(id)
require.NoError(t, err)
require.Equal(t, args, jargs)
require.Equal(t, deps, jdeps)
require.Equal(t, typ, jtype)
_, err = q.JobArgs(uuid.New())
_, _, _, err = q.Job(uuid.New())
require.Error(t, err)
}

View file

@ -60,8 +60,8 @@ type JobQueue interface {
// Lastly, the IDs of the jobs dependencies are returned.
JobStatus(id uuid.UUID) (result json.RawMessage, queued, started, finished time.Time, canceled bool, deps []uuid.UUID, err error)
// Returns the job's arguments in Raw form.
JobArgs(id uuid.UUID) (args json.RawMessage, err error)
// Job returns all the parameters that define a job (everything provided during Enqueue).
Job(id uuid.UUID) (jobType string, args json.RawMessage, dependencies []uuid.UUID, err error)
}
var (

View file

@ -405,7 +405,7 @@ func (h *apiHandlers) GetComposeIdManifests(ctx echo.Context, idstr string) erro
manifests := make([]distro.Manifest, len(deps)-1)
for i, id := range deps[1:] {
var buildJob worker.OSBuildKojiJob
if _, err := h.server.workers.JobArgs(id, &buildJob); err != nil {
if _, _, _, err := h.server.workers.Job(id, &buildJob); err != nil {
// This is a programming error.
panic(err)
}

View file

@ -121,19 +121,18 @@ func (s *Server) JobStatus(id uuid.UUID, result interface{}) (*JobStatus, []uuid
}, deps, nil
}
// JobArgs provides access to the arguments of a job.
func (s *Server) JobArgs(id uuid.UUID, jobArgs interface{}) (json.RawMessage, error) {
rawArgs, err := s.jobs.JobArgs(id)
// Job provides access to all the parameters of a job.
func (s *Server) Job(id uuid.UUID, job interface{}) (string, json.RawMessage, []uuid.UUID, error) {
jobType, rawArgs, deps, err := s.jobs.Job(id)
if err != nil {
return nil, err
return "", nil, nil, err
}
err = json.Unmarshal(rawArgs, jobArgs)
if err != nil {
return nil, fmt.Errorf("error unmarshaling arguments for job '%s': %v", id, err)
if err := json.Unmarshal(rawArgs, job); err != nil {
return "", nil, nil, fmt.Errorf("error unmarshaling arguments for job '%s': %v", id, err)
}
return rawArgs, nil
return jobType, rawArgs, deps, nil
}
func (s *Server) Cancel(id uuid.UUID) error {

View file

@ -8,6 +8,7 @@ import (
"os"
"testing"
"github.com/google/uuid"
"github.com/stretchr/testify/require"
"github.com/osbuild/osbuild-composer/internal/distro"
@ -198,10 +199,12 @@ func TestArgs(t *testing.T) {
require.NotNil(t, args)
var jobArgs worker.OSBuildJob
rawArgs, err := server.JobArgs(jobId, &jobArgs)
jobType, rawArgs, deps, err := server.Job(jobId, &jobArgs)
require.NoError(t, err)
require.Equal(t, args, rawArgs)
require.Equal(t, job, jobArgs)
require.Equal(t, jobType, "osbuild:"+arch.Name())
require.Equal(t, []uuid.UUID(nil), deps)
}
func TestUpload(t *testing.T) {