Skip to content

Commit 2ae6118

Browse files
authored
bucket notifications - lifecycle - ignore failures (#8886)
Signed-off-by: Amit Prinz Setter <alphaprinz@gmail.com>
1 parent b84ca35 commit 2ae6118

File tree

3 files changed

+32
-7
lines changed

3 files changed

+32
-7
lines changed

src/api/object_api.js

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1166,9 +1166,23 @@ module.exports = {
11661166
deleted_objects: {
11671167
type: 'array',
11681168
items: {
1169-
$ref: '#/definitions/object_info'
1169+
oneOf: [
1170+
{
1171+
$ref: '#/definitions/object_info',
1172+
},
1173+
{
1174+
type: 'object',
1175+
properties: {
1176+
err_code: {
1177+
type: 'string',
1178+
enum: ['AccessDenied', 'InternalError']
1179+
},
1180+
err_message: { type: 'string' }
1181+
}
1182+
}
1183+
]
11701184
}
1171-
}
1185+
},
11721186
}
11731187
},
11741188
auth: { system: 'admin' }

src/server/bg_services/lifecycle.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,13 +68,13 @@ async function handle_bucket_rule(system, rule, j, bucket) {
6868
})
6969
});
7070

71-
//dbg.log0("LIFECYCLE PROCESSING res =", res);
72-
7371
if (res.deleted_objects) {
7472

7573
const writes = [];
7674

7775
for (const deleted_obj of res.deleted_objects) {
76+
//if deletion has failed, don't send a notification
77+
if (deleted_obj.err_code) continue;
7878
for (const notif of bucket.notifications) {
7979
if (check_notif_relevant(notif, {
8080
op_name: 'lifecycle_delete',

src/server/object_services/object_server.js

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -986,7 +986,7 @@ async function delete_multiple_objects_by_filter(req) {
986986

987987
const { objects } = await MDStore.instance().find_objects(query);
988988

989-
await delete_multiple_objects(_.assign(req, {
989+
const delete_results = await delete_multiple_objects(_.assign(req, {
990990
rpc_params: {
991991
bucket: req.bucket.name,
992992
objects: _.map(objects, obj => ({
@@ -1000,8 +1000,19 @@ async function delete_multiple_objects_by_filter(req) {
10001000
if (reply_objects) {
10011001
//reply needs to include deleted objects
10021002
//(this is used for LifecycleExpiratoin event notifications)
1003-
//so map the md into (api friendly) object info
1004-
reply.deleted_objects = _.map(objects, get_object_info);
1003+
//so map the md into (api friendly) object info,
1004+
//or incude the error if deletion failed
1005+
reply.deleted_objects = [];
1006+
for (let i = 0; i < objects.length; ++i) {
1007+
if (delete_results[i].err_code) {
1008+
reply.deleted_objects[i] = {
1009+
err_code: delete_results[i].err_code,
1010+
err_message: delete_results[i].err_message
1011+
};
1012+
} else {
1013+
reply.deleted_objects[i] = get_object_info(objects[i]);
1014+
}
1015+
}
10051016
}
10061017

10071018
return reply;

0 commit comments

Comments
 (0)