Skip to content

Commit

Permalink
daemon: pass down request context where possible
Browse files Browse the repository at this point in the history
Pass the context from the API request further down.

Signed-off-by: Maciej Borzecki <[email protected]>
  • Loading branch information
bboozzoo committed Jun 26, 2024
1 parent 4289150 commit c87a81d
Show file tree
Hide file tree
Showing 6 changed files with 21 additions and 22 deletions.
3 changes: 1 addition & 2 deletions daemon/api_cohort.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
package daemon

import (
"context"
"encoding/json"
"net/http"

Expand Down Expand Up @@ -53,7 +52,7 @@ func postCohorts(c *Command, r *http.Request, user *auth.UserState) Response {
return SyncResponse(map[string]string{})
}

cohorts, err := storeFrom(c.d).CreateCohorts(context.TODO(), inst.Snaps)
cohorts, err := storeFrom(c.d).CreateCohorts(r.Context(), inst.Snaps)
if err != nil {
return InternalError(err.Error())
}
Expand Down
8 changes: 4 additions & 4 deletions daemon/api_download.go
Original file line number Diff line number Diff line change
Expand Up @@ -105,10 +105,10 @@ func postSnapDownload(c *Command, r *http.Request, user *auth.UserState) Respons
return BadRequest(err.Error())
}

return streamOneSnap(c, action, user)
return streamOneSnap(r.Context(), c, action, user)
}

func streamOneSnap(c *Command, action snapDownloadAction, user *auth.UserState) Response {
func streamOneSnap(ctx context.Context, c *Command, action snapDownloadAction, user *auth.UserState) Response {
secret, err := downloadTokensSecret(c.d)
if err != nil {
return InternalError(err.Error())
Expand All @@ -125,7 +125,7 @@ func streamOneSnap(c *Command, action snapDownloadAction, user *auth.UserState)
CohortKey: action.CohortKey,
Channel: action.Channel,
}}
results, _, err := theStore.SnapAction(context.TODO(), nil, actions, nil, user, nil)
results, _, err := theStore.SnapAction(ctx, nil, actions, nil, user, nil)
if err != nil {
return errToResponse(err, []string{action.SnapName}, InternalError, "cannot download snap: %v")
}
Expand All @@ -148,7 +148,7 @@ func streamOneSnap(c *Command, action snapDownloadAction, user *auth.UserState)
}

if !action.HeaderPeek {
stream, status, err := theStore.DownloadStream(context.TODO(), action.SnapName, ss.Info, action.resumePosition, user)
stream, status, err := theStore.DownloadStream(ctx, action.SnapName, ss.Info, action.resumePosition, user)
if err != nil {
return InternalError(err.Error())
}
Expand Down
4 changes: 1 addition & 3 deletions daemon/api_sections.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
package daemon

import (
"context"
"net/http"

"github.com/snapcore/snapd/overlord/auth"
Expand All @@ -44,8 +43,7 @@ func getSections(c *Command, r *http.Request, user *auth.UserState) Response {

theStore := storeFrom(c.d)

// TODO: use a per-request context
sections, err := theStore.Sections(context.TODO(), user)
sections, err := theStore.Sections(r.Context(), user)
switch err {
case nil:
// pass
Expand Down
13 changes: 7 additions & 6 deletions daemon/api_sideload_n_try.go
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@ type sideloadFlags struct {
dangerousOK bool
}

func sideloadOrTrySnap(c *Command, body io.ReadCloser, boundary string, user *auth.UserState) Response {
func sideloadOrTrySnap(ctx context.Context, c *Command, body io.ReadCloser, boundary string, user *auth.UserState) Response {
route := c.d.router.Get(stateChangeCmd.Path)
if route == nil {
return InternalError("cannot find route for change")
Expand Down Expand Up @@ -194,9 +194,9 @@ func sideloadOrTrySnap(c *Command, body io.ReadCloser, boundary string, user *au

var chg *state.Change
if len(snapFiles) > 1 {
chg, errRsp = sideloadManySnaps(st, snapFiles, sideloadFlags, user)
chg, errRsp = sideloadManySnaps(ctx, st, snapFiles, sideloadFlags, user)
} else {
chg, errRsp = sideloadSnap(st, snapFiles[0], sideloadFlags)
chg, errRsp = sideloadSnap(ctx, st, snapFiles[0], sideloadFlags)
}
if errRsp != nil {
return errRsp
Expand Down Expand Up @@ -249,7 +249,7 @@ func sideloadInfo(st *state.State, snapFiles []*uploadedSnap, flags sideloadFlag
origPaths: origPaths, tmpPaths: tmpPaths}, nil
}

func sideloadManySnaps(st *state.State, snapFiles []*uploadedSnap, flags sideloadFlags, user *auth.UserState) (*state.Change, *apiError) {
func sideloadManySnaps(ctx context.Context, st *state.State, snapFiles []*uploadedSnap, flags sideloadFlags, user *auth.UserState) (*state.Change, *apiError) {
slInfo, apiErr := sideloadInfo(st, snapFiles, flags)
if apiErr != nil {
return nil, apiErr
Expand All @@ -260,7 +260,7 @@ func sideloadManySnaps(st *state.State, snapFiles []*uploadedSnap, flags sideloa
userID = user.ID
}

tss, err := snapstateInstallPathMany(context.TODO(), st, slInfo.sideInfos, slInfo.tmpPaths, userID, &flags.Flags)
tss, err := snapstateInstallPathMany(ctx, st, slInfo.sideInfos, slInfo.tmpPaths, userID, &flags.Flags)
if err != nil {
return nil, errToResponse(err, slInfo.names, InternalError, "cannot install snap files: %v")
}
Expand All @@ -272,7 +272,7 @@ func sideloadManySnaps(st *state.State, snapFiles []*uploadedSnap, flags sideloa
return chg, nil
}

func sideloadSnap(st *state.State, snapFile *uploadedSnap, flags sideloadFlags) (*state.Change, *apiError) {
func sideloadSnap(_ context.Context, st *state.State, snapFile *uploadedSnap, flags sideloadFlags) (*state.Change, *apiError) {
var instanceName string
if snapFile.instanceName != "" {
// caller has specified desired instance name
Expand Down Expand Up @@ -327,6 +327,7 @@ func sideloadSnap(st *state.State, snapFile *uploadedSnap, flags sideloadFlags)
contType := "snap"
message := fmt.Sprintf("%q snap", instanceName)
if compInfo == nil {
// TODO pass per request context
tset, _, err = snapstateInstallPath(st, sideInfo, snapFile.tmpPath, instanceName, "", flags.Flags, nil)
} else {
// It is a component
Expand Down
8 changes: 5 additions & 3 deletions daemon/api_snaps.go
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,7 @@ func postSnap(c *Command, r *http.Request, user *auth.UserState) Response {
return BadRequest("unknown action %s", inst.Action)
}

// TODO use an epxlicit context parameter
msg, tsets, err := impl(&inst, st)
if err != nil {
return inst.errToResponse(err)
Expand Down Expand Up @@ -629,7 +630,7 @@ func postSnaps(c *Command, r *http.Request, user *auth.UserState) Response {
return BadRequest("unknown content type: %s", contentType)
}

return sideloadOrTrySnap(c, r.Body, params["boundary"], user)
return sideloadOrTrySnap(r.Context(), c, r.Body, params["boundary"], user)
}

func snapOpMany(c *Command, r *http.Request, user *auth.UserState) Response {
Expand Down Expand Up @@ -664,6 +665,7 @@ func snapOpMany(c *Command, r *http.Request, user *auth.UserState) Response {
if op == nil {
return BadRequest("unsupported multi-snap operation %q", inst.Action)
}
// TODO make ctx an explicit parameter
res, err := op(&inst, st)
if err != nil {
return inst.errToResponse(err)
Expand Down Expand Up @@ -717,6 +719,7 @@ func snapInstallMany(inst *snapInstruction, st *state.State) (*snapInstructionRe
}
}
transaction := inst.Transaction
// TODO use per request context passed in snap instruction
installed, tasksets, err := snapstateInstallMany(st, inst.Snaps, nil, inst.userID, &snapstate.Flags{Transaction: transaction})
if err != nil {
return nil, err
Expand Down Expand Up @@ -754,8 +757,7 @@ func snapUpdateMany(inst *snapInstruction, st *state.State) (*snapInstructionRes
}

transaction := inst.Transaction
// TODO: use a per-request context
updated, tasksets, err := snapstateUpdateMany(context.TODO(), st, inst.Snaps, nil, inst.userID, &snapstate.Flags{
updated, tasksets, err := snapstateUpdateMany(inst.ctx, st, inst.Snaps, nil, inst.userID, &snapstate.Flags{
IgnoreRunning: inst.IgnoreRunning,
Transaction: transaction,
})
Expand Down
7 changes: 3 additions & 4 deletions daemon/api_snapshots.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
package daemon

import (
"context"
"encoding/json"
"fmt"
"io"
Expand Down Expand Up @@ -75,7 +74,7 @@ func listSnapshots(c *Command, r *http.Request, user *auth.UserState) Response {
st := c.d.overlord.State()
st.Lock()
defer st.Unlock()
sets, err := snapshotList(context.TODO(), st, setID, strutil.CommaSeparatedList(r.URL.Query().Get("snaps")))
sets, err := snapshotList(r.Context(), st, setID, strutil.CommaSeparatedList(r.URL.Query().Get("snaps")))
if err != nil {
return InternalError("%v", err)
}
Expand Down Expand Up @@ -181,7 +180,7 @@ func getSnapshotExport(c *Command, r *http.Request, user *auth.UserState) Respon
return BadRequest("'id' must be a positive base 10 number; got %q", sid)
}

export, err := snapshotExport(context.TODO(), st, setID)
export, err := snapshotExport(r.Context(), st, setID)
if err != nil {
return BadRequest("cannot export %v: %v", setID, err)
}
Expand All @@ -208,7 +207,7 @@ func doSnapshotImport(c *Command, r *http.Request, user *auth.UserState) Respons

// XXX: check that we have enough space to import the compressed snapshots
st := c.d.overlord.State()
setID, snapNames, err := snapshotImport(context.TODO(), st, limitedBodyReader)
setID, snapNames, err := snapshotImport(r.Context(), st, limitedBodyReader)
if err != nil {
return BadRequest(err.Error())
}
Expand Down

0 comments on commit c87a81d

Please sign in to comment.