)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"9d6a52ade19fccedb174d86cf9b71124f1267ad8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"381999c3_5759df3f","updated":"2026-08-01 02:54:10.000000000","message":"recheck\n\nThe shelve/unshelve test that failed on grenade passed elsewhere, and that code path was untouched by this change","commit_id":"f44c56e5eae93668a4240c765304fd8b437d713c"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"da275a09a25512408ee490a35f26e190c194482e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"ced3d01c_5a5b5ee6","updated":"2026-08-01 19:15:24.000000000","message":"recheck\n\nmulti-cell failure seems like a flaky issue","commit_id":"f44c56e5eae93668a4240c765304fd8b437d713c"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"430baad216f1d2c448e9a807b5642bf1ecfebe23","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"afd41325_577c5afc","updated":"2026-08-06 14:44:24.000000000","message":"Do we not have unit tests of these methods already? Seems like a good opportunity to identify and add them...","commit_id":"d8c77b2e3ed3bd063fd810ca6d36cc4e2ca33410"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"150ec00de0b3232bba8203cdaeafee7c3d16652c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"2b2946ff_a375c516","in_reply_to":"afd41325_577c5afc","updated":"2026-08-07 05:00:17.000000000","message":"++ Agreed, \ni retained existing testing through compute/manager and added new unit tests for previously uncovered/newly refactored ShareManager methods: mount_all, umount_all, umount_and_revoke_all..","commit_id":"d8c77b2e3ed3bd063fd810ca6d36cc4e2ca33410"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"bbeb33b91c22e699afaafc9830d6c156330b67b5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"59073b23_7ed83035","updated":"2026-08-19 05:49:51.000000000","message":"Hi @rene.ribaud@gmail.com - ty for the comments, please see my responses inline","commit_id":"afdd114fa81645d9fe666a15b78feabe028777ab"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"669b845046b3d4192fb72f075a1acee9a45b9bd5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"2f11b25f_a609f09b","updated":"2026-08-18 15:02:32.000000000","message":"Nice refactoring! A couple of thoughts:\n\n1. Extracting the share logic into its own module is a good idea. It makes things cleaner and reduces the size of the already massive `manager.py`.\n2. This also improves separation of responsibilities, which is a welcome change.\n\nLeaving a -1 regarding the exception handling (`except Exception`) and the duplicated `_set_instance_error_state` method. See inline comments for details.","commit_id":"afdd114fa81645d9fe666a15b78feabe028777ab"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"be84a5d3c6b1f445d838c753e95378ff0ea49ade","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"b03935b8_c7b06cc4","updated":"2026-08-12 21:49:44.000000000","message":"recheck\n\nat least one POST_FAILURE","commit_id":"afdd114fa81645d9fe666a15b78feabe028777ab"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"b1e9d78d626a9ef32ba79e4452eeb3d3fef5cbf3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"b548f9c3_b23895c9","updated":"2026-08-13 03:10:50.000000000","message":"recheck\n\nsuccessor patch that includes this has passed; flaky failures","commit_id":"afdd114fa81645d9fe666a15b78feabe028777ab"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"4cdc24e029b53518e9d2261dc26e73169359e7f1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"3c1f29a5_0d259ea2","updated":"2026-08-21 21:56:47.000000000","message":"The LOC bump (between patches) here comes from the CephX security bug fix now on Gerrit: https://review.opendev.org/c/openstack/nova/+/1001900/\n\nIt\u0027s a security bugfix that I think is quite valuable to backport to older stable branches, and write up an OSSN for.","commit_id":"4de0e21b4a422c105a492cfc237d343841942b7e"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"1b9e4e7903a50768e1287fc576f87e94ac2d25be","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"36df1003_acac2043","updated":"2026-08-22 04:41:17.000000000","message":"recheck\n\nfailures unrelated; functional threading job is known to be flaky atm, nova team investigating","commit_id":"60bd1b7c94679490a188862f481db13ab49cd842"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"d4082cdf30f9ca9add593cb6fde5023f7c5fe0dc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"9abf6388_b74a1113","updated":"2026-08-25 14:27:39.000000000","message":"-1 just to signal a suggestion regarding logs.","commit_id":"565d899fc01b443ab6f5ecdc3e274b0f0c452d3c"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a90bcb873e8f934b7fab580e2d6d49c5debea795","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"43f5c437_aad2adb0","updated":"2026-08-26 04:42:20.000000000","message":"Thanks for the review @rene.ribaud@gmail.com. PTAL at the latest patch","commit_id":"18660e15eb39287a01a3892c972b2fb1c12a5dbf"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7ffdbf9977140ba5de648b8c38090047fc3c174a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"c0dc028c_111e0c52","updated":"2026-09-02 04:48:14.000000000","message":"recheck\n\ngrenade job has a flaky test failure","commit_id":"6cca020d22325d64139141939e13dbc3316cc3fd"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"d8c80d347fb43e69b67be23a031a23952608e3e9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"92a73320_7b2b2530","updated":"2026-09-01 23:24:16.000000000","message":"recheck \n\ntests passed on later patch in series","commit_id":"6cca020d22325d64139141939e13dbc3316cc3fd"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"e2efdf23a47a89cbfd62526dce2767e055f7c277","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"4c6022ce_5f0f1b05","updated":"2026-09-03 02:37:13.000000000","message":"Thanks for the comments @melwittt@gmail.com; addressed there in the latest patch","commit_id":"ed094b1f7f03a49fbdc3d3702b13791e9c87a89c"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"95eb638962d17bb5f8e72ab5ab4c4d8973afdffc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"5156eb81_70185baa","updated":"2026-09-03 17:50:58.000000000","message":"Updates look good, thanks","commit_id":"ed094b1f7f03a49fbdc3d3702b13791e9c87a89c"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a8a6eddb53de0b5b4d92a380e1ce186e6dd647f8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"8cf7198c_170bdc37","updated":"2026-09-03 05:24:39.000000000","message":"recheck\n\ntest_shelve_unshelve_server is flaky, passed in other jobs, failed on grenade-multinode","commit_id":"ed094b1f7f03a49fbdc3d3702b13791e9c87a89c"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"b579c2c4c9b4431ef9ff261360cb2263723c5237","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"8272c657_20fde2b0","updated":"2026-09-04 17:24:19.000000000","message":"+1 while the last patch is still under review","commit_id":"b7ebc1e615826fcf16f1def7422fe765dd48adcf"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"975a5ec595a266621c5bc175097d6f7cbb968803","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"bdce69b6_2bc62a6b","updated":"2026-09-04 22:26:41.000000000","message":"Upgrading to +2/+W as the series has been reviewed and approved","commit_id":"b7ebc1e615826fcf16f1def7422fe765dd48adcf"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"d9adad79b15d80c6b0d1dd9edeb89a6424a2839c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"6b172d63_45b7942b","updated":"2026-09-05 15:49:19.000000000","message":"recheck","commit_id":"b7ebc1e615826fcf16f1def7422fe765dd48adcf"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"b69ee512040c4a67a3d7bb8b55e1832d6a7c4ba4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"988620a8_1dbbf8b0","updated":"2026-09-04 13:53:04.000000000","message":"recheck","commit_id":"b7ebc1e615826fcf16f1def7422fe765dd48adcf"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"3d5a9357c76b056e384fe97c86622b2f32576f71","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"d3f97a16_e8f55f11","updated":"2026-09-04 16:05:44.000000000","message":"recheck","commit_id":"b7ebc1e615826fcf16f1def7422fe765dd48adcf"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7c58bf1c40e19e7cd240d96c29a972fc43ccce69","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"185a64d6_6eb4e4c5","updated":"2026-09-05 18:24:11.000000000","message":"recheck\n\nflakiness","commit_id":"b7ebc1e615826fcf16f1def7422fe765dd48adcf"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"81c5e6b9bf59c74860cf6a3631f7ffbf93e6dcd1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"2102d661_b8de84c8","updated":"2026-09-05 02:41:20.000000000","message":"recheck\n\nnova-tox-functional-py313-threading flakiness is being investigated","commit_id":"b7ebc1e615826fcf16f1def7422fe765dd48adcf"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"514ed6cd71723f598b7ed9a9955e4c86ea9b52e1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"b0054681_d635f200","updated":"2026-09-04 05:39:31.000000000","message":"recheck\n\npatch after this passes the same tests","commit_id":"b7ebc1e615826fcf16f1def7422fe765dd48adcf"}],"nova/compute/manager.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"db74fdc3207e85e0cbb914cbf3958d3d90770dfb","unresolved":false,"context_lines":[{"line_number":5119,"context_line":"        share_mapping.save()"},{"line_number":5120,"context_line":"        self._set_instance_obj_error_state("},{"line_number":5121,"context_line":"            instance, clean_task_state\u003dTrue"},{"line_number":5122,"context_line":"        )"},{"line_number":5123,"context_line":""},{"line_number":5124,"context_line":"    @wrap_instance_fault"},{"line_number":5125,"context_line":"    def _rotate_backups(self, context, instance, backup_type, rotation):"}],"source_content_type":"text/x-python","patch_set":2,"id":"4dbdbae2_f5ae17b7","side":"PARENT","line":5122,"updated":"2026-07-31 16:59:27.000000000","message":"Very satisfying ++","commit_id":"5e1a6f55559f6a677842b2c6d5e4229ce12af54d"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"db74fdc3207e85e0cbb914cbf3958d3d90770dfb","unresolved":true,"context_lines":[{"line_number":735,"context_line":"        self.driver \u003d driver.load_compute_driver(self.virtapi, compute_driver)"},{"line_number":736,"context_line":"        self.share_manager \u003d share_management.ShareManager("},{"line_number":737,"context_line":"            self.manila_api, self.driver,"},{"line_number":738,"context_line":"            self._set_instance_obj_error_state)"},{"line_number":739,"context_line":"        self.rt \u003d resource_tracker.ResourceTracker("},{"line_number":740,"context_line":"            self.host, self.driver, reportclient\u003dself.reportclient)"},{"line_number":741,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"4045a9fb_4071bdaa","line":738,"updated":"2026-07-31 16:59:27.000000000","message":"I\u0027m not sure this is worth the low-level linkage of a \"private\" method for such a simple act. You could just reproduce what you need there as it looks to me like all you ever need to do is set `vm_state\u003dERROR` and `task_state\u003dNone` and ignore/log NotFound (i.e. you don\u0027t seem to ever need/use `clean_task_state\u003d\u003dFalse`)","commit_id":"a77dca85a44cbc65687bf860abc69abfba3b278f"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"0c84b048b106b4d9f20caede8010d33128e33efa","unresolved":true,"context_lines":[{"line_number":735,"context_line":"        self.driver \u003d driver.load_compute_driver(self.virtapi, compute_driver)"},{"line_number":736,"context_line":"        self.share_manager \u003d share_management.ShareManager("},{"line_number":737,"context_line":"            self.manila_api, self.driver,"},{"line_number":738,"context_line":"            self._set_instance_obj_error_state)"},{"line_number":739,"context_line":"        self.rt \u003d resource_tracker.ResourceTracker("},{"line_number":740,"context_line":"            self.host, self.driver, reportclient\u003dself.reportclient)"},{"line_number":741,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"ceffa6ac_77f0f4ca","line":738,"in_reply_to":"4045a9fb_4071bdaa","updated":"2026-07-31 21:30:50.000000000","message":"ack, true..","commit_id":"a77dca85a44cbc65687bf860abc69abfba3b278f"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"3dfdbdc23bbbe895a2c45e41627cafff76484e43","unresolved":false,"context_lines":[{"line_number":735,"context_line":"        self.driver \u003d driver.load_compute_driver(self.virtapi, compute_driver)"},{"line_number":736,"context_line":"        self.share_manager \u003d share_management.ShareManager("},{"line_number":737,"context_line":"            self.manila_api, self.driver,"},{"line_number":738,"context_line":"            self._set_instance_obj_error_state)"},{"line_number":739,"context_line":"        self.rt \u003d resource_tracker.ResourceTracker("},{"line_number":740,"context_line":"            self.host, self.driver, reportclient\u003dself.reportclient)"},{"line_number":741,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1bd697e6_9967ddc1","line":738,"in_reply_to":"ceffa6ac_77f0f4ca","updated":"2026-07-31 21:47:54.000000000","message":"Done","commit_id":"a77dca85a44cbc65687bf860abc69abfba3b278f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"430baad216f1d2c448e9a807b5642bf1ecfebe23","unresolved":true,"context_lines":[{"line_number":4403,"context_line":""},{"line_number":4404,"context_line":"    def _get_share_info(self, context, instance, check_status\u003dTrue):"},{"line_number":4405,"context_line":"        return self.share_manager.get_share_info("},{"line_number":4406,"context_line":"            context, instance, check_status\u003dcheck_status)"},{"line_number":4407,"context_line":""},{"line_number":4408,"context_line":"    @messaging.expected_exceptions(exception.VTPMSecretForbidden)"},{"line_number":4409,"context_line":"    @wrap_exception()"}],"source_content_type":"text/x-python","patch_set":6,"id":"3e0480ff_66a9ea90","line":4406,"updated":"2026-08-06 14:44:24.000000000","message":"I think we can probably change calls to this to just go straight to the underlying method, right? No need to keep this thin layer of indirection with no added value.","commit_id":"d8c77b2e3ed3bd063fd810ca6d36cc4e2ca33410"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"150ec00de0b3232bba8203cdaeafee7c3d16652c","unresolved":false,"context_lines":[{"line_number":4403,"context_line":""},{"line_number":4404,"context_line":"    def _get_share_info(self, context, instance, check_status\u003dTrue):"},{"line_number":4405,"context_line":"        return self.share_manager.get_share_info("},{"line_number":4406,"context_line":"            context, instance, check_status\u003dcheck_status)"},{"line_number":4407,"context_line":""},{"line_number":4408,"context_line":"    @messaging.expected_exceptions(exception.VTPMSecretForbidden)"},{"line_number":4409,"context_line":"    @wrap_exception()"}],"source_content_type":"text/x-python","patch_set":6,"id":"1b4aa244_ed08ce85","line":4406,"in_reply_to":"3e0480ff_66a9ea90","updated":"2026-08-07 05:00:17.000000000","message":"ack, looks better when i folded it in","commit_id":"d8c77b2e3ed3bd063fd810ca6d36cc4e2ca33410"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"430baad216f1d2c448e9a807b5642bf1ecfebe23","unresolved":true,"context_lines":[{"line_number":5735,"context_line":"                    context, instance, refresh_conn_info\u003dTrue, bdms\u003dbdms)"},{"line_number":5736,"context_line":""},{"line_number":5737,"context_line":"            power_on \u003d old_vm_state !\u003d vm_states.STOPPED"},{"line_number":5738,"context_line":""},{"line_number":5739,"context_line":"            self.driver.finish_revert_migration("},{"line_number":5740,"context_line":"                context, instance, network_info, migration, block_device_info,"},{"line_number":5741,"context_line":"                power_on)"}],"source_content_type":"text/x-python","patch_set":6,"id":"b2cfc238_9717bc93","line":5738,"updated":"2026-08-06 14:44:24.000000000","message":"Unrelated whitespace damage","commit_id":"d8c77b2e3ed3bd063fd810ca6d36cc4e2ca33410"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"150ec00de0b3232bba8203cdaeafee7c3d16652c","unresolved":false,"context_lines":[{"line_number":5735,"context_line":"                    context, instance, refresh_conn_info\u003dTrue, bdms\u003dbdms)"},{"line_number":5736,"context_line":""},{"line_number":5737,"context_line":"            power_on \u003d old_vm_state !\u003d vm_states.STOPPED"},{"line_number":5738,"context_line":""},{"line_number":5739,"context_line":"            self.driver.finish_revert_migration("},{"line_number":5740,"context_line":"                context, instance, network_info, migration, block_device_info,"},{"line_number":5741,"context_line":"                power_on)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ddd46f28_856ddae1","line":5738,"in_reply_to":"b2cfc238_9717bc93","updated":"2026-08-07 05:00:17.000000000","message":"Fixed","commit_id":"d8c77b2e3ed3bd063fd810ca6d36cc4e2ca33410"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"669b845046b3d4192fb72f075a1acee9a45b9bd5","unresolved":true,"context_lines":[{"line_number":1358,"context_line":"        share_info \u003d self.share_manager.get_share_info(context, instance)"},{"line_number":1359,"context_line":"        try:"},{"line_number":1360,"context_line":"            self.share_manager.mount_all(context, instance, share_info)"},{"line_number":1361,"context_line":"        except Exception:"},{"line_number":1362,"context_line":"            LOG.warning(\u0027Failed to mount shares for instance\u0027,"},{"line_number":1363,"context_line":"                        instance\u003dinstance)"},{"line_number":1364,"context_line":"            self._set_instance_obj_error_state(instance)"}],"source_content_type":"text/x-python","patch_set":9,"id":"20e3698d_dce2b79c","line":1361,"range":{"start_line":1361,"start_character":8,"end_line":1361,"end_character":24},"updated":"2026-08-18 15:02:32.000000000","message":"I\u0027m not a fan of the bare `except Exception` catches introduced here (in `_resume_guests_state`, `_power_off_instance`, and `_power_on`). In my opinion, this is a practice that can silently swallow real bugs (AttributeError, TypeError, etc.) behind a warning log.\n\nThe `ShareManager.mount()` and `umount()` methods already have explicit except clauses that only let specific exceptions through:\n\n- **mount**: `ShareNotFound`, `ShareProtocolNotSupported`, `ShareMountError`, `BadRequestException`\n- **umount**: `ShareNotFound`, `ShareUmountError`, `ShareProtocolNotSupported`\n\nThe callers should catch these same types rather than a blanket `except Exception`.","commit_id":"afdd114fa81645d9fe666a15b78feabe028777ab"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"733361e6ac6a2d49cfc8cc5be730d9b40946106a","unresolved":true,"context_lines":[{"line_number":1358,"context_line":"        share_info \u003d self.share_manager.get_share_info(context, instance)"},{"line_number":1359,"context_line":"        try:"},{"line_number":1360,"context_line":"            self.share_manager.mount_all(context, instance, share_info)"},{"line_number":1361,"context_line":"        except Exception:"},{"line_number":1362,"context_line":"            LOG.warning(\u0027Failed to mount shares for instance\u0027,"},{"line_number":1363,"context_line":"                        instance\u003dinstance)"},{"line_number":1364,"context_line":"            self._set_instance_obj_error_state(instance)"}],"source_content_type":"text/x-python","patch_set":9,"id":"99620b7f_f17fe215","line":1361,"range":{"start_line":1361,"start_character":8,"end_line":1361,"end_character":24},"in_reply_to":"1dffeb54_57547d4f","updated":"2026-08-19 17:52:45.000000000","message":"I\u0027m not opposed to catching finer-grained exceptions of course, I just assert there\u0027s no different handling for them AND we need to handle the actual unexpected KeyError or anything else in this way as well. That\u0027s why I ask \"and do what differently?\" If there\u0027s something we actually should be doing, then fair game, but I just don\u0027t know what that would be.","commit_id":"afdd114fa81645d9fe666a15b78feabe028777ab"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"7447a086d552849ddceb733dd91b4b4acddf091e","unresolved":true,"context_lines":[{"line_number":1358,"context_line":"        share_info \u003d self.share_manager.get_share_info(context, instance)"},{"line_number":1359,"context_line":"        try:"},{"line_number":1360,"context_line":"            self.share_manager.mount_all(context, instance, share_info)"},{"line_number":1361,"context_line":"        except Exception:"},{"line_number":1362,"context_line":"            LOG.warning(\u0027Failed to mount shares for instance\u0027,"},{"line_number":1363,"context_line":"                        instance\u003dinstance)"},{"line_number":1364,"context_line":"            self._set_instance_obj_error_state(instance)"}],"source_content_type":"text/x-python","patch_set":9,"id":"c35ffbc3_f695159f","line":1361,"range":{"start_line":1361,"start_character":8,"end_line":1361,"end_character":24},"in_reply_to":"20e3698d_dce2b79c","updated":"2026-08-18 18:48:22.000000000","message":"And do what differently? AFAICT, we always want to set the instance state to error when this fails for any reason. This isn\u0027t being \"silently swallow[ed]\" because it\u0027s setting the instance to error state (on L1374). This is the same as the action below. The difference is that the driver is _allowed_ to not implement that function in which case we want to continue instead of erroring out in that case. For all others, our path out is a warning and setting the instance to error.\n\nCan you describe more of what you think should happen here? Specifically what will be different for the exceptions you list over anything else?\n\nTBH, looking at the previous code, it seems like if we fail for an unexpected reason we might just log it and not set the state, which could go unnoticed depending on how we\u0027re getting here and just leave the instance in SHUTOFF state with no indication that something went wrong. Are you arguing that\u0027s the right behavior? In my own testing with this going to error state when it failed has been very helpful, and is what I would expect.","commit_id":"afdd114fa81645d9fe666a15b78feabe028777ab"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"82b5856c73552b37114c9697203b248989891350","unresolved":true,"context_lines":[{"line_number":1358,"context_line":"        share_info \u003d self.share_manager.get_share_info(context, instance)"},{"line_number":1359,"context_line":"        try:"},{"line_number":1360,"context_line":"            self.share_manager.mount_all(context, instance, share_info)"},{"line_number":1361,"context_line":"        except Exception:"},{"line_number":1362,"context_line":"            LOG.warning(\u0027Failed to mount shares for instance\u0027,"},{"line_number":1363,"context_line":"                        instance\u003dinstance)"},{"line_number":1364,"context_line":"            self._set_instance_obj_error_state(instance)"}],"source_content_type":"text/x-python","patch_set":9,"id":"61239336_b92d5027","line":1361,"range":{"start_line":1361,"start_character":8,"end_line":1361,"end_character":24},"in_reply_to":"254147c1_fe7f2fac","updated":"2026-08-26 04:28:48.000000000","message":"ack, can do","commit_id":"afdd114fa81645d9fe666a15b78feabe028777ab"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a90bcb873e8f934b7fab580e2d6d49c5debea795","unresolved":false,"context_lines":[{"line_number":1358,"context_line":"        share_info \u003d self.share_manager.get_share_info(context, instance)"},{"line_number":1359,"context_line":"        try:"},{"line_number":1360,"context_line":"            self.share_manager.mount_all(context, instance, share_info)"},{"line_number":1361,"context_line":"        except Exception:"},{"line_number":1362,"context_line":"            LOG.warning(\u0027Failed to mount shares for instance\u0027,"},{"line_number":1363,"context_line":"                        instance\u003dinstance)"},{"line_number":1364,"context_line":"            self._set_instance_obj_error_state(instance)"}],"source_content_type":"text/x-python","patch_set":9,"id":"86d65107_ee24b14c","line":1361,"range":{"start_line":1361,"start_character":8,"end_line":1361,"end_character":24},"in_reply_to":"61239336_b92d5027","updated":"2026-08-26 04:42:20.000000000","message":"Done","commit_id":"afdd114fa81645d9fe666a15b78feabe028777ab"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"d4082cdf30f9ca9add593cb6fde5023f7c5fe0dc","unresolved":true,"context_lines":[{"line_number":1358,"context_line":"        share_info \u003d self.share_manager.get_share_info(context, instance)"},{"line_number":1359,"context_line":"        try:"},{"line_number":1360,"context_line":"            self.share_manager.mount_all(context, instance, share_info)"},{"line_number":1361,"context_line":"        except Exception:"},{"line_number":1362,"context_line":"            LOG.warning(\u0027Failed to mount shares for instance\u0027,"},{"line_number":1363,"context_line":"                        instance\u003dinstance)"},{"line_number":1364,"context_line":"            self._set_instance_obj_error_state(instance)"}],"source_content_type":"text/x-python","patch_set":9,"id":"254147c1_fe7f2fac","line":1361,"range":{"start_line":1361,"start_character":8,"end_line":1361,"end_character":24},"in_reply_to":"99620b7f_f17fe215","updated":"2026-08-25 14:27:39.000000000","message":"Fair point from both of you. I agree the handling is the same regardless of the exception type, and the list of known exceptions in mount/umount isn\u0027t exhaustive anyway.\n\nWhat still bothers me though is losing the stack trace when an unexpected error occurs. With `LOG.warning`, if something like an AttributeError or TypeError slips through, there\u0027s no traceback in the logs to debug it. Would using `LOG.exception` instead of `LOG.warning` be a reasonable compromise? That way we keep `except Exception` but still have the full traceback for real bugs. This would apply to `_resume_guests_state` and `_power_off_instance` (the `_power_on` case already re-raises so the traceback is preserved).","commit_id":"afdd114fa81645d9fe666a15b78feabe028777ab"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"bbeb33b91c22e699afaafc9830d6c156330b67b5","unresolved":true,"context_lines":[{"line_number":1358,"context_line":"        share_info \u003d self.share_manager.get_share_info(context, instance)"},{"line_number":1359,"context_line":"        try:"},{"line_number":1360,"context_line":"            self.share_manager.mount_all(context, instance, share_info)"},{"line_number":1361,"context_line":"        except Exception:"},{"line_number":1362,"context_line":"            LOG.warning(\u0027Failed to mount shares for instance\u0027,"},{"line_number":1363,"context_line":"                        instance\u003dinstance)"},{"line_number":1364,"context_line":"            self._set_instance_obj_error_state(instance)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1dffeb54_57547d4f","line":1361,"range":{"start_line":1361,"start_character":8,"end_line":1361,"end_character":24},"in_reply_to":"c35ffbc3_f695159f","updated":"2026-08-19 05:49:51.000000000","message":"@rene.ribaud@gmail.com ty for the suggestion. I agree that a bare exception handling raises eyebrows ( it does to me :) ). My thought here was what Dan\u0027s seeing.. I wanted to avoid cherry-picking all possible exceptions could occur.. in our destructive testing so far, we caught a lot of issues that raised a wider variety of errors (keystoneauth, openstacksdk, NFS/CephFS mount issues) than you see in the code. We could defensively handle much of that.. but this particular phase is to ensure the instance state is accurately updated no matter the error. We\u0027d\u0027ve logged exceptions along the path already and this is the \"stop processing and signal failure\" phase.","commit_id":"afdd114fa81645d9fe666a15b78feabe028777ab"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"669b845046b3d4192fb72f075a1acee9a45b9bd5","unresolved":true,"context_lines":[{"line_number":3200,"context_line":"        share_info.deactivate_all()"},{"line_number":3201,"context_line":"        try:"},{"line_number":3202,"context_line":"            self.share_manager.umount_all(context, instance, share_info)"},{"line_number":3203,"context_line":"        except Exception:"},{"line_number":3204,"context_line":"            LOG.warning("},{"line_number":3205,"context_line":"                \"Failed to unmount shares during power off, \""},{"line_number":3206,"context_line":"                \"ignoring.\", instance\u003dinstance)"}],"source_content_type":"text/x-python","patch_set":9,"id":"32d5d810_5577a594","line":3203,"range":{"start_line":3203,"start_character":8,"end_line":3203,"end_character":24},"updated":"2026-08-18 15:02:32.000000000","message":"ditto","commit_id":"afdd114fa81645d9fe666a15b78feabe028777ab"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"bbeb33b91c22e699afaafc9830d6c156330b67b5","unresolved":false,"context_lines":[{"line_number":3200,"context_line":"        share_info.deactivate_all()"},{"line_number":3201,"context_line":"        try:"},{"line_number":3202,"context_line":"            self.share_manager.umount_all(context, instance, share_info)"},{"line_number":3203,"context_line":"        except Exception:"},{"line_number":3204,"context_line":"            LOG.warning("},{"line_number":3205,"context_line":"                \"Failed to unmount shares during power off, \""},{"line_number":3206,"context_line":"                \"ignoring.\", instance\u003dinstance)"}],"source_content_type":"text/x-python","patch_set":9,"id":"a867a8a2_d8a5448f","line":3203,"range":{"start_line":3203,"start_character":8,"end_line":3203,"end_character":24},"in_reply_to":"32d5d810_5577a594","updated":"2026-08-19 05:49:51.000000000","message":"same","commit_id":"afdd114fa81645d9fe666a15b78feabe028777ab"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"669b845046b3d4192fb72f075a1acee9a45b9bd5","unresolved":true,"context_lines":[{"line_number":3564,"context_line":""},{"line_number":3565,"context_line":"        try:"},{"line_number":3566,"context_line":"            self.share_manager.mount_all(context, instance, share_info)"},{"line_number":3567,"context_line":"        except Exception:"},{"line_number":3568,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":3569,"context_line":"                self._set_instance_obj_error_state(instance)"},{"line_number":3570,"context_line":"        self.driver.power_on(context, instance,"}],"source_content_type":"text/x-python","patch_set":9,"id":"57dc4e2b_7e64e162","line":3567,"range":{"start_line":3567,"start_character":8,"end_line":3567,"end_character":24},"updated":"2026-08-18 15:02:32.000000000","message":"ditto","commit_id":"afdd114fa81645d9fe666a15b78feabe028777ab"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"bbeb33b91c22e699afaafc9830d6c156330b67b5","unresolved":false,"context_lines":[{"line_number":3564,"context_line":""},{"line_number":3565,"context_line":"        try:"},{"line_number":3566,"context_line":"            self.share_manager.mount_all(context, instance, share_info)"},{"line_number":3567,"context_line":"        except Exception:"},{"line_number":3568,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":3569,"context_line":"                self._set_instance_obj_error_state(instance)"},{"line_number":3570,"context_line":"        self.driver.power_on(context, instance,"}],"source_content_type":"text/x-python","patch_set":9,"id":"ec2198b5_73277d3a","line":3567,"range":{"start_line":3567,"start_character":8,"end_line":3567,"end_character":24},"in_reply_to":"57dc4e2b_7e64e162","updated":"2026-08-19 05:49:51.000000000","message":"same","commit_id":"afdd114fa81645d9fe666a15b78feabe028777ab"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"054c339ef86121eb509bb77575e5dc26ffd5411e","unresolved":true,"context_lines":[{"line_number":1285,"context_line":"            LOG.exception(\u0027Failed to mount shares for instance\u0027,"},{"line_number":1286,"context_line":"                          instance\u003dinstance)"},{"line_number":1287,"context_line":"            self._set_instance_obj_error_state(instance)"},{"line_number":1288,"context_line":"            return"},{"line_number":1289,"context_line":""},{"line_number":1290,"context_line":"        try:"},{"line_number":1291,"context_line":"            self.driver.resume_state_on_host_boot("}],"source_content_type":"text/x-python","patch_set":16,"id":"76e1657a_73db6bce","line":1288,"updated":"2026-09-02 18:34:06.000000000","message":"Noting that AFAICT this is a change in behavior not mentioned in the commit message. Previously, the code would re-raise from here or otherwise allow exceptions to propagate up from here -- which could result in interrupting init_host() and potentially preventing subsequent instances from getting to _init_instance().\n\nThis behavior to allow moving on to subsequent instances is better, I think, but it should be 1) called out in the commit message and 2) covered by some test case.","commit_id":"6cca020d22325d64139141939e13dbc3316cc3fd"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"e2efdf23a47a89cbfd62526dce2767e055f7c277","unresolved":false,"context_lines":[{"line_number":1285,"context_line":"            LOG.exception(\u0027Failed to mount shares for instance\u0027,"},{"line_number":1286,"context_line":"                          instance\u003dinstance)"},{"line_number":1287,"context_line":"            self._set_instance_obj_error_state(instance)"},{"line_number":1288,"context_line":"            return"},{"line_number":1289,"context_line":""},{"line_number":1290,"context_line":"        try:"},{"line_number":1291,"context_line":"            self.driver.resume_state_on_host_boot("}],"source_content_type":"text/x-python","patch_set":16,"id":"4cca5a86_0ef5ae8f","line":1288,"in_reply_to":"76e1657a_73db6bce","updated":"2026-09-03 02:37:13.000000000","message":"Yeah! done.","commit_id":"6cca020d22325d64139141939e13dbc3316cc3fd"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"615de7492d82388b994234984e905917859f5143","unresolved":true,"context_lines":[{"line_number":3530,"context_line":"            self.share_manager.mount_all(context, instance, share_info)"},{"line_number":3531,"context_line":"        except Exception:"},{"line_number":3532,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":3533,"context_line":"                self._set_instance_obj_error_state(instance)"},{"line_number":3534,"context_line":"        self.driver.power_on(context, instance,"},{"line_number":3535,"context_line":"                             network_info,"},{"line_number":3536,"context_line":"                             block_device_info, accel_info, share_info)"}],"source_content_type":"text/x-python","patch_set":16,"id":"f1f0ab2a_0f945e1d","line":3533,"updated":"2026-09-02 18:36:55.000000000","message":"This error handing part does not seem to be covered in any test.","commit_id":"6cca020d22325d64139141939e13dbc3316cc3fd"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"e2efdf23a47a89cbfd62526dce2767e055f7c277","unresolved":false,"context_lines":[{"line_number":3530,"context_line":"            self.share_manager.mount_all(context, instance, share_info)"},{"line_number":3531,"context_line":"        except Exception:"},{"line_number":3532,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":3533,"context_line":"                self._set_instance_obj_error_state(instance)"},{"line_number":3534,"context_line":"        self.driver.power_on(context, instance,"},{"line_number":3535,"context_line":"                             network_info,"},{"line_number":3536,"context_line":"                             block_device_info, accel_info, share_info)"}],"source_content_type":"text/x-python","patch_set":16,"id":"51f3d653_3f102573","line":3533,"in_reply_to":"9adca6d3_a9f837fa","updated":"2026-09-03 02:37:13.000000000","message":"Ack, i added a unit test as well now..","commit_id":"6cca020d22325d64139141939e13dbc3316cc3fd"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"fe60e22f097708457ad0347074623516f9e39f23","unresolved":false,"context_lines":[{"line_number":3530,"context_line":"            self.share_manager.mount_all(context, instance, share_info)"},{"line_number":3531,"context_line":"        except Exception:"},{"line_number":3532,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":3533,"context_line":"                self._set_instance_obj_error_state(instance)"},{"line_number":3534,"context_line":"        self.driver.power_on(context, instance,"},{"line_number":3535,"context_line":"                             network_info,"},{"line_number":3536,"context_line":"                             block_device_info, accel_info, share_info)"}],"source_content_type":"text/x-python","patch_set":16,"id":"9adca6d3_a9f837fa","line":3533,"in_reply_to":"f1f0ab2a_0f945e1d","updated":"2026-09-02 18:50:37.000000000","message":"Nevermind, this looks to be covered by https://review.opendev.org/c/openstack/nova/+/999349/16/nova/tests/functional/libvirt/test_server_shares.py#308","commit_id":"6cca020d22325d64139141939e13dbc3316cc3fd"}],"nova/compute/share_management.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"db74fdc3207e85e0cbb914cbf3958d3d90770dfb","unresolved":true,"context_lines":[{"line_number":33,"context_line":"class ShareManager:"},{"line_number":34,"context_line":"    \"\"\"Manages Manila share access, mounting, and lifecycle."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    Extracted from ComputeManager to reduce file size and nesting."},{"line_number":37,"context_line":"    Follows the ResourceTracker pattern: receives dependencies via"},{"line_number":38,"context_line":"    constructor injection, instantiated in ComputeManager.__init__."},{"line_number":39,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"ff7e0aef_121d5ace","line":36,"range":{"start_line":36,"start_character":4,"end_line":36,"end_character":33},"updated":"2026-07-31 16:59:27.000000000","message":"I think docstrings should be timeless and leave the temporal references to the git history :)","commit_id":"a77dca85a44cbc65687bf860abc69abfba3b278f"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"3ddd93df3618560a55fb3b5849e4c7f6bc4c2618","unresolved":false,"context_lines":[{"line_number":33,"context_line":"class ShareManager:"},{"line_number":34,"context_line":"    \"\"\"Manages Manila share access, mounting, and lifecycle."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    Extracted from ComputeManager to reduce file size and nesting."},{"line_number":37,"context_line":"    Follows the ResourceTracker pattern: receives dependencies via"},{"line_number":38,"context_line":"    constructor injection, instantiated in ComputeManager.__init__."},{"line_number":39,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"15c0567e_9ba91212","line":36,"range":{"start_line":36,"start_character":4,"end_line":36,"end_character":33},"in_reply_to":"a340bbf1_37b9016f","updated":"2026-07-31 22:02:03.000000000","message":"Done","commit_id":"a77dca85a44cbc65687bf860abc69abfba3b278f"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"0c84b048b106b4d9f20caede8010d33128e33efa","unresolved":true,"context_lines":[{"line_number":33,"context_line":"class ShareManager:"},{"line_number":34,"context_line":"    \"\"\"Manages Manila share access, mounting, and lifecycle."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    Extracted from ComputeManager to reduce file size and nesting."},{"line_number":37,"context_line":"    Follows the ResourceTracker pattern: receives dependencies via"},{"line_number":38,"context_line":"    constructor injection, instantiated in ComputeManager.__init__."},{"line_number":39,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"a340bbf1_37b9016f","line":36,"range":{"start_line":36,"start_character":4,"end_line":36,"end_character":33},"in_reply_to":"ff7e0aef_121d5ace","updated":"2026-07-31 21:30:50.000000000","message":"Agreed :)","commit_id":"a77dca85a44cbc65687bf860abc69abfba3b278f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"db74fdc3207e85e0cbb914cbf3958d3d90770dfb","unresolved":true,"context_lines":[{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    def allow_share(self, context, instance, share_mapping):"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        @utils.synchronized(share_mapping.share_id)"},{"line_number":89,"context_line":"        def _allow_share():"},{"line_number":90,"context_line":"            def _apply_policy():"},{"line_number":91,"context_line":"                self.manila_api.allow("}],"source_content_type":"text/x-python","patch_set":2,"id":"77d1dc57_43f87bb7","line":88,"updated":"2026-07-31 16:59:27.000000000","message":"I really hate to see us replicate this old pattern from compute manager in here. It just means everything has to be indented an extra level just to use the decorator and everything has to be inside an extra closure. Especially here now that you have your own space, you could write a `share_synchronized` decorator that doe this under the covers...","commit_id":"a77dca85a44cbc65687bf860abc69abfba3b278f"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"3dfdbdc23bbbe895a2c45e41627cafff76484e43","unresolved":false,"context_lines":[{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    def allow_share(self, context, instance, share_mapping):"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        @utils.synchronized(share_mapping.share_id)"},{"line_number":89,"context_line":"        def _allow_share():"},{"line_number":90,"context_line":"            def _apply_policy():"},{"line_number":91,"context_line":"                self.manila_api.allow("}],"source_content_type":"text/x-python","patch_set":2,"id":"c329793a_1ca05da3","line":88,"in_reply_to":"756a528e_494a5a2f","updated":"2026-07-31 21:47:54.000000000","message":"Done","commit_id":"a77dca85a44cbc65687bf860abc69abfba3b278f"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"0c84b048b106b4d9f20caede8010d33128e33efa","unresolved":true,"context_lines":[{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    def allow_share(self, context, instance, share_mapping):"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        @utils.synchronized(share_mapping.share_id)"},{"line_number":89,"context_line":"        def _allow_share():"},{"line_number":90,"context_line":"            def _apply_policy():"},{"line_number":91,"context_line":"                self.manila_api.allow("}],"source_content_type":"text/x-python","patch_set":2,"id":"756a528e_494a5a2f","line":88,"in_reply_to":"77d1dc57_43f87bb7","updated":"2026-07-31 21:30:50.000000000","message":"totally!","commit_id":"a77dca85a44cbc65687bf860abc69abfba3b278f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"8125391cca5ec31989d979ca762e07fdfa9b07ab","unresolved":true,"context_lines":[{"line_number":96,"context_line":"                    \"rw\","},{"line_number":97,"context_line":"                )"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"            def _wait_policy_to_be_applied():"},{"line_number":100,"context_line":"                max_retries \u003d CONF.manila.share_apply_policy_timeout"},{"line_number":101,"context_line":"                attempt_count \u003d 0"},{"line_number":102,"context_line":"                while attempt_count \u003c max_retries:"}],"source_content_type":"text/x-python","patch_set":2,"id":"04f3ddc5_f256fa8a","line":99,"updated":"2026-07-31 17:11:08.000000000","message":"Can we at least move these two helpers out to private methods on the class now, taking proper arguments and avoiding inflating the closure with more closures?","commit_id":"a77dca85a44cbc65687bf860abc69abfba3b278f"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"0c84b048b106b4d9f20caede8010d33128e33efa","unresolved":true,"context_lines":[{"line_number":96,"context_line":"                    \"rw\","},{"line_number":97,"context_line":"                )"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"            def _wait_policy_to_be_applied():"},{"line_number":100,"context_line":"                max_retries \u003d CONF.manila.share_apply_policy_timeout"},{"line_number":101,"context_line":"                attempt_count \u003d 0"},{"line_number":102,"context_line":"                while attempt_count \u003c max_retries:"}],"source_content_type":"text/x-python","patch_set":2,"id":"c8d50872_d468e08d","line":99,"in_reply_to":"04f3ddc5_f256fa8a","updated":"2026-07-31 21:30:50.000000000","message":"ack, attempting..","commit_id":"a77dca85a44cbc65687bf860abc69abfba3b278f"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"3dfdbdc23bbbe895a2c45e41627cafff76484e43","unresolved":false,"context_lines":[{"line_number":96,"context_line":"                    \"rw\","},{"line_number":97,"context_line":"                )"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"            def _wait_policy_to_be_applied():"},{"line_number":100,"context_line":"                max_retries \u003d CONF.manila.share_apply_policy_timeout"},{"line_number":101,"context_line":"                attempt_count \u003d 0"},{"line_number":102,"context_line":"                while attempt_count \u003c max_retries:"}],"source_content_type":"text/x-python","patch_set":2,"id":"d67fc381_df8377f5","line":99,"in_reply_to":"c8d50872_d468e08d","updated":"2026-07-31 21:47:54.000000000","message":"Done","commit_id":"a77dca85a44cbc65687bf860abc69abfba3b278f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"db74fdc3207e85e0cbb914cbf3958d3d90770dfb","unresolved":true,"context_lines":[{"line_number":309,"context_line":""},{"line_number":310,"context_line":"        _deny_share()"},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"    def check_share_usage(self, context, share_mapping, instance):"},{"line_number":313,"context_line":"        \"\"\"Check if a share is still in use by active mappings."},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"        Returns True if the share is still needed (should not be"}],"source_content_type":"text/x-python","patch_set":2,"id":"8b5b5c08_868d9b1f","line":312,"updated":"2026-07-31 16:59:27.000000000","message":"Any reason not to make this like all the other methods here and order the params `context`, `instance`, `share_mapping` ? Aside from OCD reasons, it would also make the above decorator idea apply here as well.","commit_id":"a77dca85a44cbc65687bf860abc69abfba3b278f"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"3dfdbdc23bbbe895a2c45e41627cafff76484e43","unresolved":false,"context_lines":[{"line_number":309,"context_line":""},{"line_number":310,"context_line":"        _deny_share()"},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"    def check_share_usage(self, context, share_mapping, instance):"},{"line_number":313,"context_line":"        \"\"\"Check if a share is still in use by active mappings."},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"        Returns True if the share is still needed (should not be"}],"source_content_type":"text/x-python","patch_set":2,"id":"663c9b10_6d8df342","line":312,"in_reply_to":"7b3807f0_645d2226","updated":"2026-07-31 21:47:54.000000000","message":"Done","commit_id":"a77dca85a44cbc65687bf860abc69abfba3b278f"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"0c84b048b106b4d9f20caede8010d33128e33efa","unresolved":true,"context_lines":[{"line_number":309,"context_line":""},{"line_number":310,"context_line":"        _deny_share()"},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"    def check_share_usage(self, context, share_mapping, instance):"},{"line_number":313,"context_line":"        \"\"\"Check if a share is still in use by active mappings."},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"        Returns True if the share is still needed (should not be"}],"source_content_type":"text/x-python","patch_set":2,"id":"7b3807f0_645d2226","line":312,"in_reply_to":"8b5b5c08_868d9b1f","updated":"2026-07-31 21:30:50.000000000","message":"none at all, some of it was copy-pasta","commit_id":"a77dca85a44cbc65687bf860abc69abfba3b278f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"2e94f85b1dac290ba7460bf79a7fb2bdf7042af8","unresolved":true,"context_lines":[{"line_number":139,"context_line":"            \"too many retries\","},{"line_number":140,"context_line":"        )"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    @share_synchronized"},{"line_number":143,"context_line":"    def allow_share(self, context, instance, share_mapping):"},{"line_number":144,"context_line":"        try:"},{"line_number":145,"context_line":"            compute_utils.notify_about_share_attach_detach("}],"source_content_type":"text/x-python","patch_set":6,"id":"69c42a63_870e18d4","line":142,"updated":"2026-08-06 14:32:08.000000000","message":"\u003c3","commit_id":"d8c77b2e3ed3bd063fd810ca6d36cc4e2ca33410"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"150ec00de0b3232bba8203cdaeafee7c3d16652c","unresolved":false,"context_lines":[{"line_number":139,"context_line":"            \"too many retries\","},{"line_number":140,"context_line":"        )"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    @share_synchronized"},{"line_number":143,"context_line":"    def allow_share(self, context, instance, share_mapping):"},{"line_number":144,"context_line":"        try:"},{"line_number":145,"context_line":"            compute_utils.notify_about_share_attach_detach("}],"source_content_type":"text/x-python","patch_set":6,"id":"d53e996b_48844945","line":142,"in_reply_to":"69c42a63_870e18d4","updated":"2026-08-07 05:00:17.000000000","message":":)","commit_id":"d8c77b2e3ed3bd063fd810ca6d36cc4e2ca33410"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"312e48995198f78e44d3c84e7a0d3205e75e2ebc","unresolved":true,"context_lines":[{"line_number":61,"context_line":"            instance.task_state \u003d None"},{"line_number":62,"context_line":"            instance.save()"},{"line_number":63,"context_line":"        except exception.InstanceNotFound:"},{"line_number":64,"context_line":"            LOG.debug(\u0027Instance has been destroyed from under us while \u0027"},{"line_number":65,"context_line":"                      \u0027trying to set it to ERROR\u0027, instance\u003dinstance)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def get_share_info(self, context, instance, check_status\u003dTrue):"}],"source_content_type":"text/x-python","patch_set":9,"id":"999f5454_0918b06d","line":64,"updated":"2026-08-20 16:51:15.000000000","message":"This is never covered in the tests. I know it\u0027s kinda silly, but the number of times I\u0027ve fat-fingered something in an exception handler that prevents debugging of an actual issue when the exceptional case actually happens makes me pretty sensitive here.","commit_id":"afdd114fa81645d9fe666a15b78feabe028777ab"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"44048ee482915fa1487555c7383f738ea6576231","unresolved":false,"context_lines":[{"line_number":61,"context_line":"            instance.task_state \u003d None"},{"line_number":62,"context_line":"            instance.save()"},{"line_number":63,"context_line":"        except exception.InstanceNotFound:"},{"line_number":64,"context_line":"            LOG.debug(\u0027Instance has been destroyed from under us while \u0027"},{"line_number":65,"context_line":"                      \u0027trying to set it to ERROR\u0027, instance\u003dinstance)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def get_share_info(self, context, instance, check_status\u003dTrue):"}],"source_content_type":"text/x-python","patch_set":9,"id":"e2e7befe_0461c710","line":64,"in_reply_to":"3f401ed5_303cc728","updated":"2026-08-21 05:38:59.000000000","message":"Done","commit_id":"afdd114fa81645d9fe666a15b78feabe028777ab"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"876e7f80590a9e7ff7428823cc03b98471ef16d6","unresolved":true,"context_lines":[{"line_number":61,"context_line":"            instance.task_state \u003d None"},{"line_number":62,"context_line":"            instance.save()"},{"line_number":63,"context_line":"        except exception.InstanceNotFound:"},{"line_number":64,"context_line":"            LOG.debug(\u0027Instance has been destroyed from under us while \u0027"},{"line_number":65,"context_line":"                      \u0027trying to set it to ERROR\u0027, instance\u003dinstance)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def get_share_info(self, context, instance, check_status\u003dTrue):"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f401ed5_303cc728","line":64,"in_reply_to":"999f5454_0918b06d","updated":"2026-08-21 05:30:22.000000000","message":"++ Can do","commit_id":"afdd114fa81645d9fe666a15b78feabe028777ab"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"669b845046b3d4192fb72f075a1acee9a45b9bd5","unresolved":true,"context_lines":[{"line_number":86,"context_line":"                        instance.id,"},{"line_number":87,"context_line":"                        share_mapping.status,"},{"line_number":88,"context_line":"                    )"},{"line_number":89,"context_line":"                    self._set_instance_error_state(instance)"},{"line_number":90,"context_line":"                    raise exception.ShareErrorUnexpectedStatus("},{"line_number":91,"context_line":"                        share_id\u003dshare_mapping.share_id,"},{"line_number":92,"context_line":"                        instance_uuid\u003dinstance.id,"}],"source_content_type":"text/x-python","patch_set":9,"id":"95d4388b_08a3dda8","line":89,"range":{"start_line":89,"start_character":20,"end_line":89,"end_character":60},"updated":"2026-08-18 15:02:32.000000000","message":"Same as `mount()`/`umount()`: `get_share_info()` already raises `ShareErrorUnexpectedStatus`, so it could simply not touch the instance state and let the callers decide, which would be consistent with the approach taken in this patch for mount/umount (\"log and re-raise, letting callers decide what state is appropriate\"). This would also remove the need for the \"duplicated\" `_set_instance_error_state` method in `ShareManager`.","commit_id":"afdd114fa81645d9fe666a15b78feabe028777ab"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"82b5856c73552b37114c9697203b248989891350","unresolved":false,"context_lines":[{"line_number":86,"context_line":"                        instance.id,"},{"line_number":87,"context_line":"                        share_mapping.status,"},{"line_number":88,"context_line":"                    )"},{"line_number":89,"context_line":"                    self._set_instance_error_state(instance)"},{"line_number":90,"context_line":"                    raise exception.ShareErrorUnexpectedStatus("},{"line_number":91,"context_line":"                        share_id\u003dshare_mapping.share_id,"},{"line_number":92,"context_line":"                        instance_uuid\u003dinstance.id,"}],"source_content_type":"text/x-python","patch_set":9,"id":"c1fc1893_df17c977","line":89,"range":{"start_line":89,"start_character":20,"end_line":89,"end_character":60},"in_reply_to":"0877bc95_251d6465","updated":"2026-08-26 04:28:48.000000000","message":"Acknowledged","commit_id":"afdd114fa81645d9fe666a15b78feabe028777ab"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"d4082cdf30f9ca9add593cb6fde5023f7c5fe0dc","unresolved":true,"context_lines":[{"line_number":86,"context_line":"                        instance.id,"},{"line_number":87,"context_line":"                        share_mapping.status,"},{"line_number":88,"context_line":"                    )"},{"line_number":89,"context_line":"                    self._set_instance_error_state(instance)"},{"line_number":90,"context_line":"                    raise exception.ShareErrorUnexpectedStatus("},{"line_number":91,"context_line":"                        share_id\u003dshare_mapping.share_id,"},{"line_number":92,"context_line":"                        instance_uuid\u003dinstance.id,"}],"source_content_type":"text/x-python","patch_set":9,"id":"0877bc95_251d6465","line":89,"range":{"start_line":89,"start_character":20,"end_line":89,"end_character":60},"in_reply_to":"7405b902_93ab5f73","updated":"2026-08-25 14:27:39.000000000","message":"Fair enough, the ATTACHING/DETACHING case is indeed different from transient mount/umount failures. Not worth duplicating the same handling in 6 places, I\u0027m fine with keeping it as is.","commit_id":"afdd114fa81645d9fe666a15b78feabe028777ab"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"bbeb33b91c22e699afaafc9830d6c156330b67b5","unresolved":true,"context_lines":[{"line_number":86,"context_line":"                        instance.id,"},{"line_number":87,"context_line":"                        share_mapping.status,"},{"line_number":88,"context_line":"                    )"},{"line_number":89,"context_line":"                    self._set_instance_error_state(instance)"},{"line_number":90,"context_line":"                    raise exception.ShareErrorUnexpectedStatus("},{"line_number":91,"context_line":"                        share_id\u003dshare_mapping.share_id,"},{"line_number":92,"context_line":"                        instance_uuid\u003dinstance.id,"}],"source_content_type":"text/x-python","patch_set":9,"id":"7405b902_93ab5f73","line":89,"range":{"start_line":89,"start_character":20,"end_line":89,"end_character":60},"in_reply_to":"95d4388b_08a3dda8","updated":"2026-08-19 05:49:51.000000000","message":"ack, that would be consistent.. the difference I see is that a stuck ATTACHING/DETACHING share means something went wrong with the db operations - its not a transient/operational failure like a mount or unmount.. so, moving this state transition decision to the callers would mean we\u0027d write the same code in ~6 places with the same outcome. \n\nDo you feel strongly about this?","commit_id":"afdd114fa81645d9fe666a15b78feabe028777ab"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"312e48995198f78e44d3c84e7a0d3205e75e2ebc","unresolved":true,"context_lines":[{"line_number":335,"context_line":"        # consider instances on the same host when deciding whether"},{"line_number":336,"context_line":"        # the access rule is still needed. Instances on other hosts"},{"line_number":337,"context_line":"        # have independent access rules."},{"line_number":338,"context_line":"        if share_mapping.share_proto \u003d\u003d fields.ShareMappingProto.NFS:"},{"line_number":339,"context_line":"            other_uuids \u003d list({"},{"line_number":340,"context_line":"                sm.instance_uuid"},{"line_number":341,"context_line":"                for sm in share_mappings_used_by_share"}],"source_content_type":"text/x-python","patch_set":9,"id":"07a8f264_05774d56","line":338,"updated":"2026-08-20 16:51:15.000000000","message":"Looks like this case is never tested?","commit_id":"afdd114fa81645d9fe666a15b78feabe028777ab"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"876e7f80590a9e7ff7428823cc03b98471ef16d6","unresolved":true,"context_lines":[{"line_number":335,"context_line":"        # consider instances on the same host when deciding whether"},{"line_number":336,"context_line":"        # the access rule is still needed. Instances on other hosts"},{"line_number":337,"context_line":"        # have independent access rules."},{"line_number":338,"context_line":"        if share_mapping.share_proto \u003d\u003d fields.ShareMappingProto.NFS:"},{"line_number":339,"context_line":"            other_uuids \u003d list({"},{"line_number":340,"context_line":"                sm.instance_uuid"},{"line_number":341,"context_line":"                for sm in share_mappings_used_by_share"}],"source_content_type":"text/x-python","patch_set":9,"id":"592fe36d_8414de31","line":338,"in_reply_to":"07a8f264_05774d56","updated":"2026-08-21 05:30:22.000000000","message":"Adding","commit_id":"afdd114fa81645d9fe666a15b78feabe028777ab"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"44048ee482915fa1487555c7383f738ea6576231","unresolved":false,"context_lines":[{"line_number":335,"context_line":"        # consider instances on the same host when deciding whether"},{"line_number":336,"context_line":"        # the access rule is still needed. Instances on other hosts"},{"line_number":337,"context_line":"        # have independent access rules."},{"line_number":338,"context_line":"        if share_mapping.share_proto \u003d\u003d fields.ShareMappingProto.NFS:"},{"line_number":339,"context_line":"            other_uuids \u003d list({"},{"line_number":340,"context_line":"                sm.instance_uuid"},{"line_number":341,"context_line":"                for sm in share_mappings_used_by_share"}],"source_content_type":"text/x-python","patch_set":9,"id":"507d97d6_28e6840c","line":338,"in_reply_to":"592fe36d_8414de31","updated":"2026-08-21 05:38:59.000000000","message":"Done","commit_id":"afdd114fa81645d9fe666a15b78feabe028777ab"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"054c339ef86121eb509bb77575e5dc26ffd5411e","unresolved":true,"context_lines":[{"line_number":83,"context_line":"                        \"still in \u0027%s\u0027 state. Setting the instance \""},{"line_number":84,"context_line":"                        \"in error.\","},{"line_number":85,"context_line":"                        share_mapping.share_id,"},{"line_number":86,"context_line":"                        instance.id,"},{"line_number":87,"context_line":"                        share_mapping.status,"},{"line_number":88,"context_line":"                    )"},{"line_number":89,"context_line":"                    self._set_instance_error_state(instance)"}],"source_content_type":"text/x-python","patch_set":16,"id":"9eb78f62_80670b09","line":86,"range":{"start_line":86,"start_character":33,"end_line":86,"end_character":35},"updated":"2026-09-02 18:34:06.000000000","message":"This should be `uuid`, not `id` (`id` is the primary key in the database).","commit_id":"6cca020d22325d64139141939e13dbc3316cc3fd"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"e2efdf23a47a89cbfd62526dce2767e055f7c277","unresolved":true,"context_lines":[{"line_number":83,"context_line":"                        \"still in \u0027%s\u0027 state. Setting the instance \""},{"line_number":84,"context_line":"                        \"in error.\","},{"line_number":85,"context_line":"                        share_mapping.share_id,"},{"line_number":86,"context_line":"                        instance.id,"},{"line_number":87,"context_line":"                        share_mapping.status,"},{"line_number":88,"context_line":"                    )"},{"line_number":89,"context_line":"                    self._set_instance_error_state(instance)"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa5039ed_45a014ce","line":86,"range":{"start_line":86,"start_character":33,"end_line":86,"end_character":35},"in_reply_to":"9eb78f62_80670b09","updated":"2026-09-03 02:37:13.000000000","message":"Great catch! I used it correctly elsewhere :)","commit_id":"6cca020d22325d64139141939e13dbc3316cc3fd"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"28a8611e70c56fca5ee056cc6cca699f3e1e4408","unresolved":false,"context_lines":[{"line_number":83,"context_line":"                        \"still in \u0027%s\u0027 state. Setting the instance \""},{"line_number":84,"context_line":"                        \"in error.\","},{"line_number":85,"context_line":"                        share_mapping.share_id,"},{"line_number":86,"context_line":"                        instance.id,"},{"line_number":87,"context_line":"                        share_mapping.status,"},{"line_number":88,"context_line":"                    )"},{"line_number":89,"context_line":"                    self._set_instance_error_state(instance)"}],"source_content_type":"text/x-python","patch_set":16,"id":"81d2acac_3e713864","line":86,"range":{"start_line":86,"start_character":33,"end_line":86,"end_character":35},"in_reply_to":"fa5039ed_45a014ce","updated":"2026-09-04 03:27:46.000000000","message":"Done","commit_id":"6cca020d22325d64139141939e13dbc3316cc3fd"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"054c339ef86121eb509bb77575e5dc26ffd5411e","unresolved":true,"context_lines":[{"line_number":89,"context_line":"                    self._set_instance_error_state(instance)"},{"line_number":90,"context_line":"                    raise exception.ShareErrorUnexpectedStatus("},{"line_number":91,"context_line":"                        share_id\u003dshare_mapping.share_id,"},{"line_number":92,"context_line":"                        instance_uuid\u003dinstance.id,"},{"line_number":93,"context_line":"                    )"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"                if share_mapping.status \u003d\u003d fsm.ERROR:"}],"source_content_type":"text/x-python","patch_set":16,"id":"ad314355_7d66510f","line":92,"range":{"start_line":92,"start_character":47,"end_line":92,"end_character":49},"updated":"2026-09-02 18:34:06.000000000","message":"Same.","commit_id":"6cca020d22325d64139141939e13dbc3316cc3fd"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"e2efdf23a47a89cbfd62526dce2767e055f7c277","unresolved":false,"context_lines":[{"line_number":89,"context_line":"                    self._set_instance_error_state(instance)"},{"line_number":90,"context_line":"                    raise exception.ShareErrorUnexpectedStatus("},{"line_number":91,"context_line":"                        share_id\u003dshare_mapping.share_id,"},{"line_number":92,"context_line":"                        instance_uuid\u003dinstance.id,"},{"line_number":93,"context_line":"                    )"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"                if share_mapping.status \u003d\u003d fsm.ERROR:"}],"source_content_type":"text/x-python","patch_set":16,"id":"bf5a0dcd_9015d5be","line":92,"range":{"start_line":92,"start_character":47,"end_line":92,"end_character":49},"in_reply_to":"ad314355_7d66510f","updated":"2026-09-03 02:37:13.000000000","message":"Done","commit_id":"6cca020d22325d64139141939e13dbc3316cc3fd"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"054c339ef86121eb509bb77575e5dc26ffd5411e","unresolved":true,"context_lines":[{"line_number":97,"context_line":"                        \"Share id \u0027%s\u0027 attached to server id \u0027%s\u0027 is in \""},{"line_number":98,"context_line":"                        \"error state.\","},{"line_number":99,"context_line":"                        share_mapping.share_id,"},{"line_number":100,"context_line":"                        instance.id"},{"line_number":101,"context_line":"                    )"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        return share_info"}],"source_content_type":"text/x-python","patch_set":16,"id":"ac958fac_7085cf10","line":100,"range":{"start_line":100,"start_character":33,"end_line":100,"end_character":35},"updated":"2026-09-02 18:34:06.000000000","message":"Same.","commit_id":"6cca020d22325d64139141939e13dbc3316cc3fd"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"e2efdf23a47a89cbfd62526dce2767e055f7c277","unresolved":false,"context_lines":[{"line_number":97,"context_line":"                        \"Share id \u0027%s\u0027 attached to server id \u0027%s\u0027 is in \""},{"line_number":98,"context_line":"                        \"error state.\","},{"line_number":99,"context_line":"                        share_mapping.share_id,"},{"line_number":100,"context_line":"                        instance.id"},{"line_number":101,"context_line":"                    )"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        return share_info"}],"source_content_type":"text/x-python","patch_set":16,"id":"3e5bb830_f629999e","line":100,"range":{"start_line":100,"start_character":33,"end_line":100,"end_character":35},"in_reply_to":"ac958fac_7085cf10","updated":"2026-09-03 02:37:13.000000000","message":"Done","commit_id":"6cca020d22325d64139141939e13dbc3316cc3fd"}],"nova/tests/unit/compute/test_compute_mgr.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"bf240680d022c8ca0e2171f087d4ba5f88678672","unresolved":false,"context_lines":[{"line_number":1605,"context_line":"                side_effect\u003dexception.VirtualInterfacePlugException("},{"line_number":1606,"context_line":"                    \"Unexpected vif_type\u003dbinding_failed\")),"},{"line_number":1607,"context_line":"            mock.patch.object(self.compute, \u0027_set_instance_obj_error_state\u0027),"},{"line_number":1608,"context_line":"            mock.patch(\u0027nova.compute.share_management.ShareManager.get_share_info\u0027,"},{"line_number":1609,"context_line":"                return_value\u003dobjects.ShareMappingList()),"},{"line_number":1610,"context_line":"        ) as ("},{"line_number":1611,"context_line":"            get_admin_context,"}],"source_content_type":"text/x-python","patch_set":7,"id":"223627ef_7ca28456","line":1608,"updated":"2026-08-07 08:10:39.000000000","message":"pep8: E501 line too long (83 \u003e 79 characters)","commit_id":"95f7357442b3395c8d97eb8bfe78ff78a9f6408f"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"bf240680d022c8ca0e2171f087d4ba5f88678672","unresolved":false,"context_lines":[{"line_number":1636,"context_line":"            mock.patch.object(self.compute.driver, \u0027plug_vifs\u0027,"},{"line_number":1637,"context_line":"                side_effect\u003dexception.PciDeviceNotFoundById(\"pci-addr\")),"},{"line_number":1638,"context_line":"            mock.patch(\"nova.compute.manager.LOG.exception\"),"},{"line_number":1639,"context_line":"            mock.patch(\"nova.compute.share_management.ShareManager.get_share_info\","},{"line_number":1640,"context_line":"            return_value\u003dobjects.ShareMappingList()),"},{"line_number":1641,"context_line":"        ) as ("},{"line_number":1642,"context_line":"                get_admin_context,"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f8075e2_f7cbe960","line":1639,"updated":"2026-08-07 08:10:39.000000000","message":"pep8: E501 line too long (83 \u003e 79 characters)","commit_id":"95f7357442b3395c8d97eb8bfe78ff78a9f6408f"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"bf240680d022c8ca0e2171f087d4ba5f88678672","unresolved":false,"context_lines":[{"line_number":1829,"context_line":""},{"line_number":1830,"context_line":"        with test.nested("},{"line_number":1831,"context_line":"            mock.patch.object(self.compute, \u0027_complete_partial_deletion\u0027),"},{"line_number":1832,"context_line":"            mock.patch(\"nova.compute.share_management.ShareManager.get_share_info\","},{"line_number":1833,"context_line":"                return_value\u003dobjects.ShareMappingList())"},{"line_number":1834,"context_line":"        ) as (mock_deletion, mock_shares):"},{"line_number":1835,"context_line":"            mock_deletion.side_effect \u003d test.TestingException()"}],"source_content_type":"text/x-python","patch_set":7,"id":"71833de2_bdd8701c","line":1832,"updated":"2026-08-07 08:10:39.000000000","message":"pep8: E501 line too long (83 \u003e 79 characters)","commit_id":"95f7357442b3395c8d97eb8bfe78ff78a9f6408f"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"bf240680d022c8ca0e2171f087d4ba5f88678672","unresolved":false,"context_lines":[{"line_number":1858,"context_line":"                mock.patch.object(self.compute, \u0027_delete_instance\u0027),"},{"line_number":1859,"context_line":"                mock.patch.object(instance, \u0027obj_load_attr\u0027),"},{"line_number":1860,"context_line":"                mock.patch("},{"line_number":1861,"context_line":"                    \u0027nova.compute.share_management.ShareManager.get_share_info\u0027,"},{"line_number":1862,"context_line":"                    return_value\u003dobjects.ShareMappingList()),"},{"line_number":1863,"context_line":"        ) as (mock_get, mock_delete, mock_load, mock_shares):"},{"line_number":1864,"context_line":"            self.compute._init_instance(self.context, instance)"}],"source_content_type":"text/x-python","patch_set":7,"id":"cdf3857a_60eae73a","line":1861,"updated":"2026-08-07 08:10:39.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"95f7357442b3395c8d97eb8bfe78ff78a9f6408f"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"bf240680d022c8ca0e2171f087d4ba5f88678672","unresolved":false,"context_lines":[{"line_number":2023,"context_line":"                task_state\u003dtask_state)"},{"line_number":2024,"context_line":"        with test.nested("},{"line_number":2025,"context_line":"            mock.patch.object(instance, \u0027save\u0027),"},{"line_number":2026,"context_line":"            mock.patch(\"nova.compute.share_management.ShareManager.get_share_info\","},{"line_number":2027,"context_line":"                       return_value\u003dobjects.ShareMappingList()),"},{"line_number":2028,"context_line":"        ) as (save, mock_shares):"},{"line_number":2029,"context_line":"            self.compute._init_instance(self.context, instance)"}],"source_content_type":"text/x-python","patch_set":7,"id":"ecb79b92_e4b18898","line":2026,"updated":"2026-08-07 08:10:39.000000000","message":"pep8: E501 line too long (83 \u003e 79 characters)","commit_id":"95f7357442b3395c8d97eb8bfe78ff78a9f6408f"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"bf240680d022c8ca0e2171f087d4ba5f88678672","unresolved":false,"context_lines":[{"line_number":2090,"context_line":"    def _test_init_instance_cleans_image_states(self, instance):"},{"line_number":2091,"context_line":"        with test.nested("},{"line_number":2092,"context_line":"            mock.patch.object(instance, \u0027save\u0027),"},{"line_number":2093,"context_line":"            mock.patch(\"nova.compute.share_management.ShareManager.get_share_info\","},{"line_number":2094,"context_line":"                       return_value\u003dobjects.ShareMappingList()),"},{"line_number":2095,"context_line":"        ) as (save, mock_shares):"},{"line_number":2096,"context_line":"            self.compute._get_power_state \u003d mock.Mock()"}],"source_content_type":"text/x-python","patch_set":7,"id":"96a89a13_78c90e78","line":2093,"updated":"2026-08-07 08:10:39.000000000","message":"pep8: E501 line too long (83 \u003e 79 characters)","commit_id":"95f7357442b3395c8d97eb8bfe78ff78a9f6408f"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"bf240680d022c8ca0e2171f087d4ba5f88678672","unresolved":false,"context_lines":[{"line_number":2197,"context_line":"                mock.patch.object(self.compute, \u0027_delete_instance\u0027),"},{"line_number":2198,"context_line":"                mock.patch.object(instance, \u0027obj_load_attr\u0027),"},{"line_number":2199,"context_line":"                mock.patch("},{"line_number":2200,"context_line":"                    \"nova.compute.share_management.ShareManager.get_share_info\","},{"line_number":2201,"context_line":"                    return_value\u003dobjects.ShareMappingList()),"},{"line_number":2202,"context_line":"        ) as (mock_get, mock_delete, mock_load, mock_shares):"},{"line_number":2203,"context_line":"            self.compute._init_instance(self.context, instance)"}],"source_content_type":"text/x-python","patch_set":7,"id":"c7661f0e_21a4245f","line":2200,"updated":"2026-08-07 08:10:39.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"95f7357442b3395c8d97eb8bfe78ff78a9f6408f"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"bf240680d022c8ca0e2171f087d4ba5f88678672","unresolved":false,"context_lines":[{"line_number":2219,"context_line":"                              return_value\u003dpower_state.RUNNING),"},{"line_number":2220,"context_line":"            mock.patch.object(objects.Instance, \u0027get_network_info\u0027),"},{"line_number":2221,"context_line":"            mock.patch.object(instance, \u0027save\u0027, autospec\u003dTrue),"},{"line_number":2222,"context_line":"            mock.patch(\"nova.compute.share_management.ShareManager.get_share_info\","},{"line_number":2223,"context_line":"                       return_value\u003dobjects.ShareMappingList())"},{"line_number":2224,"context_line":"        ) as ("},{"line_number":2225,"context_line":"                mock_get_power_state,"}],"source_content_type":"text/x-python","patch_set":7,"id":"f2d0dec7_53b94355","line":2222,"updated":"2026-08-07 08:10:39.000000000","message":"pep8: E501 line too long (83 \u003e 79 characters)","commit_id":"95f7357442b3395c8d97eb8bfe78ff78a9f6408f"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"bf240680d022c8ca0e2171f087d4ba5f88678672","unresolved":false,"context_lines":[{"line_number":3882,"context_line":"            mock.patch.object(instance, \u0027save\u0027, autospec\u003dTrue),"},{"line_number":3883,"context_line":"            mock.patch.object(objects.Instance, \u0027get_network_info\u0027),"},{"line_number":3884,"context_line":"            mock.patch.object(self.compute, \u0027reboot_instance\u0027),"},{"line_number":3885,"context_line":"            mock.patch(\"nova.compute.share_management.ShareManager.get_share_info\","},{"line_number":3886,"context_line":"                       return_value\u003dobjects.ShareMappingList())"},{"line_number":3887,"context_line":"          ) as ("},{"line_number":3888,"context_line":"            _get_power_state,"}],"source_content_type":"text/x-python","patch_set":7,"id":"e267e055_87641ca8","line":3885,"updated":"2026-08-07 08:10:39.000000000","message":"pep8: E501 line too long (83 \u003e 79 characters)","commit_id":"95f7357442b3395c8d97eb8bfe78ff78a9f6408f"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"bf240680d022c8ca0e2171f087d4ba5f88678672","unresolved":false,"context_lines":[{"line_number":6610,"context_line":"            mock.patch.object(self.compute, \u0027_get_power_state\u0027,"},{"line_number":6611,"context_line":"                              return_value\u003dpower_state.RUNNING),"},{"line_number":6612,"context_line":"            mock.patch.object(instance, \u0027save\u0027),"},{"line_number":6613,"context_line":"            mock.patch(\u0027nova.compute.share_management.ShareManager.get_share_info\u0027)"},{"line_number":6614,"context_line":"        ) as ("},{"line_number":6615,"context_line":"            elevated_context, get_nw_info, get_rescue_image,"},{"line_number":6616,"context_line":"            get_bdm_list, get_block_info, notify_instance_usage,"}],"source_content_type":"text/x-python","patch_set":7,"id":"cdc65854_7e185ecf","line":6613,"updated":"2026-08-07 08:10:39.000000000","message":"pep8: E501 line too long (83 \u003e 79 characters)","commit_id":"95f7357442b3395c8d97eb8bfe78ff78a9f6408f"}]}
