Skip to content

Commit d0cada5

Browse files
authored
ilm: Expect objects with only free versions when scanning (minio#21112)
1 parent 0bd8f06 commit d0cada5

File tree

4 files changed

+18
-0
lines changed

4 files changed

+18
-0
lines changed

cmd/data-scanner.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1036,6 +1036,9 @@ type actionsAccountingFn func(oi ObjectInfo, sz, actualSz int64, sizeS *sizeSumm
10361036
// The metadata will be compared to consensus on the object layer before any changes are applied.
10371037
// If no metadata is supplied, -1 is returned if no action is taken.
10381038
func (i *scannerItem) applyActions(ctx context.Context, objAPI ObjectLayer, objInfos []ObjectInfo, lr lock.Retention, sizeS *sizeSummary, fn actionsAccountingFn) {
1039+
if len(objInfos) == 0 {
1040+
return
1041+
}
10391042
healActions := func(oi ObjectInfo, actualSz int64) int64 {
10401043
size := actualSz
10411044
if i.heal.enabled {

cmd/data-scanner_test.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,12 @@ func TestApplyNewerNoncurrentVersionsLimit(t *testing.T) {
245245
wants: nil,
246246
wantExpired: []ObjectToDelete{{ObjectV: ObjectV{ObjectName: obj, VersionID: allVersExpObjInfos[0].VersionID}}},
247247
},
248+
{
249+
// When no versions are present, in practice this could be an object with only free versions
250+
objInfos: nil,
251+
wants: nil,
252+
wantExpired: nil,
253+
},
248254
}
249255
for i, test := range tests {
250256
t.Run(fmt.Sprintf("TestApplyNewerNoncurrentVersionsLimit-%d", i), func(t *testing.T) {

internal/bucket/lifecycle/evaluator.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,9 @@ loop:
146146

147147
// Eval will return a lifecycle event for each object in objs
148148
func (e *Evaluator) Eval(objs []ObjectOpts) ([]Event, error) {
149+
if len(objs) == 0 {
150+
return nil, nil
151+
}
149152
if len(objs) != objs[0].NumVersions {
150153
return nil, fmt.Errorf("number of versions mismatch, expected %d, got %d", objs[0].NumVersions, len(objs))
151154
}

internal/bucket/lifecycle/evaluator_test.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,12 @@ func TestNewerNoncurrentVersions(t *testing.T) {
144144
t.Fatalf("test-%d: got %v, want %v", i+1, gotEvents[i], wantEvents[i])
145145
}
146146
}
147+
148+
// Test with zero versions
149+
events, err := evaluator.Eval(nil)
150+
if len(events) != 0 || err != nil {
151+
t.Fatal("expected no events nor error")
152+
}
147153
}
148154

149155
func TestEmptyEvaluator(t *testing.T) {

0 commit comments

Comments
 (0)