)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"0597fd71f836fe69d16c9c0c39572afa69b572e5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"377e82e0_1d4e75ae","updated":"2022-09-21 18:38:54.000000000","message":"this needs a rebase\n\nI think the module global configuration is a bit of a hack - with no-lock-logging https://review.opendev.org/c/openstack/swift/+/840232 we used swift.env to test in staging and plan to rip it out","commit_id":"d34645aecef2df2028af22cd14d87a7e6a17b828"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"e80a9864bf1df99b7d5089d42a6161e88f88c47d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"3096e25a_88410d7e","updated":"2023-01-12 06:10:47.000000000","message":"Where is this at Tim? It\u0027s been running in prod, is it good? Should we land it?","commit_id":"3a2c2e67d1a4ad266a9b54e88c19e8e95fdf4cef"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"a6a43694dde223596fac607a12b13d03cfe2f82f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"682aac7d_70ded723","updated":"2023-01-13 14:27:44.000000000","message":"i\u0027m not sure if we\u0027re carrying it, but i don\u0027t think we ever turned it on\n\nI think ash rolled out the no lock logging and it used an env var - so if we want to run this experiment on some prod nodes I think we want to refactor to use global env var?","commit_id":"3a2c2e67d1a4ad266a9b54e88c19e8e95fdf4cef"}],"etc/account-server.conf-sample":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"ce55da903e3a6febdae7062491a4a12609cbb29d","unresolved":true,"context_lines":[{"line_number":79,"context_line":"# ionice_class \u003d"},{"line_number":80,"context_line":"# ionice_priority \u003d"},{"line_number":81,"context_line":"#"},{"line_number":82,"context_line":"# strict_locks \u003d true"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"[pipeline:main]"},{"line_number":85,"context_line":"pipeline \u003d healthcheck recon account-server"}],"source_content_type":"application/octet-stream","patch_set":5,"id":"a00e9c74_f4b328ba","line":82,"range":{"start_line":82,"start_character":17,"end_line":82,"end_character":21},"updated":"2021-05-24 10:14:37.000000000","message":"didn\u0027t we decide to make the default False?","commit_id":"3bb0ea26900cd972e547dc3b830a729f0264a5ef"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"19ed637553d76dd3a40ecfa3a368e7a1b1e2b302","unresolved":false,"context_lines":[{"line_number":79,"context_line":"# ionice_class \u003d"},{"line_number":80,"context_line":"# ionice_priority \u003d"},{"line_number":81,"context_line":"#"},{"line_number":82,"context_line":"# strict_locks \u003d true"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"[pipeline:main]"},{"line_number":85,"context_line":"pipeline \u003d healthcheck recon account-server"}],"source_content_type":"application/octet-stream","patch_set":5,"id":"8762398e_0b094c6c","line":82,"range":{"start_line":82,"start_character":17,"end_line":82,"end_character":21},"in_reply_to":"a00e9c74_f4b328ba","updated":"2021-05-25 22:21:20.000000000","message":"Done","commit_id":"3bb0ea26900cd972e547dc3b830a729f0264a5ef"}],"swift/common/constraints.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"ced21eb852a3424da028b2a13a942cc3cfdb6312","unresolved":true,"context_lines":[{"line_number":21,"context_line":"from six.moves.configparser import ConfigParser, NoSectionError, NoOptionError"},{"line_number":22,"context_line":"from six.moves import urllib"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"from swift.common import utils, exceptions"},{"line_number":25,"context_line":"from swift.common.swob import HTTPBadRequest, HTTPLengthRequired, \\"},{"line_number":26,"context_line":"    HTTPRequestEntityTooLarge, HTTPPreconditionFailed, HTTPNotImplemented, \\"},{"line_number":27,"context_line":"    HTTPException, wsgi_to_str, wsgi_to_bytes"}],"source_content_type":"text/x-python","patch_set":4,"id":"4b35bac0_8ae6d01b","line":24,"range":{"start_line":24,"start_character":25,"end_line":24,"end_character":30},"updated":"2021-05-19 22:13:37.000000000","message":"hmmm...","commit_id":"c8be7ece84b2f7fdd3a7919e8e981f734fa45de1"}],"swift/common/utils.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"7e171cd2e1868b9fcd0ec90e0335651d1fe98b04","unresolved":true,"context_lines":[{"line_number":2902,"context_line":"                time_slept +\u003d sleep_time"},{"line_number":2903,"context_line":"            try:"},{"line_number":2904,"context_line":"                s \u003d os.stat(fd_paths[fds.index(locked_fd)])"},{"line_number":2905,"context_line":"                if s.st_ino !\u003d os.fstat(locked_fd).st_ino:"},{"line_number":2906,"context_line":"                    raise timeout_class(timeout, lockpath)"},{"line_number":2907,"context_line":"            except OSError as e:"},{"line_number":2908,"context_line":"                if e.errno \u003d\u003d errno.ENOENT:"}],"source_content_type":"text/x-python","patch_set":1,"id":"2009fbf4_b0f27553","line":2905,"updated":"2021-05-12 17:15:58.000000000","message":"I\u0027m not thrilled about the two extra stats, but given how this whole thing can be expected to block anyway... *shrug*","commit_id":"90bcca469ac9fb86767bf4025fd5e5b8cca1230c"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"09cec86fc178476f6795e3e2933007d8b1e7614f","unresolved":true,"context_lines":[{"line_number":2872,"context_line":"    :param name: A string to distinguishes different type of locks in a"},{"line_number":2873,"context_line":"        directory"},{"line_number":2874,"context_line":"    :raises TypeError: if limit is not an int."},{"line_number":2875,"context_line":"    :raises ValueError: if limit is less than 1."},{"line_number":2876,"context_line":"    \"\"\""},{"line_number":2877,"context_line":"    if limit \u003c 1:"},{"line_number":2878,"context_line":"        raise ValueError(\u0027limit must be greater than or equal to 1\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"c134f147_e8bd4639","line":2875,"updated":"2021-05-17 15:58:04.000000000","message":"also raises IOError/OSError and LockTimeout (pre-existing omissions)","commit_id":"e7419dc8f32191591de0e247d80bab159d443d32"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"09cec86fc178476f6795e3e2933007d8b1e7614f","unresolved":true,"context_lines":[{"line_number":2885,"context_line":"    fd_paths \u003d [get_zero_indexed_base_string(lockpath, i)"},{"line_number":2886,"context_line":"                for i in range(limit)]"},{"line_number":2887,"context_line":"    fds \u003d [os.open(p, os.O_WRONLY | os.O_CREAT)"},{"line_number":2888,"context_line":"           for p in fd_paths]"},{"line_number":2889,"context_line":"    sleep_time \u003d 0.01"},{"line_number":2890,"context_line":"    slower_sleep_time \u003d max(timeout * 0.01, sleep_time)"},{"line_number":2891,"context_line":"    slowdown_at \u003d timeout * 0.01"}],"source_content_type":"text/x-python","patch_set":3,"id":"2313cbb2_3bc3cf96","line":2888,"updated":"2021-05-17 15:58:04.000000000","message":"the window of vulnerability would be smaller if we opened and closed in the loop while below rather than holding fds","commit_id":"e7419dc8f32191591de0e247d80bab159d443d32"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"19ed637553d76dd3a40ecfa3a368e7a1b1e2b302","unresolved":true,"context_lines":[{"line_number":2885,"context_line":"    fd_paths \u003d [get_zero_indexed_base_string(lockpath, i)"},{"line_number":2886,"context_line":"                for i in range(limit)]"},{"line_number":2887,"context_line":"    fds \u003d [os.open(p, os.O_WRONLY | os.O_CREAT)"},{"line_number":2888,"context_line":"           for p in fd_paths]"},{"line_number":2889,"context_line":"    sleep_time \u003d 0.01"},{"line_number":2890,"context_line":"    slower_sleep_time \u003d max(timeout * 0.01, sleep_time)"},{"line_number":2891,"context_line":"    slowdown_at \u003d timeout * 0.01"}],"source_content_type":"text/x-python","patch_set":3,"id":"312a796c_22b7ddbb","line":2888,"in_reply_to":"2313cbb2_3bc3cf96","updated":"2021-05-25 22:21:20.000000000","message":"I suspect (but haven\u0027t measured!) that the extra open()s would be worse than the extra stat()s.","commit_id":"e7419dc8f32191591de0e247d80bab159d443d32"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"09cec86fc178476f6795e3e2933007d8b1e7614f","unresolved":true,"context_lines":[{"line_number":2901,"context_line":"                sleep(sleep_time)"},{"line_number":2902,"context_line":"                time_slept +\u003d sleep_time"},{"line_number":2903,"context_line":"            try:"},{"line_number":2904,"context_line":"                s \u003d os.stat(fd_paths[fds.index(locked_fd)])"},{"line_number":2905,"context_line":"                if s.st_ino !\u003d os.fstat(locked_fd).st_ino:"},{"line_number":2906,"context_line":"                    raise timeout_class(timeout, lockpath)"},{"line_number":2907,"context_line":"            except OSError as e:"}],"source_content_type":"text/x-python","patch_set":3,"id":"57d8e508_45959a29","line":2904,"range":{"start_line":2904,"start_character":28,"end_line":2904,"end_character":58},"updated":"2021-05-17 15:58:04.000000000","message":"could use a dict to map fds to fd_paths...or is the ordering significant?","commit_id":"e7419dc8f32191591de0e247d80bab159d443d32"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"19ed637553d76dd3a40ecfa3a368e7a1b1e2b302","unresolved":true,"context_lines":[{"line_number":2901,"context_line":"                sleep(sleep_time)"},{"line_number":2902,"context_line":"                time_slept +\u003d sleep_time"},{"line_number":2903,"context_line":"            try:"},{"line_number":2904,"context_line":"                s \u003d os.stat(fd_paths[fds.index(locked_fd)])"},{"line_number":2905,"context_line":"                if s.st_ino !\u003d os.fstat(locked_fd).st_ino:"},{"line_number":2906,"context_line":"                    raise timeout_class(timeout, lockpath)"},{"line_number":2907,"context_line":"            except OSError as e:"}],"source_content_type":"text/x-python","patch_set":3,"id":"cef6e490_1ff71d78","line":2904,"range":{"start_line":2904,"start_character":28,"end_line":2904,"end_character":58},"in_reply_to":"57d8e508_45959a29","updated":"2021-05-25 22:21:20.000000000","message":"Not really... sure, may as well switch to a dict. We\u0027re creating all the .lock-N files anyway.","commit_id":"e7419dc8f32191591de0e247d80bab159d443d32"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"ced21eb852a3424da028b2a13a942cc3cfdb6312","unresolved":true,"context_lines":[{"line_number":85,"context_line":"from six.moves import UserList"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"from swift import gettext_ as _"},{"line_number":88,"context_line":"import swift.common.constraints"},{"line_number":89,"context_line":"import swift.common.exceptions"},{"line_number":90,"context_line":"from swift.common.http import is_server_error"},{"line_number":91,"context_line":"from swift.common.header_key_dict import HeaderKeyDict"}],"source_content_type":"text/x-python","patch_set":4,"id":"94a171cb_f986be4d","line":88,"updated":"2021-05-19 22:13:37.000000000","message":"OK, I guess to avoid circular imports, the \"constant\" is going to have to live here in utils.","commit_id":"c8be7ece84b2f7fdd3a7919e8e981f734fa45de1"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"ce55da903e3a6febdae7062491a4a12609cbb29d","unresolved":true,"context_lines":[{"line_number":2912,"context_line":"                except OSError as e:"},{"line_number":2913,"context_line":"                    if e.errno \u003d\u003d errno.ENOENT:"},{"line_number":2914,"context_line":"                        raise timeout_class(timeout, lockpath)"},{"line_number":2915,"context_line":"                    raise"},{"line_number":2916,"context_line":"        yield True"},{"line_number":2917,"context_line":"    finally:"},{"line_number":2918,"context_line":"        for fd in fds:"}],"source_content_type":"text/x-python","patch_set":5,"id":"ac9ad4c7_7142483b","line":2915,"range":{"start_line":2915,"start_character":20,"end_line":2915,"end_character":25},"updated":"2021-05-24 10:14:37.000000000","message":"I couldn\u0027t get a test to fail by deleting line 2915","commit_id":"3bb0ea26900cd972e547dc3b830a729f0264a5ef"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"ce55da903e3a6febdae7062491a4a12609cbb29d","unresolved":true,"context_lines":[{"line_number":2912,"context_line":"                except OSError as e:"},{"line_number":2913,"context_line":"                    if e.errno \u003d\u003d errno.ENOENT:"},{"line_number":2914,"context_line":"                        raise timeout_class(timeout, lockpath)"},{"line_number":2915,"context_line":"                    raise"},{"line_number":2916,"context_line":"        yield True"},{"line_number":2917,"context_line":"    finally:"},{"line_number":2918,"context_line":"        for fd in fds:"}],"source_content_type":"text/x-python","patch_set":5,"id":"d5ef0b6a_ae115f7e","line":2915,"updated":"2021-05-24 10:14:37.000000000","message":"I had a few comments on an earlier version https://review.opendev.org/c/openstack/swift/+/791022/3/swift/common/utils.py\n\nstill curious about use of two lists (fds and fd_paths) vs a dict","commit_id":"3bb0ea26900cd972e547dc3b830a729f0264a5ef"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"19ed637553d76dd3a40ecfa3a368e7a1b1e2b302","unresolved":false,"context_lines":[{"line_number":2912,"context_line":"                except OSError as e:"},{"line_number":2913,"context_line":"                    if e.errno \u003d\u003d errno.ENOENT:"},{"line_number":2914,"context_line":"                        raise timeout_class(timeout, lockpath)"},{"line_number":2915,"context_line":"                    raise"},{"line_number":2916,"context_line":"        yield True"},{"line_number":2917,"context_line":"    finally:"},{"line_number":2918,"context_line":"        for fd in fds:"}],"source_content_type":"text/x-python","patch_set":5,"id":"6aeea4b2_c23a1399","line":2915,"range":{"start_line":2915,"start_character":20,"end_line":2915,"end_character":25},"in_reply_to":"ac9ad4c7_7142483b","updated":"2021-05-25 22:21:20.000000000","message":"Done","commit_id":"3bb0ea26900cd972e547dc3b830a729f0264a5ef"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"19ed637553d76dd3a40ecfa3a368e7a1b1e2b302","unresolved":false,"context_lines":[{"line_number":2912,"context_line":"                except OSError as e:"},{"line_number":2913,"context_line":"                    if e.errno \u003d\u003d errno.ENOENT:"},{"line_number":2914,"context_line":"                        raise timeout_class(timeout, lockpath)"},{"line_number":2915,"context_line":"                    raise"},{"line_number":2916,"context_line":"        yield True"},{"line_number":2917,"context_line":"    finally:"},{"line_number":2918,"context_line":"        for fd in fds:"}],"source_content_type":"text/x-python","patch_set":5,"id":"2fb038b1_870d2b07","line":2915,"in_reply_to":"d5ef0b6a_ae115f7e","updated":"2021-05-25 22:21:20.000000000","message":"Done","commit_id":"3bb0ea26900cd972e547dc3b830a729f0264a5ef"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"0597fd71f836fe69d16c9c0c39572afa69b572e5","unresolved":true,"context_lines":[{"line_number":128,"context_line":""},{"line_number":129,"context_line":"# Note that this may be overridden by a strict_locks config option"},{"line_number":130,"context_line":"# (see swift/common/wsgi.py and swift/common/daemon.py)"},{"line_number":131,"context_line":"STRICT_LOCKS \u003d False"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"# /usr/include/x86_64-linux-gnu/asm/unistd_64.h defines syscalls there"}],"source_content_type":"text/x-python","patch_set":7,"id":"7935c7a4_97209942","line":131,"updated":"2022-09-21 18:38:54.000000000","message":"I don\u0027t love that we do this configuration with a module global - that\u0027s un-usual (maybe HASH_PATH is an exception?)","commit_id":"d34645aecef2df2028af22cd14d87a7e6a17b828"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"0597fd71f836fe69d16c9c0c39572afa69b572e5","unresolved":true,"context_lines":[{"line_number":2914,"context_line":"            if STRICT_LOCKS:"},{"line_number":2915,"context_line":"                try:"},{"line_number":2916,"context_line":"                    s \u003d os.stat(fd_paths[locked_fd])"},{"line_number":2917,"context_line":"                    if s.st_ino !\u003d os.fstat(locked_fd).st_ino:"},{"line_number":2918,"context_line":"                        raise timeout_class(timeout, lockpath)"},{"line_number":2919,"context_line":"                except OSError as e:"},{"line_number":2920,"context_line":"                    if e.errno \u003d\u003d errno.ENOENT:"}],"source_content_type":"text/x-python","patch_set":7,"id":"270414f8_823659fd","line":2917,"updated":"2022-09-21 18:38:54.000000000","message":"I don\u0027t think we have to have a relinker going to demonstrate there\u0027s a nominal performance hit here","commit_id":"d34645aecef2df2028af22cd14d87a7e6a17b828"}],"test/unit/obj/test_diskfile.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"ce55da903e3a6febdae7062491a4a12609cbb29d","unresolved":true,"context_lines":[{"line_number":4473,"context_line":"        orig_fstat \u003d os.fstat"},{"line_number":4474,"context_line":""},{"line_number":4475,"context_line":"        def fake_fstat(fd):"},{"line_number":4476,"context_line":"            if \u0027.lock\u0027 in os.readlink(\u0027/proc/self/fd/%d\u0027 % fd):"},{"line_number":4477,"context_line":"                return orig_fstat(fd)"},{"line_number":4478,"context_line":"            raise OSError"},{"line_number":4479,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"692ecdb2_4fd18ae2","line":4476,"range":{"start_line":4476,"start_character":39,"end_line":4476,"end_character":56},"updated":"2021-05-24 10:14:37.000000000","message":"this isn\u0027t portable (breaks on macos)\n\nhow about:\n\n    def test_quarantine_fstat_oserror(self):\n        @contextmanager\n        def fake_lock_path(*args, **kwargs):\n            yield\n\n        with mock.patch(\u0027os.fstat\u0027, side_effect\u003dOSError()), \\\n                mock.patch(\u0027swift.obj.diskfile.lock_path\u0027, fake_lock_path):\n            self.assertRaises(\n                DiskFileQuarantined,\n                self._get_open_disk_file)","commit_id":"3bb0ea26900cd972e547dc3b830a729f0264a5ef"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"19ed637553d76dd3a40ecfa3a368e7a1b1e2b302","unresolved":false,"context_lines":[{"line_number":4473,"context_line":"        orig_fstat \u003d os.fstat"},{"line_number":4474,"context_line":""},{"line_number":4475,"context_line":"        def fake_fstat(fd):"},{"line_number":4476,"context_line":"            if \u0027.lock\u0027 in os.readlink(\u0027/proc/self/fd/%d\u0027 % fd):"},{"line_number":4477,"context_line":"                return orig_fstat(fd)"},{"line_number":4478,"context_line":"            raise OSError"},{"line_number":4479,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"6a860cf3_42422b41","line":4476,"range":{"start_line":4476,"start_character":39,"end_line":4476,"end_character":56},"in_reply_to":"692ecdb2_4fd18ae2","updated":"2021-05-25 22:21:20.000000000","message":"Done","commit_id":"3bb0ea26900cd972e547dc3b830a729f0264a5ef"}]}
