components/openstack/swift/patches/xattr-ENOENT.patch
author Laszlo Peter <laszlo.peter@oracle.com>
Wed, 07 Sep 2016 14:48:42 -0700
changeset 6853 cf1567491b1b
permissions -rw-r--r--
24465859 Update Swift for the Mitaka release
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
6853
cf1567491b1b 24465859 Update Swift for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff changeset
     1
This patch is not appropriate for upstream, since the problem doesn't exist
cf1567491b1b 24465859 Update Swift for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff changeset
     2
on other platforms.  RFE 23579927 has been filed for Solaris to be able to
cf1567491b1b 24465859 Update Swift for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff changeset
     3
distinguish between a non-existent file an a missing extended attribute.
cf1567491b1b 24465859 Update Swift for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff changeset
     4
cf1567491b1b 24465859 Update Swift for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff changeset
     5
--- swift-2.7.0/swift/obj/diskfile.py	Fri Mar 25 02:42:55 2016
cf1567491b1b 24465859 Update Swift for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff changeset
     6
+++ swift-2.7.0/swift/obj/diskfile.py	Tue Jun 14 09:10:30 2016
cf1567491b1b 24465859 Update Swift for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff changeset
     7
@@ -127,7 +127,18 @@
cf1567491b1b 24465859 Update Swift for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff changeset
     8
                 logging.exception(msg)
cf1567491b1b 24465859 Update Swift for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff changeset
     9
                 raise DiskFileXattrNotSupported(e)
cf1567491b1b 24465859 Update Swift for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff changeset
    10
         if e.errno == errno.ENOENT:
cf1567491b1b 24465859 Update Swift for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff changeset
    11
-            raise DiskFileNotExist()
cf1567491b1b 24465859 Update Swift for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff changeset
    12
+            # Solaris returns ENOENT either if the file doesn't exist or if the
cf1567491b1b 24465859 Update Swift for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff changeset
    13
+            # attribute doesn't exist.  If we've been passed an fd, then we
cf1567491b1b 24465859 Update Swift for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff changeset
    14
+            # already successfully opened the file, so the ENOENT refers to the
cf1567491b1b 24465859 Update Swift for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff changeset
    15
+            # missing attribute.  But if we were passed a filename, then the
cf1567491b1b 24465859 Update Swift for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff changeset
    16
+            # error is ambiguous, so we test explicitly for the file's existence
cf1567491b1b 24465859 Update Swift for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff changeset
    17
+            # and raise DiskFileNotExist only if it doesn't.
cf1567491b1b 24465859 Update Swift for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff changeset
    18
+            if isinstance(fd, basestring):
cf1567491b1b 24465859 Update Swift for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff changeset
    19
+                try:
cf1567491b1b 24465859 Update Swift for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff changeset
    20
+                    os.stat(fd)
cf1567491b1b 24465859 Update Swift for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff changeset
    21
+                except OSError as e:
cf1567491b1b 24465859 Update Swift for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff changeset
    22
+                    if e.errno == errno.ENOENT:
cf1567491b1b 24465859 Update Swift for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff changeset
    23
+                        raise DiskFileNotExist()
cf1567491b1b 24465859 Update Swift for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff changeset
    24
         # TODO: we might want to re-raise errors that don't denote a missing
cf1567491b1b 24465859 Update Swift for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff changeset
    25
         # xattr here.  Seems to be ENODATA on linux and ENOATTR on BSD/OSX.
cf1567491b1b 24465859 Update Swift for the Mitaka release
Laszlo Peter <laszlo.peter@oracle.com>
parents:
diff changeset
    26
     return pickle.loads(metadata)