)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"8ecd1ba98f9ca5c01f19a3e2d3eebeb798bd4dd9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"114c4cef_00ab8e83","updated":"2026-08-11 10:38:56.000000000","message":"Following are the test results from a devstack nfs deployment\n\n  ┌─────────────────────────────────────────────┬────────────────────────────────────────────────────────────────┐\n  │                    Test                     │                             Result                             │\n  ├─────────────────────────────────────────────┼────────────────────────────────────────────────────────────────┤\n  │ Cinder volume service starts with patch     │ Pass                                                           │\n  ├─────────────────────────────────────────────┼────────────────────────────────────────────────────────────────┤\n  │ Volume create (triggers _get_capacity_info) │ Pass - status available                                        │\n  ├─────────────────────────────────────────────┼────────────────────────────────────────────────────────────────┤\n  │ Volume extend (triggers space check)        │ Pass - extended 1GB to 2GB                                     │\n  ├─────────────────────────────────────────────┼────────────────────────────────────────────────────────────────┤\n  │ Volume delete                               │ Pass - clean removal                                           │\n  ├─────────────────────────────────────────────┼────────────────────────────────────────────────────────────────┤\n  │ Snapshot creation                           │ Pass                                                           │\n  ├─────────────────────────────────────────────┼────────────────────────────────────────────────────────────────┤\n  │ get_apparent_size matches du output         │ Pass - both report 3264807150 bytes                            │\n  ├─────────────────────────────────────────────┼────────────────────────────────────────────────────────────────┤\n  │ Race condition: files vanishing mid-walk    │ Pass - 4 files vanished, caught by FileNotFoundError, no crash │\n  ├─────────────────────────────────────────────┼────────────────────────────────────────────────────────────────┤\n  │ No errors in cinder-volume logs             │ Pass                                                           │\n  └─────────────────────────────────────────────┴────────────────────────────────────────────────────────────────┘","commit_id":"a32a665450960e4594e27f5c91c0237045e8f505"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"e5830c84177c7d52ee75d6869ec1ba82c3b5ac10","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"7b06ea7d_9db43ebd","updated":"2026-08-11 05:40:00.000000000","message":"recheck tempest-slow-py3 failed, unrelated error","commit_id":"a32a665450960e4594e27f5c91c0237045e8f505"}],"cinder/volume/drivers/nfs.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"79c56050fb015fd4c2017c7eb1a387067cc84de3","unresolved":true,"context_lines":[{"line_number":397,"context_line":""},{"line_number":398,"context_line":"        du, _ \u003d self._execute(\u0027du\u0027, \u0027-sb\u0027, \u0027--apparent-size\u0027, \u0027--exclude\u0027,"},{"line_number":399,"context_line":"                              \u0027*snapshot*\u0027, mount_point,"},{"line_number":400,"context_line":"                              run_as_root\u003dself._execute_as_root)"},{"line_number":401,"context_line":"        total_allocated \u003d float(du.split()[0])"},{"line_number":402,"context_line":"        return total_size, total_available, total_allocated"},{"line_number":403,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"78efcac9_a1304451","side":"PARENT","line":400,"range":{"start_line":400,"start_character":30,"end_line":400,"end_character":63},"updated":"2026-08-04 13:40:59.000000000","message":"This change has dropped the ability to run this as root, needs to leverage privsep?","commit_id":"e3b9582a60a58d6ea630e845bbe5d96c8780fd8c"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"bca749b9674888625454d526fe4b4011bbcb95d6","unresolved":false,"context_lines":[{"line_number":397,"context_line":""},{"line_number":398,"context_line":"        du, _ \u003d self._execute(\u0027du\u0027, \u0027-sb\u0027, \u0027--apparent-size\u0027, \u0027--exclude\u0027,"},{"line_number":399,"context_line":"                              \u0027*snapshot*\u0027, mount_point,"},{"line_number":400,"context_line":"                              run_as_root\u003dself._execute_as_root)"},{"line_number":401,"context_line":"        total_allocated \u003d float(du.split()[0])"},{"line_number":402,"context_line":"        return total_size, total_available, total_allocated"},{"line_number":403,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"6e115a15_e8921480","side":"PARENT","line":400,"range":{"start_line":400,"start_character":30,"end_line":400,"end_character":63},"in_reply_to":"78efcac9_a1304451","updated":"2026-08-05 06:40:13.000000000","message":"Done","commit_id":"e3b9582a60a58d6ea630e845bbe5d96c8780fd8c"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"428dd06d67aa487ab9a99f6b64788df9757c7c80","unresolved":true,"context_lines":[{"line_number":402,"context_line":"    def _get_apparent_size(path: str) -\u003e float:"},{"line_number":403,"context_line":"        total \u003d 0"},{"line_number":404,"context_line":"        for dirpath, dirnames, filenames in os.walk(path):"},{"line_number":405,"context_line":"            dirnames[:] \u003d [d for d in dirnames if \u0027snapshot\u0027 not in d]"},{"line_number":406,"context_line":"            for filename in filenames:"},{"line_number":407,"context_line":"                if \u0027snapshot\u0027 in filename:"},{"line_number":408,"context_line":"                    continue"}],"source_content_type":"text/x-python","patch_set":2,"id":"3008a538_f4d3fe68","line":405,"range":{"start_line":405,"start_character":12,"end_line":405,"end_character":70},"updated":"2026-08-05 06:27:37.000000000","message":"this dirnames doesn\u0027t seem to be used anywhere","commit_id":"cc02a1baa3420eb107107c3365f7208a8329ea81"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"bca749b9674888625454d526fe4b4011bbcb95d6","unresolved":false,"context_lines":[{"line_number":402,"context_line":"    def _get_apparent_size(path: str) -\u003e float:"},{"line_number":403,"context_line":"        total \u003d 0"},{"line_number":404,"context_line":"        for dirpath, dirnames, filenames in os.walk(path):"},{"line_number":405,"context_line":"            dirnames[:] \u003d [d for d in dirnames if \u0027snapshot\u0027 not in d]"},{"line_number":406,"context_line":"            for filename in filenames:"},{"line_number":407,"context_line":"                if \u0027snapshot\u0027 in filename:"},{"line_number":408,"context_line":"                    continue"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f80b833_d52491cb","line":405,"range":{"start_line":405,"start_character":12,"end_line":405,"end_character":70},"in_reply_to":"3008a538_f4d3fe68","updated":"2026-08-05 06:40:13.000000000","message":"This in-place modification of dirnames helps os.walk filter out directories containing *snapshot* keyword and avoids recursing into those directories in further iteration of subdirectories","commit_id":"cc02a1baa3420eb107107c3365f7208a8329ea81"}],"releasenotes/notes/bug-2156897-nfs-du-race.yaml":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"79c56050fb015fd4c2017c7eb1a387067cc84de3","unresolved":true,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    NFS driver `Bug #2156897"},{"line_number":5,"context_line":"    \u003chttps://bugs.launchpad.net/cinder/+bug/2156897\u003e`_: Fixed a race"},{"line_number":6,"context_line":"    condition in capacity calculation where files disappearing from the"},{"line_number":7,"context_line":"    NFS share during a ``du`` scan caused a ``ProcessExecutionError``."},{"line_number":8,"context_line":"    Replaced the shell call with a Python-based directory walk that"},{"line_number":9,"context_line":"    gracefully handles missing files."}],"source_content_type":"text/x-yaml","patch_set":2,"id":"3f154404_a6c5ec0b","line":6,"range":{"start_line":6,"start_character":50,"end_line":6,"end_character":62},"updated":"2026-08-04 13:40:59.000000000","message":"I think this happens due to simultaneous operations happening in the driver (i.e. delete volume) -- would probably be good to specify that instead of it sounding like a vague thing that can just happen.","commit_id":"cc02a1baa3420eb107107c3365f7208a8329ea81"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"bca749b9674888625454d526fe4b4011bbcb95d6","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    NFS driver `Bug #2156897"},{"line_number":5,"context_line":"    \u003chttps://bugs.launchpad.net/cinder/+bug/2156897\u003e`_: Fixed a race"},{"line_number":6,"context_line":"    condition in capacity calculation where files disappearing from the"},{"line_number":7,"context_line":"    NFS share during a ``du`` scan caused a ``ProcessExecutionError``."},{"line_number":8,"context_line":"    Replaced the shell call with a Python-based directory walk that"},{"line_number":9,"context_line":"    gracefully handles missing files."}],"source_content_type":"text/x-yaml","patch_set":2,"id":"f4868e9b_0123afc1","line":6,"range":{"start_line":6,"start_character":50,"end_line":6,"end_character":62},"in_reply_to":"3f154404_a6c5ec0b","updated":"2026-08-05 06:40:13.000000000","message":"Done","commit_id":"cc02a1baa3420eb107107c3365f7208a8329ea81"}]}
