Skip to content

Commit

Permalink
node/meta: do not stop deleting objects on errors, log them instead
Browse files Browse the repository at this point in the history
Relates #2822.

Signed-off-by: Pavel Karpy <[email protected]>
  • Loading branch information
carpawell committed Jun 28, 2024
1 parent f39c4b2 commit 0cc0c6a
Showing 1 changed file with 18 additions and 1 deletion.
19 changes: 18 additions & 1 deletion pkg/local_object_storage/metabase/delete.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import (
objectSDK "github.com/nspcc-dev/neofs-sdk-go/object"
oid "github.com/nspcc-dev/neofs-sdk-go/object/id"
"go.etcd.io/bbolt"
"go.uber.org/zap"
)

// DeletePrm groups the parameters of Delete operation.
Expand Down Expand Up @@ -54,6 +55,8 @@ func (p *DeletePrm) SetAddresses(addrs ...oid.Address) {
}

// Delete removed object records from metabase indexes.
// Does not stop on an error if there are more objects to handle requested;
// returns the first error appeared with a number of deleted objects wrapped.
func (db *DB) Delete(prm DeletePrm) (DeleteRes, error) {
db.modeMtx.RLock()
defer db.modeMtx.RUnlock()
Expand Down Expand Up @@ -99,11 +102,19 @@ func (db *DB) deleteGroup(tx *bbolt.Tx, addrs []oid.Address, sizes []uint64) (ui

var rawDeleted uint64
var availableDeleted uint64
var errorCount int
var firstErr error

for i := range addrs {
removed, available, size, err := db.delete(tx, addrs[i], currEpoch)
if err != nil {
return 0, 0, err // maybe log and continue?
errorCount++
db.log.Warn("failed to delete object", zap.Stringer("addr", addrs[i]), zap.Error(err))
if firstErr == nil {
firstErr = fmt.Errorf("%s object delete fail: %w", addrs[i], err)

Check warning on line 114 in pkg/local_object_storage/metabase/delete.go

View check run for this annotation

Codecov / codecov/patch

pkg/local_object_storage/metabase/delete.go#L111-L114

Added lines #L111 - L114 were not covered by tests
}

continue

Check warning on line 117 in pkg/local_object_storage/metabase/delete.go

View check run for this annotation

Codecov / codecov/patch

pkg/local_object_storage/metabase/delete.go#L117

Added line #L117 was not covered by tests
}

if removed {
Expand All @@ -116,6 +127,12 @@ func (db *DB) deleteGroup(tx *bbolt.Tx, addrs []oid.Address, sizes []uint64) (ui
}
}

if firstErr != nil {
all := len(addrs)
success := all - errorCount
return 0, 0, fmt.Errorf("deleted %d out of %d objects, first error: %w", success, all, firstErr)

Check warning on line 133 in pkg/local_object_storage/metabase/delete.go

View check run for this annotation

Codecov / codecov/patch

pkg/local_object_storage/metabase/delete.go#L131-L133

Added lines #L131 - L133 were not covered by tests
}

if rawDeleted > 0 {
err := db.updateCounter(tx, phy, rawDeleted, false)
if err != nil {
Expand Down

0 comments on commit 0cc0c6a

Please sign in to comment.