)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"7767d5dae662c5cd81e6f059a895b1b604993957","unresolved":false,"context_lines":[{"line_number":9,"context_line":"This fixes router rescheduling for dvr routers to"},{"line_number":10,"context_line":"correctly handle CSNAT portion rescheduling on server side."},{"line_number":11,"context_line":"The patch also makes L3 agent aware of possible SNAT role"},{"line_number":12,"context_line":"rescheduling to it."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Closes-Bug: #1472205"},{"line_number":15,"context_line":"Change-Id: I069500a2f1de9a734124544a3f2d793e9fa2d27c"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"3a50d1a3_642a6c2e","line":12,"updated":"2015-07-21 18:05:58.000000000","message":"I see that even though this patch addresses the router-rescheduling, you have also taken care where an existing agent_mode has been changed from dvr_snat to \"dvr\".\nShould this be even part of this patch or should we split this patch.","commit_id":"3a6b20d077426384feb18453773514a14f7e3e1e"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"bfb92c39a290c8abc9e9f5d0e72af195f6bd3039","unresolved":false,"context_lines":[{"line_number":9,"context_line":"This fixes router rescheduling for dvr routers to"},{"line_number":10,"context_line":"correctly handle CSNAT portion rescheduling on server side."},{"line_number":11,"context_line":"The patch also makes L3 agent aware of possible SNAT role"},{"line_number":12,"context_line":"rescheduling to it."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Closes-Bug: #1472205"},{"line_number":15,"context_line":"Change-Id: I069500a2f1de9a734124544a3f2d793e9fa2d27c"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"3a50d1a3_bfc5dd3c","line":12,"in_reply_to":"3a50d1a3_642a6c2e","updated":"2015-07-21 18:29:29.000000000","message":"Not quite sure where you see it, can you please point in code?","commit_id":"3a6b20d077426384feb18453773514a14f7e3e1e"}],"neutron/agent/l3/dvr_edge_router.py":[{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"7767d5dae662c5cd81e6f059a895b1b604993957","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        if not self._is_this_snat_host():"},{"line_number":41,"context_line":"            # no centralized SNAT gateway for this node/agent"},{"line_number":42,"context_line":"            LOG.debug(\"not hosting snat for router: %s\", self.router[\u0027id\u0027])"},{"line_number":43,"context_line":"            if self.snat_namespace:"},{"line_number":44,"context_line":"                LOG.debug(\"SNAT was rescheduled to host %s. Clearing snat \""},{"line_number":45,"context_line":"                          \"namespace.\", self.router.get(\u0027gw_port_host\u0027))"},{"line_number":46,"context_line":"                return self.external_gateway_removed("}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_84a218ad","line":43,"updated":"2015-07-21 18:05:58.000000000","message":"If I understand correctly this is handling a situation where an existing agent has been restarted with a different agent_mode, from dvr_snat to dvr.\nThat\u0027s when you will satisfy this condition where this is not an snat_host at this time but still the snat_namespace exists.\n\nIs this relevant to this patch? Or is my understanding wrong.","commit_id":"3a6b20d077426384feb18453773514a14f7e3e1e"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"bfb92c39a290c8abc9e9f5d0e72af195f6bd3039","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        if not self._is_this_snat_host():"},{"line_number":41,"context_line":"            # no centralized SNAT gateway for this node/agent"},{"line_number":42,"context_line":"            LOG.debug(\"not hosting snat for router: %s\", self.router[\u0027id\u0027])"},{"line_number":43,"context_line":"            if self.snat_namespace:"},{"line_number":44,"context_line":"                LOG.debug(\"SNAT was rescheduled to host %s. Clearing snat \""},{"line_number":45,"context_line":"                          \"namespace.\", self.router.get(\u0027gw_port_host\u0027))"},{"line_number":46,"context_line":"                return self.external_gateway_removed("}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_9fc021e2","line":43,"in_reply_to":"3a50d1a3_84a218ad","updated":"2015-07-21 18:29:29.000000000","message":"This is handling a situation where dvr_snat agent was hosting snat for a router (created snat_namespace) but then receives router_updated notification and figures out it\u0027s not longer hosting it (host of gw was changed) - hence it needs to clear snat_namespace. No agent restart, not agent_mode change","commit_id":"3a6b20d077426384feb18453773514a14f7e3e1e"},{"author":{"_account_id":13770,"name":"Adolfo Duarte","email":"adduarte@redhat.com","username":"adolfoduarte"},"change_message_id":"3b7183de6d468b73efe1cbf7928145d31369b4f4","unresolved":false,"context_lines":[{"line_number":44,"context_line":"                LOG.debug(\"SNAT was rescheduled to host %s. Clearing snat \""},{"line_number":45,"context_line":"                          \"namespace.\", self.router.get(\u0027gw_port_host\u0027))"},{"line_number":46,"context_line":"                return self.external_gateway_removed("},{"line_number":47,"context_line":"                    ex_gw_port, interface_name)"},{"line_number":48,"context_line":"            return"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        if not self.snat_namespace:"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a50d1a3_8c9e0106","line":47,"updated":"2015-07-24 18:58:43.000000000","message":"nit picking. isn\u0027t the log message a bit inacurate? The snat namespace does not get cleared. The interface gets unplugged.","commit_id":"bdde3f48211b2864802703d1f4a3ae72bacb5dba"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"b3b84ecc75a8578e281bcb340ff347f739481b1d","unresolved":false,"context_lines":[{"line_number":44,"context_line":"                LOG.debug(\"SNAT was rescheduled to host %s. Clearing snat \""},{"line_number":45,"context_line":"                          \"namespace.\", self.router.get(\u0027gw_port_host\u0027))"},{"line_number":46,"context_line":"                return self.external_gateway_removed("},{"line_number":47,"context_line":"                    ex_gw_port, interface_name)"},{"line_number":48,"context_line":"            return"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        if not self.snat_namespace:"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a50d1a3_2960ed34","line":47,"in_reply_to":"3a50d1a3_8c9e0106","updated":"2015-07-25 13:00:51.000000000","message":"All devices are deleted and snat namespace as well (#72)","commit_id":"bdde3f48211b2864802703d1f4a3ae72bacb5dba"}],"neutron/agent/l3/ha_router.py":[{"author":{"_account_id":13770,"name":"Adolfo Duarte","email":"adduarte@redhat.com","username":"adolfoduarte"},"change_message_id":"3b7183de6d468b73efe1cbf7928145d31369b4f4","unresolved":false,"context_lines":[{"line_number":338,"context_line":"    def _gateway_ports_equal(port1, port2):"},{"line_number":339,"context_line":"        def _get_filtered_dict(d, ignore):"},{"line_number":340,"context_line":"            return dict((k, v) for k, v in six.iteritems(d)"},{"line_number":341,"context_line":"                        if k not in ignore)"},{"line_number":342,"context_line":""},{"line_number":343,"context_line":"        keys_to_ignore \u003d set([\u0027binding:host_id\u0027])"},{"line_number":344,"context_line":"        port1_filtered \u003d _get_filtered_dict(port1, keys_to_ignore)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a50d1a3_47a3f29e","line":341,"updated":"2015-07-24 18:58:43.000000000","message":"is this refactoring really  needed for this patch?","commit_id":"bdde3f48211b2864802703d1f4a3ae72bacb5dba"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"b3b84ecc75a8578e281bcb340ff347f739481b1d","unresolved":false,"context_lines":[{"line_number":338,"context_line":"    def _gateway_ports_equal(port1, port2):"},{"line_number":339,"context_line":"        def _get_filtered_dict(d, ignore):"},{"line_number":340,"context_line":"            return dict((k, v) for k, v in six.iteritems(d)"},{"line_number":341,"context_line":"                        if k not in ignore)"},{"line_number":342,"context_line":""},{"line_number":343,"context_line":"        keys_to_ignore \u003d set([\u0027binding:host_id\u0027])"},{"line_number":344,"context_line":"        port1_filtered \u003d _get_filtered_dict(port1, keys_to_ignore)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a50d1a3_894901ba","line":341,"in_reply_to":"3a50d1a3_47a3f29e","updated":"2015-07-25 13:00:51.000000000","message":"This was added with HA routers feature so I guess excluding host from comparison is needed only for HA routers. In this patch it is needed because for DVR routers \"host\" is important info - it shows which agent should handle SNAT.","commit_id":"bdde3f48211b2864802703d1f4a3ae72bacb5dba"}],"neutron/agent/l3/router_info.py":[{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"7767d5dae662c5cd81e6f059a895b1b604993957","unresolved":false,"context_lines":[{"line_number":495,"context_line":"                                if k not in ignore)"},{"line_number":496,"context_line":""},{"line_number":497,"context_line":"                keys_to_ignore \u003d set()"},{"line_number":498,"context_line":"                if not self.router.get(\u0027distributed\u0027):"},{"line_number":499,"context_line":"                    keys_to_ignore.add(\u0027binding:host_id\u0027)"},{"line_number":500,"context_line":"                port1_filtered \u003d _get_filtered_dict(port1, keys_to_ignore)"},{"line_number":501,"context_line":"                port2_filtered \u003d _get_filtered_dict(port2, keys_to_ignore)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_04fa8875","line":498,"updated":"2015-07-21 18:05:58.000000000","message":"Do think adding this check here is the right thing to do?\nBecause I think most of the refactor that was done is to restrict the check for \"distributed\u0027 everywhere and the router_info here is generic for the legacy router.\nLet me know if it is a valid concern.","commit_id":"3a6b20d077426384feb18453773514a14f7e3e1e"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"bfb92c39a290c8abc9e9f5d0e72af195f6bd3039","unresolved":false,"context_lines":[{"line_number":495,"context_line":"                                if k not in ignore)"},{"line_number":496,"context_line":""},{"line_number":497,"context_line":"                keys_to_ignore \u003d set()"},{"line_number":498,"context_line":"                if not self.router.get(\u0027distributed\u0027):"},{"line_number":499,"context_line":"                    keys_to_ignore.add(\u0027binding:host_id\u0027)"},{"line_number":500,"context_line":"                port1_filtered \u003d _get_filtered_dict(port1, keys_to_ignore)"},{"line_number":501,"context_line":"                port2_filtered \u003d _get_filtered_dict(port2, keys_to_ignore)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_51a92dde","line":498,"in_reply_to":"3a50d1a3_04fa8875","updated":"2015-07-21 18:29:29.000000000","message":"That is a valid concern. The code for ignoring binding host was added as part of HA routers feature, so probably it should better be refactored to reside in ha_router.py or smth like that. I\u0027ll see what I can do with it","commit_id":"3a6b20d077426384feb18453773514a14f7e3e1e"},{"author":{"_account_id":13770,"name":"Adolfo Duarte","email":"adduarte@redhat.com","username":"adolfoduarte"},"change_message_id":"3b7183de6d468b73efe1cbf7928145d31369b4f4","unresolved":false,"context_lines":[{"line_number":481,"context_line":"    @staticmethod"},{"line_number":482,"context_line":"    def _gateway_ports_equal(port1, port2):"},{"line_number":483,"context_line":"        return port1 \u003d\u003d port2"},{"line_number":484,"context_line":""},{"line_number":485,"context_line":"    def _process_external_gateway(self, ex_gw_port):"},{"line_number":486,"context_line":"        # TODO(Carl) Refactor to clarify roles of ex_gw_port vs self.ex_gw_port"},{"line_number":487,"context_line":"        ex_gw_port_id \u003d (ex_gw_port and ex_gw_port[\u0027id\u0027] or"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a50d1a3_c7870211","line":484,"updated":"2015-07-24 18:58:43.000000000","message":"I like this change, however is it needed for this patch? \ni.e. I saw you move the previous definition to ha_router.py  to override this one.  if it is refactoring only, perhaps make it a different patch","commit_id":"bdde3f48211b2864802703d1f4a3ae72bacb5dba"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"b3b84ecc75a8578e281bcb340ff347f739481b1d","unresolved":false,"context_lines":[{"line_number":481,"context_line":"    @staticmethod"},{"line_number":482,"context_line":"    def _gateway_ports_equal(port1, port2):"},{"line_number":483,"context_line":"        return port1 \u003d\u003d port2"},{"line_number":484,"context_line":""},{"line_number":485,"context_line":"    def _process_external_gateway(self, ex_gw_port):"},{"line_number":486,"context_line":"        # TODO(Carl) Refactor to clarify roles of ex_gw_port vs self.ex_gw_port"},{"line_number":487,"context_line":"        ex_gw_port_id \u003d (ex_gw_port and ex_gw_port[\u0027id\u0027] or"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a50d1a3_e9d0c5cb","line":484,"in_reply_to":"3a50d1a3_c7870211","updated":"2015-07-25 13:00:51.000000000","message":"No it\u0027s not only refactoring. Please see comments on PS 5","commit_id":"bdde3f48211b2864802703d1f4a3ae72bacb5dba"}],"neutron/db/l3_agentschedulers_db.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"d107a419b43348b66c2910ef24c825a04fac3d39","unresolved":false,"context_lines":[{"line_number":266,"context_line":"            for host in set(old_hosts) - set(new_hosts):"},{"line_number":267,"context_line":"                l3_notifier.router_removed_from_agent("},{"line_number":268,"context_line":"                    context, router_id, host)"},{"line_number":269,"context_line":"            for host in new_hosts:"},{"line_number":270,"context_line":"                l3_notifier.router_added_to_agent("},{"line_number":271,"context_line":"                    context, [router_id], host)"},{"line_number":272,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"ba3cc151_d8499f32","line":269,"updated":"2015-07-08 21:21:21.000000000","message":"Is there a reason this can\u0027t be (new - old), i.e. just the agents that didn\u0027t have the router?  Or since they were all unbound we have to notify them all?","commit_id":"1cd080cb321f3894d20deee3f370d1bbcfb80788"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"40308bf81ee8e6a22052f79a35b24ab780ee17c3","unresolved":false,"context_lines":[{"line_number":266,"context_line":"            for host in set(old_hosts) - set(new_hosts):"},{"line_number":267,"context_line":"                l3_notifier.router_removed_from_agent("},{"line_number":268,"context_line":"                    context, router_id, host)"},{"line_number":269,"context_line":"            for host in new_hosts:"},{"line_number":270,"context_line":"                l3_notifier.router_added_to_agent("},{"line_number":271,"context_line":"                    context, [router_id], host)"},{"line_number":272,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"ba3cc151_dac65b99","line":269,"in_reply_to":"ba3cc151_d8499f32","updated":"2015-07-09 10:13:05.000000000","message":"I think it\u0027s better to notify all agents hosting the router after rescheduling, because they might need to apply some changes. For example new snat handling agent might exist in both new and old sets (in old it was just handling qrouter- namespace for dhcp ports), we need to notify in order for it to create snat namespace.","commit_id":"1cd080cb321f3894d20deee3f370d1bbcfb80788"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"b9567f56809bdfcfce3a6e8eb3af10320c62f664","unresolved":false,"context_lines":[{"line_number":284,"context_line":"            for host in set(old_hosts) - set(new_hosts):"},{"line_number":285,"context_line":"                l3_notifier.router_removed_from_agent("},{"line_number":286,"context_line":"                    context, router_id, host)"},{"line_number":287,"context_line":"            for host in new_hosts:"},{"line_number":288,"context_line":"                l3_notifier.router_added_to_agent("},{"line_number":289,"context_line":"                    context, [router_id], host)"},{"line_number":290,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3a50d1a3_676aae1c","line":287,"updated":"2015-07-24 18:45:47.000000000","message":"Can there be duplicates in new_hosts? If so, is it OK to notify multiple times?  Does it make sense to convert new_hosts to a set in L283?","commit_id":"bdde3f48211b2864802703d1f4a3ae72bacb5dba"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"33f599f095f1447c2f71f90ab71a259091b6757e","unresolved":false,"context_lines":[{"line_number":284,"context_line":"            for host in set(old_hosts) - set(new_hosts):"},{"line_number":285,"context_line":"                l3_notifier.router_removed_from_agent("},{"line_number":286,"context_line":"                    context, router_id, host)"},{"line_number":287,"context_line":"            for host in new_hosts:"},{"line_number":288,"context_line":"                l3_notifier.router_added_to_agent("},{"line_number":289,"context_line":"                    context, [router_id], host)"},{"line_number":290,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"1a4dcd0f_206a00ee","line":287,"in_reply_to":"3a50d1a3_29eead8b","updated":"2015-08-11 15:10:54.000000000","message":"If there can\u0027t be any duplicates then it\u0027s a moot point. The set in L284 removes duplicates for router removed notifications, but L287 does not, and I was wondering if there could be duplicates, causing duplicate router added notifications.","commit_id":"bdde3f48211b2864802703d1f4a3ae72bacb5dba"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"b3b84ecc75a8578e281bcb340ff347f739481b1d","unresolved":false,"context_lines":[{"line_number":284,"context_line":"            for host in set(old_hosts) - set(new_hosts):"},{"line_number":285,"context_line":"                l3_notifier.router_removed_from_agent("},{"line_number":286,"context_line":"                    context, router_id, host)"},{"line_number":287,"context_line":"            for host in new_hosts:"},{"line_number":288,"context_line":"                l3_notifier.router_added_to_agent("},{"line_number":289,"context_line":"                    context, [router_id], host)"},{"line_number":290,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3a50d1a3_29eead8b","line":287,"in_reply_to":"3a50d1a3_39d12afc","updated":"2015-07-25 13:00:51.000000000","message":"I\u0027m not sure where duplicates may come from","commit_id":"bdde3f48211b2864802703d1f4a3ae72bacb5dba"},{"author":{"_account_id":13770,"name":"Adolfo Duarte","email":"adduarte@redhat.com","username":"adolfoduarte"},"change_message_id":"3b7183de6d468b73efe1cbf7928145d31369b4f4","unresolved":false,"context_lines":[{"line_number":284,"context_line":"            for host in set(old_hosts) - set(new_hosts):"},{"line_number":285,"context_line":"                l3_notifier.router_removed_from_agent("},{"line_number":286,"context_line":"                    context, router_id, host)"},{"line_number":287,"context_line":"            for host in new_hosts:"},{"line_number":288,"context_line":"                l3_notifier.router_added_to_agent("},{"line_number":289,"context_line":"                    context, [router_id], host)"},{"line_number":290,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3a50d1a3_39d12afc","line":287,"in_reply_to":"3a50d1a3_676aae1c","updated":"2015-07-24 18:58:43.000000000","message":"I think the set(new_hosts) gets rid of duplicates if that is what you are asking Paul. \neven if there is multiple notifications will should only result on just extra cpu cycles. The agent ultimately decides what to do and if it gets a notification about a router removed which is not there anymore, it will just simply \"go nothing\"","commit_id":"bdde3f48211b2864802703d1f4a3ae72bacb5dba"}],"neutron/db/l3_dvrscheduler_db.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"7b22b679f8c2ee455f112606daa8349155248889","unresolved":false,"context_lines":[{"line_number":369,"context_line":"            return super(L3_DVRsch_db_mixin, self).reschedule_router("},{"line_number":370,"context_line":"                context, router_id, candidates)"},{"line_number":371,"context_line":""},{"line_number":372,"context_line":"        old_agents \u003d self.list_l3_agents_hosting_router("},{"line_number":373,"context_line":"            context, router_id)[\u0027agents\u0027]"},{"line_number":374,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":375,"context_line":"            for agent in old_agents:"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a4dcd0f_c509a996","line":372,"updated":"2015-08-12 18:17:01.000000000","message":"nit: using cur_agents would have matched the parent class, but it\u0027s a pretty small nit, not enough for respin, just something I noticed reviewing","commit_id":"4418bf426ac48935b27d235139912c2e3ec1d1b5"}],"neutron/tests/unit/agent/l3/test_agent.py":[{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"b9567f56809bdfcfce3a6e8eb3af10320c62f664","unresolved":false,"context_lines":[{"line_number":624,"context_line":"    def test_ext_gw_updated_dvr_snat_agent_mode_no_host(self):"},{"line_number":625,"context_line":"        # no gateway should be added on dvr_snat node without host match"},{"line_number":626,"context_line":"        self._test_ext_gw_updated_dvr_agent_mode("},{"line_number":627,"context_line":"            \u0027any-foo\u0027, \u0027dvr_snat\u0027)"},{"line_number":628,"context_line":""},{"line_number":629,"context_line":"    def test_ext_gw_updated_dvr_snat_agent_mode_host(self):"},{"line_number":630,"context_line":"        # gateway should be added on dvr_snat node"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a50d1a3_87e7baab","line":627,"updated":"2015-07-24 18:45:47.000000000","message":"nit: I guess could be moved up on prev line.","commit_id":"bdde3f48211b2864802703d1f4a3ae72bacb5dba"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"b3b84ecc75a8578e281bcb340ff347f739481b1d","unresolved":false,"context_lines":[{"line_number":624,"context_line":"    def test_ext_gw_updated_dvr_snat_agent_mode_no_host(self):"},{"line_number":625,"context_line":"        # no gateway should be added on dvr_snat node without host match"},{"line_number":626,"context_line":"        self._test_ext_gw_updated_dvr_agent_mode("},{"line_number":627,"context_line":"            \u0027any-foo\u0027, \u0027dvr_snat\u0027)"},{"line_number":628,"context_line":""},{"line_number":629,"context_line":"    def test_ext_gw_updated_dvr_snat_agent_mode_host(self):"},{"line_number":630,"context_line":"        # gateway should be added on dvr_snat node"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a50d1a3_09ebb179","line":627,"in_reply_to":"3a50d1a3_87e7baab","updated":"2015-07-25 13:00:51.000000000","message":"sure, will move if new patchset is needed","commit_id":"bdde3f48211b2864802703d1f4a3ae72bacb5dba"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"b9567f56809bdfcfce3a6e8eb3af10320c62f664","unresolved":false,"context_lines":[{"line_number":629,"context_line":"    def test_ext_gw_updated_dvr_snat_agent_mode_host(self):"},{"line_number":630,"context_line":"        # gateway should be added on dvr_snat node"},{"line_number":631,"context_line":"        self._test_ext_gw_updated_dvr_agent_mode("},{"line_number":632,"context_line":"            HOSTNAME, \u0027dvr_snat\u0027)"},{"line_number":633,"context_line":""},{"line_number":634,"context_line":"    def test_ext_gw_updated_dvr_snat_agent_mode_snat_rescheduled(self):"},{"line_number":635,"context_line":"        # gateway should be added on dvr_snat node"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a50d1a3_a7a3d64e","line":632,"updated":"2015-07-24 18:45:47.000000000","message":"ditto?","commit_id":"bdde3f48211b2864802703d1f4a3ae72bacb5dba"}],"neutron/tests/unit/plugins/ml2/drivers/openvswitch/agent/test_agent_scheduler.py":[{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"6cac1e13c77b2a56388f0d7d7ddd014478e5a969","unresolved":false,"context_lines":[{"line_number":997,"context_line":"                         set([a[\u0027configurations\u0027][\u0027agent_mode\u0027] for a in"},{"line_number":998,"context_line":"                              l3agents[\u0027agents\u0027]]))"},{"line_number":999,"context_line":""},{"line_number":1000,"context_line":"    def test_dvr_router_csnat_rescheduling(self):"},{"line_number":1001,"context_line":"        helpers.register_l3_agent("},{"line_number":1002,"context_line":"            host\u003dL3_HOSTA, agent_mode\u003dconstants.L3_AGENT_MODE_DVR_SNAT)"},{"line_number":1003,"context_line":"        helpers.register_l3_agent("}],"source_content_type":"text/x-python","patch_set":12,"id":"1a4dcd0f_8f6ad37f","line":1000,"updated":"2015-08-12 23:17:49.000000000","message":"are you sure that this test belong here? I would have imagined it under tests/../db/test_...","commit_id":"4418bf426ac48935b27d235139912c2e3ec1d1b5"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"9ff5f1a9893912f9c593100f318af48740768fcc","unresolved":false,"context_lines":[{"line_number":997,"context_line":"                         set([a[\u0027configurations\u0027][\u0027agent_mode\u0027] for a in"},{"line_number":998,"context_line":"                              l3agents[\u0027agents\u0027]]))"},{"line_number":999,"context_line":""},{"line_number":1000,"context_line":"    def test_dvr_router_csnat_rescheduling(self):"},{"line_number":1001,"context_line":"        helpers.register_l3_agent("},{"line_number":1002,"context_line":"            host\u003dL3_HOSTA, agent_mode\u003dconstants.L3_AGENT_MODE_DVR_SNAT)"},{"line_number":1003,"context_line":"        helpers.register_l3_agent("}],"source_content_type":"text/x-python","patch_set":12,"id":"fa1b9901_000aead2","line":1000,"in_reply_to":"1a4dcd0f_41bc92db","updated":"2015-08-17 11:13:03.000000000","message":"+1, we should move tests BUT in a separate patch :)","commit_id":"4418bf426ac48935b27d235139912c2e3ec1d1b5"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"73523741f9a49b0d525a37c87cb4837ed4172e83","unresolved":false,"context_lines":[{"line_number":997,"context_line":"                         set([a[\u0027configurations\u0027][\u0027agent_mode\u0027] for a in"},{"line_number":998,"context_line":"                              l3agents[\u0027agents\u0027]]))"},{"line_number":999,"context_line":""},{"line_number":1000,"context_line":"    def test_dvr_router_csnat_rescheduling(self):"},{"line_number":1001,"context_line":"        helpers.register_l3_agent("},{"line_number":1002,"context_line":"            host\u003dL3_HOSTA, agent_mode\u003dconstants.L3_AGENT_MODE_DVR_SNAT)"},{"line_number":1003,"context_line":"        helpers.register_l3_agent("}],"source_content_type":"text/x-python","patch_set":12,"id":"1a4dcd0f_41bc92db","line":1000,"in_reply_to":"1a4dcd0f_8f6ad37f","updated":"2015-08-13 07:54:47.000000000","message":"Me too, however there are no sheduler tests under tests/unit/db/ at the moment. I think it\u0027s a long overdue to move current module to a more appropriate place as it in fact has nothing to do with ml2 or openvswitch. So from my point of view it\u0027s more about moving a module then a single test which should go with a separate patch I believe. Thoughts?","commit_id":"4418bf426ac48935b27d235139912c2e3ec1d1b5"}]}
