worker/json: add fallback pipeline names when reading data
When worker reading data into the job and result types, check if the PipelineNames are populated and, if not, add the fallback values from distro. This makes it simpler to work with job queues that contain old data before the introduction of the PipelineNames. In any situation where the job or result data are read, the reader can assume that the PipelineNames are non-nil and that if they belong to an old job, they have the fallback names. This assumption goes hand-in-hand with the change in v2 format for osbuild results, since old jobs that don't have PipelineNames set *must* contain results in the old format for the names to be valid.
This commit is contained in:
parent
38b8bfbd66
commit
51870676cc
1 changed files with 74 additions and 0 deletions
|
|
@ -1,6 +1,8 @@
|
|||
package worker
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
|
||||
"github.com/osbuild/osbuild-composer/internal/distro"
|
||||
osbuild "github.com/osbuild/osbuild-composer/internal/osbuild2"
|
||||
"github.com/osbuild/osbuild-composer/internal/rpmmd"
|
||||
|
|
@ -126,3 +128,75 @@ type ManifestJobByIDResult struct {
|
|||
type updateJobRequest struct {
|
||||
Result interface{} `json:"result"`
|
||||
}
|
||||
|
||||
func (j *OSBuildJob) UnmarshalJSON(data []byte) error {
|
||||
// handles unmarshalling old jobs in the queue that don't contain newer fields
|
||||
// adds default/fallback values to missing data
|
||||
type aliastype OSBuildJob
|
||||
var alias aliastype
|
||||
if err := json.Unmarshal(data, &alias); err != nil {
|
||||
return err
|
||||
}
|
||||
if alias.PipelineNames == nil {
|
||||
alias.PipelineNames = &PipelineNames{
|
||||
Build: distro.BuildPipelinesFallback(),
|
||||
Payload: distro.PayloadPipelinesFallback(),
|
||||
}
|
||||
}
|
||||
*j = OSBuildJob(alias)
|
||||
return nil
|
||||
}
|
||||
|
||||
func (j *OSBuildJobResult) UnmarshalJSON(data []byte) error {
|
||||
// handles unmarshalling old jobs in the queue that don't contain newer fields
|
||||
// adds default/fallback values to missing data
|
||||
type aliastype OSBuildJobResult
|
||||
var alias aliastype
|
||||
if err := json.Unmarshal(data, &alias); err != nil {
|
||||
return err
|
||||
}
|
||||
if alias.PipelineNames == nil {
|
||||
alias.PipelineNames = &PipelineNames{
|
||||
Build: distro.BuildPipelinesFallback(),
|
||||
Payload: distro.PayloadPipelinesFallback(),
|
||||
}
|
||||
}
|
||||
*j = OSBuildJobResult(alias)
|
||||
return nil
|
||||
}
|
||||
|
||||
func (j *OSBuildKojiJob) UnmarshalJSON(data []byte) error {
|
||||
// handles unmarshalling old jobs in the queue that don't contain newer fields
|
||||
// adds default/fallback values to missing data
|
||||
type aliastype OSBuildKojiJob
|
||||
var alias aliastype
|
||||
if err := json.Unmarshal(data, &alias); err != nil {
|
||||
return err
|
||||
}
|
||||
if alias.PipelineNames == nil {
|
||||
alias.PipelineNames = &PipelineNames{
|
||||
Build: distro.BuildPipelinesFallback(),
|
||||
Payload: distro.PayloadPipelinesFallback(),
|
||||
}
|
||||
}
|
||||
*j = OSBuildKojiJob(alias)
|
||||
return nil
|
||||
}
|
||||
|
||||
func (j *OSBuildKojiJobResult) UnmarshalJSON(data []byte) error {
|
||||
// handles unmarshalling old jobs in the queue that don't contain newer fields
|
||||
// adds default/fallback values to missing data
|
||||
type aliastype OSBuildKojiJobResult
|
||||
var alias aliastype
|
||||
if err := json.Unmarshal(data, &alias); err != nil {
|
||||
return err
|
||||
}
|
||||
if alias.PipelineNames == nil {
|
||||
alias.PipelineNames = &PipelineNames{
|
||||
Build: distro.BuildPipelinesFallback(),
|
||||
Payload: distro.PayloadPipelinesFallback(),
|
||||
}
|
||||
}
|
||||
*j = OSBuildKojiJobResult(alias)
|
||||
return nil
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue