Skip to content

Commit

Permalink
Improve recursive object restore
Browse files Browse the repository at this point in the history
When restoring a complete bucket stop and raise an error only when
the configuration is set to stop on the first error.
otherwise keep trying to restore the next objects.

Ignore the following errors:
- When the object is currently in transition
- When the object is not concerned by the restore request
  (already in standard storage-class etc)

closes #1369

Signed-off-by: Alexandre Lavigne <[email protected]>
  • Loading branch information
lavigne958 committed Apr 15, 2024
1 parent dbdee8f commit c8731b0
Showing 1 changed file with 9 additions and 3 deletions.
12 changes: 9 additions & 3 deletions s3cmd
Original file line number Diff line number Diff line change
Expand Up @@ -923,6 +923,8 @@ def cmd_object_restore(args):
warning(u"Exiting now because of --dry-run")
return EX_OK

ret = EX_OK

for key in remote_list:
item = remote_list[key]

Expand All @@ -932,13 +934,17 @@ def cmd_object_restore(args):
response = s3.object_restore(S3Uri(item['object_uri_str']))
output(u"restore: '%s'" % item['object_uri_str'])
except S3Error as e:
if e.code == "RestoreAlreadyInProgress":
if e.code in ("RestoreAlreadyInProgress", "InvalidObjectState"):
warning("%s: %s" % (e.message, item['object_uri_str']))
else:
elif cfg.stop_on_error:
raise e
else:
error("restore failed for: '%s' (%s)", item['object_uri_str'], e)
ret = EX_PARTIAL

else:
debug(u"Skipping directory since only files may be restored")
return EX_OK
return ret


def subcmd_cp_mv(args, process_fce, action_str, message):
Expand Down

1 comment on commit c8731b0

@marcgug
Copy link

@marcgug marcgug commented on c8731b0 May 3, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks I was just looking for something like this 💯

Please sign in to comment.