93 lines
1.9 KiB
Go
93 lines
1.9 KiB
Go
package imagemgr
|
|
|
|
import (
|
|
"fmt"
|
|
"sync"
|
|
|
|
schsdk "gitlink.org.cn/cloudream/common/sdks/scheduler"
|
|
schmod "gitlink.org.cn/cloudream/scheduler/common/models"
|
|
)
|
|
|
|
type Manager struct {
|
|
infos map[schsdk.ImageID]*schmod.ImageInfo
|
|
imageIDIndex int64
|
|
|
|
lock sync.Mutex
|
|
}
|
|
|
|
func NewManager() (*Manager, error) {
|
|
return &Manager{
|
|
infos: make(map[schsdk.ImageID]*schmod.ImageInfo),
|
|
}, nil
|
|
}
|
|
|
|
func (m *Manager) GetImageInfo(imageID schsdk.ImageID) (*schmod.ImageInfo, error) {
|
|
m.lock.Lock()
|
|
defer m.lock.Unlock()
|
|
|
|
info, ok := m.infos[imageID]
|
|
if !ok {
|
|
return nil, fmt.Errorf("image not found")
|
|
}
|
|
|
|
return info, nil
|
|
}
|
|
|
|
func (m *Manager) GetImageImportingInfo(imageID schsdk.ImageID, slwNodeID schsdk.SlwNodeID) (*schmod.ImageImportingInfo, error) {
|
|
m.lock.Lock()
|
|
defer m.lock.Unlock()
|
|
|
|
info, ok := m.infos[imageID]
|
|
if !ok {
|
|
return nil, fmt.Errorf("image not found")
|
|
}
|
|
|
|
for _, im := range info.ImportingInfos {
|
|
if im.SlwNodeID == slwNodeID {
|
|
return &im, nil
|
|
}
|
|
}
|
|
|
|
return nil, fmt.Errorf("no importing info for this slw node")
|
|
}
|
|
|
|
func (m *Manager) CreateImage(packageID int64) (*schmod.ImageInfo, error) {
|
|
m.lock.Lock()
|
|
defer m.lock.Unlock()
|
|
|
|
imageID := schsdk.ImageID(fmt.Sprintf("%d", m.imageIDIndex))
|
|
m.imageIDIndex++
|
|
|
|
info := &schmod.ImageInfo{
|
|
ImageID: imageID,
|
|
PackageID: packageID,
|
|
}
|
|
|
|
m.infos[imageID] = info
|
|
|
|
return info, nil
|
|
}
|
|
|
|
func (m *Manager) AddImageImportingInfo(imageID schsdk.ImageID, slwNodeID schsdk.SlwNodeID, slwNodeImageID schsdk.SlwNodeImageID) error {
|
|
m.lock.Lock()
|
|
defer m.lock.Unlock()
|
|
|
|
info, ok := m.infos[imageID]
|
|
if !ok {
|
|
return fmt.Errorf("image not found")
|
|
}
|
|
|
|
for _, im := range info.ImportingInfos {
|
|
if im.SlwNodeID == slwNodeID {
|
|
return fmt.Errorf("image had been imported to that slw node")
|
|
}
|
|
}
|
|
|
|
info.ImportingInfos = append(info.ImportingInfos, schmod.ImageImportingInfo{
|
|
SlwNodeID: slwNodeID,
|
|
SlwNodeImageID: slwNodeImageID,
|
|
})
|
|
|
|
return nil
|
|
}
|