MCPcopy
hub / github.com/baetyl/baetyl / cleanObjectStorage

Method cleanObjectStorage

engine/clean.go:65–138  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

63}
64
65func (e *engineImpl) cleanObjectStorage() (int, error) {
66 node, err := e.nod.Get()
67 if err != nil {
68 return 0, errors.Trace(err)
69 }
70 objectCfgs := map[string]*specv1.Configuration{}
71 err = e.sto.ForEach(nil, func(cfg *specv1.Configuration) error {
72 if isObjectConfig(cfg) {
73 key := makeKey(specv1.KindConfiguration, cfg.Name, cfg.Version)
74 if key != "" {
75 objectCfgs[key] = cfg
76 }
77 }
78 return nil
79 })
80 if err != nil {
81 return 0, errors.Trace(err)
82 }
83
84 var infos []specv1.AppInfo
85 infos = append(infos, node.Report.AppInfos(false)...)
86 infos = append(infos, node.Desire.AppInfos(false)...)
87 infos = append(infos, node.Report.AppInfos(true)...)
88 infos = append(infos, node.Desire.AppInfos(true)...)
89 occupied := map[string]string{}
90 for _, info := range infos {
91 occupied[info.Name] = info.Version
92 }
93 obsoleteApps := make(map[string]*specv1.Application)
94 occupiedApps := make(map[string]*specv1.Application)
95 err = e.sto.ForEach(nil, func(app *specv1.Application) error {
96 if ver, ok := occupied[app.Name]; ok && ver == app.Version {
97 occupiedApps[app.Name] = app
98 return nil
99 }
100 if prev, ok := obsoleteApps[app.Name]; !ok || app.UpdateTime.After(prev.UpdateTime) {
101 obsoleteApps[app.Name] = app
102 }
103 return nil
104 })
105 finishedJobs := getFinishedJobs(occupiedApps, node)
106 usedObjectCfgs := getUsedObjectCfgs(occupiedApps, finishedJobs)
107 for name, ver := range usedObjectCfgs {
108 key := makeKey(specv1.KindConfiguration, name, ver)
109 if _, ok := objectCfgs[key]; ok && key != "" {
110 delete(objectCfgs, key)
111 }
112 }
113
114 dels := getDelObjectCfgs(occupiedApps, obsoleteApps, objectCfgs, finishedJobs)
115 var subs []os.DirEntry
116 for k, v := range dels {
117 if err = e.sto.Delete(k, specv1.Configuration{}); err != nil {
118 e.log.Error("failed to delete configuration", log.Error(err))
119 }
120 dir := filepath.Join(e.cfg.Sync.Download.Path, v.Name)
121 subs, err = os.ReadDir(dir)
122 if err != nil {

Callers 2

cleaningMethod · 0.95
TestCleanObjectStorageFunction · 0.95

Calls 7

isObjectConfigFunction · 0.85
getFinishedJobsFunction · 0.85
getUsedObjectCfgsFunction · 0.85
deleteFunction · 0.85
getDelObjectCfgsFunction · 0.85
makeKeyFunction · 0.70
GetMethod · 0.65

Tested by 1

TestCleanObjectStorageFunction · 0.76