)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"21e16de6dd364903afc576388ac051935f058104","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Don\u0027t schedule a router with no interfaces attached to it"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Avoid scheduling the unscheduled routers when sync_router() rpc"},{"line_number":10,"context_line":"called from l3-agent if that router has no interfaces attached."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I37b6c91e05c3a47f303607834617c3dfb9b2f54e"},{"line_number":13,"context_line":"Closes-Bug: #1307838"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"9aa7fdbe_23ca676e","line":10,"updated":"2014-10-23 08:06:45.000000000","message":"Why do you want this?\nThe bug page also didn\u0027t tell it.","commit_id":"af1122a60d1175df3a142fc16945726c889debed"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"67322bff2122ec6010d23a7bb87e2e917f5cb94d","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Don\u0027t schedule a router with no interfaces attached to it"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Avoid scheduling the unscheduled routers when sync_router() rpc"},{"line_number":10,"context_line":"called from l3-agent if that router has no interfaces attached."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I37b6c91e05c3a47f303607834617c3dfb9b2f54e"},{"line_number":13,"context_line":"Closes-Bug: #1307838"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"9aa7fdbe_b25051d5","line":10,"in_reply_to":"9aa7fdbe_032643ce","updated":"2014-10-23 16:12:15.000000000","message":"Why unnecessarily? Anyway interfaces will be attached to the router eventually, won\u0027t it? Probably soon after router creation.\n\nI agree that it\u0027s undesirable for l3-agent restart to cause unexpected router scheduling. But I\u0027m not sure how serious/troublesome it is.\nCan you please elaborate the issue you are seeing? Probably I don\u0027t understand your use cases.","commit_id":"af1122a60d1175df3a142fc16945726c889debed"},{"author":{"_account_id":8253,"name":"Murali Birru","email":"mbirru@gmail.com","username":"muralibirru"},"change_message_id":"2bdf452d8a6c2531a73308baba5fc3ee9e2a0314","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Don\u0027t schedule a router with no interfaces attached to it"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Avoid scheduling the unscheduled routers when sync_router() rpc"},{"line_number":10,"context_line":"called from l3-agent if that router has no interfaces attached."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I37b6c91e05c3a47f303607834617c3dfb9b2f54e"},{"line_number":13,"context_line":"Closes-Bug: #1307838"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"9aa7fdbe_032643ce","line":10,"in_reply_to":"9aa7fdbe_23ca676e","updated":"2014-10-23 08:33:28.000000000","message":"to avoid consuming the namespaces at agent unnecessarily. generally at present when you create router it never schedules to any agent until you add at-least one interface same behavior should retain even after restarting the l3-agent.","commit_id":"af1122a60d1175df3a142fc16945726c889debed"},{"author":{"_account_id":8253,"name":"Murali Birru","email":"mbirru@gmail.com","username":"muralibirru"},"change_message_id":"be08ed16965666e991e15a415653ba48de58c394","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Don\u0027t schedule a router with no interfaces attached to it"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Avoid scheduling the unscheduled routers when sync_router() rpc"},{"line_number":10,"context_line":"called from l3-agent if that router has no interfaces attached."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I37b6c91e05c3a47f303607834617c3dfb9b2f54e"},{"line_number":13,"context_line":"Closes-Bug: #1307838"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"9aa7fdbe_416022a5","line":10,"in_reply_to":"9aa7fdbe_b25051d5","updated":"2014-10-24 11:07:38.000000000","message":"Lets say you created some 10 routers in neutron-server  yet to attach the interfaces to routers at this point no namespaces created in l3-agent. In this if you restart l3-agent it will simple create namespaces at l3-agent. which consumes the namespaces at agent.","commit_id":"af1122a60d1175df3a142fc16945726c889debed"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"3cd728421efa00668f7c82639b89850cead84a77","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Don\u0027t schedule a router with no interfaces attached to it"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Avoid scheduling the unscheduled routers when sync_router() rpc"},{"line_number":10,"context_line":"called from l3-agent if that router has no interfaces attached."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I37b6c91e05c3a47f303607834617c3dfb9b2f54e"},{"line_number":13,"context_line":"Closes-Bug: #1307838"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"3a961159_6f84020b","line":10,"updated":"2014-12-22 22:05:41.000000000","message":"Is this bug seen for legacy routers or for DVR routers.\nCan you confirm.?","commit_id":"1f28b446aaa9f22530fb9f88958eaf0af9b37e28"}],"neutron/db/l3_agentschedulers_db.py":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"d637af3c2c459d47cd5213c8583289902b4dc19f","unresolved":false,"context_lines":[{"line_number":34,"context_line":"from neutron.db import l3_attrs_db"},{"line_number":35,"context_line":"from neutron.db import model_base"},{"line_number":36,"context_line":"from neutron.db import models_v2"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"from neutron.extensions import l3agentscheduler"},{"line_number":39,"context_line":"from neutron import manager"},{"line_number":40,"context_line":"from neutron.openstack.common.gettextutils import _LE, _LI, _LW"}],"source_content_type":"text/x-python","patch_set":3,"id":"9aa7fdbe_c8b538ef","line":37,"updated":"2014-10-23 07:37:48.000000000","message":"please delete blank line","commit_id":"af1122a60d1175df3a142fc16945726c889debed"},{"author":{"_account_id":8253,"name":"Murali Birru","email":"mbirru@gmail.com","username":"muralibirru"},"change_message_id":"2bdf452d8a6c2531a73308baba5fc3ee9e2a0314","unresolved":false,"context_lines":[{"line_number":34,"context_line":"from neutron.db import l3_attrs_db"},{"line_number":35,"context_line":"from neutron.db import model_base"},{"line_number":36,"context_line":"from neutron.db import models_v2"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"from neutron.extensions import l3agentscheduler"},{"line_number":39,"context_line":"from neutron import manager"},{"line_number":40,"context_line":"from neutron.openstack.common.gettextutils import _LE, _LI, _LW"}],"source_content_type":"text/x-python","patch_set":3,"id":"9aa7fdbe_a37d77e9","line":37,"in_reply_to":"9aa7fdbe_c8b538ef","updated":"2014-10-23 08:33:28.000000000","message":"Done","commit_id":"af1122a60d1175df3a142fc16945726c889debed"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"d637af3c2c459d47cd5213c8583289902b4dc19f","unresolved":false,"context_lines":[{"line_number":493,"context_line":"        res \u003d query.filter(agents_db.Agent.id.in_(agent_ids)).first()"},{"line_number":494,"context_line":"        return res[0]"},{"line_number":495,"context_line":""},{"line_number":496,"context_line":"    def get_interfaceports_onrouter(self, context, router_id):"},{"line_number":497,"context_line":"        interfaces \u003d (context.session.query(models_v2.Port)."},{"line_number":498,"context_line":"                      filter_by(device_id\u003drouter_id).count())"},{"line_number":499,"context_line":"        return interfaces"}],"source_content_type":"text/x-python","patch_set":3,"id":"9aa7fdbe_88bb30e4","line":496,"updated":"2014-10-23 07:37:48.000000000","message":"nit: get_router_interfaces?","commit_id":"af1122a60d1175df3a142fc16945726c889debed"},{"author":{"_account_id":8253,"name":"Murali Birru","email":"mbirru@gmail.com","username":"muralibirru"},"change_message_id":"2bdf452d8a6c2531a73308baba5fc3ee9e2a0314","unresolved":false,"context_lines":[{"line_number":493,"context_line":"        res \u003d query.filter(agents_db.Agent.id.in_(agent_ids)).first()"},{"line_number":494,"context_line":"        return res[0]"},{"line_number":495,"context_line":""},{"line_number":496,"context_line":"    def get_interfaceports_onrouter(self, context, router_id):"},{"line_number":497,"context_line":"        interfaces \u003d (context.session.query(models_v2.Port)."},{"line_number":498,"context_line":"                      filter_by(device_id\u003drouter_id).count())"},{"line_number":499,"context_line":"        return interfaces"}],"source_content_type":"text/x-python","patch_set":3,"id":"9aa7fdbe_a3c017e1","line":496,"in_reply_to":"9aa7fdbe_88bb30e4","updated":"2014-10-23 08:33:28.000000000","message":"Done","commit_id":"af1122a60d1175df3a142fc16945726c889debed"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"0d22f036144bb4e93ea46223f917f48c15a37a69","unresolved":false,"context_lines":[{"line_number":495,"context_line":""},{"line_number":496,"context_line":"    def get_interfaceports_onrouter(self, context, router_id):"},{"line_number":497,"context_line":"        interfaces \u003d (context.session.query(models_v2.Port)."},{"line_number":498,"context_line":"                      filter_by(device_id\u003drouter_id).count())"},{"line_number":499,"context_line":"        return interfaces"}],"source_content_type":"text/x-python","patch_set":3,"id":"9aa7fdbe_c9d70722","line":498,"updated":"2014-10-22 20:57:05.000000000","message":"There is now and explicit routerports table that you should query.","commit_id":"af1122a60d1175df3a142fc16945726c889debed"},{"author":{"_account_id":8253,"name":"Murali Birru","email":"mbirru@gmail.com","username":"muralibirru"},"change_message_id":"2bdf452d8a6c2531a73308baba5fc3ee9e2a0314","unresolved":false,"context_lines":[{"line_number":495,"context_line":""},{"line_number":496,"context_line":"    def get_interfaceports_onrouter(self, context, router_id):"},{"line_number":497,"context_line":"        interfaces \u003d (context.session.query(models_v2.Port)."},{"line_number":498,"context_line":"                      filter_by(device_id\u003drouter_id).count())"},{"line_number":499,"context_line":"        return interfaces"}],"source_content_type":"text/x-python","patch_set":3,"id":"9aa7fdbe_83bdd36a","line":498,"in_reply_to":"9aa7fdbe_c9d70722","updated":"2014-10-23 08:33:28.000000000","message":"Done","commit_id":"af1122a60d1175df3a142fc16945726c889debed"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"916d865165d09fa46941dad9a167f35a749ea0f5","unresolved":false,"context_lines":[{"line_number":492,"context_line":"        res \u003d query.filter(agents_db.Agent.id.in_(agent_ids)).first()"},{"line_number":493,"context_line":"        return res[0]"},{"line_number":494,"context_line":""},{"line_number":495,"context_line":"    def get_router_interfaces(self, context, router_id):"},{"line_number":496,"context_line":"        interfaces \u003d (context.session.query(l3_db.RouterPort)."},{"line_number":497,"context_line":"                      filter_by(router_id\u003drouter_id).count())"},{"line_number":498,"context_line":"        return interfaces"}],"source_content_type":"text/x-python","patch_set":4,"id":"9aa7fdbe_c33224a6","line":495,"updated":"2014-10-27 18:19:46.000000000","message":"Since this function returns a count, can the name be changed to reflect this?","commit_id":"7b0688cdceffd184316d78876cc375dc962b6ca3"},{"author":{"_account_id":8253,"name":"Murali Birru","email":"mbirru@gmail.com","username":"muralibirru"},"change_message_id":"d0bd2c16ca9de7176db18c2489d5f7104e23708e","unresolved":false,"context_lines":[{"line_number":492,"context_line":"        res \u003d query.filter(agents_db.Agent.id.in_(agent_ids)).first()"},{"line_number":493,"context_line":"        return res[0]"},{"line_number":494,"context_line":""},{"line_number":495,"context_line":"    def get_router_interfaces(self, context, router_id):"},{"line_number":496,"context_line":"        interfaces \u003d (context.session.query(l3_db.RouterPort)."},{"line_number":497,"context_line":"                      filter_by(router_id\u003drouter_id).count())"},{"line_number":498,"context_line":"        return interfaces"}],"source_content_type":"text/x-python","patch_set":4,"id":"9aa7fdbe_a528ac33","line":495,"in_reply_to":"9aa7fdbe_c33224a6","updated":"2014-10-28 14:42:40.000000000","message":"Done changed to get_router_interface_count()","commit_id":"7b0688cdceffd184316d78876cc375dc962b6ca3"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"916d865165d09fa46941dad9a167f35a749ea0f5","unresolved":false,"context_lines":[{"line_number":493,"context_line":"        return res[0]"},{"line_number":494,"context_line":""},{"line_number":495,"context_line":"    def get_router_interfaces(self, context, router_id):"},{"line_number":496,"context_line":"        interfaces \u003d (context.session.query(l3_db.RouterPort)."},{"line_number":497,"context_line":"                      filter_by(router_id\u003drouter_id).count())"},{"line_number":498,"context_line":"        return interfaces"}],"source_content_type":"text/x-python","patch_set":4,"id":"9aa7fdbe_a3d60026","line":496,"updated":"2014-10-27 18:19:46.000000000","message":"Why aren\u0027t you using self.model_query()?","commit_id":"7b0688cdceffd184316d78876cc375dc962b6ca3"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"92fff67a620b3319f8269b39ffe49f216df48502","unresolved":false,"context_lines":[{"line_number":493,"context_line":"        return res[0]"},{"line_number":494,"context_line":""},{"line_number":495,"context_line":"    def get_router_interfaces(self, context, router_id):"},{"line_number":496,"context_line":"        interfaces \u003d (context.session.query(l3_db.RouterPort)."},{"line_number":497,"context_line":"                      filter_by(router_id\u003drouter_id).count())"},{"line_number":498,"context_line":"        return interfaces"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a8c0949_763c9294","line":496,"in_reply_to":"9aa7fdbe_65d96456","updated":"2014-10-30 15:52:01.000000000","message":"Please do a search for how DB queries are done in neutron - that function is called model_query and that should be used instead of directly querying like you\u0027re doing here.","commit_id":"7b0688cdceffd184316d78876cc375dc962b6ca3"},{"author":{"_account_id":8253,"name":"Murali Birru","email":"mbirru@gmail.com","username":"muralibirru"},"change_message_id":"d0bd2c16ca9de7176db18c2489d5f7104e23708e","unresolved":false,"context_lines":[{"line_number":493,"context_line":"        return res[0]"},{"line_number":494,"context_line":""},{"line_number":495,"context_line":"    def get_router_interfaces(self, context, router_id):"},{"line_number":496,"context_line":"        interfaces \u003d (context.session.query(l3_db.RouterPort)."},{"line_number":497,"context_line":"                      filter_by(router_id\u003drouter_id).count())"},{"line_number":498,"context_line":"        return interfaces"}],"source_content_type":"text/x-python","patch_set":4,"id":"9aa7fdbe_65d96456","line":496,"in_reply_to":"9aa7fdbe_a3d60026","updated":"2014-10-28 14:42:40.000000000","message":"I didnt get you. pls provide me code snippet how it could be","commit_id":"7b0688cdceffd184316d78876cc375dc962b6ca3"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"3c23dc5355a8e0f5f373e5cee7429b7d8c99502e","unresolved":false,"context_lines":[{"line_number":496,"context_line":"        \"\"\"Return the no.of interface ports on Router.\"\"\""},{"line_number":497,"context_line":"        query \u003d self._model_query(context, l3_db.RouterPort)"},{"line_number":498,"context_line":"        int_query \u003d query.filter_by(router_id\u003drouter_id)"},{"line_number":499,"context_line":"        interfaces \u003d int_query.count()"},{"line_number":500,"context_line":"        return interfaces"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_53a5ae02","line":499,"updated":"2014-11-20 14:43:36.000000000","message":"I think we don\u0027t need to count. We need to check that router has at least one interface.","commit_id":"6398b4261c174a096505a9bb730127d7870858e9"},{"author":{"_account_id":8253,"name":"Murali Birru","email":"mbirru@gmail.com","username":"muralibirru"},"change_message_id":"32935b7972e671b791ca6fe9c3f40d1e71472b31","unresolved":false,"context_lines":[{"line_number":496,"context_line":"        \"\"\"Return the no.of interface ports on Router.\"\"\""},{"line_number":497,"context_line":"        query \u003d self._model_query(context, l3_db.RouterPort)"},{"line_number":498,"context_line":"        int_query \u003d query.filter_by(router_id\u003drouter_id)"},{"line_number":499,"context_line":"        interfaces \u003d int_query.count()"},{"line_number":500,"context_line":"        return interfaces"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_e1eea58a","line":499,"in_reply_to":"5a890539_53a5ae02","updated":"2014-11-21 10:32:33.000000000","message":"Done","commit_id":"6398b4261c174a096505a9bb730127d7870858e9"}],"neutron/scheduler/l3_agent_scheduler.py":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"8f6e3d5f5302f6efb6597898a6b4f619c3a42806","unresolved":false,"context_lines":[{"line_number":137,"context_line":"                return"},{"line_number":138,"context_line":"            candidates \u003d plugin.get_l3_agent_candidates(sync_router,"},{"line_number":139,"context_line":"                                                        active_l3_agents)"},{"line_number":140,"context_line":"            interfaces \u003d (context.session.query(models_v2.Port)."},{"line_number":141,"context_line":"                          filter_by(device_id\u003dsync_router[\u0027id\u0027]).all())"},{"line_number":142,"context_line":"            if not candidates or not interfaces:"},{"line_number":143,"context_line":"                LOG.warn(_(\u0027No L3 agents can host the router %s\u0027),"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_1cc11ae4","line":140,"updated":"2014-06-26 14:44:55.000000000","message":"get_candidates() doesn\u0027t seem to be an appropriate place for such check. Consider schedule() or auto_schedule_routers() for this.","commit_id":"f975c8bba29a92c28f5c9cd0b0e3c69182be40cb"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"20af00d85f0b9b0addc780a06f84b08802f00a24","unresolved":false,"context_lines":[{"line_number":120,"context_line":"            candidates \u003d plugin.get_l3_agent_candidates("},{"line_number":121,"context_line":"                context, router, [l3_agent])"},{"line_number":122,"context_line":"            interfaces \u003d (context.session.query(models_v2.Port)."},{"line_number":123,"context_line":"                          filter_by(device_id\u003drouter[\u0027id\u0027]).all())"},{"line_number":124,"context_line":"            if not candidates or not interfaces:"},{"line_number":125,"context_line":"                ids_to_discard.add(router[\u0027id\u0027])"},{"line_number":126,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"baa201ad_64b267e6","line":123,"updated":"2014-10-17 07:15:04.000000000","message":"you don\u0027t really need to fetch all ports here, consider .exists() instead of .all()","commit_id":"1971c2ec05ed47abefe2f56068824867ec96e596"},{"author":{"_account_id":8253,"name":"Murali Birru","email":"mbirru@gmail.com","username":"muralibirru"},"change_message_id":"a4663c53d2217c4015767fcc9d0e9f5472a89101","unresolved":false,"context_lines":[{"line_number":120,"context_line":"            candidates \u003d plugin.get_l3_agent_candidates("},{"line_number":121,"context_line":"                context, router, [l3_agent])"},{"line_number":122,"context_line":"            interfaces \u003d (context.session.query(models_v2.Port)."},{"line_number":123,"context_line":"                          filter_by(device_id\u003drouter[\u0027id\u0027]).all())"},{"line_number":124,"context_line":"            if not candidates or not interfaces:"},{"line_number":125,"context_line":"                ids_to_discard.add(router[\u0027id\u0027])"},{"line_number":126,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"baa201ad_73ef88e9","line":123,"in_reply_to":"baa201ad_64b267e6","updated":"2014-10-24 11:08:29.000000000","message":"Done","commit_id":"1971c2ec05ed47abefe2f56068824867ec96e596"},{"author":{"_account_id":8253,"name":"Murali Birru","email":"mbirru@gmail.com","username":"muralibirru"},"change_message_id":"db94bf394edfb503e40d2202eb103da654e4c477","unresolved":false,"context_lines":[{"line_number":120,"context_line":"            candidates \u003d plugin.get_l3_agent_candidates("},{"line_number":121,"context_line":"                context, router, [l3_agent])"},{"line_number":122,"context_line":"            interfaces \u003d (context.session.query(models_v2.Port)."},{"line_number":123,"context_line":"                          filter_by(device_id\u003drouter[\u0027id\u0027]).all())"},{"line_number":124,"context_line":"            if not candidates or not interfaces:"},{"line_number":125,"context_line":"                ids_to_discard.add(router[\u0027id\u0027])"},{"line_number":126,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"baa201ad_f30d38e9","line":123,"in_reply_to":"baa201ad_64b267e6","updated":"2014-10-17 09:51:13.000000000","message":"with .exists() I am getting error","commit_id":"1971c2ec05ed47abefe2f56068824867ec96e596"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"4a1bb42a67cbbd674041058a8e25fd64d69410fa","unresolved":false,"context_lines":[{"line_number":120,"context_line":"            candidates \u003d plugin.get_l3_agent_candidates("},{"line_number":121,"context_line":"                context, router, [l3_agent])"},{"line_number":122,"context_line":"            interfaces \u003d (context.session.query(models_v2.Port)."},{"line_number":123,"context_line":"                          filter_by(device_id\u003drouter[\u0027id\u0027]).all())"},{"line_number":124,"context_line":"            if not candidates or not interfaces:"},{"line_number":125,"context_line":"                ids_to_discard.add(router[\u0027id\u0027])"},{"line_number":126,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"baa201ad_9e0793c9","line":123,"in_reply_to":"baa201ad_f30d38e9","updated":"2014-10-17 10:28:52.000000000","message":"What kind of error? Also can use .count()","commit_id":"1971c2ec05ed47abefe2f56068824867ec96e596"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"20af00d85f0b9b0addc780a06f84b08802f00a24","unresolved":false,"context_lines":[{"line_number":121,"context_line":"                context, router, [l3_agent])"},{"line_number":122,"context_line":"            interfaces \u003d (context.session.query(models_v2.Port)."},{"line_number":123,"context_line":"                          filter_by(device_id\u003drouter[\u0027id\u0027]).all())"},{"line_number":124,"context_line":"            if not candidates or not interfaces:"},{"line_number":125,"context_line":"                ids_to_discard.add(router[\u0027id\u0027])"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"        return [r for r in routers if r[\u0027id\u0027] not in ids_to_discard]"}],"source_content_type":"text/x-python","patch_set":2,"id":"baa201ad_a4ce0f58","line":124,"updated":"2014-10-17 07:15:04.000000000","message":"logically routers that do not need to be scheduled should be filtered out in get_routers_to_schedule() #92","commit_id":"1971c2ec05ed47abefe2f56068824867ec96e596"},{"author":{"_account_id":8253,"name":"Murali Birru","email":"mbirru@gmail.com","username":"muralibirru"},"change_message_id":"db94bf394edfb503e40d2202eb103da654e4c477","unresolved":false,"context_lines":[{"line_number":121,"context_line":"                context, router, [l3_agent])"},{"line_number":122,"context_line":"            interfaces \u003d (context.session.query(models_v2.Port)."},{"line_number":123,"context_line":"                          filter_by(device_id\u003drouter[\u0027id\u0027]).all())"},{"line_number":124,"context_line":"            if not candidates or not interfaces:"},{"line_number":125,"context_line":"                ids_to_discard.add(router[\u0027id\u0027])"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"        return [r for r in routers if r[\u0027id\u0027] not in ids_to_discard]"}],"source_content_type":"text/x-python","patch_set":2,"id":"baa201ad_93fcecb6","line":124,"in_reply_to":"baa201ad_a4ce0f58","updated":"2014-10-17 09:51:13.000000000","message":"#94 becomes more complex if I move. let me try","commit_id":"1971c2ec05ed47abefe2f56068824867ec96e596"},{"author":{"_account_id":8253,"name":"Murali Birru","email":"mbirru@gmail.com","username":"muralibirru"},"change_message_id":"a4663c53d2217c4015767fcc9d0e9f5472a89101","unresolved":false,"context_lines":[{"line_number":121,"context_line":"                context, router, [l3_agent])"},{"line_number":122,"context_line":"            interfaces \u003d (context.session.query(models_v2.Port)."},{"line_number":123,"context_line":"                          filter_by(device_id\u003drouter[\u0027id\u0027]).all())"},{"line_number":124,"context_line":"            if not candidates or not interfaces:"},{"line_number":125,"context_line":"                ids_to_discard.add(router[\u0027id\u0027])"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"        return [r for r in routers if r[\u0027id\u0027] not in ids_to_discard]"}],"source_content_type":"text/x-python","patch_set":2,"id":"baa201ad_93ea2cd6","line":124,"in_reply_to":"baa201ad_a4ce0f58","updated":"2014-10-24 11:08:29.000000000","message":"Done","commit_id":"1971c2ec05ed47abefe2f56068824867ec96e596"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"d637af3c2c459d47cd5213c8583289902b4dc19f","unresolved":false,"context_lines":[{"line_number":118,"context_line":"            # check if the l3 agent is compatible with the router"},{"line_number":119,"context_line":"            candidates \u003d plugin.get_l3_agent_candidates("},{"line_number":120,"context_line":"                context, router, [l3_agent])"},{"line_number":121,"context_line":"            interfaces \u003d plugin.get_interfaceports_onrouter(context,"},{"line_number":122,"context_line":"                                                            router[\u0027id\u0027])"},{"line_number":123,"context_line":"            if not candidates or not interfaces:"},{"line_number":124,"context_line":"                ids_to_discard.add(router[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":3,"id":"9aa7fdbe_c8837802","line":121,"updated":"2014-10-23 07:37:48.000000000","message":"please filter out routers that do not need to be scheduled in get_routers_to_schedule","commit_id":"af1122a60d1175df3a142fc16945726c889debed"},{"author":{"_account_id":8253,"name":"Murali Birru","email":"mbirru@gmail.com","username":"muralibirru"},"change_message_id":"2bdf452d8a6c2531a73308baba5fc3ee9e2a0314","unresolved":false,"context_lines":[{"line_number":118,"context_line":"            # check if the l3 agent is compatible with the router"},{"line_number":119,"context_line":"            candidates \u003d plugin.get_l3_agent_candidates("},{"line_number":120,"context_line":"                context, router, [l3_agent])"},{"line_number":121,"context_line":"            interfaces \u003d plugin.get_interfaceports_onrouter(context,"},{"line_number":122,"context_line":"                                                            router[\u0027id\u0027])"},{"line_number":123,"context_line":"            if not candidates or not interfaces:"},{"line_number":124,"context_line":"                ids_to_discard.add(router[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":3,"id":"9aa7fdbe_dfa32bfe","line":121,"in_reply_to":"9aa7fdbe_c8837802","updated":"2014-10-23 08:33:28.000000000","message":"adding here to avoid complexity","commit_id":"af1122a60d1175df3a142fc16945726c889debed"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"d637af3c2c459d47cd5213c8583289902b4dc19f","unresolved":false,"context_lines":[{"line_number":191,"context_line":"                candidates \u003d list(new_l3agentset - old_l3agentset)"},{"line_number":192,"context_line":"            else:"},{"line_number":193,"context_line":"                candidates \u003d new_l3agents"},{"line_number":194,"context_line":"            if not candidates:"},{"line_number":195,"context_line":"                LOG.warn(_(\u0027No L3 agents can host the router %s\u0027),"},{"line_number":196,"context_line":"                         sync_router[\u0027id\u0027])"},{"line_number":197,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9aa7fdbe_a8e1d4d1","line":194,"updated":"2014-10-23 07:37:48.000000000","message":"why changing this? seems unrelated","commit_id":"af1122a60d1175df3a142fc16945726c889debed"},{"author":{"_account_id":8253,"name":"Murali Birru","email":"mbirru@gmail.com","username":"muralibirru"},"change_message_id":"2bdf452d8a6c2531a73308baba5fc3ee9e2a0314","unresolved":false,"context_lines":[{"line_number":191,"context_line":"                candidates \u003d list(new_l3agentset - old_l3agentset)"},{"line_number":192,"context_line":"            else:"},{"line_number":193,"context_line":"                candidates \u003d new_l3agents"},{"line_number":194,"context_line":"            if not candidates:"},{"line_number":195,"context_line":"                LOG.warn(_(\u0027No L3 agents can host the router %s\u0027),"},{"line_number":196,"context_line":"                         sync_router[\u0027id\u0027])"},{"line_number":197,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9aa7fdbe_1f43f342","line":194,"in_reply_to":"9aa7fdbe_a8e1d4d1","updated":"2014-10-23 08:33:28.000000000","message":"Actually when I posted original changes as part of DVR. the original changes was like this. as part of review moved inside else some how. \nif not candidates: is common for both if and else conditions","commit_id":"af1122a60d1175df3a142fc16945726c889debed"},{"author":{"_account_id":10370,"name":"Romil Gupta","email":"romilgupta19@gmail.com","username":"romilg"},"change_message_id":"6dd72b4574bacad041b20785265391101a52d326","unresolved":false,"context_lines":[{"line_number":193,"context_line":"                candidates \u003d new_l3agents"},{"line_number":194,"context_line":"            if not candidates:"},{"line_number":195,"context_line":"                LOG.warn(_(\u0027No L3 agents can host the router %s\u0027),"},{"line_number":196,"context_line":"                         sync_router[\u0027id\u0027])"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"            return candidates"},{"line_number":199,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9aa7fdbe_e7c98a7a","line":196,"updated":"2014-10-21 14:03:55.000000000","message":"nit: use _LW for warning.","commit_id":"af1122a60d1175df3a142fc16945726c889debed"},{"author":{"_account_id":8253,"name":"Murali Birru","email":"mbirru@gmail.com","username":"muralibirru"},"change_message_id":"2bdf452d8a6c2531a73308baba5fc3ee9e2a0314","unresolved":false,"context_lines":[{"line_number":193,"context_line":"                candidates \u003d new_l3agents"},{"line_number":194,"context_line":"            if not candidates:"},{"line_number":195,"context_line":"                LOG.warn(_(\u0027No L3 agents can host the router %s\u0027),"},{"line_number":196,"context_line":"                         sync_router[\u0027id\u0027])"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"            return candidates"},{"line_number":199,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9aa7fdbe_7f46bf50","line":196,"in_reply_to":"9aa7fdbe_e7c98a7a","updated":"2014-10-23 08:33:28.000000000","message":"Done","commit_id":"af1122a60d1175df3a142fc16945726c889debed"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"f69ddc7c19aafd1d2a790a28f41f317d24ef22a6","unresolved":false,"context_lines":[{"line_number":116,"context_line":"        ids_to_discard \u003d set()"},{"line_number":117,"context_line":"        for router in routers:"},{"line_number":118,"context_line":"            # check if the l3 agent is compatible with the router"},{"line_number":119,"context_line":"            candidates \u003d plugin.get_l3_agent_candidates("},{"line_number":120,"context_line":"                context, router, [l3_agent])"},{"line_number":121,"context_line":"            interfaces \u003d plugin.get_router_interfaces(context,"},{"line_number":122,"context_line":"                                                      router[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":4,"id":"9aa7fdbe_0b1eec0b","line":119,"updated":"2014-10-28 12:57:59.000000000","message":"no need to compute candidates if not interfaces","commit_id":"7b0688cdceffd184316d78876cc375dc962b6ca3"},{"author":{"_account_id":8253,"name":"Murali Birru","email":"mbirru@gmail.com","username":"muralibirru"},"change_message_id":"d0bd2c16ca9de7176db18c2489d5f7104e23708e","unresolved":false,"context_lines":[{"line_number":116,"context_line":"        ids_to_discard \u003d set()"},{"line_number":117,"context_line":"        for router in routers:"},{"line_number":118,"context_line":"            # check if the l3 agent is compatible with the router"},{"line_number":119,"context_line":"            candidates \u003d plugin.get_l3_agent_candidates("},{"line_number":120,"context_line":"                context, router, [l3_agent])"},{"line_number":121,"context_line":"            interfaces \u003d plugin.get_router_interfaces(context,"},{"line_number":122,"context_line":"                                                      router[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":4,"id":"9aa7fdbe_85e648e6","line":119,"in_reply_to":"9aa7fdbe_0b1eec0b","updated":"2014-10-28 14:42:40.000000000","message":"candidates also required because even though if interfaces are attached to router there may not be any agent which can create the router","commit_id":"7b0688cdceffd184316d78876cc375dc962b6ca3"},{"author":{"_account_id":11825,"name":"Sudhakar Babu Gariganti","email":"sudhakar.gariganti@gmail.com","username":"sudhakar-gariganti"},"change_message_id":"4647ff594bebdd036e2194c84c214795143969c6","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        \"\"\"Get the subset of routers that can be scheduled on the L3 agent.\"\"\""},{"line_number":116,"context_line":"        ids_to_discard \u003d set()"},{"line_number":117,"context_line":"        for router in routers:"},{"line_number":118,"context_line":"            # check if the l3 agent is compatible with the router"},{"line_number":119,"context_line":"            candidates \u003d plugin.get_l3_agent_candidates("},{"line_number":120,"context_line":"                context, router, [l3_agent])"},{"line_number":121,"context_line":"            interfaces \u003d plugin.get_router_interface_count("}],"source_content_type":"text/x-python","patch_set":5,"id":"7a8c0949_9bbbdb0d","line":118,"updated":"2014-10-31 05:10:11.000000000","message":"Consider the following to save on some unnecessary processing.\nfor router in routers:\n    if plugin.get_router_interface_count(\n              \t\t\tcontext, router[\u0027id\u0027]):\n         if plugin.get_l3_agent_candidates(\n\t               context, router, [l3_agent]):\n                continue\n     ids_to_discard.add(router[\u0027id\u0027])","commit_id":"32119b8b99a54c4c62298e875f5123482134343c"},{"author":{"_account_id":8253,"name":"Murali Birru","email":"mbirru@gmail.com","username":"muralibirru"},"change_message_id":"da170248f43e207b898ba5fe0530b4cc3ebbb302","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        \"\"\"Get the subset of routers that can be scheduled on the L3 agent.\"\"\""},{"line_number":116,"context_line":"        ids_to_discard \u003d set()"},{"line_number":117,"context_line":"        for router in routers:"},{"line_number":118,"context_line":"            # check if the l3 agent is compatible with the router"},{"line_number":119,"context_line":"            candidates \u003d plugin.get_l3_agent_candidates("},{"line_number":120,"context_line":"                context, router, [l3_agent])"},{"line_number":121,"context_line":"            interfaces \u003d plugin.get_router_interface_count("}],"source_content_type":"text/x-python","patch_set":5,"id":"7a8c0949_a1c14430","line":118,"in_reply_to":"7a8c0949_9bbbdb0d","updated":"2014-10-31 09:29:05.000000000","message":"Done","commit_id":"32119b8b99a54c4c62298e875f5123482134343c"},{"author":{"_account_id":8646,"name":"yangxurong","email":"yangxurong@huawei.com","username":"yangxurong"},"change_message_id":"b7a17f617f354d344f00e83a3df20a749f29a73c","unresolved":false,"context_lines":[{"line_number":116,"context_line":"        ids_to_discard \u003d set()"},{"line_number":117,"context_line":"        for router in routers:"},{"line_number":118,"context_line":"            # check if the l3 agent is compatible with the router"},{"line_number":119,"context_line":"            if plugin.interfaceport_exists_onrouter(context, router[\u0027id\u0027]):"},{"line_number":120,"context_line":"                if plugin.get_l3_agent_candidates("},{"line_number":121,"context_line":"                    context, router, [l3_agent]):"},{"line_number":122,"context_line":"                    continue"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a961159_0fea9773","line":119,"updated":"2014-12-23 07:19:54.000000000","message":"i think it\u0027s better to filter the unscheduled router in function filter_unscheduled_routers.","commit_id":"1f28b446aaa9f22530fb9f88958eaf0af9b37e28"}],"neutron/tests/unit/openvswitch/test_agent_scheduler.py":[{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"0229ffd7e209f93970c6e1f11580dd86afce03b5","unresolved":false,"context_lines":[{"line_number":895,"context_line":"                pass"},{"line_number":896,"context_line":"            router_ids \u003d [r[\u0027router\u0027][\u0027id\u0027] for r in routers]"},{"line_number":897,"context_line":"            subnet_ids \u003d [s[\u0027subnet\u0027][\u0027id\u0027] for s in subnets]"},{"line_number":898,"context_line":"            self._router_interface_action(\u0027add\u0027,"},{"line_number":899,"context_line":"                                          router_ids[0],"},{"line_number":900,"context_line":"                                          subnet_ids[0],"},{"line_number":901,"context_line":"                                          None)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9aa7fdbe_fe2a2d8f","line":898,"updated":"2014-10-29 05:34:18.000000000","message":"for i in range(3):\n    self._router_interface_action(\n        \u0027add\u0027, router_ids[i], subnet_ids[i], None)","commit_id":"32119b8b99a54c4c62298e875f5123482134343c"},{"author":{"_account_id":8253,"name":"Murali Birru","email":"mbirru@gmail.com","username":"muralibirru"},"change_message_id":"da170248f43e207b898ba5fe0530b4cc3ebbb302","unresolved":false,"context_lines":[{"line_number":895,"context_line":"                pass"},{"line_number":896,"context_line":"            router_ids \u003d [r[\u0027router\u0027][\u0027id\u0027] for r in routers]"},{"line_number":897,"context_line":"            subnet_ids \u003d [s[\u0027subnet\u0027][\u0027id\u0027] for s in subnets]"},{"line_number":898,"context_line":"            self._router_interface_action(\u0027add\u0027,"},{"line_number":899,"context_line":"                                          router_ids[0],"},{"line_number":900,"context_line":"                                          subnet_ids[0],"},{"line_number":901,"context_line":"                                          None)"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a8c0949_c1dd7016","line":898,"in_reply_to":"9aa7fdbe_fe2a2d8f","updated":"2014-10-31 09:29:05.000000000","message":"Done","commit_id":"32119b8b99a54c4c62298e875f5123482134343c"}],"neutron/tests/unit/test_l3_schedulers.py":[{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"14a5274dd167b35b860827237ce5eb97abb420dc","unresolved":false,"context_lines":[{"line_number":1152,"context_line":"    def test_auto_schedule(self):"},{"line_number":1153,"context_line":"        with contextlib.nested("},{"line_number":1154,"context_line":"            mock.patch(\u0027neutron.db.l3_agentschedulers_db\u0027"},{"line_number":1155,"context_line":"                       \u0027.get_router_interface_count\u0027, return_value\u003d1)):"},{"line_number":1156,"context_line":"            pass"},{"line_number":1157,"context_line":"        #self.plugin.get_router_interface_count.return_value\u003d1"},{"line_number":1158,"context_line":"        router \u003d self._create_ha_router()"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_8b444975","line":1155,"updated":"2014-11-20 07:50:17.000000000","message":"Does this do anything? This starts a mock and then immediately stops it when the context manager exits on L1157","commit_id":"6398b4261c174a096505a9bb730127d7870858e9"},{"author":{"_account_id":8253,"name":"Murali Birru","email":"mbirru@gmail.com","username":"muralibirru"},"change_message_id":"32935b7972e671b791ca6fe9c3f40d1e71472b31","unresolved":false,"context_lines":[{"line_number":1152,"context_line":"    def test_auto_schedule(self):"},{"line_number":1153,"context_line":"        with contextlib.nested("},{"line_number":1154,"context_line":"            mock.patch(\u0027neutron.db.l3_agentschedulers_db\u0027"},{"line_number":1155,"context_line":"                       \u0027.get_router_interface_count\u0027, return_value\u003d1)):"},{"line_number":1156,"context_line":"            pass"},{"line_number":1157,"context_line":"        #self.plugin.get_router_interface_count.return_value\u003d1"},{"line_number":1158,"context_line":"        router \u003d self._create_ha_router()"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_9caaa817","line":1155,"in_reply_to":"5a890539_8b444975","updated":"2014-11-21 10:32:33.000000000","message":"Done","commit_id":"6398b4261c174a096505a9bb730127d7870858e9"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"14a5274dd167b35b860827237ce5eb97abb420dc","unresolved":false,"context_lines":[{"line_number":1154,"context_line":"            mock.patch(\u0027neutron.db.l3_agentschedulers_db\u0027"},{"line_number":1155,"context_line":"                       \u0027.get_router_interface_count\u0027, return_value\u003d1)):"},{"line_number":1156,"context_line":"            pass"},{"line_number":1157,"context_line":"        #self.plugin.get_router_interface_count.return_value\u003d1"},{"line_number":1158,"context_line":"        router \u003d self._create_ha_router()"},{"line_number":1159,"context_line":"        self.plugin.auto_schedule_routers("},{"line_number":1160,"context_line":"            self.adminContext, self.agent1.host, None)"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_ab474576","line":1157,"updated":"2014-11-20 07:50:17.000000000","message":"this shouldn\u0027t be here","commit_id":"6398b4261c174a096505a9bb730127d7870858e9"},{"author":{"_account_id":8253,"name":"Murali Birru","email":"mbirru@gmail.com","username":"muralibirru"},"change_message_id":"32935b7972e671b791ca6fe9c3f40d1e71472b31","unresolved":false,"context_lines":[{"line_number":1154,"context_line":"            mock.patch(\u0027neutron.db.l3_agentschedulers_db\u0027"},{"line_number":1155,"context_line":"                       \u0027.get_router_interface_count\u0027, return_value\u003d1)):"},{"line_number":1156,"context_line":"            pass"},{"line_number":1157,"context_line":"        #self.plugin.get_router_interface_count.return_value\u003d1"},{"line_number":1158,"context_line":"        router \u003d self._create_ha_router()"},{"line_number":1159,"context_line":"        self.plugin.auto_schedule_routers("},{"line_number":1160,"context_line":"            self.adminContext, self.agent1.host, None)"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_1c6eb801","line":1157,"in_reply_to":"5a890539_ab474576","updated":"2014-11-21 10:32:33.000000000","message":"Done","commit_id":"6398b4261c174a096505a9bb730127d7870858e9"}]}
