diff --git a/daemon/api_aliases_test.go b/daemon/api_aliases_test.go index 7c6fc6fc78b1..33bb194cae4d 100644 --- a/daemon/api_aliases_test.go +++ b/daemon/api_aliases_test.go @@ -608,7 +608,7 @@ func (s *aliasesSuite) TestInstallUnaliased(c *check.C) { st := d.Overlord().State() st.Lock() defer st.Unlock() - _, _, err := inst.Dispatch()(inst, st) + _, _, err := inst.Dispatch()(context.Background(), inst, st) c.Check(err, check.IsNil) c.Check(calledFlags.Unaliased, check.Equals, true) @@ -635,7 +635,7 @@ func (s *aliasesSuite) TestInstallIgnoreRunning(c *check.C) { st := d.Overlord().State() st.Lock() defer st.Unlock() - _, _, err := inst.Dispatch()(inst, st) + _, _, err := inst.Dispatch()(context.Background(), inst, st) c.Check(err, check.IsNil) c.Check(calledFlags.IgnoreRunning, check.Equals, true) @@ -661,7 +661,7 @@ func (s *aliasesSuite) TestInstallPrefer(c *check.C) { st := d.Overlord().State() st.Lock() defer st.Unlock() - _, _, err := inst.Dispatch()(inst, st) + _, _, err := inst.Dispatch()(context.Background(), inst, st) c.Check(err, check.IsNil) c.Check(calledFlags.Prefer, check.Equals, true) diff --git a/daemon/api_snaps.go b/daemon/api_snaps.go index 74f245b1d54b..ebe7a532f033 100644 --- a/daemon/api_snaps.go +++ b/daemon/api_snaps.go @@ -123,7 +123,6 @@ func postSnap(c *Command, r *http.Request, user *auth.UserState) Response { if err := decoder.Decode(&inst); err != nil { return BadRequest("cannot decode request body into snap instruction: %v", err) } - inst.ctx = r.Context() st := c.d.overlord.State() st.Lock() @@ -145,8 +144,7 @@ func postSnap(c *Command, r *http.Request, user *auth.UserState) Response { return BadRequest("unknown action %s", inst.Action) } - // TODO use an explicit context parameter - msg, tsets, err := impl(&inst, st) + msg, tsets, err := impl(r.Context(), &inst, st) if err != nil { return inst.errToResponse(err) } @@ -220,7 +218,6 @@ type snapInstruction struct { // The fields below should not be unmarshalled into. Do not export them. userID int - ctx context.Context } func (inst *snapInstruction) revnoOpts() *snapstate.RevisionOptions { @@ -413,7 +410,7 @@ func modeFlags(devMode, jailMode, classic bool) (snapstate.Flags, error) { return flags, nil } -func snapInstall(inst *snapInstruction, st *state.State) (string, []*state.TaskSet, error) { +func snapInstall(ctx context.Context, inst *snapInstruction, st *state.State) (string, []*state.TaskSet, error) { if len(inst.Snaps[0]) == 0 { return "", nil, fmt.Errorf(i18n.G("cannot install snap with empty name")) } @@ -430,7 +427,7 @@ func snapInstall(inst *snapInstruction, st *state.State) (string, []*state.TaskS ckey = strutil.ElliptLeft(inst.CohortKey, 10) logger.Noticef("Installing snap %q from cohort %q", inst.Snaps[0], ckey) } - tset, err := snapstateInstall(inst.ctx, st, inst.Snaps[0], inst.revnoOpts(), inst.userID, flags) + tset, err := snapstateInstall(ctx, st, inst.Snaps[0], inst.revnoOpts(), inst.userID, flags) if err != nil { return "", nil, err } @@ -445,7 +442,7 @@ func snapInstall(inst *snapInstruction, st *state.State) (string, []*state.TaskS return msg, []*state.TaskSet{tset}, nil } -func snapUpdate(inst *snapInstruction, st *state.State) (string, []*state.TaskSet, error) { +func snapUpdate(_ context.Context, inst *snapInstruction, st *state.State) (string, []*state.TaskSet, error) { // TODO: bail if revision is given (and != current?), *or* behave as with install --revision? flags, err := inst.modeFlags() if err != nil { @@ -479,7 +476,7 @@ func snapUpdate(inst *snapInstruction, st *state.State) (string, []*state.TaskSe return msg, []*state.TaskSet{ts}, nil } -func snapRemove(inst *snapInstruction, st *state.State) (string, []*state.TaskSet, error) { +func snapRemove(_ context.Context, inst *snapInstruction, st *state.State) (string, []*state.TaskSet, error) { ts, err := snapstate.Remove(st, inst.Snaps[0], inst.Revision, &snapstate.RemoveFlags{Purge: inst.Purge}) if err != nil { return "", nil, err @@ -489,7 +486,7 @@ func snapRemove(inst *snapInstruction, st *state.State) (string, []*state.TaskSe return msg, []*state.TaskSet{ts}, nil } -func snapRevert(inst *snapInstruction, st *state.State) (string, []*state.TaskSet, error) { +func snapRevert(_ context.Context, inst *snapInstruction, st *state.State) (string, []*state.TaskSet, error) { var ts *state.TaskSet flags, err := inst.modeFlags() @@ -510,7 +507,7 @@ func snapRevert(inst *snapInstruction, st *state.State) (string, []*state.TaskSe return msg, []*state.TaskSet{ts}, nil } -func snapEnable(inst *snapInstruction, st *state.State) (string, []*state.TaskSet, error) { +func snapEnable(_ context.Context, inst *snapInstruction, st *state.State) (string, []*state.TaskSet, error) { if !inst.Revision.Unset() { return "", nil, errors.New("enable takes no revision") } @@ -523,7 +520,7 @@ func snapEnable(inst *snapInstruction, st *state.State) (string, []*state.TaskSe return msg, []*state.TaskSet{ts}, nil } -func snapDisable(inst *snapInstruction, st *state.State) (string, []*state.TaskSet, error) { +func snapDisable(_ context.Context, inst *snapInstruction, st *state.State) (string, []*state.TaskSet, error) { if !inst.Revision.Unset() { return "", nil, errors.New("disable takes no revision") } @@ -536,7 +533,7 @@ func snapDisable(inst *snapInstruction, st *state.State) (string, []*state.TaskS return msg, []*state.TaskSet{ts}, nil } -func snapSwitch(inst *snapInstruction, st *state.State) (string, []*state.TaskSet, error) { +func snapSwitch(_ context.Context, inst *snapInstruction, st *state.State) (string, []*state.TaskSet, error) { if !inst.Revision.Unset() { return "", nil, errors.New("switch takes no revision") } @@ -562,8 +559,8 @@ func snapSwitch(inst *snapInstruction, st *state.State) (string, []*state.TaskSe } // snapHold holds refreshes for one snap. -func snapHold(inst *snapInstruction, st *state.State) (string, []*state.TaskSet, error) { - res, err := snapHoldMany(inst, st) +func snapHold(ctx context.Context, inst *snapInstruction, st *state.State) (string, []*state.TaskSet, error) { + res, err := snapHoldMany(ctx, inst, st) if err != nil { return "", nil, err } @@ -572,8 +569,8 @@ func snapHold(inst *snapInstruction, st *state.State) (string, []*state.TaskSet, } // snapUnhold removes the hold on refreshes for one snap. -func snapUnhold(inst *snapInstruction, st *state.State) (string, []*state.TaskSet, error) { - res, err := snapUnholdMany(inst, st) +func snapUnhold(ctx context.Context, inst *snapInstruction, st *state.State) (string, []*state.TaskSet, error) { + res, err := snapUnholdMany(ctx, inst, st) if err != nil { return "", nil, err } @@ -581,7 +578,7 @@ func snapUnhold(inst *snapInstruction, st *state.State) (string, []*state.TaskSe return res.Summary, res.Tasksets, nil } -type snapActionFunc func(*snapInstruction, *state.State) (string, []*state.TaskSet, error) +type snapActionFunc func(context.Context, *snapInstruction, *state.State) (string, []*state.TaskSet, error) var snapInstructionDispTable = map[string]snapActionFunc{ "install": snapInstall, @@ -644,7 +641,6 @@ func snapOpMany(c *Command, r *http.Request, user *auth.UserState) Response { if err := decoder.Decode(&inst); err != nil { return BadRequest("cannot decode request body into snap instruction: %v", err) } - inst.ctx = r.Context() // TODO: inst.Amend, etc? if inst.Channel != "" || !inst.Revision.Unset() || inst.DevMode || inst.JailMode || inst.CohortKey != "" || inst.LeaveCohort || inst.Prefer { @@ -666,8 +662,8 @@ 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) + + res, err := op(r.Context(), &inst, st) if err != nil { return inst.errToResponse(err) } @@ -688,7 +684,7 @@ func snapOpMany(c *Command, r *http.Request, user *auth.UserState) Response { return AsyncResponse(res.Result, chg.ID()) } -type snapManyActionFunc func(*snapInstruction, *state.State) (*snapInstructionResult, error) +type snapManyActionFunc func(context.Context, *snapInstruction, *state.State) (*snapInstructionResult, error) func (inst *snapInstruction) dispatchForMany() (op snapManyActionFunc) { switch inst.Action { @@ -713,7 +709,7 @@ func (inst *snapInstruction) dispatchForMany() (op snapManyActionFunc) { return op } -func snapInstallMany(inst *snapInstruction, st *state.State) (*snapInstructionResult, error) { +func snapInstallMany(_ context.Context, inst *snapInstruction, st *state.State) (*snapInstructionResult, error) { for _, name := range inst.Snaps { if len(name) == 0 { return nil, fmt.Errorf(i18n.G("cannot install snap with empty name")) @@ -745,7 +741,7 @@ func snapInstallMany(inst *snapInstruction, st *state.State) (*snapInstructionRe }, nil } -func snapUpdateMany(inst *snapInstruction, st *state.State) (*snapInstructionResult, error) { +func snapUpdateMany(ctx context.Context, inst *snapInstruction, st *state.State) (*snapInstructionResult, error) { // we need refreshed snap-declarations to enforce refresh-control as best as // we can, this also ensures that snap-declarations and their prerequisite // assertions are updated regularly; update validation sets assertions only @@ -758,7 +754,7 @@ func snapUpdateMany(inst *snapInstruction, st *state.State) (*snapInstructionRes } transaction := inst.Transaction - updated, tasksets, err := snapstateUpdateMany(inst.ctx, st, inst.Snaps, nil, inst.userID, &snapstate.Flags{ + updated, tasksets, err := snapstateUpdateMany(ctx, st, inst.Snaps, nil, inst.userID, &snapstate.Flags{ IgnoreRunning: inst.IgnoreRunning, Transaction: transaction, }) @@ -795,7 +791,7 @@ func snapUpdateMany(inst *snapInstruction, st *state.State) (*snapInstructionRes }, nil } -func snapEnforceValidationSets(inst *snapInstruction, st *state.State) (*snapInstructionResult, error) { +func snapEnforceValidationSets(_ context.Context, inst *snapInstruction, st *state.State) (*snapInstructionResult, error) { if len(inst.ValidationSets) > 0 && len(inst.Snaps) != 0 { return nil, fmt.Errorf("snap names cannot be specified with validation sets to enforce") } @@ -885,7 +881,7 @@ func meetSnapConstraintsForEnforce(inst *snapInstruction, st *state.State, vErr return snapstateResolveValSetsEnforcementError(context.TODO(), st, vErr, pinnedSeqs, inst.userID) } -func snapRemoveMany(inst *snapInstruction, st *state.State) (*snapInstructionResult, error) { +func snapRemoveMany(_ context.Context, inst *snapInstruction, st *state.State) (*snapInstructionResult, error) { flags := &snapstate.RemoveFlags{Purge: inst.Purge} removed, tasksets, err := snapstateRemoveMany(st, inst.Snaps, flags) if err != nil { @@ -1002,7 +998,7 @@ func shouldSearchStore(r *http.Request) bool { return false } -func snapHoldMany(inst *snapInstruction, st *state.State) (res *snapInstructionResult, err error) { +func snapHoldMany(_ context.Context, inst *snapInstruction, st *state.State) (res *snapInstructionResult, err error) { var msg string var tss []*state.TaskSet if len(inst.Snaps) == 0 { @@ -1036,7 +1032,7 @@ func snapHoldMany(inst *snapInstruction, st *state.State) (res *snapInstructionR }, nil } -func snapUnholdMany(inst *snapInstruction, st *state.State) (res *snapInstructionResult, err error) { +func snapUnholdMany(_ context.Context, inst *snapInstruction, st *state.State) (res *snapInstructionResult, err error) { var msg string var tss []*state.TaskSet diff --git a/daemon/api_snaps_test.go b/daemon/api_snaps_test.go index a04763a42356..6da490ef9786 100644 --- a/daemon/api_snaps_test.go +++ b/daemon/api_snaps_test.go @@ -689,7 +689,7 @@ func (s *snapsSuite) TestRefreshAll(c *check.C) { inst := &daemon.SnapInstruction{Action: "refresh"} st := d.Overlord().State() st.Lock() - res, err := inst.DispatchForMany()(inst, st) + res, err := inst.DispatchForMany()(context.Background(), inst, st) st.Unlock() c.Assert(err, check.IsNil) c.Check(res.Summary, check.Equals, tst.msg) @@ -715,7 +715,7 @@ func (s *snapsSuite) TestRefreshAllNoChanges(c *check.C) { inst := &daemon.SnapInstruction{Action: "refresh"} st := d.Overlord().State() st.Lock() - res, err := inst.DispatchForMany()(inst, st) + res, err := inst.DispatchForMany()(context.Background(), inst, st) st.Unlock() c.Assert(err, check.IsNil) c.Check(res.Summary, check.Equals, `Refresh all snaps: no updates`) @@ -743,7 +743,7 @@ func (s *snapsSuite) TestRefreshAllRestoresValidationSets(c *check.C) { inst := &daemon.SnapInstruction{Action: "refresh"} st := d.Overlord().State() st.Lock() - _, err := inst.DispatchForMany()(inst, st) + _, err := inst.DispatchForMany()(context.Background(), inst, st) st.Unlock() c.Assert(err, check.ErrorMatches, "boom") c.Check(refreshSnapAssertions, check.Equals, true) @@ -778,7 +778,7 @@ func (s *snapsSuite) TestRefreshManyTransactionally(c *check.C) { } st := d.Overlord().State() st.Lock() - res, err := inst.DispatchForMany()(inst, st) + res, err := inst.DispatchForMany()(context.Background(), inst, st) st.Unlock() c.Assert(err, check.IsNil) c.Check(res.Summary, check.Equals, `Refresh snaps "foo", "bar"`) @@ -809,7 +809,7 @@ func (s *snapsSuite) TestRefreshMany(c *check.C) { inst := &daemon.SnapInstruction{Action: "refresh", Snaps: []string{"foo", "bar"}} st := d.Overlord().State() st.Lock() - res, err := inst.DispatchForMany()(inst, st) + res, err := inst.DispatchForMany()(context.Background(), inst, st) st.Unlock() c.Assert(err, check.IsNil) c.Check(res.Summary, check.Equals, `Refresh snaps "foo", "bar"`) @@ -841,7 +841,7 @@ func (s *snapsSuite) TestRefreshManyIgnoreRunning(c *check.C) { } st := d.Overlord().State() st.Lock() - res, err := inst.DispatchForMany()(inst, st) + res, err := inst.DispatchForMany()(context.Background(), inst, st) st.Unlock() c.Assert(err, check.IsNil) c.Check(res.Summary, check.Equals, `Refresh snaps "foo", "bar"`) @@ -866,7 +866,7 @@ func (s *snapsSuite) TestRefreshMany1(c *check.C) { inst := &daemon.SnapInstruction{Action: "refresh", Snaps: []string{"foo"}} st := d.Overlord().State() st.Lock() - res, err := inst.DispatchForMany()(inst, st) + res, err := inst.DispatchForMany()(context.Background(), inst, st) st.Unlock() c.Assert(err, check.IsNil) c.Check(res.Summary, check.Equals, `Refresh snap "foo"`) @@ -885,7 +885,7 @@ func (s *snapsSuite) TestInstallMany(c *check.C) { inst := &daemon.SnapInstruction{Action: "install", Snaps: []string{"foo", "bar"}} st := d.Overlord().State() st.Lock() - res, err := inst.DispatchForMany()(inst, st) + res, err := inst.DispatchForMany()(context.Background(), inst, st) st.Unlock() c.Assert(err, check.IsNil) c.Check(res.Summary, check.Equals, `Install snaps "foo", "bar"`) @@ -912,7 +912,7 @@ func (s *snapsSuite) TestInstallManyTransactionally(c *check.C) { st := d.Overlord().State() st.Lock() - res, err := inst.DispatchForMany()(inst, st) + res, err := inst.DispatchForMany()(context.Background(), inst, st) st.Unlock() c.Assert(err, check.IsNil) c.Check(res.Summary, check.Equals, `Install snaps "foo", "bar"`) @@ -929,7 +929,7 @@ func (s *snapsSuite) TestInstallManyEmptyName(c *check.C) { inst := &daemon.SnapInstruction{Action: "install", Snaps: []string{"", "bar"}} st := d.Overlord().State() st.Lock() - res, err := inst.DispatchForMany()(inst, st) + res, err := inst.DispatchForMany()(context.Background(), inst, st) st.Unlock() c.Assert(res, check.IsNil) c.Assert(err, check.ErrorMatches, "cannot install snap with empty name") @@ -947,7 +947,7 @@ func (s *snapsSuite) TestRemoveMany(c *check.C) { inst := &daemon.SnapInstruction{Action: "remove", Snaps: []string{"foo", "bar"}} st := d.Overlord().State() st.Lock() - res, err := inst.DispatchForMany()(inst, st) + res, err := inst.DispatchForMany()(context.Background(), inst, st) st.Unlock() c.Assert(err, check.IsNil) c.Check(res.Summary, check.Equals, `Remove snaps "foo", "bar"`) @@ -966,7 +966,7 @@ func (s *snapsSuite) TestRemoveManyWithPurge(c *check.C) { inst := &daemon.SnapInstruction{Action: "remove", Purge: true, Snaps: []string{"foo", "bar"}} st := d.Overlord().State() st.Lock() - res, err := inst.DispatchForMany()(inst, st) + res, err := inst.DispatchForMany()(context.Background(), inst, st) st.Unlock() c.Assert(err, check.IsNil) c.Check(res.Summary, check.Equals, `Remove snaps "foo", "bar"`) @@ -2134,7 +2134,7 @@ func (s *snapsSuite) TestInstall(c *check.C) { st := d.Overlord().State() st.Lock() defer st.Unlock() - _, _, err := inst.Dispatch()(inst, st) + _, _, err := inst.Dispatch()(context.Background(), inst, st) c.Check(err, check.IsNil) c.Check(calledName, check.Equals, "fake") } @@ -2159,7 +2159,7 @@ func (s *snapsSuite) TestInstallWithQuotaGroup(c *check.C) { st := d.Overlord().State() st.Lock() defer st.Unlock() - _, _, err := inst.Dispatch()(inst, st) + _, _, err := inst.Dispatch()(context.Background(), inst, st) c.Check(err, check.IsNil) c.Check(calledFlags.QuotaGroupName, check.Equals, "test-group") } @@ -2185,7 +2185,7 @@ func (s *snapsSuite) TestInstallDevMode(c *check.C) { st := d.Overlord().State() st.Lock() defer st.Unlock() - _, _, err := inst.Dispatch()(inst, st) + _, _, err := inst.Dispatch()(context.Background(), inst, st) c.Check(err, check.IsNil) c.Check(calledFlags.DevMode, check.Equals, true) @@ -2211,7 +2211,7 @@ func (s *snapsSuite) TestInstallJailMode(c *check.C) { st := d.Overlord().State() st.Lock() defer st.Unlock() - _, _, err := inst.Dispatch()(inst, st) + _, _, err := inst.Dispatch()(context.Background(), inst, st) c.Check(err, check.IsNil) c.Check(calledFlags.JailMode, check.Equals, true) @@ -2231,7 +2231,7 @@ func (s *snapsSuite) TestInstallJailModeDevModeOS(c *check.C) { st := d.Overlord().State() st.Lock() defer st.Unlock() - _, _, err := inst.Dispatch()(inst, st) + _, _, err := inst.Dispatch()(context.Background(), inst, st) c.Check(err, check.ErrorMatches, "this system cannot honour the jailmode flag") } @@ -2247,7 +2247,7 @@ func (s *snapsSuite) TestInstallJailModeDevMode(c *check.C) { st := d.Overlord().State() st.Lock() defer st.Unlock() - _, _, err := inst.Dispatch()(inst, st) + _, _, err := inst.Dispatch()(context.Background(), inst, st) c.Check(err, check.ErrorMatches, "cannot use devmode and jailmode flags together") } @@ -2273,7 +2273,7 @@ func (s *snapsSuite) TestInstallCohort(c *check.C) { st := d.Overlord().State() st.Lock() defer st.Unlock() - msg, _, err := inst.Dispatch()(inst, st) + msg, _, err := inst.Dispatch()(context.Background(), inst, st) c.Check(err, check.IsNil) c.Check(calledName, check.Equals, "fake") c.Check(calledCohort, check.Equals, "To the legion of the lost ones, to the cohort of the damned.") @@ -2304,7 +2304,7 @@ func (s *snapsSuite) TestInstallIgnoreValidation(c *check.C) { st := d.Overlord().State() st.Lock() defer st.Unlock() - summary, _, err := inst.Dispatch()(inst, st) + summary, _, err := inst.Dispatch()(context.Background(), inst, st) c.Check(err, check.IsNil) flags := snapstate.Flags{} @@ -2330,7 +2330,7 @@ func (s *snapsSuite) TestInstallEmptyName(c *check.C) { st := d.Overlord().State() st.Lock() defer st.Unlock() - _, _, err := inst.Dispatch()(inst, st) + _, _, err := inst.Dispatch()(context.Background(), inst, st) c.Check(err, check.ErrorMatches, "cannot install snap with empty name") } @@ -2471,7 +2471,7 @@ func (s *snapsSuite) TestRefresh(c *check.C) { st := d.Overlord().State() st.Lock() defer st.Unlock() - summary, _, err := inst.Dispatch()(inst, st) + summary, _, err := inst.Dispatch()(context.Background(), inst, st) c.Check(err, check.IsNil) c.Check(assertstateCalledUserID, check.Equals, 17) @@ -2510,7 +2510,7 @@ func (s *snapsSuite) TestRefreshDevMode(c *check.C) { st := d.Overlord().State() st.Lock() defer st.Unlock() - summary, _, err := inst.Dispatch()(inst, st) + summary, _, err := inst.Dispatch()(context.Background(), inst, st) c.Check(err, check.IsNil) flags := snapstate.Flags{} @@ -2544,7 +2544,7 @@ func (s *snapsSuite) TestRefreshClassic(c *check.C) { st := d.Overlord().State() st.Lock() defer st.Unlock() - _, _, err := inst.Dispatch()(inst, st) + _, _, err := inst.Dispatch()(context.Background(), inst, st) c.Check(err, check.IsNil) c.Check(calledFlags, check.DeepEquals, snapstate.Flags{Classic: true}) @@ -2578,7 +2578,7 @@ func (s *snapsSuite) TestRefreshIgnoreValidation(c *check.C) { st := d.Overlord().State() st.Lock() defer st.Unlock() - summary, _, err := inst.Dispatch()(inst, st) + summary, _, err := inst.Dispatch()(context.Background(), inst, st) c.Check(err, check.IsNil) flags := snapstate.Flags{} @@ -2616,7 +2616,7 @@ func (s *snapsSuite) TestRefreshIgnoreRunning(c *check.C) { st := d.Overlord().State() st.Lock() defer st.Unlock() - summary, _, err := inst.Dispatch()(inst, st) + summary, _, err := inst.Dispatch()(context.Background(), inst, st) c.Check(err, check.IsNil) flags := snapstate.Flags{} @@ -2651,7 +2651,7 @@ func (s *snapsSuite) TestRefreshCohort(c *check.C) { st := d.Overlord().State() st.Lock() defer st.Unlock() - summary, _, err := inst.Dispatch()(inst, st) + summary, _, err := inst.Dispatch()(context.Background(), inst, st) c.Check(err, check.IsNil) c.Check(cohort, check.Equals, "xyzzy") @@ -2681,7 +2681,7 @@ func (s *snapsSuite) TestRefreshLeaveCohort(c *check.C) { st := d.Overlord().State() st.Lock() defer st.Unlock() - summary, _, err := inst.Dispatch()(inst, st) + summary, _, err := inst.Dispatch()(context.Background(), inst, st) c.Check(err, check.IsNil) c.Check(*leave, check.Equals, true) @@ -2730,7 +2730,7 @@ func (s *snapsSuite) TestSwitchInstruction(c *check.C) { inst.Channel = t.channel st.Lock() - summary, _, err := inst.Dispatch()(inst, st) + summary, _, err := inst.Dispatch()(context.Background(), inst, st) st.Unlock() c.Check(err, check.IsNil) @@ -2765,7 +2765,7 @@ func (s *snapsSuite) testRevertSnap(inst *daemon.SnapInstruction, c *check.C) { st := d.Overlord().State() st.Lock() defer st.Unlock() - summary, _, err := inst.Dispatch()(inst, st) + summary, _, err := inst.Dispatch()(context.Background(), inst, st) c.Check(err, check.IsNil) if inst.Revision.Unset() { c.Check(queue, check.DeepEquals, []string{inst.Snaps[0]}) @@ -3037,7 +3037,7 @@ func (s *snapsSuite) TestRefreshEnforce(c *check.C) { st.Lock() defer st.Unlock() - res, err := inst.DispatchForMany()(inst, st) + res, err := inst.DispatchForMany()(context.Background(), inst, st) c.Assert(err, check.IsNil) c.Check(res.Summary, check.Equals, `Enforce validation sets "foo/bar=2", "foo/baz" for snaps "install-snap", "update-snap"`) c.Check(res.Affected, check.DeepEquals, []string{"install-snap", "update-snap"}) @@ -3145,7 +3145,7 @@ func (s *snapsSuite) TestRefreshEnforceWithPreexistingSet(c *check.C) { st.Lock() defer st.Unlock() - res, err := inst.DispatchForMany()(inst, st) + res, err := inst.DispatchForMany()(context.Background(), inst, st) c.Assert(err, check.IsNil) c.Check(res.Summary, check.Equals, `Enforce validation sets "foo/new=2" for snaps "install-snap"`) c.Check(res.Affected, check.DeepEquals, []string{"install-snap"}) @@ -3178,7 +3178,7 @@ func (s *snapsSuite) TestRefreshEnforceTryEnforceValidationSetsError(c *check.C) st.Lock() defer st.Unlock() - _, err := inst.DispatchForMany()(inst, st) + _, err := inst.DispatchForMany()(context.Background(), inst, st) c.Assert(err, check.ErrorMatches, `boom`) c.Check(refreshSnapAssertions, check.Equals, 1) c.Check(snapstateEnforceSnaps, check.Equals, 0) @@ -3186,7 +3186,7 @@ func (s *snapsSuite) TestRefreshEnforceTryEnforceValidationSetsError(c *check.C) // ValidationSetsValidationError is expected and fine tryEnforceErr = &snapasserts.ValidationSetsValidationError{} - _, err = inst.DispatchForMany()(inst, st) + _, err = inst.DispatchForMany()(context.Background(), inst, st) c.Assert(err, check.IsNil) c.Check(refreshSnapAssertions, check.Equals, 2) c.Check(snapstateEnforceSnaps, check.Equals, 1) @@ -3219,7 +3219,7 @@ func (s *snapsSuite) TestRefreshEnforceWithSnapsIsAnError(c *check.C) { st.Lock() defer st.Unlock() - _, err := inst.DispatchForMany()(inst, st) + _, err := inst.DispatchForMany()(context.Background(), inst, st) c.Assert(err, check.ErrorMatches, `snap names cannot be specified with validation sets to enforce`) c.Check(refreshSnapAssertions, check.Equals, false) c.Check(tryEnforceValidationSets, check.Equals, false) @@ -3247,7 +3247,7 @@ func (s *snapsSuite) TestRefreshEnforceSetsNoUnmetConstraints(c *check.C) { st.Lock() defer st.Unlock() - resp, err := inst.DispatchForMany()(inst, st) + resp, err := inst.DispatchForMany()(context.Background(), inst, st) c.Assert(err, check.IsNil) c.Check(resp.Affected, check.IsNil) c.Check(resp.Tasksets, check.IsNil) @@ -3304,7 +3304,7 @@ func (s *snapsSuite) TestHoldAllRefreshes(c *check.C) { HoldLevel: "auto-refresh", } - res, err := inst.DispatchForMany()(inst, st) + res, err := inst.DispatchForMany()(context.Background(), inst, st) c.Assert(err, check.IsNil) c.Assert(res.Tasksets, check.Not(check.IsNil)) c.Assert(res.Affected, check.IsNil) @@ -3338,7 +3338,7 @@ func (s *snapsSuite) TestHoldManyRefreshes(c *check.C) { HoldLevel: "auto-refresh", } - res, err := inst.DispatchForMany()(inst, st) + res, err := inst.DispatchForMany()(context.Background(), inst, st) c.Assert(err, check.IsNil) c.Assert(res.Tasksets, check.IsNil) c.Assert(res.Affected, check.DeepEquals, snaps) @@ -3371,7 +3371,7 @@ func (s *snapsSuite) TestHoldRefresh(c *check.C) { HoldLevel: "general", } - summary, tasksets, err := inst.Dispatch()(inst, st) + summary, tasksets, err := inst.Dispatch()(context.Background(), inst, st) c.Assert(err, check.IsNil) c.Assert(tasksets, check.IsNil) c.Assert(summary, check.Equals, `Hold general refreshes for "some-snap"`) @@ -3397,7 +3397,7 @@ func (s *snapsSuite) TestUnholdAllRefreshes(c *check.C) { Action: "unhold", } - res, err := inst.DispatchForMany()(inst, st) + res, err := inst.DispatchForMany()(context.Background(), inst, st) c.Assert(err, check.IsNil) c.Assert(res.Tasksets, check.Not(check.IsNil)) c.Assert(res.Affected, check.IsNil) @@ -3424,7 +3424,7 @@ func (s *snapsSuite) TestUnholdManyRefreshes(c *check.C) { Snaps: snaps, } - res, err := inst.DispatchForMany()(inst, st) + res, err := inst.DispatchForMany()(context.Background(), inst, st) c.Assert(err, check.IsNil) c.Assert(res.Tasksets, check.IsNil) c.Assert(res.Affected, check.DeepEquals, snaps) @@ -3449,7 +3449,7 @@ func (s *snapsSuite) TestUnholdRefresh(c *check.C) { st.Lock() defer st.Unlock() - summary, tasksets, err := inst.Dispatch()(inst, st) + summary, tasksets, err := inst.Dispatch()(context.Background(), inst, st) c.Assert(err, check.IsNil) c.Assert(tasksets, check.IsNil) diff --git a/daemon/api_snapshots.go b/daemon/api_snapshots.go index 051939017dc9..f293ec676f02 100644 --- a/daemon/api_snapshots.go +++ b/daemon/api_snapshots.go @@ -20,6 +20,7 @@ package daemon import ( + "context" "encoding/json" "fmt" "io" @@ -216,7 +217,7 @@ func doSnapshotImport(c *Command, r *http.Request, user *auth.UserState) Respons return SyncResponse(result) } -func snapshotMany(inst *snapInstruction, st *state.State) (*snapInstructionResult, error) { +func snapshotMany(_ context.Context, inst *snapInstruction, st *state.State) (*snapInstructionResult, error) { setID, snapshotted, ts, err := snapshotSave(st, inst.Snaps, inst.Users, inst.SnapshotOptions) if err != nil { return nil, err diff --git a/daemon/api_snapshots_test.go b/daemon/api_snapshots_test.go index 255c0ac49e60..e02c034881d2 100644 --- a/daemon/api_snapshots_test.go +++ b/daemon/api_snapshots_test.go @@ -64,7 +64,7 @@ func (s *snapshotSuite) TestSnapshotManyOptionsNone(c *check.C) { st := s.d.Overlord().State() st.Lock() - res, err := inst.DispatchForMany()(inst, st) + res, err := inst.DispatchForMany()(context.Background(), inst, st) st.Unlock() c.Assert(err, check.IsNil) c.Check(res.Summary, check.Equals, `Snapshot snaps "foo", "bar"`) @@ -91,7 +91,7 @@ func (s *snapshotSuite) TestSnapshotManyOptionsFull(c *check.C) { st := s.d.Overlord().State() st.Lock() - res, err := inst.DispatchForMany()(inst, st) + res, err := inst.DispatchForMany()(context.Background(), inst, st) st.Unlock() c.Assert(err, check.IsNil) c.Check(res.Summary, check.Equals, `Snapshot snaps "foo", "bar"`) @@ -110,7 +110,7 @@ func (s *snapshotSuite) TestSnapshotManyError(c *check.C) { st := s.d.Overlord().State() st.Lock() - res, err := inst.DispatchForMany()(inst, st) + res, err := inst.DispatchForMany()(context.Background(), inst, st) st.Unlock() c.Check(res, check.IsNil) c.Check(err, check.ErrorMatches, `snap "foo" is not installed`)