[#1674] *: Expire entities after the expiration epoch

Signed-off-by: Pavel Karpy <carpawell@nspcc.ru>
This commit is contained in:
Pavel Karpy 2022-09-05 08:48:42 +03:00 committed by LeL
parent f1572a674b
commit 4afb928ab6
6 changed files with 10 additions and 10 deletions

View file

@ -266,7 +266,7 @@ func (v *FormatValidator) ValidateContent(o *object.Object) error {
return fmt.Errorf("lock object expiration epoch: %w", err) return fmt.Errorf("lock object expiration epoch: %w", err)
} }
if currEpoch := v.netState.CurrentEpoch(); lockExp <= currEpoch { if currEpoch := v.netState.CurrentEpoch(); lockExp < currEpoch {
return fmt.Errorf("lock object expiration: %d; current: %d", lockExp, currEpoch) return fmt.Errorf("lock object expiration: %d; current: %d", lockExp, currEpoch)
} }

View file

@ -201,7 +201,7 @@ func (ap *Processor) filterExpiredSG(cid cid.ID, sgIDs []oid.ID,
} }
// filter expired epochs // filter expired epochs
if sg.ExpirationEpoch() > ap.epochSrc.EpochCounter() { if sg.ExpirationEpoch() >= ap.epochSrc.EpochCounter() {
coreSG.SetID(sgID) coreSG.SetID(sgID)
coreSG.SetStorageGroup(*sg) coreSG.SetStorageGroup(*sg)

View file

@ -107,12 +107,12 @@ func addAttribute(obj *object.Object, key, val string) {
func checkExpiredObjects(t *testing.T, db *meta.DB, f func(exp, nonExp *objectSDK.Object)) { func checkExpiredObjects(t *testing.T, db *meta.DB, f func(exp, nonExp *objectSDK.Object)) {
expObj := generateObject(t) expObj := generateObject(t)
setExpiration(expObj, currEpoch) setExpiration(expObj, currEpoch-1)
require.NoError(t, metaPut(db, expObj, nil)) require.NoError(t, metaPut(db, expObj, nil))
nonExpObj := generateObject(t) nonExpObj := generateObject(t)
setExpiration(nonExpObj, currEpoch+1) setExpiration(nonExpObj, currEpoch)
require.NoError(t, metaPut(db, nonExpObj, nil)) require.NoError(t, metaPut(db, nonExpObj, nil))

View file

@ -112,9 +112,9 @@ func objectStatus(tx *bbolt.Tx, addr oid.Address, currEpoch uint64) uint8 {
expirationBucket := tx.Bucket(attributeBucketName(addr.Container(), objectV2.SysAttributeExpEpoch)) expirationBucket := tx.Bucket(attributeBucketName(addr.Container(), objectV2.SysAttributeExpEpoch))
if expirationBucket != nil { if expirationBucket != nil {
// bucket that contains objects that expire in the current epoch // bucket that contains objects that expire in the current epoch
currEpochBkt := expirationBucket.Bucket([]byte(strconv.FormatUint(currEpoch, 10))) prevEpochBkt := expirationBucket.Bucket([]byte(strconv.FormatUint(currEpoch-1, 10)))
if currEpochBkt != nil { if prevEpochBkt != nil {
if currEpochBkt.Get(rawOID) != nil { if prevEpochBkt.Get(rawOID) != nil {
expired = true expired = true
} }
} }

View file

@ -61,10 +61,10 @@ func (db *DB) iterateExpired(tx *bbolt.Tx, epoch uint64, h ExpiredObjectHandler)
return nil return nil
} }
expiresAt, err := strconv.ParseUint(string(expKey), 10, 64) expiresAfter, err := strconv.ParseUint(string(expKey), 10, 64)
if err != nil { if err != nil {
return fmt.Errorf("could not parse expiration epoch: %w", err) return fmt.Errorf("could not parse expiration epoch: %w", err)
} else if expiresAt >= epoch { } else if expiresAfter >= epoch {
return nil return nil
} }

View file

@ -84,7 +84,7 @@ func (g *ExpirationChecker) handleTS(addr string, ts *object.Object, reqEpoch ui
} }
g.cache.Add(addr, epoch) g.cache.Add(addr, epoch)
return epoch > reqEpoch return epoch >= reqEpoch
} }
} }