本文整理汇总了Golang中github.com/ubuntu-core/snappy/overlord/state.Task类的典型用法代码示例。如果您正苦于以下问题:Golang Task类的具体用法?Golang Task怎么用?Golang Task使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Task类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: undoUnlinkCurrentSnap
func (m *SnapManager) undoUnlinkCurrentSnap(t *state.Task, _ *tomb.Tomb) error {
st := t.State()
st.Lock()
defer st.Unlock()
ss, snapst, err := snapSetupAndState(t)
if err != nil {
return err
}
oldInfo, err := readInfo(ss.Name, snapst.Current())
if err != nil {
return err
}
snapst.Active = true
st.Unlock()
err = m.backend.LinkSnap(oldInfo)
st.Lock()
if err != nil {
return err
}
// mark as active again
Set(st, ss.Name, snapst)
return nil
}
开发者ID:dholbach,项目名称:snappy,代码行数:29,代码来源:snapmgr.go
示例2: doDisconnect
func (m *InterfaceManager) doDisconnect(task *state.Task, _ *tomb.Tomb) error {
st := task.State()
st.Lock()
defer st.Unlock()
plugRef, slotRef, err := getPlugAndSlotRefs(task)
if err != nil {
return err
}
conns, err := getConns(st)
if err != nil {
return err
}
err = m.repo.Disconnect(plugRef.Snap, plugRef.Name, slotRef.Snap, slotRef.Name)
if err != nil {
return err
}
plug := m.repo.Plug(plugRef.Snap, plugRef.Name)
slot := m.repo.Slot(slotRef.Snap, slotRef.Name)
if err := setupSnapSecurity(task, plug.Snap, m.repo); err != nil {
return state.Retry
}
if err := setupSnapSecurity(task, slot.Snap, m.repo); err != nil {
return state.Retry
}
delete(conns, connID(plugRef, slotRef))
setConns(st, conns)
return nil
}
开发者ID:dholbach,项目名称:snappy,代码行数:33,代码来源:handlers.go
示例3: doCopySnapData
func (m *SnapManager) doCopySnapData(t *state.Task, _ *tomb.Tomb) error {
t.State().Lock()
ss, snapst, err := snapSetupAndState(t)
t.State().Unlock()
if err != nil {
return err
}
newInfo, err := readInfo(ss.Name, snapst.Candidate)
if err != nil {
return err
}
var oldInfo *snap.Info
if cur := snapst.Current(); cur != nil {
var err error
oldInfo, err = readInfo(ss.Name, cur)
if err != nil {
return err
}
}
return m.backend.CopySnapData(newInfo, oldInfo, ss.Flags)
}
开发者ID:dholbach,项目名称:snappy,代码行数:25,代码来源:snapmgr.go
示例4: doMountSnap
func (m *SnapManager) doMountSnap(t *state.Task, _ *tomb.Tomb) error {
t.State().Lock()
ss, snapst, err := snapSetupAndState(t)
t.State().Unlock()
if err != nil {
return err
}
var curInfo *snap.Info
if cur := snapst.Current(); cur != nil {
var err error
curInfo, err = readInfo(ss.Name, cur)
if err != nil {
return err
}
}
if err := m.backend.CheckSnap(ss.SnapPath, curInfo, ss.Flags); err != nil {
return err
}
// TODO Use ss.Revision to obtain the right info to mount
// instead of assuming the candidate is the right one.
return m.backend.SetupSnap(ss.SnapPath, snapst.Candidate, ss.Flags)
}
开发者ID:dholbach,项目名称:snappy,代码行数:26,代码来源:snapmgr.go
示例5: doUnlinkSnap
func (m *SnapManager) doUnlinkSnap(t *state.Task, _ *tomb.Tomb) error {
// invoked only if snap has a current active revision
st := t.State()
st.Lock()
defer st.Unlock()
ss, snapst, err := snapSetupAndState(t)
if err != nil {
return err
}
info, err := Info(t.State(), ss.Name, ss.Revision)
if err != nil {
return err
}
pb := &TaskProgressAdapter{task: t}
st.Unlock() // pb itself will ask for locking
err = m.backend.UnlinkSnap(info, pb)
st.Lock()
if err != nil {
return err
}
// mark as inactive
snapst.Active = false
Set(st, ss.Name, snapst)
return nil
}
开发者ID:dholbach,项目名称:snappy,代码行数:31,代码来源:snapmgr.go
示例6: doDiscardSnap
func (m *SnapManager) doDiscardSnap(t *state.Task, _ *tomb.Tomb) error {
st := t.State()
st.Lock()
ss, snapst, err := snapSetupAndState(t)
st.Unlock()
if err != nil {
return err
}
if len(snapst.Sequence) == 1 {
snapst.Sequence = nil
} else {
newSeq := make([]*snap.SideInfo, 0, len(snapst.Sequence))
for _, si := range snapst.Sequence {
if si.Revision == ss.Revision {
// leave out
continue
}
newSeq = append(newSeq, si)
}
snapst.Sequence = newSeq
}
pb := &TaskProgressAdapter{task: t}
err = m.backend.RemoveSnapFiles(ss.placeInfo(), pb)
if err != nil {
return err
}
st.Lock()
Set(st, ss.Name, snapst)
st.Unlock()
return nil
}
开发者ID:dholbach,项目名称:snappy,代码行数:35,代码来源:snapmgr.go
示例7: doPrepareSnap
func (m *SnapManager) doPrepareSnap(t *state.Task, _ *tomb.Tomb) error {
st := t.State()
st.Lock()
ss, snapst, err := snapSetupAndState(t)
st.Unlock()
if err != nil {
return err
}
if ss.Revision == 0 { // sideloading
// to not clash with not sideload installs
// and to not have clashes between them
// use incremental revisions starting at 100001
// for sideloads
revision := snapst.LocalRevision
if revision == 0 {
revision = firstLocalRevision
} else {
revision++
}
snapst.LocalRevision = revision
ss.Revision = revision
} else {
if err := checkRevisionIsNew(ss.Name, snapst, ss.Revision); err != nil {
return err
}
}
st.Lock()
t.Set("snap-setup", ss)
snapst.Candidate = &snap.SideInfo{Revision: ss.Revision}
Set(st, ss.Name, snapst)
st.Unlock()
return nil
}
开发者ID:dholbach,项目名称:snappy,代码行数:35,代码来源:snapmgr.go
示例8: doUnlinkCurrentSnap
func (m *SnapManager) doUnlinkCurrentSnap(t *state.Task, _ *tomb.Tomb) error {
st := t.State()
st.Lock()
defer st.Unlock()
ss, snapst, err := snapSetupAndState(t)
if err != nil {
return err
}
oldInfo, err := readInfo(ss.Name, snapst.Current())
if err != nil {
return err
}
snapst.Active = false
pb := &TaskProgressAdapter{task: t}
st.Unlock() // pb itself will ask for locking
err = m.backend.UnlinkSnap(oldInfo, pb)
st.Lock()
if err != nil {
return err
}
// mark as inactive
Set(st, ss.Name, snapst)
return nil
}
开发者ID:dholbach,项目名称:snappy,代码行数:30,代码来源:snapmgr.go
示例9: undoMountSnap
func (m *SnapManager) undoMountSnap(t *state.Task, _ *tomb.Tomb) error {
t.State().Lock()
ss, err := TaskSnapSetup(t)
t.State().Unlock()
if err != nil {
return err
}
return m.backend.UndoSetupSnap(ss.placeInfo())
}
开发者ID:dholbach,项目名称:snappy,代码行数:10,代码来源:snapmgr.go
示例10: getPlugAndSlotRefs
func getPlugAndSlotRefs(task *state.Task) (*interfaces.PlugRef, *interfaces.SlotRef, error) {
var plugRef interfaces.PlugRef
var slotRef interfaces.SlotRef
if err := task.Get("plug", &plugRef); err != nil {
return nil, nil, err
}
if err := task.Get("slot", &slotRef); err != nil {
return nil, nil, err
}
return &plugRef, &slotRef, nil
}
开发者ID:dholbach,项目名称:snappy,代码行数:11,代码来源:helpers.go
示例11: snapSetupAndState
func snapSetupAndState(t *state.Task) (*SnapSetup, *SnapState, error) {
ss, err := TaskSnapSetup(t)
if err != nil {
return nil, nil, err
}
var snapst SnapState
err = Get(t.State(), ss.Name, &snapst)
if err != nil && err != state.ErrNoState {
return nil, nil, err
}
return ss, &snapst, nil
}
开发者ID:dholbach,项目名称:snappy,代码行数:12,代码来源:snapmgr.go
示例12: removeSnapSecurity
func removeSnapSecurity(task *state.Task, snapName string) error {
st := task.State()
for _, backend := range securityBackends {
st.Unlock()
err := backend.Remove(snapName)
st.Lock()
if err != nil {
task.Errorf("cannot setup %s for snap %q: %s", backend.Name(), snapName, err)
return err
}
}
return nil
}
开发者ID:dholbach,项目名称:snappy,代码行数:13,代码来源:helpers.go
示例13: undoPrepareSnap
func (m *SnapManager) undoPrepareSnap(t *state.Task, _ *tomb.Tomb) error {
st := t.State()
st.Lock()
defer st.Unlock()
ss, snapst, err := snapSetupAndState(t)
if err != nil {
return err
}
snapst.Candidate = nil
Set(st, ss.Name, snapst)
return nil
}
开发者ID:dholbach,项目名称:snappy,代码行数:13,代码来源:snapmgr.go
示例14: undoCopySnapData
func (m *SnapManager) undoCopySnapData(t *state.Task, _ *tomb.Tomb) error {
t.State().Lock()
ss, snapst, err := snapSetupAndState(t)
t.State().Unlock()
if err != nil {
return err
}
newInfo, err := readInfo(ss.Name, snapst.Candidate)
if err != nil {
return err
}
return m.backend.UndoCopySnapData(newInfo, ss.Flags)
}
开发者ID:dholbach,项目名称:snappy,代码行数:15,代码来源:snapmgr.go
示例15: doClearSnapData
func (m *SnapManager) doClearSnapData(t *state.Task, _ *tomb.Tomb) error {
t.State().Lock()
ss, err := TaskSnapSetup(t)
t.State().Unlock()
if err != nil {
return err
}
t.State().Lock()
info, err := Info(t.State(), ss.Name, ss.Revision)
t.State().Unlock()
if err != nil {
return err
}
return m.backend.RemoveSnapData(info)
}
开发者ID:dholbach,项目名称:snappy,代码行数:17,代码来源:snapmgr.go
示例16: doDownloadSnap
func (m *SnapManager) doDownloadSnap(t *state.Task, _ *tomb.Tomb) error {
st := t.State()
st.Lock()
ss, snapst, err := snapSetupAndState(t)
st.Unlock()
if err != nil {
return err
}
checker := func(info *snap.Info) error {
return checkRevisionIsNew(ss.Name, snapst, info.Revision)
}
pb := &TaskProgressAdapter{task: t}
var auther store.Authenticator
if ss.UserID > 0 {
st.Lock()
user, err := auth.User(st, ss.UserID)
st.Unlock()
if err != nil {
return err
}
auther = user.Authenticator()
}
storeInfo, downloadedSnapFile, err := m.backend.Download(ss.Name, ss.Channel, checker, pb, auther)
if err != nil {
return err
}
ss.SnapPath = downloadedSnapFile
ss.Revision = storeInfo.Revision
// update the snap setup and state for the follow up tasks
st.Lock()
t.Set("snap-setup", ss)
snapst.Candidate = &storeInfo.SideInfo
Set(st, ss.Name, snapst)
st.Unlock()
return nil
}
开发者ID:dholbach,项目名称:snappy,代码行数:42,代码来源:snapmgr.go
示例17: undoLinkSnap
func (m *SnapManager) undoLinkSnap(t *state.Task, _ *tomb.Tomb) error {
st := t.State()
st.Lock()
defer st.Unlock()
ss, snapst, err := snapSetupAndState(t)
if err != nil {
return err
}
var oldChannel string
err = t.Get("old-channel", &oldChannel)
if err != nil {
return err
}
// relinking of the old snap is done in the undo of unlink-current-snap
snapst.Candidate = snapst.Sequence[len(snapst.Sequence)-1]
snapst.Sequence = snapst.Sequence[:len(snapst.Sequence)-1]
snapst.Active = false
snapst.Channel = oldChannel
newInfo, err := readInfo(ss.Name, snapst.Candidate)
if err != nil {
return err
}
pb := &TaskProgressAdapter{task: t}
st.Unlock() // pb itself will ask for locking
err = m.backend.UnlinkSnap(newInfo, pb)
st.Lock()
if err != nil {
return err
}
// mark as inactive
Set(st, ss.Name, snapst)
return nil
}
开发者ID:dholbach,项目名称:snappy,代码行数:41,代码来源:snapmgr.go
示例18: doDiscardConns
func (m *InterfaceManager) doDiscardConns(task *state.Task, _ *tomb.Tomb) error {
st := task.State()
st.Lock()
defer st.Unlock()
snapSetup, err := snapstate.TaskSnapSetup(task)
if err != nil {
return err
}
snapName := snapSetup.Name
var snapState snapstate.SnapState
err = snapstate.Get(st, snapName, &snapState)
if err != nil && err != state.ErrNoState {
return err
}
if err == nil && len(snapState.Sequence) != 0 {
return fmt.Errorf("cannot discard connections for snap %q while it is present", snapName)
}
conns, err := getConns(st)
if err != nil {
return err
}
removed := make(map[string]connState)
for id := range conns {
plugRef, slotRef, err := parseConnID(id)
if err != nil {
return err
}
if plugRef.Snap == snapName || slotRef.Snap == snapName {
removed[id] = conns[id]
delete(conns, id)
}
}
task.Set("removed", removed)
setConns(st, conns)
return nil
}
开发者ID:dholbach,项目名称:snappy,代码行数:40,代码来源:handlers.go
示例19: autoConnect
func (m *InterfaceManager) autoConnect(task *state.Task, snapName string, blacklist map[string]bool) error {
var conns map[string]connState
err := task.State().Get("conns", &conns)
if err != nil && err != state.ErrNoState {
return err
}
if conns == nil {
conns = make(map[string]connState)
}
// XXX: quick hack, auto-connect everything
for _, plug := range m.repo.Plugs(snapName) {
if blacklist[plug.Name] {
continue
}
candidates := m.repo.AutoConnectCandidates(snapName, plug.Name)
if len(candidates) != 1 {
continue
}
slot := candidates[0]
if err := m.repo.Connect(snapName, plug.Name, slot.Snap.Name(), slot.Name); err != nil {
task.Logf("cannot auto connect %s:%s to %s:%s: %s",
snapName, plug.Name, slot.Snap.Name(), slot.Name, err)
}
key := fmt.Sprintf("%s:%s %s:%s", snapName, plug.Name, slot.Snap.Name(), slot.Name)
conns[key] = connState{Interface: plug.Interface, Auto: true}
}
task.State().Set("conns", conns)
return nil
}
开发者ID:dholbach,项目名称:snappy,代码行数:29,代码来源:helpers.go
示例20: doLinkSnap
func (m *SnapManager) doLinkSnap(t *state.Task, _ *tomb.Tomb) error {
st := t.State()
st.Lock()
defer st.Unlock()
ss, snapst, err := snapSetupAndState(t)
if err != nil {
return err
}
cand := snapst.Candidate
m.backend.Candidate(snapst.Candidate)
snapst.Sequence = append(snapst.Sequence, snapst.Candidate)
snapst.Candidate = nil
snapst.Active = true
oldChannel := snapst.Channel
if ss.Channel != "" {
snapst.Channel = ss.Channel
}
newInfo, err := readInfo(ss.Name, cand)
if err != nil {
return err
}
st.Unlock()
err = m.backend.LinkSnap(newInfo)
st.Lock()
if err != nil {
return err
}
t.Set("old-channel", oldChannel)
// Do at the end so we only preserve the new state if it worked.
Set(st, ss.Name, snapst)
return nil
}
开发者ID:dholbach,项目名称:snappy,代码行数:39,代码来源:snapmgr.go
注:本文中的github.com/ubuntu-core/snappy/overlord/state.Task类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论