summaryrefslogtreecommitdiff
path: root/swift/obj
diff options
context:
space:
mode:
Diffstat (limited to 'swift/obj')
-rw-r--r--swift/obj/updater.py13
1 files changed, 10 insertions, 3 deletions
diff --git a/swift/obj/updater.py b/swift/obj/updater.py
index 466f294c0..f3a01a824 100644
--- a/swift/obj/updater.py
+++ b/swift/obj/updater.py
@@ -14,12 +14,13 @@
# limitations under the License.
import six.moves.cPickle as pickle
+import errno
import os
import signal
import sys
import time
from swift import gettext_ as _
-from random import random
+from random import random, shuffle
from eventlet import spawn, Timeout
@@ -230,7 +231,9 @@ class ObjectUpdater(Daemon):
'to a valid policy (%(error)s)') % {
'directory': asyncdir, 'error': e})
continue
- for prefix in self._listdir(async_pending):
+ prefix_dirs = self._listdir(async_pending)
+ shuffle(prefix_dirs)
+ for prefix in prefix_dirs:
prefix_path = os.path.join(async_pending, prefix)
if not os.path.isdir(prefix_path):
continue
@@ -271,7 +274,11 @@ class ObjectUpdater(Daemon):
if obj_hash == last_obj_hash:
self.stats.unlinks += 1
self.logger.increment('unlinks')
- os.unlink(update_path)
+ try:
+ os.unlink(update_path)
+ except OSError as e:
+ if e.errno != errno.ENOENT:
+ raise
else:
last_obj_hash = obj_hash
yield {'device': device, 'policy': policy,