author | Laszlo Peter <laszlo.peter@oracle.com> |
Wed, 07 Sep 2016 14:48:42 -0700 | |
changeset 6853 | cf1567491b1b |
permissions | -rw-r--r-- |
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) |