Skip to content

Commit a7b6d01

Browse files
author
diana.strebkova@t-systems.com
committed
Fixed merge bugs and refactored logging
1 parent ac6fe89 commit a7b6d01

File tree

4 files changed

+60
-33
lines changed

4 files changed

+60
-33
lines changed

models/packages/package_file.go

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"context"
88
"errors"
99
"fmt"
10+
"sort"
1011
"strconv"
1112
"strings"
1213
"time"
@@ -247,9 +248,14 @@ func GetFilesBelowBuildNumber(ctx context.Context, versionID int64, maxBuildNumb
247248
return nil, nil, fmt.Errorf("failed to retrieve files: %w", err)
248249
}
249250

251+
// Sort classifiers by length (longest first) once per call
252+
sort.SliceStable(classifiers, func(i, j int) bool {
253+
return len(classifiers[i]) > len(classifiers[j])
254+
})
255+
250256
var filteredFiles, skippedFiles []*PackageFile
251257
for _, file := range files {
252-
buildNumber, err := extractBuildNumberFromFileName(file.Name, classifiers...)
258+
buildNumber, err := ExtractBuildNumberFromFileName(file.Name, classifiers...)
253259
if err != nil {
254260
if !errors.Is(err, ErrMetadataFile) {
255261
skippedFiles = append(skippedFiles, file)
@@ -264,12 +270,12 @@ func GetFilesBelowBuildNumber(ctx context.Context, versionID int64, maxBuildNumb
264270
return filteredFiles, skippedFiles, nil
265271
}
266272

267-
// extractBuildNumberFromFileName extracts the build number from a Maven snapshot file name.
273+
// ExtractBuildNumberFromFileName extracts the build number from a Maven snapshot file name.
268274
// Expected formats:
269275
//
270276
// "artifact-1.0.0-20250311.083409-9.tgz" returns 9
271277
// "artifact-to-test-2.0.0-20250311.083409-10-sources.tgz" returns 10
272-
func extractBuildNumberFromFileName(filename string, classifiers ...string) (int, error) {
278+
func ExtractBuildNumberFromFileName(filename string, classifiers ...string) (int, error) {
273279
if strings.Contains(filename, "maven-metadata.xml") {
274280
return 0, ErrMetadataFile
275281
}

services/packages/cleanup/cleanup.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ func CleanupExpiredData(ctx context.Context, olderThan time.Duration) error {
173173
}
174174

175175
if err := maven_service.CleanupSnapshotVersions(ctx); err != nil {
176-
return err
176+
log.Error("Error cleaning up Maven snapshot versions: %v", err)
177177
}
178178

179179
ps, err := packages_model.FindUnreferencedPackages(ctx)

services/packages/maven/cleanup.go

Lines changed: 49 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ package maven
22

33
import (
44
"context"
5+
"encoding/json"
6+
"errors"
57
"fmt"
68
"strings"
79

@@ -16,42 +18,62 @@ import (
1618
func CleanupSnapshotVersions(ctx context.Context) error {
1719
retainBuilds := setting.Packages.RetainMavenSnapshotBuilds
1820
debugSession := setting.Packages.DebugMavenCleanup
19-
log.Debug("Starting Maven CleanupSnapshotVersions with retainBuilds: %d, debugSession: %t", retainBuilds, debugSession)
20-
21-
if retainBuilds == -1 {
22-
log.Info("Maven CleanupSnapshotVersions skipped because retainBuilds is set to -1")
23-
return nil
24-
}
21+
log.Debug("Maven Cleanup: starting with retainBuilds: %d, debugSession: %t", retainBuilds, debugSession)
2522

2623
if retainBuilds < 1 {
27-
return fmt.Errorf("Maven CleanupSnapshotVersions: forbidden value for retainBuilds: %d. Minimum 1 build should be retained", retainBuilds)
24+
log.Warn("Maven Cleanup: skipped as value for retainBuilds less than 1: %d. Minimum 1 build should be retained", retainBuilds)
25+
return nil
2826
}
2927

3028
versions, err := packages.GetVersionsByPackageType(ctx, 0, packages.TypeMaven)
3129
if err != nil {
32-
return fmt.Errorf("Maven CleanupSnapshotVersions: failed to retrieve Maven package versions: %w", err)
30+
return fmt.Errorf("maven Cleanup: failed to retrieve Maven package versions: %w", err)
3331
}
3432

35-
var errors []error
33+
var errs []error
34+
var metadataErrors []error
3635

3736
for _, version := range versions {
3837
if !isSnapshotVersion(version.Version) {
3938
continue
4039
}
4140

41+
var artifactId, groupId string
42+
if version.MetadataJSON != "" {
43+
var metadata map[string]interface{}
44+
if err := json.Unmarshal([]byte(version.MetadataJSON), &metadata); err != nil {
45+
log.Warn("Maven Cleanup: error during cleanup: failed to unmarshal metadataJSON for package version ID: %d: %w", version.ID, err)
46+
} else {
47+
artifactId, _ = metadata["artifact_id"].(string)
48+
groupId, _ = metadata["group_id"].(string)
49+
log.Trace("Maven Cleanup: processing package version with ID: %s, Group ID: %s, Artifact ID: %s, Version: %s", version.ID, groupId, artifactId, version.Version)
50+
}
51+
}
52+
4253
if err := cleanSnapshotFiles(ctx, version.ID, retainBuilds, debugSession); err != nil {
43-
errors = append(errors, fmt.Errorf("Maven CleanupSnapshotVersions: version '%s' (ID: %d): %w", version.Version, version.ID, err))
54+
formattedErr := fmt.Errorf("version '%s' (ID: %d, Group ID: %s, Artifact ID: %s): %w",
55+
version.Version, version.ID, groupId, artifactId, err)
56+
57+
if errors.Is(err, packages.ErrMetadataFile) {
58+
metadataErrors = append(metadataErrors, formattedErr)
59+
} else {
60+
errs = append(errs, formattedErr)
61+
}
4462
}
4563
}
4664

47-
if len(errors) > 0 {
48-
for _, err := range errors {
49-
log.Warn("Maven CleanupSnapshotVersions: Error during cleanup: %v", err)
65+
for _, err := range metadataErrors {
66+
log.Warn("Maven Cleanup: error during cleanup: %v", err)
67+
}
68+
69+
if len(errs) > 0 {
70+
for _, err := range errs {
71+
log.Error("Maven Cleanup: error during cleanup: %v", err)
5072
}
51-
return fmt.Errorf("Maven CleanupSnapshotVersions: cleanup completed with errors: %v", errors)
73+
return fmt.Errorf("maven Cleanup: completed with errors: %v", errs)
5274
}
5375

54-
log.Debug("Completed Maven CleanupSnapshotVersions")
76+
log.Trace("Completed Maven Cleanup")
5577
return nil
5678
}
5779

@@ -60,27 +82,27 @@ func isSnapshotVersion(version string) bool {
6082
}
6183

6284
func cleanSnapshotFiles(ctx context.Context, versionID int64, retainBuilds int, debugSession bool) error {
63-
log.Debug("Starting Maven cleanSnapshotFiles for versionID: %d with retainBuilds: %d, debugSession: %t", versionID, retainBuilds, debugSession)
85+
log.Trace("Maven Cleanup: starting cleanSnapshotFiles for versionID: %d with retainBuilds: %d, debugSession: %t", versionID, retainBuilds, debugSession)
6486

6587
metadataFile, err := packages.GetFileForVersionByName(ctx, versionID, "maven-metadata.xml", packages.EmptyFileKey)
6688
if err != nil {
67-
return fmt.Errorf("cleanSnapshotFiles: failed to retrieve Maven metadata file for version ID %d: %w", versionID, err)
89+
return fmt.Errorf("%w: failed to retrieve maven-metadata.xml: %w", packages.ErrMetadataFile, err)
6890
}
6991

7092
maxBuildNumber, classifiers, err := extractMaxBuildNumber(ctx, metadataFile)
7193
if err != nil {
72-
return fmt.Errorf("cleanSnapshotFiles: failed to extract max build number from maven-metadata.xml for version ID %d: %w", versionID, err)
94+
return fmt.Errorf("%w: failed to extract max build number from maven-metadata.xml: %w", packages.ErrMetadataFile, err)
7395
}
7496

7597
thresholdBuildNumber := maxBuildNumber - retainBuilds
7698
if thresholdBuildNumber <= 0 {
77-
log.Debug("cleanSnapshotFiles: No files to clean up, as the threshold build number is less than or equal to zero for versionID %d", versionID)
99+
log.Trace("Maven Cleanup: no files to clean up, as the threshold build number is less than or equal to zero for versionID %d", versionID)
78100
return nil
79101
}
80102

81103
filesToRemove, skippedFiles, err := packages.GetFilesBelowBuildNumber(ctx, versionID, thresholdBuildNumber, classifiers...)
82104
if err != nil {
83-
return fmt.Errorf("cleanSnapshotFiles: failed to retrieve files for version ID %d: %w", versionID, err)
105+
return fmt.Errorf("cleanSnapshotFiles: failed to retrieve files for version: %w", err)
84106
}
85107

86108
if debugSession {
@@ -94,36 +116,35 @@ func cleanSnapshotFiles(ctx context.Context, versionID int64, retainBuilds int,
94116
skippedFileNames = append(skippedFileNames, file.Name)
95117
}
96118

97-
log.Info("cleanSnapshotFiles: Debug session active. Files to remove: %v, Skipped files: %v", fileNamesToRemove, skippedFileNames)
119+
log.Debug("Maven Cleanup: debug session active. Files to remove: %v, Skipped files: %v", fileNamesToRemove, skippedFileNames)
98120
return nil
99121
}
100122

101123
for _, file := range filesToRemove {
102-
log.Debug("Removing file '%s' below threshold %d", file.Name, thresholdBuildNumber)
124+
log.Trace("Maven Cleanup: removing file '%s' below threshold %d", file.Name, thresholdBuildNumber)
103125
if err := packages_service.DeletePackageFile(ctx, file); err != nil {
104-
return fmt.Errorf("Maven cleanSnapshotFiles: failed to delete file '%s': %w", file.Name, err)
126+
return fmt.Errorf("cleanSnapshotFiles: failed to delete file '%s': %w", file.Name, err)
105127
}
106128
}
107129

108-
log.Debug("Completed Maven cleanSnapshotFiles for versionID: %d", versionID)
109130
return nil
110131
}
111132

112133
func extractMaxBuildNumber(ctx context.Context, metadataFile *packages.PackageFile) (int, []string, error) {
113134
pb, err := packages.GetBlobByID(ctx, metadataFile.BlobID)
114135
if err != nil {
115-
return 0, nil, fmt.Errorf("extractMaxBuildNumber: failed to get package blob: %w", err)
136+
return 0, nil, fmt.Errorf("failed to get package blob: %w", err)
116137
}
117138

118-
content, _, _, err := packages_service.GetPackageBlobStream(ctx, metadataFile, pb, nil, true)
139+
content, _, _, err := packages_service.OpenBlobForDownload(ctx, metadataFile, pb, "", nil, true)
119140
if err != nil {
120-
return 0, nil, fmt.Errorf("extractMaxBuildNumber: failed to get package file stream: %w", err)
141+
return 0, nil, fmt.Errorf("failed to get package file stream: %w", err)
121142
}
122143
defer content.Close()
123144

124145
snapshotMetadata, err := maven.ParseSnapshotVersionMetaData(content)
125146
if err != nil {
126-
return 0, nil, fmt.Errorf("extractMaxBuildNumber: failed to parse maven-metadata.xml: %w", err)
147+
return 0, nil, fmt.Errorf("failed to parse maven-metadata.xml: %w", err)
127148
}
128149

129150
buildNumber := snapshotMetadata.BuildNumber

services/packages/packages.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -611,7 +611,7 @@ func OpenBlobForDownload(ctx context.Context, pf *packages_model.PackageFile, pb
611611
internalServe := len(forceInternalServe) > 0 && forceInternalServe[0]
612612

613613
if !internalServe && cs.ShouldServeDirect() {
614-
u, err = cs.GetServeDirectURL(key, pf.Name, serveDirectReqParams)
614+
u, err = cs.GetServeDirectURL(key, pf.Name, method, serveDirectReqParams)
615615
if err != nil && !errors.Is(err, storage.ErrURLNotSupported) {
616616
log.Error("Error getting serve direct url (fallback to local reader): %v", err)
617617
}

0 commit comments

Comments
 (0)