Activity log for bug #1973656

Date Who What changed Old value New value Message
2022-05-17 00:51:15 norman shen bug added bug
2022-05-17 00:52:01 norman shen description I found meaning of option "router_auto_schedule" is hard to follow. A quick code review finds it is only used at ```python def get_router_ids(self, context, host): """Returns IDs of routers scheduled to l3 agent on <host> This will autoschedule unhosted routers to l3 agent on <host> and then return all ids of routers scheduled to it. """ if extensions.is_extension_supported( self.l3plugin, constants.L3_AGENT_SCHEDULER_EXT_ALIAS): if cfg.CONF.router_auto_schedule: self.l3plugin.auto_schedule_routers(context, host) return self.l3plugin.list_router_ids_on_host(context, host) ``` which seems to be fixing router without agents associated with it. And even if I turn this option off, router is still able to be properly scheduled to agents. because ```python @registry.receives(resources.ROUTER, [events.AFTER_CREATE], priority_group.PRIORITY_ROUTER_EXTENDED_ATTRIBUTE) def _after_router_create(self, resource, event, trigger, context, router_id, router, router_db, **kwargs): if not router['ha']: return try: self.schedule_router(context, router_id) router['ha_vr_id'] = router_db.extra_attributes.ha_vr_id self._notify_router_updated(context, router_id) except Exception as e: with excutils.save_and_reraise_exception() as ctx: if isinstance(e, l3ha_exc.NoVRIDAvailable): ctx.reraise = False LOG.warning("No more VRIDs for router: %s", e) else: LOG.exception("Failed to schedule HA router %s.", router_id) router['status'] = self._update_router_db( context, router_id, {'status': constants.ERROR})['status'] ``` seems to not respecting this option. So IMO auto_schedule_router might better be renamed to something like `fix_dangling_routers` etc and could be turned off if user wants to fix wrong routers manually. The reason is that could router by agent is pretty expensive for a relatively large deployment with around 10,000 routers. I found meaning of option "router_auto_schedule" is hard to follow. A quick code review finds it is only used at (tests excluded) ```python     def get_router_ids(self, context, host):         """Returns IDs of routers scheduled to l3 agent on <host>         This will autoschedule unhosted routers to l3 agent on <host> and then         return all ids of routers scheduled to it.         """         if extensions.is_extension_supported(                 self.l3plugin, constants.L3_AGENT_SCHEDULER_EXT_ALIAS):             if cfg.CONF.router_auto_schedule:                 self.l3plugin.auto_schedule_routers(context, host)         return self.l3plugin.list_router_ids_on_host(context, host) ``` which seems to be fixing router without agents associated with it. And even if I turn this option off, router is still able to be properly scheduled to agents. because ```python     @registry.receives(resources.ROUTER, [events.AFTER_CREATE],                        priority_group.PRIORITY_ROUTER_EXTENDED_ATTRIBUTE)     def _after_router_create(self, resource, event, trigger, context,                              router_id, router, router_db, **kwargs):         if not router['ha']:             return         try:             self.schedule_router(context, router_id)             router['ha_vr_id'] = router_db.extra_attributes.ha_vr_id             self._notify_router_updated(context, router_id)         except Exception as e:             with excutils.save_and_reraise_exception() as ctx:                 if isinstance(e, l3ha_exc.NoVRIDAvailable):                     ctx.reraise = False                     LOG.warning("No more VRIDs for router: %s", e)                 else:                     LOG.exception("Failed to schedule HA router %s.",                                   router_id)                 router['status'] = self._update_router_db(                     context, router_id,                     {'status': constants.ERROR})['status'] ``` seems to not respecting this option. So IMO auto_schedule_router might better be renamed to something like `fix_dangling_routers` etc and could be turned off if user wants to fix wrong routers manually. The reason is that could router by agent is pretty expensive for a relatively large deployment with around 10,000 routers.
2022-05-17 19:31:51 Slawek Kaplonski tags l3-ipam-dhcp
2022-05-17 19:31:57 Slawek Kaplonski neutron: importance Undecided Low
2022-05-24 14:24:48 Brian Haley bug added subscriber Brian Haley