)]}'
{"/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":"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"}],"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"}],"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"}],"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"}]}
