)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"c7b924ff26f5fbd427a058bd1b7636b90c7c50b8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"10b52e84_e1bdf108","updated":"2026-06-18 15:53:45.000000000","message":"Hi Silvan, just a nit for you to consider.","commit_id":"466e7a1895102846b7cc0869edcb7cb5865d3659"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"2fde45b8ddfef53868210d638c094348282e6b35","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"498cca0e_186f06b3","updated":"2026-07-17 15:40:10.000000000","message":"Small patch, release notes, CI.  Always nice to drop dependencies.  LGTM.","commit_id":"86126107df7258f9761fbcf8c1e845f7a1729142"},{"author":{"_account_id":13915,"name":"Silvan Kaiser","email":"silvan@quobyte.com","username":"kaisers"},"change_message_id":"2ed21fc11ad4e895af098ca9b345480bdfc6fba3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"c96560ca_8f87e505","updated":"2026-06-30 12:26:58.000000000","message":"run-Quobyte CI","commit_id":"86126107df7258f9761fbcf8c1e845f7a1729142"},{"author":{"_account_id":13915,"name":"Silvan Kaiser","email":"silvan@quobyte.com","username":"kaisers"},"change_message_id":"360fa46fe51b8511cafe282880cd7d8c3da7036c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"f66c7ef5_ca65a132","updated":"2026-08-17 11:42:28.000000000","message":"Thnx for reviewing","commit_id":"660815fa6872ed374fcbb79fe5fb7c488e57fcfc"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"1765eabac5b386d79e0847c77145a404246e4b33","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"13c9bef0_fb2b9b35","updated":"2026-08-15 05:23:05.000000000","message":"Update LGTM.","commit_id":"660815fa6872ed374fcbb79fe5fb7c488e57fcfc"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"6a83c90c1f264e4463065a1d9c2d2006eba4999f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"03cdd7d9_eedda45d","updated":"2026-08-19 23:07:28.000000000","message":"I think Yuval makes a good point.\n\nI don\u0027t want to enforce this with a -1 since it\u0027s essentially existing code, but please look at the code to see if there\u0027s a fix that you can be confident in.\n\n-1 is to get your attention, and because Zuul is failing now (though, it appears it might be test machine slowness that caused it).","commit_id":"ede29722bb81ceb2b168d471c3f483ccc4909530"},{"author":{"_account_id":13915,"name":"Silvan Kaiser","email":"silvan@quobyte.com","username":"kaisers"},"change_message_id":"e110ff196c80655b98e11dbd24121f16689e0f37","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"e1a51f16_456a525e","updated":"2026-08-18 14:06:12.000000000","message":"recheck a test failed on a busy device blocking a command.","commit_id":"ede29722bb81ceb2b168d471c3f483ccc4909530"},{"author":{"_account_id":33612,"name":"yuval","email":"yuval@lightbitslabs.com","username":"yuval"},"change_message_id":"d7103380d8578b971a9937cdb8bd587b349be126","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"f1f81e6f_92715246","updated":"2026-08-18 09:36:24.000000000","message":"you should run a re-check here - zuul failed on unrelated stuff","commit_id":"ede29722bb81ceb2b168d471c3f483ccc4909530"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"9cedb56d79b755cf3e2fd8a6a2ef4f26e3ac8a69","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"c2cb85e2_929926c7","updated":"2026-08-24 22:46:18.000000000","message":"LGTM","commit_id":"326830567d3954f020027ceeb3d8214c81e0122e"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"a4444d660fc19386e13202a1bd45420bcf2a7b0d","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":8,"id":"e1c90da2_f7eadab8","updated":"2026-08-20 22:15:56.000000000","message":"Nice - just make sure the tempest error wasn\u0027t due to this (doubting that) and do a recheck.  Feel free to ping me when Zuul is passing.","commit_id":"326830567d3954f020027ceeb3d8214c81e0122e"},{"author":{"_account_id":13915,"name":"Silvan Kaiser","email":"silvan@quobyte.com","username":"kaisers"},"change_message_id":"bdb0cc3f2a1a3928cb240a2d4a6e0138e62f0f78","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"7a7a8fab_ad0deac3","updated":"2026-08-21 12:17:00.000000000","message":"recheck this time tempest-integrated-storage failed, still unrelated to the updated code","commit_id":"326830567d3954f020027ceeb3d8214c81e0122e"},{"author":{"_account_id":13915,"name":"Silvan Kaiser","email":"silvan@quobyte.com","username":"kaisers"},"change_message_id":"5639ecd17d601e5d90d51457cddc2243c1d37bcc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"9e876b3d_04bbd378","updated":"2026-08-21 09:53:47.000000000","message":"recheck zuul failed on a cinder-plugin-ceph-tempest test which is unrelated to the updated code.","commit_id":"326830567d3954f020027ceeb3d8214c81e0122e"},{"author":{"_account_id":13915,"name":"Silvan Kaiser","email":"silvan@quobyte.com","username":"kaisers"},"change_message_id":"59e304d649c0b2703998d31a6ad9f1c640457f1a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"eed90b44_c4b92ba0","in_reply_to":"e1c90da2_f7eadab8","updated":"2026-08-21 14:36:32.000000000","message":"@anthony.galica@hitachivantara.com Zuul finally gave in.","commit_id":"326830567d3954f020027ceeb3d8214c81e0122e"}],"cinder/volume/drivers/quobyte.py":[{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"c7b924ff26f5fbd427a058bd1b7636b90c7c50b8","unresolved":true,"context_lines":[{"line_number":810,"context_line":"        with QuobyteDriver.read_proc_mount() as proc_mount:"},{"line_number":811,"context_line":"            for line in proc_mount:"},{"line_number":812,"context_line":"                fields \u003d line.split()"},{"line_number":813,"context_line":"                if len(fields) \u003c 3:"},{"line_number":814,"context_line":"                    continue"},{"line_number":815,"context_line":"                device, mountpoint, fstype \u003d ("},{"line_number":816,"context_line":"                    self._unescape_proc_mount_field(f) for f in fields[:3])"}],"source_content_type":"text/x-python","patch_set":2,"id":"4b0a7ee0_845bcdd6","line":813,"updated":"2026-06-18 15:53:45.000000000","message":"Is this guard really necessary? I believe /proc/mounts will always have more than 3 fields due to its fixed structure. Also, I checked for references in Cinder and other projects [1][2][3], but couldn\u0027t find anything related to this.\n\n[1] https://opendev.org/openstack/os-brick/src/commit/379b7a5fe27ee22148fe48b68c454059485b8ec9/os_brick/remotefs/remotefs.py#L90\n[2] https://opendev.org/openstack/nova/src/commit/d5a4e2b56cf5662204f108560c9e4a3a4f8ee3d5/nova/virt/libvirt/utils.py#L597\n[3] https://opendev.org/openstack/swift/src/commit/bab1688e2c91cb9866c714ee77bb8c45f6885e7b/swift/common/middleware/recon.py#L106","commit_id":"466e7a1895102846b7cc0869edcb7cb5865d3659"},{"author":{"_account_id":13915,"name":"Silvan Kaiser","email":"silvan@quobyte.com","username":"kaisers"},"change_message_id":"d325884f3afcdc477b42549424e85ad5fd8fdd61","unresolved":true,"context_lines":[{"line_number":810,"context_line":"        with QuobyteDriver.read_proc_mount() as proc_mount:"},{"line_number":811,"context_line":"            for line in proc_mount:"},{"line_number":812,"context_line":"                fields \u003d line.split()"},{"line_number":813,"context_line":"                if len(fields) \u003c 3:"},{"line_number":814,"context_line":"                    continue"},{"line_number":815,"context_line":"                device, mountpoint, fstype \u003d ("},{"line_number":816,"context_line":"                    self._unescape_proc_mount_field(f) for f in fields[:3])"}],"source_content_type":"text/x-python","patch_set":2,"id":"255a47df_9d802a2f","line":813,"in_reply_to":"22d535bf_165a9c77","updated":"2026-06-19 13:20:10.000000000","message":"Hi Fernando, thanks for taking a look!\nThis was primarily to prevent possible failures, I am not absolutely sure about the always more than three point. However you\u0027re correct in that this is handled differently in your referenced locations, w/o the field number checking, so I am fine with removing it. I\u0027ll update shortly.\n\nI think a rstrip() should not be needed as the default whitespace separator will have the required effect already with split().","commit_id":"466e7a1895102846b7cc0869edcb7cb5865d3659"},{"author":{"_account_id":13915,"name":"Silvan Kaiser","email":"silvan@quobyte.com","username":"kaisers"},"change_message_id":"68d9228ffc5deab955f9168d3b9416e0a72a00f8","unresolved":false,"context_lines":[{"line_number":810,"context_line":"        with QuobyteDriver.read_proc_mount() as proc_mount:"},{"line_number":811,"context_line":"            for line in proc_mount:"},{"line_number":812,"context_line":"                fields \u003d line.split()"},{"line_number":813,"context_line":"                if len(fields) \u003c 3:"},{"line_number":814,"context_line":"                    continue"},{"line_number":815,"context_line":"                device, mountpoint, fstype \u003d ("},{"line_number":816,"context_line":"                    self._unescape_proc_mount_field(f) for f in fields[:3])"}],"source_content_type":"text/x-python","patch_set":2,"id":"86597bef_32154790","line":813,"in_reply_to":"255a47df_9d802a2f","updated":"2026-06-19 14:46:45.000000000","message":"Done","commit_id":"466e7a1895102846b7cc0869edcb7cb5865d3659"},{"author":{"_account_id":30555,"name":"Fernando Ferraz","display_name":"Fernando Ferraz","email":"fesilva@redhat.com","username":"fernandoperches"},"change_message_id":"bb6b838d44fb8ca478d518b629de272ec57633dc","unresolved":true,"context_lines":[{"line_number":810,"context_line":"        with QuobyteDriver.read_proc_mount() as proc_mount:"},{"line_number":811,"context_line":"            for line in proc_mount:"},{"line_number":812,"context_line":"                fields \u003d line.split()"},{"line_number":813,"context_line":"                if len(fields) \u003c 3:"},{"line_number":814,"context_line":"                    continue"},{"line_number":815,"context_line":"                device, mountpoint, fstype \u003d ("},{"line_number":816,"context_line":"                    self._unescape_proc_mount_field(f) for f in fields[:3])"}],"source_content_type":"text/x-python","patch_set":2,"id":"22d535bf_165a9c77","line":813,"in_reply_to":"4b0a7ee0_845bcdd6","updated":"2026-06-18 16:15:34.000000000","message":"Is this due to trailing newlines? If so, I believe you could use rstrip() instead of checking for the number of fields.","commit_id":"466e7a1895102846b7cc0869edcb7cb5865d3659"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"82041f30fa86d76ac46101eb8c0a2dcb27a46e17","unresolved":true,"context_lines":[{"line_number":805,"context_line":"        return (field.replace(r\u0027\\040\u0027, \u0027 \u0027).replace(r\u0027\\011\u0027, \u0027\\t\u0027)"},{"line_number":806,"context_line":"                .replace(r\u0027\\012\u0027, \u0027\\n\u0027).replace(r\u0027\\134\u0027, \u0027\\\\\u0027))"},{"line_number":807,"context_line":""},{"line_number":808,"context_line":"    def _validate_volume(self, mount_path):"},{"line_number":809,"context_line":"        \"\"\"Runs a number of tests on the expect Quobyte mount\"\"\""},{"line_number":810,"context_line":"        with QuobyteDriver.read_proc_mount() as proc_mount:"},{"line_number":811,"context_line":"            for line in proc_mount:"},{"line_number":812,"context_line":"                fields \u003d line.split()"},{"line_number":813,"context_line":"                device, mountpoint, fstype \u003d ("}],"source_content_type":"text/x-python","patch_set":4,"id":"79f248de_749c50a2","line":810,"range":{"start_line":808,"start_character":0,"end_line":810,"end_character":59},"updated":"2026-07-29 13:55:43.000000000","message":"Can you explain why `disk_partitions()` does not meet your requirements, and what\u0027s the problem you\u0027re trying to solve? If you need to replace it, please define a function with the same signature but with the desired behavior, so you only need to change the function name in your calls.","commit_id":"86126107df7258f9761fbcf8c1e845f7a1729142"},{"author":{"_account_id":13915,"name":"Silvan Kaiser","email":"silvan@quobyte.com","username":"kaisers"},"change_message_id":"2900f41c01d731235f05ef3784100bb922d21d6f","unresolved":false,"context_lines":[{"line_number":805,"context_line":"        return (field.replace(r\u0027\\040\u0027, \u0027 \u0027).replace(r\u0027\\011\u0027, \u0027\\t\u0027)"},{"line_number":806,"context_line":"                .replace(r\u0027\\012\u0027, \u0027\\n\u0027).replace(r\u0027\\134\u0027, \u0027\\\\\u0027))"},{"line_number":807,"context_line":""},{"line_number":808,"context_line":"    def _validate_volume(self, mount_path):"},{"line_number":809,"context_line":"        \"\"\"Runs a number of tests on the expect Quobyte mount\"\"\""},{"line_number":810,"context_line":"        with QuobyteDriver.read_proc_mount() as proc_mount:"},{"line_number":811,"context_line":"            for line in proc_mount:"},{"line_number":812,"context_line":"                fields \u003d line.split()"},{"line_number":813,"context_line":"                device, mountpoint, fstype \u003d ("}],"source_content_type":"text/x-python","patch_set":4,"id":"95021a6c_082e213e","line":810,"range":{"start_line":808,"start_character":0,"end_line":810,"end_character":59},"in_reply_to":"79f248de_749c50a2","updated":"2026-07-30 12:44:34.000000000","message":"Motivation was not missed requirements but the removal of psutil (initially in [1] but there were more follow ups on pulling it from e.g. the driver requirements in the last cycle).\nI can adapt the method to more directly replace the disk_partitions original.\n\n[1] https://review.opendev.org/c/openstack/cinder/+/916154","commit_id":"86126107df7258f9761fbcf8c1e845f7a1729142"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"6bdcd6da0e9f9fd8472110088ed5223fef32d886","unresolved":true,"context_lines":[{"line_number":122,"context_line":"        1.1.14 - Fixes regression from encryption being added in parent class"},{"line_number":123,"context_line":"        1.1.15 - Handle file formats correctly in copy_image_to_volume"},{"line_number":124,"context_line":"        1.2    - Fix stat reporting which adds thin provisioning"},{"line_number":125,"context_line":"        1.2.1  - Drops the psutil requirement by parsing /proc/mounts"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    \"\"\""},{"line_number":128,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"7d66e398_b5d34e7c","line":125,"updated":"2026-08-16 17:01:37.000000000","message":"The version history now documents 1.2.1, but I do not see\nQuobyteDriver.VERSION being advanced to 1.2.1 in this patch.\n\nIf the parent revision currently reports 1.2, should this patch update\nthe constant as well so backend stats and the documented driver history\nremain consistent?","commit_id":"660815fa6872ed374fcbb79fe5fb7c488e57fcfc"},{"author":{"_account_id":13915,"name":"Silvan Kaiser","email":"silvan@quobyte.com","username":"kaisers"},"change_message_id":"360fa46fe51b8511cafe282880cd7d8c3da7036c","unresolved":false,"context_lines":[{"line_number":122,"context_line":"        1.1.14 - Fixes regression from encryption being added in parent class"},{"line_number":123,"context_line":"        1.1.15 - Handle file formats correctly in copy_image_to_volume"},{"line_number":124,"context_line":"        1.2    - Fix stat reporting which adds thin provisioning"},{"line_number":125,"context_line":"        1.2.1  - Drops the psutil requirement by parsing /proc/mounts"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    \"\"\""},{"line_number":128,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"8a099c95_60b2f426","line":125,"in_reply_to":"7d66e398_b5d34e7c","updated":"2026-08-17 11:42:28.000000000","message":"Oops, thnx!","commit_id":"660815fa6872ed374fcbb79fe5fb7c488e57fcfc"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"6bdcd6da0e9f9fd8472110088ed5223fef32d886","unresolved":true,"context_lines":[{"line_number":742,"context_line":"        \"\"\""},{"line_number":743,"context_line":"        partitions \u003d []"},{"line_number":744,"context_line":"        with cls.read_proc_mount() as proc_mount:"},{"line_number":745,"context_line":"            for line in proc_mount:"},{"line_number":746,"context_line":"                fields \u003d line.split()"},{"line_number":747,"context_line":"                device, mountpoint, fstype \u003d ("},{"line_number":748,"context_line":"                    cls._unescape_proc_mount_field(f) for f in fields[:3])"}],"source_content_type":"text/x-python","patch_set":5,"id":"83b40e5d_63acca5d","line":745,"updated":"2026-08-16 17:01:37.000000000","message":"Would it be useful to translate OSError from opening or reading\n/proc/mounts into VolumeDriverException with Quobyte-specific context?\n\nThis would give operators a clearer failure if /proc is unavailable or\nnot exposed correctly in the cinder-volume container.","commit_id":"660815fa6872ed374fcbb79fe5fb7c488e57fcfc"},{"author":{"_account_id":13915,"name":"Silvan Kaiser","email":"silvan@quobyte.com","username":"kaisers"},"change_message_id":"360fa46fe51b8511cafe282880cd7d8c3da7036c","unresolved":false,"context_lines":[{"line_number":742,"context_line":"        \"\"\""},{"line_number":743,"context_line":"        partitions \u003d []"},{"line_number":744,"context_line":"        with cls.read_proc_mount() as proc_mount:"},{"line_number":745,"context_line":"            for line in proc_mount:"},{"line_number":746,"context_line":"                fields \u003d line.split()"},{"line_number":747,"context_line":"                device, mountpoint, fstype \u003d ("},{"line_number":748,"context_line":"                    cls._unescape_proc_mount_field(f) for f in fields[:3])"}],"source_content_type":"text/x-python","patch_set":5,"id":"5bee1716_5cd01eb1","line":745,"in_reply_to":"83b40e5d_63acca5d","updated":"2026-08-17 11:42:28.000000000","message":"Should /proc be unavailable, etc., the resulting trace will point directly to this, i do not think a driver specific exception will offer much more information, no?","commit_id":"660815fa6872ed374fcbb79fe5fb7c488e57fcfc"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"6bdcd6da0e9f9fd8472110088ed5223fef32d886","unresolved":true,"context_lines":[{"line_number":746,"context_line":"                fields \u003d line.split()"},{"line_number":747,"context_line":"                device, mountpoint, fstype \u003d ("},{"line_number":748,"context_line":"                    cls._unescape_proc_mount_field(f) for f in fields[:3])"},{"line_number":749,"context_line":"                partitions.append(_PartitionInfo(device, mountpoint, fstype))"},{"line_number":750,"context_line":"        return partitions"},{"line_number":751,"context_line":""},{"line_number":752,"context_line":"    def _mount_quobyte(self, quobyte_volume, mount_path, ensure\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":5,"id":"88b489f5_27b90392","line":749,"updated":"2026-08-16 17:01:37.000000000","message":"Optional defensive hardening: this assumes each /proc/mounts record has\nat least three fields. That is valid for the normal kernel interface,\nbut a len(fields) \u003c 3 guard would avoid a raw ValueError for malformed\nmocked or unusual input.","commit_id":"660815fa6872ed374fcbb79fe5fb7c488e57fcfc"},{"author":{"_account_id":13915,"name":"Silvan Kaiser","email":"silvan@quobyte.com","username":"kaisers"},"change_message_id":"360fa46fe51b8511cafe282880cd7d8c3da7036c","unresolved":false,"context_lines":[{"line_number":746,"context_line":"                fields \u003d line.split()"},{"line_number":747,"context_line":"                device, mountpoint, fstype \u003d ("},{"line_number":748,"context_line":"                    cls._unescape_proc_mount_field(f) for f in fields[:3])"},{"line_number":749,"context_line":"                partitions.append(_PartitionInfo(device, mountpoint, fstype))"},{"line_number":750,"context_line":"        return partitions"},{"line_number":751,"context_line":""},{"line_number":752,"context_line":"    def _mount_quobyte(self, quobyte_volume, mount_path, ensure\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":5,"id":"09bd11fc_640493da","line":749,"in_reply_to":"88b489f5_27b90392","updated":"2026-08-17 11:42:28.000000000","message":"Thought about that, too, but a  len(fields) guard will only throw a different error and both scenarios point to having to debug /proc/mounts, no? I do not see scenarios that have this fail but not pointing out /proc/mounts being wonky directly either way.","commit_id":"660815fa6872ed374fcbb79fe5fb7c488e57fcfc"},{"author":{"_account_id":33612,"name":"yuval","email":"yuval@lightbitslabs.com","username":"yuval"},"change_message_id":"8da25e2369c2fd6f946e33566709817f46f0b8a6","unresolved":true,"context_lines":[{"line_number":842,"context_line":"                        msg \u003d (_(\"The mount %(mount_path)s is not a \""},{"line_number":843,"context_line":"                                 \"valid Quobyte volume. Stale mount?\")"},{"line_number":844,"context_line":"                               % {\u0027mount_path\u0027: mount_path})"},{"line_number":845,"context_line":"                    raise exception.VolumeDriverException(msg)"},{"line_number":846,"context_line":"                except Exception as exc:"},{"line_number":847,"context_line":"                    msg \u003d (_(\"The mount %(mount_path)s is not a valid\""},{"line_number":848,"context_line":"                             \" Quobyte volume. Error: %(exc)s . \""}],"source_content_type":"text/x-python","patch_set":7,"id":"197f547b_f2de1974","line":845,"updated":"2026-08-18 09:52:05.000000000","message":"(optional)\nseems somthing is off here - pre-existing your patch.\nyou are in a try-except. you reach the else - \"stale Mount\" then you raise volume exception.\nyou immediatly catch the exception with \"except Exception\" - and you tell the user \"client crash?\"\n\nI suggest you moving the \"raise volume exception\" under the \"except Exception...\"","commit_id":"ede29722bb81ceb2b168d471c3f483ccc4909530"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"6a83c90c1f264e4463065a1d9c2d2006eba4999f","unresolved":true,"context_lines":[{"line_number":842,"context_line":"                        msg \u003d (_(\"The mount %(mount_path)s is not a \""},{"line_number":843,"context_line":"                                 \"valid Quobyte volume. Stale mount?\")"},{"line_number":844,"context_line":"                               % {\u0027mount_path\u0027: mount_path})"},{"line_number":845,"context_line":"                    raise exception.VolumeDriverException(msg)"},{"line_number":846,"context_line":"                except Exception as exc:"},{"line_number":847,"context_line":"                    msg \u003d (_(\"The mount %(mount_path)s is not a valid\""},{"line_number":848,"context_line":"                             \" Quobyte volume. Error: %(exc)s . \""}],"source_content_type":"text/x-python","patch_set":7,"id":"5bad5701_f52b61de","line":845,"in_reply_to":"197f547b_f2de1974","updated":"2026-08-19 23:07:28.000000000","message":"I think it does what\u0027s intended as the only time it\u0027s not meant to throw is if the if statement and os calls succeed.  However, it\u0027s formatted in an unexpected way and with redundant information - good catch, I missed this (I think I just validated that the code in the existing block wasn\u0027t modified).\n\nWhat I would maybe suggest is this, which would remove the redundant information and format the code so it doesn\u0027t look strange:\n\n```\ntry:\n    statresult \u003d os.stat(mount_path)\n    if statresult.st_size \u003d\u003d 0:\n        # client looks healthy\n        if not os.access(mount_path, os.W_OK | os.X_OK):\n            LOG.warning(\"Volume is not writable. \"\n                        \"Please broaden the file\"\n                        \" permissions.\"\n                        \" Mount: %s\",\n                        mount_path)\n        return  # we\u0027re happy here\n\n    msg \u003d _(\"Stale mount?\")\n    raise exception.VolumeDriverException(msg)\nexcept Exception as exc:\n    msg \u003d (_(\"The mount %(mount_path)s is not a valid\"\n             \" Quobyte volume. Error: %(exc)s . \"\n             \" Possibly a Quobyte client crash?\")\n           % {\u0027mount_path\u0027: mount_path, \u0027exc\u0027: exc})\n    raise exception.VolumeDriverException(msg)\n```\n\nThough I do wonder what a client crash would have to do with os-level calls throwing, or maybe that should be in the first exception?:\n\n```    \nmsg \u003d _(\"Possible stale mount. Quobyte client crash?\")\n```\n\nwith the second exception like this:\n\n```\nmsg \u003d (_(\"The mount %(mount_path)s is not a valid\"\n         \" Quobyte volume. Error: %(exc)s.\")\n      % {\u0027mount_path\u0027: mount_path, \u0027exc\u0027: exc})\n```\n\nOr similar.","commit_id":"ede29722bb81ceb2b168d471c3f483ccc4909530"},{"author":{"_account_id":13915,"name":"Silvan Kaiser","email":"silvan@quobyte.com","username":"kaisers"},"change_message_id":"280c1e17c70ad619122a3ad09268a0be14f5a18e","unresolved":true,"context_lines":[{"line_number":842,"context_line":"                        msg \u003d (_(\"The mount %(mount_path)s is not a \""},{"line_number":843,"context_line":"                                 \"valid Quobyte volume. Stale mount?\")"},{"line_number":844,"context_line":"                               % {\u0027mount_path\u0027: mount_path})"},{"line_number":845,"context_line":"                    raise exception.VolumeDriverException(msg)"},{"line_number":846,"context_line":"                except Exception as exc:"},{"line_number":847,"context_line":"                    msg \u003d (_(\"The mount %(mount_path)s is not a valid\""},{"line_number":848,"context_line":"                             \" Quobyte volume. Error: %(exc)s . \""}],"source_content_type":"text/x-python","patch_set":7,"id":"e68c211a_a0975191","line":845,"in_reply_to":"5bad5701_f52b61de","updated":"2026-08-20 06:41:48.000000000","message":"you guys are correct, was looking into that yesterday already, I\u0027ll update this today.","commit_id":"ede29722bb81ceb2b168d471c3f483ccc4909530"},{"author":{"_account_id":13915,"name":"Silvan Kaiser","email":"silvan@quobyte.com","username":"kaisers"},"change_message_id":"710e953380e75899a860303965b732c2d63603a6","unresolved":false,"context_lines":[{"line_number":842,"context_line":"                        msg \u003d (_(\"The mount %(mount_path)s is not a \""},{"line_number":843,"context_line":"                                 \"valid Quobyte volume. Stale mount?\")"},{"line_number":844,"context_line":"                               % {\u0027mount_path\u0027: mount_path})"},{"line_number":845,"context_line":"                    raise exception.VolumeDriverException(msg)"},{"line_number":846,"context_line":"                except Exception as exc:"},{"line_number":847,"context_line":"                    msg \u003d (_(\"The mount %(mount_path)s is not a valid\""},{"line_number":848,"context_line":"                             \" Quobyte volume. Error: %(exc)s . \""}],"source_content_type":"text/x-python","patch_set":7,"id":"b97857e1_1281f044","line":845,"in_reply_to":"e68c211a_a0975191","updated":"2026-08-20 07:19:33.000000000","message":"Done, thanks for pointing this out Yuval \u0026 Anthony.","commit_id":"ede29722bb81ceb2b168d471c3f483ccc4909530"}]}
