Платформа ЦРНП "Мирокод" для разработки проектов
https://git.mirocod.ru
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
2.1 KiB
80 lines
2.1 KiB
// Copyright 2022 The Gitea Authors. All rights reserved. |
|
// Use of this source code is governed by a MIT-style |
|
// license that can be found in the LICENSE file. |
|
|
|
package container |
|
|
|
import ( |
|
"context" |
|
"time" |
|
|
|
packages_model "code.gitea.io/gitea/models/packages" |
|
container_model "code.gitea.io/gitea/models/packages/container" |
|
"code.gitea.io/gitea/modules/util" |
|
) |
|
|
|
// Cleanup removes expired container data |
|
func Cleanup(ctx context.Context, olderThan time.Duration) error { |
|
if err := cleanupExpiredBlobUploads(ctx, olderThan); err != nil { |
|
return err |
|
} |
|
return cleanupExpiredUploadedBlobs(ctx, olderThan) |
|
} |
|
|
|
// cleanupExpiredBlobUploads removes expired blob uploads |
|
func cleanupExpiredBlobUploads(ctx context.Context, olderThan time.Duration) error { |
|
pbus, err := packages_model.FindExpiredBlobUploads(ctx, olderThan) |
|
if err != nil { |
|
return err |
|
} |
|
|
|
for _, pbu := range pbus { |
|
if err := RemoveBlobUploadByID(ctx, pbu.ID); err != nil { |
|
return err |
|
} |
|
} |
|
|
|
return nil |
|
} |
|
|
|
// cleanupExpiredUploadedBlobs removes expired uploaded blobs not referenced by a manifest |
|
func cleanupExpiredUploadedBlobs(ctx context.Context, olderThan time.Duration) error { |
|
pfs, err := container_model.SearchExpiredUploadedBlobs(ctx, olderThan) |
|
if err != nil { |
|
return err |
|
} |
|
|
|
for _, pf := range pfs { |
|
if err := packages_model.DeleteAllProperties(ctx, packages_model.PropertyTypeFile, pf.ID); err != nil { |
|
return err |
|
} |
|
if err := packages_model.DeleteFileByID(ctx, pf.ID); err != nil { |
|
return err |
|
} |
|
} |
|
|
|
pvs, _, err := packages_model.SearchVersions(ctx, &packages_model.PackageSearchOptions{ |
|
Type: packages_model.TypeContainer, |
|
Version: packages_model.SearchValue{ |
|
ExactMatch: true, |
|
Value: container_model.UploadVersion, |
|
}, |
|
IsInternal: true, |
|
HasFiles: util.OptionalBoolFalse, |
|
}) |
|
if err != nil { |
|
return err |
|
} |
|
|
|
for _, pv := range pvs { |
|
if err := packages_model.DeleteAllProperties(ctx, packages_model.PropertyTypeVersion, pv.ID); err != nil { |
|
return err |
|
} |
|
|
|
if err := packages_model.DeleteVersionByID(ctx, pv.ID); err != nil { |
|
return err |
|
} |
|
} |
|
|
|
return nil |
|
}
|
|
|