)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e235849e56a2f763a7da8fcb7e35283f8d3bc5e1","unresolved":true,"context_lines":[{"line_number":18,"context_line":"2. All thread pool executors are created runtime when they are"},{"line_number":19,"context_line":"required for any tasks for first time (instead of pre-initialized)."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Solveing these issue by moving the service specific code to manager"},{"line_number":22,"context_line":"side and also create/initialize the executors during start initialization."},{"line_number":23,"context_line":"This way we will keep thread pool factory a generic facotry to server"},{"line_number":24,"context_line":"all services but services control/initialize the executors they need."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"dfb8f747_dca2ac7d","line":21,"range":{"start_line":21,"start_character":0,"end_line":21,"end_character":8},"updated":"2026-09-01 07:42:37.000000000","message":"nit:Solving","commit_id":"ea683f9d36b2f6c5f908987cf0007313e31708f2"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"fb8ad7cb1fdd8ceebe5e8bd883fe9df083ae2bf8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"8d97d7ab_eeecb326","updated":"2026-08-21 18:43:08.000000000","message":"Thanks for spinning this quickly. I\u0027d prefer to be more static and explicit about what we create and can use within a service. But, this alone is better than before I think. Interested to hear opinions from gibi.","commit_id":"ea683f9d36b2f6c5f908987cf0007313e31708f2"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"812237fcfd90907ac1412311f9d1cd5311367ea6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"8037a252_e1d3c204","updated":"2026-08-20 21:12:50.000000000","message":"recheck ceph job","commit_id":"ea683f9d36b2f6c5f908987cf0007313e31708f2"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"30b5c1d0f023e659d5e4518a4318bd3e0b1d6839","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":3,"id":"659c2522_81c2fb58","in_reply_to":"8d97d7ab_eeecb326","updated":"2026-08-21 19:08:58.000000000","message":"ack","commit_id":"ea683f9d36b2f6c5f908987cf0007313e31708f2"}],"nova/compute/manager.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"fb8ad7cb1fdd8ceebe5e8bd883fe9df083ae2bf8","unresolved":true,"context_lines":[{"line_number":668,"context_line":"        self.query_client \u003d query.SchedulerQueryClient()"},{"line_number":669,"context_line":"        self.instance_events \u003d InstanceEvents()"},{"line_number":670,"context_line":"        self._sync_power_executor \u003d thread_pool_factory.get_executor("},{"line_number":671,"context_line":"            thread_pool_factory.ExecutorType.SYNC_POWER,"},{"line_number":672,"context_line":"            max_workers\u003dCONF.sync_power_state_pool_size)"},{"line_number":673,"context_line":"        self._syncs_in_progress: set[str] \u003d set()"},{"line_number":674,"context_line":"        self._syncs_in_progress_lock \u003d threading.Lock()"}],"source_content_type":"text/x-python","patch_set":3,"id":"4d92dac6_43ec70c4","line":671,"range":{"start_line":671,"start_character":13,"end_line":671,"end_character":55},"updated":"2026-08-21 18:43:08.000000000","message":"I was kinda thinking/hoping we just don\u0027t have the global enum for these, since it makes that module less of a utility and more of a thing that knows a bunch of details about how it is used. Not a big deal, and maybe the enum is really necessary for spinning up things in the executor from other modules than just `compute.manager`.\n\nBut, I definitely prefer this pattern of putting the config and the what-do-we-spin-up-in-$service logic in the service itself.","commit_id":"ea683f9d36b2f6c5f908987cf0007313e31708f2"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"30b5c1d0f023e659d5e4518a4318bd3e0b1d6839","unresolved":true,"context_lines":[{"line_number":668,"context_line":"        self.query_client \u003d query.SchedulerQueryClient()"},{"line_number":669,"context_line":"        self.instance_events \u003d InstanceEvents()"},{"line_number":670,"context_line":"        self._sync_power_executor \u003d thread_pool_factory.get_executor("},{"line_number":671,"context_line":"            thread_pool_factory.ExecutorType.SYNC_POWER,"},{"line_number":672,"context_line":"            max_workers\u003dCONF.sync_power_state_pool_size)"},{"line_number":673,"context_line":"        self._syncs_in_progress: set[str] \u003d set()"},{"line_number":674,"context_line":"        self._syncs_in_progress_lock \u003d threading.Lock()"}],"source_content_type":"text/x-python","patch_set":3,"id":"85f6cec8_cf542935","line":671,"range":{"start_line":671,"start_character":13,"end_line":671,"end_character":55},"in_reply_to":"4d92dac6_43ec70c4","updated":"2026-08-21 19:08:58.000000000","message":"ack, yeah i prefer to have a central enum so that we know what all type of executors we have for now and can using similar executors in other services if ever needed.","commit_id":"ea683f9d36b2f6c5f908987cf0007313e31708f2"}],"nova/tests/unit/compute/test_compute_mgr.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e235849e56a2f763a7da8fcb7e35283f8d3bc5e1","unresolved":true,"context_lines":[{"line_number":12137,"context_line":""},{"line_number":12138,"context_line":"    def _cleanup_live_migration_executor(self):"},{"line_number":12139,"context_line":"        # live migration executor is singleton per process so even a new"},{"line_number":12140,"context_line":"        # comoute manager is created in tests it still in same process."},{"line_number":12141,"context_line":"        # If we need to verify things on a brand new executor then we need"},{"line_number":12142,"context_line":"        # to cleanup the existing one if there is any."},{"line_number":12143,"context_line":"        old_executor \u003d thread_pool_factory.FACTORY._all_executors.pop("}],"source_content_type":"text/x-python","patch_set":3,"id":"b1e33a7c_297fc6d5","line":12140,"range":{"start_line":12140,"start_character":10,"end_line":12140,"end_character":17},"updated":"2026-09-01 07:42:37.000000000","message":"nit:compute","commit_id":"ea683f9d36b2f6c5f908987cf0007313e31708f2"}],"nova/thread_pool_factory.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"fb8ad7cb1fdd8ceebe5e8bd883fe9df083ae2bf8","unresolved":true,"context_lines":[{"line_number":73,"context_line":"    }"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    @classmethod"},{"line_number":76,"context_line":"    def get(cls, executor_type):"},{"line_number":77,"context_line":"        size_fn \u003d cls._EXECUTOR_POOL_SIZE.get(executor_type, None)"},{"line_number":78,"context_line":"        return size_fn() if size_fn else None"},{"line_number":79,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"10b5a632_564ee561","line":76,"updated":"2026-08-21 18:43:08.000000000","message":"If the default is really always a default, perhaps we should just spin it up the first time we do anything? I was actually thinking this would be less automatic and more explicit (create executor at start time, attempt to use one the service hasn\u0027t started is an error).\n\nAnd the scatter/gather one as well.. why not explicitly opt-in to that one as well? api needs it, scheduler needs it, superconductor needs it.. regular conductor does not, compute does not.\n\nIt\u0027s a detail I guess, perhaps one of style, but just commenting about what I was expecting.","commit_id":"ea683f9d36b2f6c5f908987cf0007313e31708f2"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"30b5c1d0f023e659d5e4518a4318bd3e0b1d6839","unresolved":true,"context_lines":[{"line_number":73,"context_line":"    }"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    @classmethod"},{"line_number":76,"context_line":"    def get(cls, executor_type):"},{"line_number":77,"context_line":"        size_fn \u003d cls._EXECUTOR_POOL_SIZE.get(executor_type, None)"},{"line_number":78,"context_line":"        return size_fn() if size_fn else None"},{"line_number":79,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"663c739b_1615bc6c","line":76,"in_reply_to":"10b5a632_564ee561","updated":"2026-08-21 19:08:58.000000000","message":"\u003e If the default is really always a default, perhaps we should just spin it up the first time we do anything? I was actually thinking this would be less automatic and more explicit (create executor at start time, attempt to use one the service hasn\u0027t started is an error).\n\nOk, I think less automatic is a good idea.  Basically, to separate the creation and get. service needs to create the required executors explicitly when starting up. And get executors only returns the already created one, and throws an error if it does not exist.\n\n\u003e \n\u003e And the scatter/gather one as well.. why not explicitly opt-in to that one as well? api needs it, scheduler needs it, superconductor needs it.. regular conductor does not, compute does not.\n\nBecause it was required by multiple services, I thought of keeping it as it is, but yes, making them explicitly requested by the services is better. \n\n\u003e \n\u003e It\u0027s a detail I guess, perhaps one of style, but just commenting about what I was expecting.","commit_id":"ea683f9d36b2f6c5f908987cf0007313e31708f2"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"b770122ad010e7a310578e6847e831e2f9847852","unresolved":true,"context_lines":[{"line_number":73,"context_line":"    }"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    @classmethod"},{"line_number":76,"context_line":"    def get(cls, executor_type):"},{"line_number":77,"context_line":"        size_fn \u003d cls._EXECUTOR_POOL_SIZE.get(executor_type, None)"},{"line_number":78,"context_line":"        return size_fn() if size_fn else None"},{"line_number":79,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"8bcd8295_56756b43","line":76,"in_reply_to":"19e1192c_b83296fc","updated":"2026-09-01 18:41:54.000000000","message":"in functional tests, if two service create the default execvutor in statup then the 2nd service will get the same executor which first service created. factory will not create two executor and track only one unless there is race condition while creating two same type of executors. I am hoping functional tests starts services one by one so there should not be any race in creation of same executor. or am i missing here anything?","commit_id":"ea683f9d36b2f6c5f908987cf0007313e31708f2"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e235849e56a2f763a7da8fcb7e35283f8d3bc5e1","unresolved":true,"context_lines":[{"line_number":73,"context_line":"    }"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    @classmethod"},{"line_number":76,"context_line":"    def get(cls, executor_type):"},{"line_number":77,"context_line":"        size_fn \u003d cls._EXECUTOR_POOL_SIZE.get(executor_type, None)"},{"line_number":78,"context_line":"        return size_fn() if size_fn else None"},{"line_number":79,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"19e1192c_b83296fc","line":76,"in_reply_to":"663c739b_1615bc6c","updated":"2026-09-01 07:42:37.000000000","message":"I\u0027m OK to make the creation explicit.\nOne thing to be careful of is that in a functional test two service will try to create the same (e.g. default) executor independently. So if it is explicit create then there will be two executors created for the same type but this factory will only track one.","commit_id":"ea683f9d36b2f6c5f908987cf0007313e31708f2"}]}
