Revert "cloudapi/v1: Move depsolving to workers"
This reverts commit 0f44250237.
This commit is contained in:
parent
cb5acbac74
commit
c65b1e9b26
2 changed files with 25 additions and 33 deletions
|
|
@ -10,7 +10,6 @@ import (
|
||||||
"math/big"
|
"math/big"
|
||||||
"net/http"
|
"net/http"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
"github.com/labstack/echo/v4"
|
"github.com/labstack/echo/v4"
|
||||||
|
|
@ -158,40 +157,25 @@ func (h *apiHandlers) Compose(ctx echo.Context) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
packageSets := imageType.PackageSets(bp)
|
packageSets := imageType.PackageSets(bp)
|
||||||
depsolveJobID, err := h.server.workers.EnqueueDepsolve(&worker.DepsolveJob{
|
pkgSpecSets := make(map[string][]rpmmd.PackageSpec)
|
||||||
PackageSets: packageSets,
|
for name, packages := range packageSets {
|
||||||
Repos: repositories,
|
pkgs, _, err := h.server.rpmMetadata.Depsolve(packages, repositories, distribution.ModulePlatformID(), arch.Name(), distribution.Releasever())
|
||||||
ModulePlatformID: distribution.ModulePlatformID(),
|
|
||||||
Arch: arch.Name(),
|
|
||||||
Releasever: distribution.Releasever(),
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
return echo.NewHTTPError(http.StatusInternalServerError, "Unable to enqueue depsolve job")
|
|
||||||
}
|
|
||||||
|
|
||||||
var depsolveResults worker.DepsolveJobResult
|
|
||||||
for {
|
|
||||||
status, _, err := h.server.workers.JobStatus(depsolveJobID, &depsolveResults)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return echo.NewHTTPError(http.StatusInternalServerError, "Unable to get depsolve results")
|
var error_type int
|
||||||
|
switch err.(type) {
|
||||||
|
// Known DNF errors falls under BadRequest
|
||||||
|
case *rpmmd.DNFError:
|
||||||
|
error_type = http.StatusBadRequest
|
||||||
|
// All other kind of errors are internal server Errors.
|
||||||
|
// (json marshalling issues for instance)
|
||||||
|
case error:
|
||||||
|
error_type = http.StatusInternalServerError
|
||||||
|
}
|
||||||
|
return echo.NewHTTPError(error_type, "Failed to depsolve base packages for %s/%s/%s: %s", ir.ImageType, ir.Architecture, request.Distribution, err)
|
||||||
}
|
}
|
||||||
if status.Canceled {
|
pkgSpecSets[name] = pkgs
|
||||||
return echo.NewHTTPError(http.StatusInternalServerError, "Depsolving job canceled unexpectedly")
|
|
||||||
}
|
|
||||||
if !status.Finished.IsZero() {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
time.Sleep(50 * time.Millisecond)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if depsolveResults.Error != "" {
|
|
||||||
if depsolveResults.ErrorType == worker.DepsolveErrorType {
|
|
||||||
return echo.NewHTTPError(http.StatusBadRequest, "Failed to depsolve requested package set: %s", depsolveResults.Error)
|
|
||||||
}
|
|
||||||
return echo.NewHTTPError(http.StatusInternalServerError, "Error while depsolving: %s", depsolveResults.Error)
|
|
||||||
}
|
|
||||||
pkgSpecSets := depsolveResults.PackageSpecs
|
|
||||||
|
|
||||||
imageOptions := distro.ImageOptions{Size: imageType.Size(0)}
|
imageOptions := distro.ImageOptions{Size: imageType.Size(0)}
|
||||||
if request.Customizations != nil && request.Customizations.Subscription != nil {
|
if request.Customizations != nil && request.Customizations.Subscription != nil {
|
||||||
imageOptions.Subscription = &distro.SubscriptionImageOptions{
|
imageOptions.Subscription = &distro.SubscriptionImageOptions{
|
||||||
|
|
|
||||||
|
|
@ -710,9 +710,17 @@ function waitForState() {
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# a pending shouldn't state shouldn't trip up the heartbeats
|
||||||
|
sudo systemctl stop "osbuild-worker@*"
|
||||||
sendCompose
|
sendCompose
|
||||||
|
waitForState "pending"
|
||||||
|
# jobs time out after 2 minutes, so 180 seconds gives ample time to make sure it
|
||||||
|
# doesn't time out for pending jobs
|
||||||
|
sleep 180
|
||||||
|
waitForState "pending"
|
||||||
|
|
||||||
# crashed/stopped/killed worker should result in a failed state
|
# crashed/stopped/killed worker should result in a failed state
|
||||||
|
sudo systemctl start "osbuild-worker@1"
|
||||||
waitForState "building"
|
waitForState "building"
|
||||||
sudo systemctl stop "osbuild-worker@*"
|
sudo systemctl stop "osbuild-worker@*"
|
||||||
waitForState "failure"
|
waitForState "failure"
|
||||||
|
|
@ -730,8 +738,8 @@ test "$UPLOAD_STATUS" = "success"
|
||||||
test "$UPLOAD_TYPE" = "$CLOUD_PROVIDER"
|
test "$UPLOAD_TYPE" = "$CLOUD_PROVIDER"
|
||||||
test $((INIT_COMPOSES+1)) = "$SUBS_COMPOSES"
|
test $((INIT_COMPOSES+1)) = "$SUBS_COMPOSES"
|
||||||
|
|
||||||
# Make sure we get 2 job entries in the db per compose (depsolve + build)
|
# Make sure we get 1 job entry in the db per compose
|
||||||
sudo podman exec osbuild-composer-db psql -U postgres -d osbuildcomposer -c "SELECT * FROM jobs;" | grep "4 rows"
|
sudo podman exec osbuild-composer-db psql -U postgres -d osbuildcomposer -c "SELECT * FROM jobs;" | grep "2 rows"
|
||||||
|
|
||||||
#
|
#
|
||||||
# Save the Manifest from the osbuild-composer store
|
# Save the Manifest from the osbuild-composer store
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue