)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"7b1ae87d7bcf2efc078b11f89fabaab506d2a165","unresolved":true,"context_lines":[{"line_number":4,"context_line":"Commit:     Tim Burke \u003ctim.burke@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2023-09-19 10:23:00 -0700"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"object: Block chunked PUTs when already past reserve"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Previously, clients could bypass fallocate_reserve checks by uploading"},{"line_number":10,"context_line":"with `Transfer-Encoding: chunked` rather than sending a `Content-Length`"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"323a15cd_b944c3f3","line":7,"range":{"start_line":7,"start_character":8,"end_line":7,"end_character":27},"updated":"2023-09-28 14:33:56.000000000","message":"perhaps \"Block POSTs and chunked PUTs...\"","commit_id":"7c487bae9fdfcba0e14cb667339c7f208fb03a98"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4b4de8039f20475bcd65183b9d051b3cef700b30","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Tim Burke \u003ctim.burke@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2023-09-19 10:23:00 -0700"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"object: Block chunked PUTs when already past reserve"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Previously, clients could bypass fallocate_reserve checks by uploading"},{"line_number":10,"context_line":"with `Transfer-Encoding: chunked` rather than sending a `Content-Length`"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"e47f2413_14e67796","line":7,"range":{"start_line":7,"start_character":8,"end_line":7,"end_character":27},"in_reply_to":"323a15cd_b944c3f3","updated":"2023-10-02 18:52:07.000000000","message":"Done","commit_id":"7c487bae9fdfcba0e14cb667339c7f208fb03a98"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"3f3cf966c914adc387e1c7f7451beceb18539b89","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"4a37dea5_cdaf9b78","updated":"2023-08-15 22:55:39.000000000","message":"so I\u0027m realizing diskfile *always* imported from utils.fallocate even after we moved it; it just grabbed the alias.\n\nI sort of expected the fix to go near the call to fallocate, like\n\n    if size is not None:\n        check_free_reserve(size)\n        fallocate(size)\n    else:\n        # well, if we\u0027re full we can at least stop!\n        check_free_reserve(None)\n        \n... or something like that.  But maybe this is better.","commit_id":"de584798e57a979af6831a374416b68c1a92b0c7"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"3d3eeb90bfb608a5875846374e472807fa88f200","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"a33d18ad_e5a7eaa5","in_reply_to":"4a37dea5_cdaf9b78","updated":"2023-08-16 05:03:13.000000000","message":"In no small part, I wanted to make it abundantly clear that this *only* impacts PUTs -- DELETEs in particular are still accepted, even if sent with `Transfer-Encoding: chunked` (though it\u0027s not clear to me that proxies ever *would* do that).\n\n(I suppose I ought to add a test to that effect.)\n\nTrying to get the fix closer to the fallocate, I\u0027d end up down in `DiskFileWriter.open` or the space-checking part of `utils.fallocate`, at which point we\u0027ve lost that context.","commit_id":"de584798e57a979af6831a374416b68c1a92b0c7"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"f696c0aa97cae92c803582d6bf3423d905f26d8c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"234618ab_04bdbf23","updated":"2023-08-18 15:54:56.000000000","message":"recheck\n\nFailure in `openstack.tests.functional.compute.v2.test_volume_attachment.TestServerVolumeAttachment.test_volume_attachment` when attempting to delete a volume during `tearDown`:\n\n\u003e openstack.exceptions.BadRequestException: BadRequestException: 400: Client Error for url: https://158.69.76.220/volume/v3/31f002f19ea342e1bcb0b1de98a03cc2/volumes/c8044640-1750-498c-a51d-3830aac3ede9, Invalid volume: Volume status must be available or error or error_restoring or error_extending or error_managing and must not be migrating, attached, belong to a group, have snapshots, awaiting a transfer, or be disassociated from snapshots after volume transfer.","commit_id":"6835b968c9b988cbba09d7d46647ef7e24b9a4e2"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"7b1ae87d7bcf2efc078b11f89fabaab506d2a165","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"d601fbc5_beba583e","updated":"2023-09-28 14:33:56.000000000","message":"LGTM, but could do with more test coverage - here\u0027s some more: https://review.opendev.org/c/openstack/swift/+/896802","commit_id":"7c487bae9fdfcba0e14cb667339c7f208fb03a98"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"c9845cb657ee0c1dcb8e02c2baf8c1d622627d8a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"1dd0ae21_73cbd8b5","updated":"2023-10-02 19:37:06.000000000","message":"this is super helpful!","commit_id":"d31a54a65c186550a99bb985f056c071690a3939"}],"swift/common/utils/__init__.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"7b1ae87d7bcf2efc078b11f89fabaab506d2a165","unresolved":true,"context_lines":[{"line_number":851,"context_line":"    :raises OSError: if fs_path does not exist"},{"line_number":852,"context_line":"    \"\"\""},{"line_number":853,"context_line":"    if isinstance(fs_path_or_fd, int):"},{"line_number":854,"context_line":"        st \u003d os.fstatvfs(fs_path_or_fd)"},{"line_number":855,"context_line":"    else:"},{"line_number":856,"context_line":"        st \u003d os.statvfs(fs_path_or_fd)"},{"line_number":857,"context_line":"    free_bytes \u003d st.f_frsize * st.f_bavail"}],"source_content_type":"text/x-python","patch_set":5,"id":"e1d48892_3d5d5fe9","line":854,"updated":"2023-09-28 14:33:56.000000000","message":"needs test","commit_id":"7c487bae9fdfcba0e14cb667339c7f208fb03a98"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4b4de8039f20475bcd65183b9d051b3cef700b30","unresolved":false,"context_lines":[{"line_number":851,"context_line":"    :raises OSError: if fs_path does not exist"},{"line_number":852,"context_line":"    \"\"\""},{"line_number":853,"context_line":"    if isinstance(fs_path_or_fd, int):"},{"line_number":854,"context_line":"        st \u003d os.fstatvfs(fs_path_or_fd)"},{"line_number":855,"context_line":"    else:"},{"line_number":856,"context_line":"        st \u003d os.statvfs(fs_path_or_fd)"},{"line_number":857,"context_line":"    free_bytes \u003d st.f_frsize * st.f_bavail"}],"source_content_type":"text/x-python","patch_set":5,"id":"375761a2_f606b24d","line":854,"in_reply_to":"e1d48892_3d5d5fe9","updated":"2023-10-02 18:52:07.000000000","message":"Done","commit_id":"7c487bae9fdfcba0e14cb667339c7f208fb03a98"}],"swift/obj/diskfile.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"c9845cb657ee0c1dcb8e02c2baf8c1d622627d8a","unresolved":true,"context_lines":[{"line_number":1879,"context_line":"                    self._fd,"},{"line_number":1880,"context_line":"                    self.manager.fallocate_reserve,"},{"line_number":1881,"context_line":"                    self.manager.fallocate_is_percent"},{"line_number":1882,"context_line":"            ):"},{"line_number":1883,"context_line":"                raise DiskFileNoSpace()"},{"line_number":1884,"context_line":"        return self"},{"line_number":1885,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"1f78bd0d_99129e1f","line":1882,"updated":"2023-10-02 19:37:06.000000000","message":"so this adds a new check using new configs\n\nexcept the configs aren\u0027t new - the already exist in [DEFAULT] and get processed in common.wsgi\n\nwe\u0027er just re-using them here explicitly to catch a new edge case - nice.","commit_id":"d31a54a65c186550a99bb985f056c071690a3939"}],"swift/obj/server.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"3f3cf966c914adc387e1c7f7451beceb18539b89","unresolved":true,"context_lines":[{"line_number":208,"context_line":"        # TODO: find a way to enable similar functionality in py3"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"        self.fallocate_reserve, self.fallocate_is_percent \u003d \\"},{"line_number":211,"context_line":"            config_fallocate_value(conf.get(\u0027fallocate_reserve\u0027, \u00271%\u0027))"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"        # Provide further setup specific to an object server implementation."},{"line_number":214,"context_line":"        self.setup(conf)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5c97c251_aa9c1af9","line":211,"updated":"2023-08-15 22:55:39.000000000","message":"I guess diskfile\u0027s fallocate call normally these configured via load_wsgi\u0027s global patching based on the [DEFAULT] section or something?\n\nOr maybe replicator/reconstructor and load_daemon guys don\u0027t ever really do any writes so it doesn\u0027t matter if the potentially different values are handled consistently across config sections.","commit_id":"de584798e57a979af6831a374416b68c1a92b0c7"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"3d3eeb90bfb608a5875846374e472807fa88f200","unresolved":true,"context_lines":[{"line_number":208,"context_line":"        # TODO: find a way to enable similar functionality in py3"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"        self.fallocate_reserve, self.fallocate_is_percent \u003d \\"},{"line_number":211,"context_line":"            config_fallocate_value(conf.get(\u0027fallocate_reserve\u0027, \u00271%\u0027))"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"        # Provide further setup specific to an object server implementation."},{"line_number":214,"context_line":"        self.setup(conf)"}],"source_content_type":"text/x-python","patch_set":2,"id":"8b57335d_171a1bbd","line":211,"in_reply_to":"5c97c251_aa9c1af9","updated":"2023-08-16 05:03:13.000000000","message":"Yeah, looking at it, I don\u0027t understand why we\u0027ve got the config loading in `swift.common.daemon` at all -- any truly new diskfiles should only be created through the server...\n\nMight make a difference for account/container, though -- in particular, thinking about creating reconciler or shard DBs.","commit_id":"de584798e57a979af6831a374416b68c1a92b0c7"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"7d8449074ee857a3340128e0b86bb893e0508f75","unresolved":true,"context_lines":[{"line_number":1037,"context_line":"            request, device, partition, account, container, obj, policy)"},{"line_number":1038,"context_line":"        writer \u003d disk_file.writer(size\u003dfsize)"},{"line_number":1039,"context_line":"        try:"},{"line_number":1040,"context_line":"            if fsize is None and self.fallocate_reserve and \\"},{"line_number":1041,"context_line":"                    not fs_has_free_space("},{"line_number":1042,"context_line":"                        self._diskfile_router[policy].get_dev_path(device),"},{"line_number":1043,"context_line":"                        self.fallocate_reserve, self.fallocate_is_percent):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9bff5b40_c41067d7","line":1040,"range":{"start_line":1040,"start_character":29,"end_line":1040,"end_character":55},"updated":"2023-08-21 17:54:10.000000000","message":"Note that this bit is a little sneaky -- I only really included it as a way to avoid an `AttributeError` with the in-memory object-server 😕","commit_id":"de584798e57a979af6831a374416b68c1a92b0c7"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"3f3cf966c914adc387e1c7f7451beceb18539b89","unresolved":true,"context_lines":[{"line_number":1043,"context_line":"                        self.fallocate_reserve, self.fallocate_is_percent):"},{"line_number":1044,"context_line":"                # Note: if fsize is *not* None, this gets checked when"},{"line_number":1045,"context_line":"                # we open the diskfile in _stage_obj_data"},{"line_number":1046,"context_line":"                raise DiskFileNoSpace"},{"line_number":1047,"context_line":"            obj_input \u003d request.environ[\u0027wsgi.input\u0027]"},{"line_number":1048,"context_line":"            obj_input, multi_stage_mime_state \u003d \\"},{"line_number":1049,"context_line":"                self._do_multi_stage_mime_continue_headers(request, obj_input)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1bd67c91_66daf0ee","line":1046,"updated":"2023-08-15 22:55:39.000000000","message":"is it really the same thing to `raise ExceptionClass` vs `raise ExceptionClass()` - i\u0027m not up-to-speed on all the modern python3 base classes and exception handling.","commit_id":"de584798e57a979af6831a374416b68c1a92b0c7"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"3d3eeb90bfb608a5875846374e472807fa88f200","unresolved":true,"context_lines":[{"line_number":1043,"context_line":"                        self.fallocate_reserve, self.fallocate_is_percent):"},{"line_number":1044,"context_line":"                # Note: if fsize is *not* None, this gets checked when"},{"line_number":1045,"context_line":"                # we open the diskfile in _stage_obj_data"},{"line_number":1046,"context_line":"                raise DiskFileNoSpace"},{"line_number":1047,"context_line":"            obj_input \u003d request.environ[\u0027wsgi.input\u0027]"},{"line_number":1048,"context_line":"            obj_input, multi_stage_mime_state \u003d \\"},{"line_number":1049,"context_line":"                self._do_multi_stage_mime_continue_headers(request, obj_input)"}],"source_content_type":"text/x-python","patch_set":2,"id":"e7202a10_7868a2d4","line":1046,"in_reply_to":"1bd67c91_66daf0ee","updated":"2023-08-16 05:03:13.000000000","message":"From https://docs.python.org/3/tutorial/errors.html#raising-exceptions\n\n\u003e The sole argument to `raise` indicates the exception to be raised. This must be either an exception instance or an exception class (a class that derives from `BaseException`, such as `Exception` or one of its subclasses). If an exception class is passed, it will be implicitly instantiated by calling its constructor with no arguments:\n\u003e\n\u003e `raise ValueError  # shorthand for \u0027raise ValueError()\u0027`\n\n\n\nThis isn\u0027t new, though; goes back to at least the py2 days: https://docs.python.org/2/tutorial/errors.html#raising-exceptions","commit_id":"de584798e57a979af6831a374416b68c1a92b0c7"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"d15818762967c30536f637b9b9d15cd83075d7ee","unresolved":true,"context_lines":[{"line_number":1041,"context_line":"                    not fs_has_free_space("},{"line_number":1042,"context_line":"                        self._diskfile_router[policy].get_dev_path(device),"},{"line_number":1043,"context_line":"                        self.fallocate_reserve, self.fallocate_is_percent):"},{"line_number":1044,"context_line":"                # Note: if fsize is *not* None, this gets checked when"},{"line_number":1045,"context_line":"                # we open the diskfile in _stage_obj_data"},{"line_number":1046,"context_line":"                raise DiskFileNoSpace"},{"line_number":1047,"context_line":"            obj_input \u003d request.environ[\u0027wsgi.input\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"e53b8e9a_be5a9e54","line":1044,"range":{"start_line":1044,"start_character":18,"end_line":1044,"end_character":46},"updated":"2023-08-21 13:21:45.000000000","message":"is there a reason why we cannot do this check (fsize is None) in the DiskfileWriter.open() as well?","commit_id":"6835b968c9b988cbba09d7d46647ef7e24b9a4e2"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"7d8449074ee857a3340128e0b86bb893e0508f75","unresolved":true,"context_lines":[{"line_number":1041,"context_line":"                    not fs_has_free_space("},{"line_number":1042,"context_line":"                        self._diskfile_router[policy].get_dev_path(device),"},{"line_number":1043,"context_line":"                        self.fallocate_reserve, self.fallocate_is_percent):"},{"line_number":1044,"context_line":"                # Note: if fsize is *not* None, this gets checked when"},{"line_number":1045,"context_line":"                # we open the diskfile in _stage_obj_data"},{"line_number":1046,"context_line":"                raise DiskFileNoSpace"},{"line_number":1047,"context_line":"            obj_input \u003d request.environ[\u0027wsgi.input\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"f06bd058_213dd495","line":1044,"range":{"start_line":1044,"start_character":18,"end_line":1044,"end_character":46},"in_reply_to":"e53b8e9a_be5a9e54","updated":"2023-08-21 17:54:10.000000000","message":"It would block DELETEs with `Transfer-Encoding: chunked`. If a client sends a request like\n```\nDELETE /v1/AUTH_test/c/o3 HTTP/1.1\nHost: saio:8090\nUser-Agent: curl/7.81.0\nAccept: */*\nTransfer-Encoding: chunked\nExpect: 100-continue\n```\nit comes down to the object server like\n```\nDELETE /sdb3/12/AUTH_test/c/o3 HTTP/1.1\nAccept-Encoding: identity\nX-Backend-Storage-Policy-Index: 0\nHost: saio:8090\nUser-Agent: proxy-server 102556\nAccept: */*\nTransfer-Encoding: chunked\nExpect: 100-continue\nX-Trans-Id: tx5c410875d875424e9c888-0064e38a4f\nX-Timestamp: 1692633679.62025\nContent-Type: \nConnection: close\nReferer: DELETE http://saio:8090/v1/AUTH_test/c/o3\nX-Container-Partition: 0\nX-Container-Host: 127.0.0.3:6031\nX-Container-Device: sdb3\nX-Backend-Clean-Expiring-Object-Queue: f\n```\nI.e., `self._size` would be `None` -- I guess we could explicitly make it zero in `DELETE()` (maybe I\u0027ll put together a follow-up to explore it), but it doesn\u0027t seem obvious to me which set of special-casing would be preferable.","commit_id":"6835b968c9b988cbba09d7d46647ef7e24b9a4e2"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"7e248d87cf016e8150beca746f921e23ff9e8ee8","unresolved":true,"context_lines":[{"line_number":1041,"context_line":"                    not fs_has_free_space("},{"line_number":1042,"context_line":"                        self._diskfile_router[policy].get_dev_path(device),"},{"line_number":1043,"context_line":"                        self.fallocate_reserve, self.fallocate_is_percent):"},{"line_number":1044,"context_line":"                # Note: if fsize is *not* None, this gets checked when"},{"line_number":1045,"context_line":"                # we open the diskfile in _stage_obj_data"},{"line_number":1046,"context_line":"                raise DiskFileNoSpace"},{"line_number":1047,"context_line":"            obj_input \u003d request.environ[\u0027wsgi.input\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"92a4e534_c1125bd5","line":1044,"range":{"start_line":1044,"start_character":18,"end_line":1044,"end_character":46},"in_reply_to":"f06bd058_213dd495","updated":"2023-08-21 18:44:24.000000000","message":"Heh -- actually, the `Transfer-Encoding` has nothing to do with `self._size` being `None` during a `DELETE` -- we were just letting the default param value through, despite knowing it would result in a zero-byte file! See https://github.com/openstack/swift/blob/2.31.1/swift/obj/diskfile.py#L3032 and https://github.com/openstack/swift/blob/2.31.1/swift/obj/diskfile.py#L2978\n\nAnd maybe pushing `fs_has_free_space` down into diskfile in https://review.opendev.org/c/openstack/swift/+/892169 isn\u0027t so bad -- it borrows a few ideas from https://review.opendev.org/c/openstack/swift/+/891356, which is probably a good sign -- see what you think. I\u0027m still not sure which of the two has the clearer logic for when there\u0027s a reserve-check in place, though.","commit_id":"6835b968c9b988cbba09d7d46647ef7e24b9a4e2"}],"test/unit/obj/test_server.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"3f3cf966c914adc387e1c7f7451beceb18539b89","unresolved":true,"context_lines":[{"line_number":7794,"context_line":"                return b\u0027\u0027"},{"line_number":7795,"context_line":""},{"line_number":7796,"context_line":"        with mock.patch.object(object_server, \u0027fs_has_free_space\u0027,"},{"line_number":7797,"context_line":"                               lambda *a: False):"},{"line_number":7798,"context_line":"            timestamp \u003d normalize_timestamp(time())"},{"line_number":7799,"context_line":"            body_reader \u003d IgnoredBody()"},{"line_number":7800,"context_line":"            req \u003d Request.blank("}],"source_content_type":"text/x-python","patch_set":2,"id":"ce56e46b_ecb47f56","line":7797,"updated":"2023-08-15 22:55:39.000000000","message":"damn right has free space \u003d false\n\nor... at least not *enough* free space","commit_id":"de584798e57a979af6831a374416b68c1a92b0c7"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"7b1ae87d7bcf2efc078b11f89fabaab506d2a165","unresolved":true,"context_lines":[{"line_number":7794,"context_line":"                return b\u0027\u0027"},{"line_number":7795,"context_line":""},{"line_number":7796,"context_line":"        with mock.patch.object(diskfile, \u0027fs_has_free_space\u0027,"},{"line_number":7797,"context_line":"                               lambda *a: False):"},{"line_number":7798,"context_line":"            timestamp \u003d normalize_timestamp(time())"},{"line_number":7799,"context_line":"            body_reader \u003d IgnoredBody()"},{"line_number":7800,"context_line":"            req \u003d Request.blank("}],"source_content_type":"text/x-python","patch_set":5,"id":"7ceb8054_1d11a244","line":7797,"range":{"start_line":7797,"start_character":31,"end_line":7797,"end_character":47},"updated":"2023-09-28 14:33:56.000000000","message":"can\u0027t this just be ``return_value\u003dFalse`` ?","commit_id":"7c487bae9fdfcba0e14cb667339c7f208fb03a98"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4b4de8039f20475bcd65183b9d051b3cef700b30","unresolved":false,"context_lines":[{"line_number":7794,"context_line":"                return b\u0027\u0027"},{"line_number":7795,"context_line":""},{"line_number":7796,"context_line":"        with mock.patch.object(diskfile, \u0027fs_has_free_space\u0027,"},{"line_number":7797,"context_line":"                               lambda *a: False):"},{"line_number":7798,"context_line":"            timestamp \u003d normalize_timestamp(time())"},{"line_number":7799,"context_line":"            body_reader \u003d IgnoredBody()"},{"line_number":7800,"context_line":"            req \u003d Request.blank("}],"source_content_type":"text/x-python","patch_set":5,"id":"238ff263_87fb91a0","line":7797,"range":{"start_line":7797,"start_character":31,"end_line":7797,"end_character":47},"in_reply_to":"7ceb8054_1d11a244","updated":"2023-10-02 18:52:07.000000000","message":"Good point -- I forget why I\u0027d phrased it that way...","commit_id":"7c487bae9fdfcba0e14cb667339c7f208fb03a98"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"7b1ae87d7bcf2efc078b11f89fabaab506d2a165","unresolved":true,"context_lines":[{"line_number":7840,"context_line":"                environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027DELETE\u0027,"},{"line_number":7841,"context_line":"                         \u0027wsgi.input\u0027: body_reader},"},{"line_number":7842,"context_line":"                headers\u003d{\u0027X-Timestamp\u0027: timestamp,"},{"line_number":7843,"context_line":"                         \u0027Transfer-Encoding\u0027: \u0027chunked\u0027,"},{"line_number":7844,"context_line":"                         \u0027Content-Type\u0027: \u0027application/octet-stream\u0027,"},{"line_number":7845,"context_line":"                         \u0027Expect\u0027: \u0027100-continue\u0027})"},{"line_number":7846,"context_line":"            resp \u003d req.get_response(self.object_controller)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9f06dc7c_629070a0","line":7843,"range":{"start_line":7843,"start_character":26,"end_line":7843,"end_character":56},"updated":"2023-09-28 14:33:56.000000000","message":"chunked or not DELETEs are allowed, correct?","commit_id":"7c487bae9fdfcba0e14cb667339c7f208fb03a98"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4b4de8039f20475bcd65183b9d051b3cef700b30","unresolved":false,"context_lines":[{"line_number":7840,"context_line":"                environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027DELETE\u0027,"},{"line_number":7841,"context_line":"                         \u0027wsgi.input\u0027: body_reader},"},{"line_number":7842,"context_line":"                headers\u003d{\u0027X-Timestamp\u0027: timestamp,"},{"line_number":7843,"context_line":"                         \u0027Transfer-Encoding\u0027: \u0027chunked\u0027,"},{"line_number":7844,"context_line":"                         \u0027Content-Type\u0027: \u0027application/octet-stream\u0027,"},{"line_number":7845,"context_line":"                         \u0027Expect\u0027: \u0027100-continue\u0027})"},{"line_number":7846,"context_line":"            resp \u003d req.get_response(self.object_controller)"}],"source_content_type":"text/x-python","patch_set":5,"id":"159dab9a_0ada1d2b","line":7843,"range":{"start_line":7843,"start_character":26,"end_line":7843,"end_character":56},"in_reply_to":"9f06dc7c_629070a0","updated":"2023-10-02 18:52:07.000000000","message":"Correct -- added a test for `Content-Length: 0`, too.","commit_id":"7c487bae9fdfcba0e14cb667339c7f208fb03a98"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"7b1ae87d7bcf2efc078b11f89fabaab506d2a165","unresolved":true,"context_lines":[{"line_number":7845,"context_line":"                         \u0027Expect\u0027: \u0027100-continue\u0027})"},{"line_number":7846,"context_line":"            resp \u003d req.get_response(self.object_controller)"},{"line_number":7847,"context_line":"            self.assertEqual(resp.status_int, 204)"},{"line_number":7848,"context_line":"            self.assertFalse(body_reader.read_called)"},{"line_number":7849,"context_line":""},{"line_number":7850,"context_line":"    def test_global_conf_callback_does_nothing(self):"},{"line_number":7851,"context_line":"        preloaded_app_conf \u003d {}"}],"source_content_type":"text/x-python","patch_set":5,"id":"21596979_f783bdcb","line":7848,"updated":"2023-09-28 14:33:56.000000000","message":"needs test for POST with full drive","commit_id":"7c487bae9fdfcba0e14cb667339c7f208fb03a98"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4b4de8039f20475bcd65183b9d051b3cef700b30","unresolved":false,"context_lines":[{"line_number":7845,"context_line":"                         \u0027Expect\u0027: \u0027100-continue\u0027})"},{"line_number":7846,"context_line":"            resp \u003d req.get_response(self.object_controller)"},{"line_number":7847,"context_line":"            self.assertEqual(resp.status_int, 204)"},{"line_number":7848,"context_line":"            self.assertFalse(body_reader.read_called)"},{"line_number":7849,"context_line":""},{"line_number":7850,"context_line":"    def test_global_conf_callback_does_nothing(self):"},{"line_number":7851,"context_line":"        preloaded_app_conf \u003d {}"}],"source_content_type":"text/x-python","patch_set":5,"id":"9b894a59_fc68b287","line":7848,"in_reply_to":"21596979_f783bdcb","updated":"2023-10-02 18:52:07.000000000","message":"Done","commit_id":"7c487bae9fdfcba0e14cb667339c7f208fb03a98"}]}
