-
-
Save bloodeagle40234/1badfff746df1db00fbac95e7e351b68 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/swift/obj/mem_diskfile.py b/swift/obj/mem_diskfile.py | |
index a3b37f4..4456fa3 100644 | |
--- a/swift/obj/mem_diskfile.py | |
+++ b/swift/obj/mem_diskfile.py | |
@@ -27,8 +27,7 @@ from swift.common.exceptions import DiskFileQuarantined, DiskFileNotExist, \ | |
DiskFileCollision, DiskFileDeleted, DiskFileNotOpen | |
from swift.common.request_helpers import is_sys_meta | |
from swift.common.swob import multi_range_iterator | |
-from swift.obj.diskfile import DATAFILE_SYSTEM_META | |
- | |
+from swift.obj.diskfile import DATAFILE_SYSTEM_META, RESERVED_DATAFILE_META | |
class InMemoryFileSystem(object): | |
""" | |
@@ -433,7 +432,8 @@ class DiskFile(object): | |
# with the object data. | |
immutable_metadata = dict( | |
[(key, val) for key, val in cur_mdata.items() | |
- if key.lower() in DATAFILE_SYSTEM_META | |
+ if key.lower() in (RESERVED_DATAFILE_META | | |
+ DATAFILE_SYSTEM_META) | |
or is_sys_meta('object', key)]) | |
metadata.update(immutable_metadata) | |
metadata['name'] = self._name | |
diff --git a/test/unit/obj/test_diskfile.py b/test/unit/obj/test_diskfile.py | |
index 2a18478..2b1c43f 100644 | |
--- a/test/unit/obj/test_diskfile.py | |
+++ b/test/unit/obj/test_diskfile.py | |
@@ -2412,6 +2412,23 @@ class DiskFileMixin(BaseDiskFileTestMixin): | |
# original sysmeta keys are preserved | |
self.assertEqual('Value1', df._metadata['X-Object-Sysmeta-Key1']) | |
+ def test_disk_file_preserves_slo(self): | |
+ # build an object with some meta (at t0) | |
+ orig_metadata = {'X-Static-Large-Object': 'True', | |
+ 'Content-Type': 'text/garbage'} | |
+ df = self._get_open_disk_file(ts=self.ts().internal, | |
+ extra_metadata=orig_metadata) | |
+ with df.open(): | |
+ self.assertEqual('1024', df._metadata['Content-Length']) | |
+ # write some new metadata (fast POST, don't send orig meta, at t0+1s) | |
+ df = self._simple_get_diskfile() | |
+ df.write_metadata({'X-Timestamp': self.ts().internal}) | |
+ df = self._simple_get_diskfile() | |
+ with df.open(): | |
+ # non-fast-post updateable keys are preserved | |
+ self.assertEqual('text/garbage', df._metadata['Content-Type']) | |
+ self.assertEqual('True', df._metadata['X-Static-Large-Object']) | |
+ | |
def test_disk_file_reader_iter(self): | |
df = self._create_test_file('1234567890') | |
quarantine_msgs = [] |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment