)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"b9c4551da259b81e1adfddddb4fbd0a82a36c53b","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix Metering doesn\u0027t respect the l3 agent binding"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch fix the issue by changing the call to"},{"line_number":10,"context_line":"find the plugin which handles the l3 which is now"},{"line_number":11,"context_line":"the l3_router service plugin instead of the old mixin."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"AAAAWH%2F9%2FfI%3D","line":9,"updated":"2014-03-31 17:58:44.000000000","message":"nit: s/fix/fixes/","commit_id":"73fc1f03b388e0f952895b39f65c2a737bc4bfac"}],"neutron/db/metering/metering_db.py":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"64bda708e2d68658c1e47a9799387db56cdd868a","unresolved":false,"context_lines":[{"line_number":234,"context_line":"            labels \u003d context.session.query(MeteringLabel)"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"            if label_id:"},{"line_number":237,"context_line":"                labels \u003d labels.filter(MeteringLabel.id \u003d\u003d label_id)"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"            if host:"},{"line_number":240,"context_line":"                labels \u003d (labels.join(MeteringLabel.routers)."}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAWH%2F%2F3DM%3D","line":237,"updated":"2014-03-13 10:35:56.000000000","message":"nit: labels.filter_by(id\u003dlabel_id)","commit_id":"b9e84ec4307e61a835b35f4ca2bbd3b666ed5ca5"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"844e7e568bc2af193ae052624bab9f0fcb8c8279","unresolved":false,"context_lines":[{"line_number":240,"context_line":"                labels \u003d (labels.join(MeteringLabel.routers)."},{"line_number":241,"context_line":"                          join(l3_agentschedulers_db.RouterL3AgentBinding)."},{"line_number":242,"context_line":"                          join(agents_db.Agent)."},{"line_number":243,"context_line":"                          filter(agents_db.Agent.host \u003d\u003d host))"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"        return self._process_sync_metering_data(labels)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAWH%2F93%2Bo%3D","line":243,"updated":"2014-04-01 14:11:38.000000000","message":"This change means metering extension depends on l3-agent-scheduler.\nI think metering extension should not assume layer3 implementation. \nThis method is called from callback class, so at least it is better to decouple metering db plugin and callback related method.\nFor example, the similar thing is done for dhcp-agent (db_base_plugin and db/dhcp_rpc_base).","commit_id":"73fc1f03b388e0f952895b39f65c2a737bc4bfac"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"1c9886daa1fa8f7c058293c7eedc24135e1003e0","unresolved":false,"context_lines":[{"line_number":228,"context_line":"        return routers_dict.values()"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"    def get_sync_data_metering(self, context, label_id\u003dNone, router_ids\u003dNone):"},{"line_number":231,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":232,"context_line":"            labels \u003d context.session.query(MeteringLabel)"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"            if label_id:"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAW3%2F%2Ffng%3D","line":231,"updated":"2014-04-14 09:10:23.000000000","message":"is transaction needed here?","commit_id":"df82c72f2498e46a1d2027384ede122dc6511289"},{"author":{"_account_id":7141,"name":"Sylvain Afchain","email":"safchain@redhat.com","username":"sylvainA"},"change_message_id":"fcf3637184a535dbefbf22b80f13a75d94cb98e2","unresolved":false,"context_lines":[{"line_number":228,"context_line":"        return routers_dict.values()"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"    def get_sync_data_metering(self, context, label_id\u003dNone, router_ids\u003dNone):"},{"line_number":231,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":232,"context_line":"            labels \u003d context.session.query(MeteringLabel)"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"            if label_id:"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAW3%2F%2FfQs%3D","line":231,"in_reply_to":"AAAAW3%2F%2Ffng%3D","updated":"2014-04-14 10:28:11.000000000","message":"Agree, not need I\u0027ll remove it","commit_id":"df82c72f2498e46a1d2027384ede122dc6511289"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"1c9886daa1fa8f7c058293c7eedc24135e1003e0","unresolved":false,"context_lines":[{"line_number":234,"context_line":"            if label_id:"},{"line_number":235,"context_line":"                labels \u003d labels.filter(MeteringLabel.id \u003d\u003d label_id)"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"            if router_ids:"},{"line_number":238,"context_line":"                labels \u003d (labels.join(MeteringLabel.routers)."},{"line_number":239,"context_line":"                          filter(l3_db.Router.id.in_(router_ids)))"},{"line_number":240,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAW3%2F%2FfkY%3D","line":237,"updated":"2014-04-14 09:10:23.000000000","message":"does it make sence to apply router_ids filtering in case label_id was specified? Probably \u0027else\u0027 should be used here","commit_id":"df82c72f2498e46a1d2027384ede122dc6511289"},{"author":{"_account_id":7141,"name":"Sylvain Afchain","email":"safchain@redhat.com","username":"sylvainA"},"change_message_id":"fcf3637184a535dbefbf22b80f13a75d94cb98e2","unresolved":false,"context_lines":[{"line_number":234,"context_line":"            if label_id:"},{"line_number":235,"context_line":"                labels \u003d labels.filter(MeteringLabel.id \u003d\u003d label_id)"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"            if router_ids:"},{"line_number":238,"context_line":"                labels \u003d (labels.join(MeteringLabel.routers)."},{"line_number":239,"context_line":"                          filter(l3_db.Router.id.in_(router_ids)))"},{"line_number":240,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAW3%2F%2FfQY%3D","line":237,"in_reply_to":"AAAAW3%2F%2FfkY%3D","updated":"2014-04-14 10:28:11.000000000","message":"Done","commit_id":"df82c72f2498e46a1d2027384ede122dc6511289"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"b8e1e13c40a7458cdd09c455591f6219a514d392","unresolved":false,"context_lines":[{"line_number":231,"context_line":"        labels \u003d context.session.query(MeteringLabel)"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"        if label_id:"},{"line_number":234,"context_line":"            labels \u003d labels.filter(MeteringLabel.id \u003d\u003d label_id)"},{"line_number":235,"context_line":"        elif router_ids:"},{"line_number":236,"context_line":"            labels \u003d (labels.join(MeteringLabel.routers)."},{"line_number":237,"context_line":"                      filter(l3_db.Router.id.in_(router_ids)))"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAXH%2F%2FYtc%3D","line":234,"updated":"2014-04-22 06:46:37.000000000","message":"nit (no action needed): labels.filter_by(id\u003dlabel_id)","commit_id":"901d676b8bcbb3e731ba44a4e574e9ae998f486e"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"fffecc12f3474849f7224191acb68c54b226f94d","unresolved":false,"context_lines":[{"line_number":231,"context_line":"        labels \u003d context.session.query(MeteringLabel)"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"        if label_id:"},{"line_number":234,"context_line":"            labels \u003d labels.filter(MeteringLabel.id \u003d\u003d label_id)"},{"line_number":235,"context_line":"        elif router_ids:"},{"line_number":236,"context_line":"            labels \u003d (labels.join(MeteringLabel.routers)."},{"line_number":237,"context_line":"                      filter(l3_db.Router.id.in_(router_ids)))"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAXH%2F%2FSTo%3D","line":234,"in_reply_to":"AAAAXH%2F%2FYtc%3D","updated":"2014-04-22 18:31:06.000000000","message":"I\u0027d prefer that we use filter_by here","commit_id":"901d676b8bcbb3e731ba44a4e574e9ae998f486e"}],"neutron/db/metering/metering_rpc.py":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"1c9886daa1fa8f7c058293c7eedc24135e1003e0","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        if not l3_plugin:"},{"line_number":38,"context_line":"            return"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        meter_plugin \u003d manager.NeutronManager.get_service_plugins().get("},{"line_number":41,"context_line":"            service_constants.METERING)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        host \u003d kwargs.get(\u0027host\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAW3%2F%2FfeM%3D","line":40,"updated":"2014-04-14 09:10:23.000000000","message":"why not setting meter_plugin on init?","commit_id":"df82c72f2498e46a1d2027384ede122dc6511289"},{"author":{"_account_id":7141,"name":"Sylvain Afchain","email":"safchain@redhat.com","username":"sylvainA"},"change_message_id":"fcf3637184a535dbefbf22b80f13a75d94cb98e2","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        if not l3_plugin:"},{"line_number":38,"context_line":"            return"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        meter_plugin \u003d manager.NeutronManager.get_service_plugins().get("},{"line_number":41,"context_line":"            service_constants.METERING)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        host \u003d kwargs.get(\u0027host\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAW3%2F%2FfQI%3D","line":40,"in_reply_to":"AAAAW3%2F%2FfeM%3D","updated":"2014-04-14 10:28:11.000000000","message":"Done","commit_id":"df82c72f2498e46a1d2027384ede122dc6511289"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"7d7f4ea3b071610233d33cfc833935d55a9544f5","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        if not l3_plugin:"},{"line_number":38,"context_line":"            return"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        meter_plugin \u003d manager.NeutronManager.get_service_plugins().get("},{"line_number":41,"context_line":"            service_constants.METERING)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        host \u003d kwargs.get(\u0027host\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAW3%2F%2FegI%3D","line":40,"updated":"2014-04-14 11:11:50.000000000","message":"comment from the previos PS was not addressed","commit_id":"9848b6a7acd49b50bb077f154debce75956d0bc8"},{"author":{"_account_id":7141,"name":"Sylvain Afchain","email":"safchain@redhat.com","username":"sylvainA"},"change_message_id":"76ea0c36131f84258f4d1c05fa330b3c79be48d6","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        if not l3_plugin:"},{"line_number":38,"context_line":"            return"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        meter_plugin \u003d manager.NeutronManager.get_service_plugins().get("},{"line_number":41,"context_line":"            service_constants.METERING)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        host \u003d kwargs.get(\u0027host\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAW3%2F%2FeO8%3D","line":40,"in_reply_to":"AAAAW3%2F%2FegI%3D","updated":"2014-04-14 11:48:51.000000000","message":"Yes sorry I missed that","commit_id":"9848b6a7acd49b50bb077f154debce75956d0bc8"}],"neutron/services/metering/metering_plugin.py":[{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"c749c8a943832bbda9cafc2ef76baa8a096d968a","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    def get_sync_data_metering(self, context, **kwargs):"},{"line_number":35,"context_line":"        host \u003d kwargs.get(\u0027host\u0027)"},{"line_number":36,"context_line":"        return super(MeteringCallbacks, self).get_sync_data_metering(context,"},{"line_number":37,"context_line":"                                                                     host\u003dhost)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"class MeteringPlugin(metering_db.MeteringDbMixin):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUX%2F%2BTu8%3D","line":37,"updated":"2014-02-22 00:17:19.000000000","message":"pep8 issue?","commit_id":"2f81cf74380e93ea8484ef50b533ae4e1a452cdf"}],"neutron/tests/unit/services/metering/test_metering_plugin.py":[{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"c749c8a943832bbda9cafc2ef76baa8a096d968a","unresolved":false,"context_lines":[{"line_number":414,"context_line":""},{"line_number":415,"context_line":"    resource_prefix_map \u003d dict("},{"line_number":416,"context_line":"        (k.replace(\u0027_\u0027, \u0027-\u0027), constants.COMMON_PREFIXES[constants.METERING])"},{"line_number":417,"context_line":"        for k in ext_metering.RESOURCE_ATTRIBUTE_MAP.keys()"},{"line_number":418,"context_line":"    )"},{"line_number":419,"context_line":""},{"line_number":420,"context_line":"    def setUp(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUX%2F%2BTsk%3D","line":417,"updated":"2014-02-22 00:17:19.000000000","message":".keys() is the default iterator for a dict.  Not necessary to call .keys().","commit_id":"2f81cf74380e93ea8484ef50b533ae4e1a452cdf"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"c749c8a943832bbda9cafc2ef76baa8a096d968a","unresolved":false,"context_lines":[{"line_number":463,"context_line":""},{"line_number":464,"context_line":"                    data \u003d callback.get_sync_data_metering(self.adminContext,"},{"line_number":465,"context_line":"                                                           host\u003d\u0027agent2\u0027)"},{"line_number":466,"context_line":"                    self.assertEqual(0, len(data))"},{"line_number":467,"context_line":""},{"line_number":468,"context_line":"                self._remove_external_gateway_from_router("},{"line_number":469,"context_line":"                    r[\u0027id\u0027], s[\u0027network_id\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUX%2F%2BTtQ%3D","line":466,"updated":"2014-02-22 00:17:19.000000000","message":"self.assertFalse(data)","commit_id":"2f81cf74380e93ea8484ef50b533ae4e1a452cdf"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"ead33da5672fab055788e0a64017ec59cc1a1953","unresolved":false,"context_lines":[{"line_number":463,"context_line":""},{"line_number":464,"context_line":"                    data \u003d callback.get_sync_data_metering(self.adminContext,"},{"line_number":465,"context_line":"                                                           host\u003d\u0027agent2\u0027)"},{"line_number":466,"context_line":"                    self.assertEqual(0, len(data))"},{"line_number":467,"context_line":""},{"line_number":468,"context_line":"                self._remove_external_gateway_from_router("},{"line_number":469,"context_line":"                    r[\u0027id\u0027], s[\u0027network_id\u0027])"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAVn%2F%2F4hk%3D","line":466,"updated":"2014-03-03 16:47:49.000000000","message":"self.assertFalse(data)","commit_id":"5081594f4d7d64a926d8a610f5544a8624d2c3b7"},{"author":{"_account_id":7141,"name":"Sylvain Afchain","email":"safchain@redhat.com","username":"sylvainA"},"change_message_id":"52b91a56b5ec08eae13b4079225ca9e2c222e3a7","unresolved":false,"context_lines":[{"line_number":463,"context_line":""},{"line_number":464,"context_line":"                    data \u003d callback.get_sync_data_metering(self.adminContext,"},{"line_number":465,"context_line":"                                                           host\u003d\u0027agent2\u0027)"},{"line_number":466,"context_line":"                    self.assertEqual(0, len(data))"},{"line_number":467,"context_line":""},{"line_number":468,"context_line":"                self._remove_external_gateway_from_router("},{"line_number":469,"context_line":"                    r[\u0027id\u0027], s[\u0027network_id\u0027])"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAVn%2F%2F3vs%3D","line":466,"in_reply_to":"AAAAVn%2F%2F4hk%3D","updated":"2014-03-03 17:51:43.000000000","message":"Oh yes sorry Mark","commit_id":"5081594f4d7d64a926d8a610f5544a8624d2c3b7"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"1c9886daa1fa8f7c058293c7eedc24135e1003e0","unresolved":false,"context_lines":[{"line_number":374,"context_line":"                    self.mock_cast.assert_has_calls(expected, any_order\u003dTrue)"},{"line_number":375,"context_line":""},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"class TestL3NatServicePlugin(test_l3_plugin.TestL3NatServicePlugin,"},{"line_number":378,"context_line":"                             l3_agentschedulers_db.L3AgentSchedulerDbMixin):"},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"    supported_extension_aliases \u003d [\"router\", \"l3_agent_scheduler\"]"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAW3%2F%2FfVQ%3D","line":377,"updated":"2014-04-14 09:10:23.000000000","message":"Can you please clarify the difference between this class and one at #261? Is it possible to use just one?","commit_id":"df82c72f2498e46a1d2027384ede122dc6511289"},{"author":{"_account_id":7141,"name":"Sylvain Afchain","email":"safchain@redhat.com","username":"sylvainA"},"change_message_id":"fcf3637184a535dbefbf22b80f13a75d94cb98e2","unresolved":false,"context_lines":[{"line_number":374,"context_line":"                    self.mock_cast.assert_has_calls(expected, any_order\u003dTrue)"},{"line_number":375,"context_line":""},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"class TestL3NatServicePlugin(test_l3_plugin.TestL3NatServicePlugin,"},{"line_number":378,"context_line":"                             l3_agentschedulers_db.L3AgentSchedulerDbMixin):"},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"    supported_extension_aliases \u003d [\"router\", \"l3_agent_scheduler\"]"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAW3%2F%2Feyw%3D","line":377,"in_reply_to":"AAAAW3%2F%2FfVQ%3D","updated":"2014-04-14 10:28:11.000000000","message":"One class is for testing when the l3 is implemented by the plugin(ex: ovs/lb) and the other one when the l3 is used as service plugin(ml2). We have to check both","commit_id":"df82c72f2498e46a1d2027384ede122dc6511289"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"74985583a49c639f9b41f1415e313ee72047fd2c","unresolved":false,"context_lines":[{"line_number":258,"context_line":"                self.assertEqual(tenant_id, router[\u0027router\u0027][\u0027tenant_id\u0027])"},{"line_number":259,"context_line":""},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"class TestRouteIntPlugin(l3_agentschedulers_db.L3AgentSchedulerDbMixin,"},{"line_number":262,"context_line":"                         test_l3_plugin.TestL3NatIntPlugin):"},{"line_number":263,"context_line":"    supported_extension_aliases \u003d [\"router\", \"external-net\","},{"line_number":264,"context_line":"                                   \"l3_agent_scheduler\"]"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAW3%2F%2Fdbk%3D","line":261,"updated":"2014-04-14 13:21:20.000000000","message":"please use test_l3_plugin.TestL3NatIntAgentSchedulingPlugin","commit_id":"9848b6a7acd49b50bb077f154debce75956d0bc8"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"09ba74c7d5fa47995bf464124eccacd1617cc360","unresolved":false,"context_lines":[{"line_number":258,"context_line":"                self.assertEqual(tenant_id, router[\u0027router\u0027][\u0027tenant_id\u0027])"},{"line_number":259,"context_line":""},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"class TestRouteIntPlugin(l3_agentschedulers_db.L3AgentSchedulerDbMixin,"},{"line_number":262,"context_line":"                         test_l3_plugin.TestL3NatIntPlugin):"},{"line_number":263,"context_line":"    supported_extension_aliases \u003d [\"router\", \"external-net\","},{"line_number":264,"context_line":"                                   \"l3_agent_scheduler\"]"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAW3%2F%2FdEY%3D","line":261,"in_reply_to":"AAAAW3%2F%2FdQI%3D","updated":"2014-04-14 14:03:38.000000000","message":"https://review.openstack.org/#/c/52884/ was merged today and introduced TestL3NatIntAgentSchedulingPlugin. So I was on my branch and didn\u0027t realized that you haven\u0027t rebased yet, sorry for that confusion :(","commit_id":"9848b6a7acd49b50bb077f154debce75956d0bc8"},{"author":{"_account_id":7141,"name":"Sylvain Afchain","email":"safchain@redhat.com","username":"sylvainA"},"change_message_id":"ebdf51e509cdc86c667a6ca00a921a40966ebbd0","unresolved":false,"context_lines":[{"line_number":258,"context_line":"                self.assertEqual(tenant_id, router[\u0027router\u0027][\u0027tenant_id\u0027])"},{"line_number":259,"context_line":""},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"class TestRouteIntPlugin(l3_agentschedulers_db.L3AgentSchedulerDbMixin,"},{"line_number":262,"context_line":"                         test_l3_plugin.TestL3NatIntPlugin):"},{"line_number":263,"context_line":"    supported_extension_aliases \u003d [\"router\", \"external-net\","},{"line_number":264,"context_line":"                                   \"l3_agent_scheduler\"]"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAW3%2F%2FdQI%3D","line":261,"in_reply_to":"AAAAW3%2F%2Fdbk%3D","updated":"2014-04-14 13:46:22.000000000","message":"Seems to be also not present in the test_l3_plugin, I will add it and the TestL3NatAgentSchedulingServicePlugin one","commit_id":"9848b6a7acd49b50bb077f154debce75956d0bc8"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"7d7f4ea3b071610233d33cfc833935d55a9544f5","unresolved":false,"context_lines":[{"line_number":374,"context_line":"                    self.mock_cast.assert_has_calls(expected, any_order\u003dTrue)"},{"line_number":375,"context_line":""},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"class TestL3NatServicePlugin(test_l3_plugin.TestL3NatServicePlugin,"},{"line_number":378,"context_line":"                             l3_agentschedulers_db.L3AgentSchedulerDbMixin):"},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"    supported_extension_aliases \u003d [\"router\", \"l3_agent_scheduler\"]"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAW3%2F%2Feg0%3D","line":377,"updated":"2014-04-14 11:11:50.000000000","message":"can we use corresponding test plugins from test_l3_plugin to reduce duplication and confusion? (TestL3NatIntPlugin, TestL3NatIntAgentSchedulingPlugin, TestNoL3NatPlugin, TestL3NatServicePlugin)","commit_id":"9848b6a7acd49b50bb077f154debce75956d0bc8"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"74985583a49c639f9b41f1415e313ee72047fd2c","unresolved":false,"context_lines":[{"line_number":374,"context_line":"                    self.mock_cast.assert_has_calls(expected, any_order\u003dTrue)"},{"line_number":375,"context_line":""},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"class TestL3NatServicePlugin(test_l3_plugin.TestL3NatServicePlugin,"},{"line_number":378,"context_line":"                             l3_agentschedulers_db.L3AgentSchedulerDbMixin):"},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"    supported_extension_aliases \u003d [\"router\", \"l3_agent_scheduler\"]"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAW3%2F%2FdZc%3D","line":377,"in_reply_to":"AAAAW3%2F%2FeCQ%3D","updated":"2014-04-14 13:21:20.000000000","message":"yeah, sorry, I missed that. Looks we need a new TestL3NatAgentSchedulingServicePlugin. I think it should be defined in test_l3_plugin so that all needed test plugin variants would be in one place","commit_id":"9848b6a7acd49b50bb077f154debce75956d0bc8"},{"author":{"_account_id":7141,"name":"Sylvain Afchain","email":"safchain@redhat.com","username":"sylvainA"},"change_message_id":"2f06d0b287c2e822e63c91e701ed709ad3546da4","unresolved":false,"context_lines":[{"line_number":374,"context_line":"                    self.mock_cast.assert_has_calls(expected, any_order\u003dTrue)"},{"line_number":375,"context_line":""},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"class TestL3NatServicePlugin(test_l3_plugin.TestL3NatServicePlugin,"},{"line_number":378,"context_line":"                             l3_agentschedulers_db.L3AgentSchedulerDbMixin):"},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"    supported_extension_aliases \u003d [\"router\", \"l3_agent_scheduler\"]"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAW3%2F%2FeCQ%3D","line":377,"in_reply_to":"AAAAW3%2F%2FeLc%3D","updated":"2014-04-14 12:07:54.000000000","message":"Sorry maybe I missed someting but it seems that the classes defined in the test_l3_plugin don\u0027t inherit from all the mixin classes that are necessary to test the metering: Here we need  L3AgentSchedulerDbMixin which is not used in test_l3_plugin ?","commit_id":"9848b6a7acd49b50bb077f154debce75956d0bc8"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"2296b69427d5b2168107a10eeecb218ff9f55bc9","unresolved":false,"context_lines":[{"line_number":374,"context_line":"                    self.mock_cast.assert_has_calls(expected, any_order\u003dTrue)"},{"line_number":375,"context_line":""},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"class TestL3NatServicePlugin(test_l3_plugin.TestL3NatServicePlugin,"},{"line_number":378,"context_line":"                             l3_agentschedulers_db.L3AgentSchedulerDbMixin):"},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"    supported_extension_aliases \u003d [\"router\", \"l3_agent_scheduler\"]"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAW3%2F%2FeLc%3D","line":377,"in_reply_to":"AAAAW3%2F%2FeOI%3D","updated":"2014-04-14 11:54:01.000000000","message":"not really, test_l3_plugin already has appropriate test plugins defined, I suggest to use them here instead of duplication","commit_id":"9848b6a7acd49b50bb077f154debce75956d0bc8"},{"author":{"_account_id":7141,"name":"Sylvain Afchain","email":"safchain@redhat.com","username":"sylvainA"},"change_message_id":"76ea0c36131f84258f4d1c05fa330b3c79be48d6","unresolved":false,"context_lines":[{"line_number":374,"context_line":"                    self.mock_cast.assert_has_calls(expected, any_order\u003dTrue)"},{"line_number":375,"context_line":""},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"class TestL3NatServicePlugin(test_l3_plugin.TestL3NatServicePlugin,"},{"line_number":378,"context_line":"                             l3_agentschedulers_db.L3AgentSchedulerDbMixin):"},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"    supported_extension_aliases \u003d [\"router\", \"l3_agent_scheduler\"]"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAW3%2F%2FeOI%3D","line":377,"in_reply_to":"AAAAW3%2F%2Feg0%3D","updated":"2014-04-14 11:48:51.000000000","message":"Are you suggesting to move these class from the metering test to the test_l3_plugin file ?","commit_id":"9848b6a7acd49b50bb077f154debce75956d0bc8"}]}
