diff --git a/agkyra/agkyra/syncer/pithos_client.py b/agkyra/agkyra/syncer/pithos_client.py index effc9390ab98e4dfd834391be6f40ff0159d9961..ec2173f13db09d1d57f210dbad58e8a6fca93558 100644 --- a/agkyra/agkyra/syncer/pithos_client.py +++ b/agkyra/agkyra/syncer/pithos_client.py @@ -3,7 +3,6 @@ import time import os import datetime import threading -import random import logging import re @@ -163,24 +162,26 @@ class PithosTargetHandle(object): self.path = target_state.path self.heartbeat = settings.heartbeat - def mk_del_name(self, name): - tstamp = datetime.datetime.now().strftime("%s") - rand = str(random.getrandbits(64)) - return "%s.%s.%s%s" % (name, tstamp, rand, STAGED_FOR_DELETION_SUFFIX) + def mk_del_name(self, name, etag): + return "%s.%s%s" % (name, etag, STAGED_FOR_DELETION_SUFFIX) def safe_object_del(self, path, etag): container = self.endpoint.container - del_name = self.mk_del_name(path) + del_name = self.mk_del_name(path, etag) + logger.info("Moving temporarily to '%s'" % del_name) try: self.endpoint.object_move( path, destination='/%s/%s' % (container, del_name), if_etag_match=etag) except ClientError as e: - logger.warning("'%s' not found; already deleted?" % path) if e.status == 404: - return - self.endpoint.del_object(del_name) + logger.warning("'%s' not found; already moved?" % path) + else: + raise + finally: + self.endpoint.del_object(del_name) + logger.info("Deleted tmp '%s'" % del_name) def directory_put(self, path, etag): r = self.endpoint.object_put(