)]}'
{"neutron/db/migration/alembic_migrations/versions/newton/contract/2e0d7a8a1586_add_binding_index_to_routerl3agentbinding.py":[{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"4b5d7f7fe8f9a7a6a647883fd8d2ea9eff095aae","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        ROUTER_L3_AGENT_BINDING,"},{"line_number":53,"context_line":"        sa.MetaData(),"},{"line_number":54,"context_line":"        sa.Column(\u0027router_id\u0027, sa.String(36)),"},{"line_number":55,"context_line":"        sa.Column(\u0027l3_agent_id\u0027, sa.String(36)),"},{"line_number":56,"context_line":"        sa.Column(\u0027binding_index\u0027, sa.Integer,"},{"line_number":57,"context_line":"                  nullable\u003dFalse, server_default\u003d\u00270\u0027),"},{"line_number":58,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa7ab95a_f126d9cc","line":55,"updated":"2016-09-02 07:39:07.000000000","message":"since this is going to add a constraint we need a sanity check that throws a human-readable error if their database had raced scheduling in it.","commit_id":"e2de513aed6c630d4cd2f1310eb08ac67637752f"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"b3affa83bfe46810db7c6c3a5dc0ba958893e2fe","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        ROUTER_L3_AGENT_BINDING,"},{"line_number":53,"context_line":"        sa.MetaData(),"},{"line_number":54,"context_line":"        sa.Column(\u0027router_id\u0027, sa.String(36)),"},{"line_number":55,"context_line":"        sa.Column(\u0027l3_agent_id\u0027, sa.String(36)),"},{"line_number":56,"context_line":"        sa.Column(\u0027binding_index\u0027, sa.Integer,"},{"line_number":57,"context_line":"                  nullable\u003dFalse, server_default\u003d\u00270\u0027),"},{"line_number":58,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa7ab95a_942e588a","line":55,"in_reply_to":"fa7ab95a_0caec2e5","updated":"2016-09-02 08:48:25.000000000","message":"Done","commit_id":"e2de513aed6c630d4cd2f1310eb08ac67637752f"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"59983c472f92b9b05d91dc2693555d04718837ee","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        ROUTER_L3_AGENT_BINDING,"},{"line_number":53,"context_line":"        sa.MetaData(),"},{"line_number":54,"context_line":"        sa.Column(\u0027router_id\u0027, sa.String(36)),"},{"line_number":55,"context_line":"        sa.Column(\u0027l3_agent_id\u0027, sa.String(36)),"},{"line_number":56,"context_line":"        sa.Column(\u0027binding_index\u0027, sa.Integer,"},{"line_number":57,"context_line":"                  nullable\u003dFalse, server_default\u003d\u00270\u0027),"},{"line_number":58,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa7ab95a_0caec2e5","line":55,"in_reply_to":"fa7ab95a_f126d9cc","updated":"2016-09-02 07:42:38.000000000","message":"scratch that, sanity check doesn\u0027t matter much. a migration test would be good though.","commit_id":"e2de513aed6c630d4cd2f1310eb08ac67637752f"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"c570f54b0dce56a5d0a509fa4b48756f923e1221","unresolved":false,"context_lines":[{"line_number":46,"context_line":"def upgrade():"},{"line_number":47,"context_line":"    op.add_column(ROUTER_L3_AGENT_BINDING,"},{"line_number":48,"context_line":"                  sa.Column(\u0027binding_index\u0027, sa.Integer(), nullable\u003dFalse,"},{"line_number":49,"context_line":"                           server_default\u003d\u00270\u0027))"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    bindings_table \u003d sa.Table("},{"line_number":52,"context_line":"        ROUTER_L3_AGENT_BINDING,"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa7ab95a_37966e4c","line":49,"updated":"2016-09-02 09:10:17.000000000","message":"sorry for all the nitpicking, but i think it would make more sense to have the server default to 1 since that\u0027s the lowest binding index that we allow.","commit_id":"1ba8041ca45133b241f15ee3a7c800324f6e0bc7"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"beeb09f05ef025e783d054d280ac9de65873ae34","unresolved":false,"context_lines":[{"line_number":46,"context_line":"def upgrade():"},{"line_number":47,"context_line":"    op.add_column(ROUTER_L3_AGENT_BINDING,"},{"line_number":48,"context_line":"                  sa.Column(\u0027binding_index\u0027, sa.Integer(), nullable\u003dFalse,"},{"line_number":49,"context_line":"                           server_default\u003d\u00270\u0027))"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    bindings_table \u003d sa.Table("},{"line_number":52,"context_line":"        ROUTER_L3_AGENT_BINDING,"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa7ab95a_42d24e01","line":49,"in_reply_to":"fa7ab95a_37966e4c","updated":"2016-09-02 09:24:07.000000000","message":"No worries. Better make it right today than to slave over it tomorrow.","commit_id":"1ba8041ca45133b241f15ee3a7c800324f6e0bc7"}],"neutron/scheduler/l3_agent_scheduler.py":[{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"56b11f4da05660e8a3f8b17887d607c1d4f52396","unresolved":false,"context_lines":[{"line_number":292,"context_line":"        dep_deleter \u003d functools.partial(plugin._delete_ha_network, ctxt)"},{"line_number":293,"context_line":"        dep_id_attr \u003d \u0027network_id\u0027"},{"line_number":294,"context_line":""},{"line_number":295,"context_line":"        for attempts in range(1, db_api.MAX_RETRIES + 1):"},{"line_number":296,"context_line":"            binding_index \u003d plugin.get_vacant_binding_index("},{"line_number":297,"context_line":"                context, router_id, is_manual_scheduling)"},{"line_number":298,"context_line":"            if binding_index \u003d\u003d -1:"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa7ab95a_1fc255e9","line":295,"updated":"2016-09-02 13:18:43.000000000","message":"I can\u0027t think of a scenario where this loop would iterate more than once. I talked to John about this and we\u0027ll handle it via a follow up.","commit_id":"b1ec8d523d4c45616dd71016f7e218b4b732c2ee"}],"neutron/tests/functional/db/migrations/test_2e0d7a8a1586_add_binding_index_to_routerl3agentbinding.py":[{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"ef9e0a7882bdda59ba2cc48d3aeb4e6e9bb7e9a7","unresolved":false,"context_lines":[{"line_number":74,"context_line":"            routers_to_bindings[router_id].append(binding_index)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        for binding_indices in routers_to_bindings.values():"},{"line_number":77,"context_line":"            self.assertEqual(list(range(1, 3)), binding_indices)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"class TestHARouterPortMigrationMysql(HARouterPortMigrationMixin,"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa7ab95a_3473cc81","line":77,"updated":"2016-09-02 08:52:48.000000000","message":"i think your going to want to sort binding_indices to be safe since the select is not ordered by anything.","commit_id":"6f0b87ae16454ef6d27bfbd412476f2b681f6055"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"69f2c6eac634c00521e73b0d264dfbcc8b94c1bb","unresolved":false,"context_lines":[{"line_number":74,"context_line":"            routers_to_bindings[router_id].append(binding_index)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        for binding_indices in routers_to_bindings.values():"},{"line_number":77,"context_line":"            self.assertEqual(list(range(1, 3)), binding_indices)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"class TestHARouterPortMigrationMysql(HARouterPortMigrationMixin,"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa7ab95a_7473944e","line":77,"in_reply_to":"fa7ab95a_3473cc81","updated":"2016-09-02 08:57:36.000000000","message":"Done","commit_id":"6f0b87ae16454ef6d27bfbd412476f2b681f6055"}],"neutron/tests/unit/scheduler/test_l3_agent_scheduler.py":[{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"c3c5ab10ce8f653d86acd45c79a6a6533c62afb6","unresolved":false,"context_lines":[{"line_number":1730,"context_line":"    def test_schedule_routers_twice_for_non_ha(self):"},{"line_number":1731,"context_line":"        router \u003d self._create_ha_router(ha\u003dFalse)"},{"line_number":1732,"context_line":"        self.plugin.schedule_router(self.adminContext, router[\u0027id\u0027])"},{"line_number":1733,"context_line":"        self.plugin.router_scheduler.bind_router(self.adminContext,"},{"line_number":1734,"context_line":"                                                 router[\u0027id\u0027],"},{"line_number":1735,"context_line":"                                                 self.agent1)"},{"line_number":1736,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"fa7ab95a_ddbf23ce","line":1733,"range":{"start_line":1733,"start_character":37,"end_line":1733,"end_character":48},"updated":"2016-09-02 09:37:05.000000000","message":"Thinking about this again, this should be explicit for 2 different agents.","commit_id":"0ef14ae734219219ea227591a23490bde061810d"}]}
