Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

daemon, snapstate: move ensureCore from daemon/api.go into snapstate.go #3727

Merged
merged 21 commits into from
Sep 6, 2017
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
446eb64
Move ensureCore from daemon/api.go into snapstate.go
mvo5 Aug 11, 2017
ca4ede8
Merge remote-tracking branch 'upstream/master' into ensure-core-in-sn…
mvo5 Aug 17, 2017
c15c8d6
Merge remote-tracking branch 'upstream/master' into ensure-core-in-sn…
mvo5 Aug 17, 2017
462fa19
Add new "prerequisites" task in downloads
mvo5 Aug 17, 2017
4c5991e
update tests
mvo5 Aug 17, 2017
80245a9
address review comments by Samuele (thanks!)
mvo5 Aug 18, 2017
c933660
Ensure parallel runs, add more unit tests
mvo5 Aug 18, 2017
ef4ce73
use blockedTask() to serialize the "prerequisites" tasks
mvo5 Aug 18, 2017
c550df1
use state.Retry{} in doPrerequisites() instead of doing cross-change …
mvo5 Aug 18, 2017
017fbab
Handle if "snap install core" happens during doPrerequisites()
mvo5 Aug 18, 2017
7e47181
remove undoPrerequisites() in favour of a future GC
mvo5 Aug 18, 2017
e43b1f7
fix TestPopulateFromSeedMissingBootloader hanging
mvo5 Aug 21, 2017
49ccff1
Add test for prerequisites change while snap installs
mvo5 Aug 23, 2017
40e1fc9
Merge remote-tracking branch 'upstream/master' into ensure-core-in-sn…
mvo5 Aug 24, 2017
70609e0
address review feedback
mvo5 Aug 24, 2017
e344be7
address review feedback (thanks to Samuele)
mvo5 Aug 28, 2017
23aa1b4
Merge remote-tracking branch 'upstream/master' into ensure-core-in-sn…
mvo5 Aug 31, 2017
091af4c
Merge remote-tracking branch 'upstream/master' into ensure-core-in-sn…
mvo5 Sep 5, 2017
767a14c
Merge remote-tracking branch 'upstream/master' into ensure-core-in-sn…
mvo5 Sep 6, 2017
51e03f2
fix unittests
mvo5 Sep 6, 2017
9966425
Merge remote-tracking branch 'upstream/master' into ensure-core-in-sn…
mvo5 Sep 6, 2017
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
70 changes: 6 additions & 64 deletions daemon/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -828,7 +828,6 @@ func (inst *snapInstruction) installFlags() (snapstate.Flags, error) {
}

var (
snapstateCoreInfo = snapstate.CoreInfo
snapstateInstall = snapstate.Install
snapstateInstallPath = snapstate.InstallPath
snapstateRefreshCandidates = snapstate.RefreshCandidates
Expand All @@ -851,42 +850,6 @@ var ensureStateSoon = ensureStateSoonImpl

var errNothingToInstall = errors.New("nothing to install")

const oldDefaultSnapCoreName = "ubuntu-core"
const defaultCoreSnapName = "core"

func ensureCore(st *state.State, targetSnap string, userID int) (*state.TaskSet, error) {
if targetSnap == defaultCoreSnapName || targetSnap == oldDefaultSnapCoreName {
return nil, errNothingToInstall
}

_, err := snapstateCoreInfo(st)
if err != state.ErrNoState {
return nil, err
}

return snapstateInstall(st, defaultCoreSnapName, "stable", snap.R(0), userID, snapstate.Flags{})
}

func withEnsureCore(st *state.State, targetSnap string, userID int, install func() (*state.TaskSet, error)) ([]*state.TaskSet, error) {
ubuCoreTs, err := ensureCore(st, targetSnap, userID)
if err != nil && err != errNothingToInstall {
return nil, err
}

ts, err := install()
if err != nil {
return nil, err
}

// ensure main install waits on ubuntu core install
if ubuCoreTs != nil {
ts.WaitAll(ubuCoreTs)
return []*state.TaskSet{ubuCoreTs, ts}, nil
}

return []*state.TaskSet{ts}, nil
}

var errDevJailModeConflict = errors.New("cannot use devmode and jailmode flags together")
var errClassicDevmodeConflict = errors.New("cannot use classic and devmode flags together")
var errNoJailMode = errors.New("this system cannot honour the jailmode flag")
Expand Down Expand Up @@ -984,11 +947,7 @@ func snapInstall(inst *snapInstruction, st *state.State) (string, []*state.TaskS

logger.Noticef("Installing snap %q revision %s", inst.Snaps[0], inst.Revision)

tsets, err := withEnsureCore(st, inst.Snaps[0], inst.userID,
func() (*state.TaskSet, error) {
return snapstateInstall(st, inst.Snaps[0], inst.Channel, inst.Revision, inst.userID, flags)
},
)
tset, err := snapstateInstall(st, inst.Snaps[0], inst.Channel, inst.Revision, inst.userID, flags)
if err != nil {
return "", nil, err
}
Expand All @@ -997,7 +956,7 @@ func snapInstall(inst *snapInstruction, st *state.State) (string, []*state.TaskS
if inst.Channel != "stable" && inst.Channel != "" {
msg = fmt.Sprintf(i18n.G("Install %q snap from %q channel"), inst.Snaps[0], inst.Channel)
}
return msg, tsets, nil
return msg, []*state.TaskSet{tset}, nil
}

func snapUpdate(inst *snapInstruction, st *state.State) (string, []*state.TaskSet, error) {
Expand Down Expand Up @@ -1242,21 +1201,13 @@ func trySnap(c *Command, r *http.Request, user *auth.UserState, trydir string, f
return BadRequest("cannot read snap info for %s: %s", trydir, err)
}

var userID int
if user != nil {
userID = user.ID
}
tsets, err := withEnsureCore(st, info.Name(), userID,
func() (*state.TaskSet, error) {
return snapstateTryPath(st, info.Name(), trydir, flags)
},
)
tset, err := snapstateTryPath(st, info.Name(), trydir, flags)
if err != nil {
return BadRequest("cannot try %s: %s", trydir, err)
}

msg := fmt.Sprintf(i18n.G("Try %q snap from %s"), info.Name(), trydir)
chg := newChange(st, "try-snap", msg, tsets, []string{info.Name()})
chg := newChange(st, "try-snap", msg, []*state.TaskSet{tset}, []string{info.Name()})
chg.Set("api-data", map[string]string{"snap-name": info.Name()})

ensureStateSoon(st)
Expand Down Expand Up @@ -1467,21 +1418,12 @@ out:
msg = fmt.Sprintf(i18n.G("Install %q snap from file %q"), snapName, origPath)
}

var userID int
if user != nil {
userID = user.ID
}

tsets, err := withEnsureCore(st, snapName, userID,
func() (*state.TaskSet, error) {
return snapstateInstallPath(st, sideInfo, tempPath, "", flags)
},
)
tset, err := snapstateInstallPath(st, sideInfo, tempPath, "", flags)
if err != nil {
return InternalError("cannot install snap file: %v", err)
}

chg := newChange(st, "install-snap", msg, tsets, []string{snapName})
chg := newChange(st, "install-snap", msg, []*state.TaskSet{tset}, []string{snapName})
chg.Set("api-data", map[string]string{"snap-name": snapName})

ensureStateSoon(st)
Expand Down
Loading