)]}'
{"neutron/db/l3_dvr_db.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"2fae54835efea0a6549991427317512443a6c227","unresolved":false,"context_lines":[{"line_number":1012,"context_line":""},{"line_number":1013,"context_line":"    def create_fip_agent_gw_port_if_not_exists(self, context, network_id,"},{"line_number":1014,"context_line":"                                               host):"},{"line_number":1015,"context_line":"        \"\"\"Function to return the FIP Agent GW port."},{"line_number":1016,"context_line":""},{"line_number":1017,"context_line":"        This function will create a FIP Agent GW port"},{"line_number":1018,"context_line":"        if required. If the port already exists, it"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_015b2f86","line":1015,"updated":"2020-01-15 15:41:17.000000000","message":"Why don\u0027t you revert https://review.opendev.org/#/c/673331/ first? In a separate commit.","commit_id":"5af92e042954855d452c5a7372066922a94f4a66"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"cb518f47ec33bf351e19a2dadca84d4edbe77357","unresolved":false,"context_lines":[{"line_number":1012,"context_line":""},{"line_number":1013,"context_line":"    def create_fip_agent_gw_port_if_not_exists(self, context, network_id,"},{"line_number":1014,"context_line":"                                               host):"},{"line_number":1015,"context_line":"        \"\"\"Function to return the FIP Agent GW port."},{"line_number":1016,"context_line":""},{"line_number":1017,"context_line":"        This function will create a FIP Agent GW port"},{"line_number":1018,"context_line":"        if required. If the port already exists, it"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_5acde15b","line":1015,"in_reply_to":"3fa7e38b_015b2f86","updated":"2020-01-28 21:08:30.000000000","message":"Done","commit_id":"5af92e042954855d452c5a7372066922a94f4a66"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"640390931af7a658a1535a838f51cadd317a50c8","unresolved":false,"context_lines":[{"line_number":1049,"context_line":"                ).create()"},{"line_number":1050,"context_line":"            except o_exc.NeutronDbObjectDuplicateEntry:"},{"line_number":1051,"context_line":"                LOG.debug(\"Floating IP Agent Gateway port for network \""},{"line_number":1052,"context_line":"                          \"%(network)s already exist on host %(host)s. \""},{"line_number":1053,"context_line":"                          \"Probably it was just created by other worker.\","},{"line_number":1054,"context_line":"                          {\u0027network\u0027: network_id,"},{"line_number":1055,"context_line":"                           \u0027host\u0027: host})"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_a19c9b5c","line":1052,"range":{"start_line":1052,"start_character":47,"end_line":1052,"end_character":52},"updated":"2020-01-15 15:52:30.000000000","message":"nit: exists","commit_id":"5af92e042954855d452c5a7372066922a94f4a66"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"cb518f47ec33bf351e19a2dadca84d4edbe77357","unresolved":false,"context_lines":[{"line_number":1049,"context_line":"                ).create()"},{"line_number":1050,"context_line":"            except o_exc.NeutronDbObjectDuplicateEntry:"},{"line_number":1051,"context_line":"                LOG.debug(\"Floating IP Agent Gateway port for network \""},{"line_number":1052,"context_line":"                          \"%(network)s already exist on host %(host)s. \""},{"line_number":1053,"context_line":"                          \"Probably it was just created by other worker.\","},{"line_number":1054,"context_line":"                          {\u0027network\u0027: network_id,"},{"line_number":1055,"context_line":"                           \u0027host\u0027: host})"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_3acee557","line":1052,"range":{"start_line":1052,"start_character":47,"end_line":1052,"end_character":52},"in_reply_to":"3fa7e38b_a19c9b5c","updated":"2020-01-28 21:08:30.000000000","message":"Done","commit_id":"5af92e042954855d452c5a7372066922a94f4a66"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"640390931af7a658a1535a838f51cadd317a50c8","unresolved":false,"context_lines":[{"line_number":1058,"context_line":"                LOG.debug(\"Floating IP Agent Gateway port %(gw)s found \""},{"line_number":1059,"context_line":"                          \"for the destination host: %(dest_host)s\","},{"line_number":1060,"context_line":"                          {\u0027gw\u0027: agent_port,"},{"line_number":1061,"context_line":"                           \u0027dest_host\u0027: host})"},{"line_number":1062,"context_line":"            else:"},{"line_number":1063,"context_line":"                port_data \u003d {\u0027tenant_id\u0027: \u0027\u0027,"},{"line_number":1064,"context_line":"                             \u0027network_id\u0027: network_id,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_647a31bc","line":1061,"updated":"2020-01-15 15:52:30.000000000","message":"Should this return agent_port here?  Not sure we need to make the self._populate() call below if it already exists.","commit_id":"5af92e042954855d452c5a7372066922a94f4a66"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"cb518f47ec33bf351e19a2dadca84d4edbe77357","unresolved":false,"context_lines":[{"line_number":1058,"context_line":"                LOG.debug(\"Floating IP Agent Gateway port %(gw)s found \""},{"line_number":1059,"context_line":"                          \"for the destination host: %(dest_host)s\","},{"line_number":1060,"context_line":"                          {\u0027gw\u0027: agent_port,"},{"line_number":1061,"context_line":"                           \u0027dest_host\u0027: host})"},{"line_number":1062,"context_line":"            else:"},{"line_number":1063,"context_line":"                port_data \u003d {\u0027tenant_id\u0027: \u0027\u0027,"},{"line_number":1064,"context_line":"                             \u0027network_id\u0027: network_id,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_da27911d","line":1061,"in_reply_to":"3fa7e38b_647a31bc","updated":"2020-01-28 21:08:30.000000000","message":"in case of previous logic, even if port already existed (L1046) it still did this self._populate_mtu_and_subnets_for_ports() so I didn\u0027t want to change this here.","commit_id":"5af92e042954855d452c5a7372066922a94f4a66"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"2fae54835efea0a6549991427317512443a6c227","unresolved":false,"context_lines":[{"line_number":1071,"context_line":"                    self._core_plugin, context, {\u0027port\u0027: port_data})"},{"line_number":1072,"context_line":"                if not agent_port:"},{"line_number":1073,"context_line":"                    msg \u003d _(\"Unable to create Floating IP Agent Gateway port\")"},{"line_number":1074,"context_line":"                    raise n_exc.BadRequest(resource\u003d\u0027router\u0027, msg\u003dmsg)"},{"line_number":1075,"context_line":"                LOG.debug(\"Floating IP Agent Gateway port %(gw)s created \""},{"line_number":1076,"context_line":"                          \"for the destination host: %(dest_host)s\","},{"line_number":1077,"context_line":"                          {\u0027gw\u0027: agent_port,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_84188dcd","line":1074,"updated":"2020-01-15 15:41:17.000000000","message":"In this case, you need to remove the \"DvrFipGatewayPortAgentBinding\" created.","commit_id":"5af92e042954855d452c5a7372066922a94f4a66"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"cb518f47ec33bf351e19a2dadca84d4edbe77357","unresolved":false,"context_lines":[{"line_number":1071,"context_line":"                    self._core_plugin, context, {\u0027port\u0027: port_data})"},{"line_number":1072,"context_line":"                if not agent_port:"},{"line_number":1073,"context_line":"                    msg \u003d _(\"Unable to create Floating IP Agent Gateway port\")"},{"line_number":1074,"context_line":"                    raise n_exc.BadRequest(resource\u003d\u0027router\u0027, msg\u003dmsg)"},{"line_number":1075,"context_line":"                LOG.debug(\"Floating IP Agent Gateway port %(gw)s created \""},{"line_number":1076,"context_line":"                          \"for the destination host: %(dest_host)s\","},{"line_number":1077,"context_line":"                          {\u0027gw\u0027: agent_port,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_da10f1ad","line":1074,"in_reply_to":"3fa7e38b_84188dcd","updated":"2020-01-28 21:08:30.000000000","message":"good catch","commit_id":"5af92e042954855d452c5a7372066922a94f4a66"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"8b4b6e61c70507614923baeefe3c8cf81f78f6ae","unresolved":false,"context_lines":[{"line_number":1039,"context_line":"            context, network_id, host, l3_agent_db[\u0027id\u0027])"},{"line_number":1040,"context_line":"        if not agent_port:"},{"line_number":1041,"context_line":"            LOG.info(\"Floating IP Agent Gateway port for network %s \""},{"line_number":1042,"context_line":"                     \"does not exist on host %s. Creating one.\","},{"line_number":1043,"context_line":"                     network_id, host)"},{"line_number":1044,"context_line":"            try:"},{"line_number":1045,"context_line":"                fip_agent_port_obj \u003d l3_obj.DvrFipGatewayPortAgentBinding("},{"line_number":1046,"context_line":"                    context,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_a7bb8ee1","line":1043,"range":{"start_line":1042,"start_character":20,"end_line":1043,"end_character":38},"updated":"2020-01-29 14:14:55.000000000","message":"Maybe pass dict with params?","commit_id":"615d412bc780d82ee0aa080154f8f3861160a47b"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"9c7e28d57ee13c529344c9783541cab9cf14a937","unresolved":false,"context_lines":[{"line_number":1039,"context_line":"            context, network_id, host, l3_agent_db[\u0027id\u0027])"},{"line_number":1040,"context_line":"        if not agent_port:"},{"line_number":1041,"context_line":"            LOG.info(\"Floating IP Agent Gateway port for network %s \""},{"line_number":1042,"context_line":"                     \"does not exist on host %s. Creating one.\","},{"line_number":1043,"context_line":"                     network_id, host)"},{"line_number":1044,"context_line":"            try:"},{"line_number":1045,"context_line":"                fip_agent_port_obj \u003d l3_obj.DvrFipGatewayPortAgentBinding("},{"line_number":1046,"context_line":"                    context,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_c045314c","line":1043,"range":{"start_line":1042,"start_character":20,"end_line":1043,"end_character":38},"in_reply_to":"3fa7e38b_a7bb8ee1","updated":"2020-01-31 11:10:09.000000000","message":"Done","commit_id":"615d412bc780d82ee0aa080154f8f3861160a47b"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"8b4b6e61c70507614923baeefe3c8cf81f78f6ae","unresolved":false,"context_lines":[{"line_number":1042,"context_line":"                     \"does not exist on host %s. Creating one.\","},{"line_number":1043,"context_line":"                     network_id, host)"},{"line_number":1044,"context_line":"            try:"},{"line_number":1045,"context_line":"                fip_agent_port_obj \u003d l3_obj.DvrFipGatewayPortAgentBinding("},{"line_number":1046,"context_line":"                    context,"},{"line_number":1047,"context_line":"                    network_id\u003dnetwork_id,"},{"line_number":1048,"context_line":"                    agent_id\u003dl3_agent_db[\u0027id\u0027]"},{"line_number":1049,"context_line":"                )"},{"line_number":1050,"context_line":"                fip_agent_port_obj.create()"},{"line_number":1051,"context_line":"            except o_exc.NeutronDbObjectDuplicateEntry:"},{"line_number":1052,"context_line":"                LOG.debug(\"Floating IP Agent Gateway port for network \""}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_c7c1ea50","line":1049,"range":{"start_line":1045,"start_character":9,"end_line":1049,"end_character":17},"updated":"2020-01-29 14:14:55.000000000","message":"This could be outside try-except block.","commit_id":"615d412bc780d82ee0aa080154f8f3861160a47b"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"9c7e28d57ee13c529344c9783541cab9cf14a937","unresolved":false,"context_lines":[{"line_number":1042,"context_line":"                     \"does not exist on host %s. Creating one.\","},{"line_number":1043,"context_line":"                     network_id, host)"},{"line_number":1044,"context_line":"            try:"},{"line_number":1045,"context_line":"                fip_agent_port_obj \u003d l3_obj.DvrFipGatewayPortAgentBinding("},{"line_number":1046,"context_line":"                    context,"},{"line_number":1047,"context_line":"                    network_id\u003dnetwork_id,"},{"line_number":1048,"context_line":"                    agent_id\u003dl3_agent_db[\u0027id\u0027]"},{"line_number":1049,"context_line":"                )"},{"line_number":1050,"context_line":"                fip_agent_port_obj.create()"},{"line_number":1051,"context_line":"            except o_exc.NeutronDbObjectDuplicateEntry:"},{"line_number":1052,"context_line":"                LOG.debug(\"Floating IP Agent Gateway port for network \""}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_a054b5fe","line":1049,"range":{"start_line":1045,"start_character":9,"end_line":1049,"end_character":17},"in_reply_to":"3fa7e38b_c7c1ea50","updated":"2020-01-31 11:10:09.000000000","message":"true :)","commit_id":"615d412bc780d82ee0aa080154f8f3861160a47b"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"8b4b6e61c70507614923baeefe3c8cf81f78f6ae","unresolved":false,"context_lines":[{"line_number":1071,"context_line":"                agent_port \u003d plugin_utils.create_port("},{"line_number":1072,"context_line":"                    self._core_plugin, context, {\u0027port\u0027: port_data})"},{"line_number":1073,"context_line":"                if not agent_port:"},{"line_number":1074,"context_line":"                    fip_agent_port_obj.delete()"},{"line_number":1075,"context_line":"                    msg \u003d _(\"Unable to create Floating IP Agent Gateway port\")"},{"line_number":1076,"context_line":"                    raise n_exc.BadRequest(resource\u003d\u0027router\u0027, msg\u003dmsg)"},{"line_number":1077,"context_line":"                LOG.debug(\"Floating IP Agent Gateway port %(gw)s created \""}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_c796ca4a","line":1074,"range":{"start_line":1074,"start_character":21,"end_line":1074,"end_character":47},"updated":"2020-01-29 14:14:55.000000000","message":"Is it possible that it could raise?","commit_id":"615d412bc780d82ee0aa080154f8f3861160a47b"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"c992259e7ab91e8aef5ca3efc80479fb3c492377","unresolved":false,"context_lines":[{"line_number":1071,"context_line":"                agent_port \u003d plugin_utils.create_port("},{"line_number":1072,"context_line":"                    self._core_plugin, context, {\u0027port\u0027: port_data})"},{"line_number":1073,"context_line":"                if not agent_port:"},{"line_number":1074,"context_line":"                    fip_agent_port_obj.delete()"},{"line_number":1075,"context_line":"                    msg \u003d _(\"Unable to create Floating IP Agent Gateway port\")"},{"line_number":1076,"context_line":"                    raise n_exc.BadRequest(resource\u003d\u0027router\u0027, msg\u003dmsg)"},{"line_number":1077,"context_line":"                LOG.debug(\"Floating IP Agent Gateway port %(gw)s created \""}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_80d5f91c","line":1074,"range":{"start_line":1074,"start_character":21,"end_line":1074,"end_character":47},"in_reply_to":"3fa7e38b_809df9bb","updated":"2020-01-31 11:32:34.000000000","message":"Yes, right. Try-except-else.","commit_id":"615d412bc780d82ee0aa080154f8f3861160a47b"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"9c7e28d57ee13c529344c9783541cab9cf14a937","unresolved":false,"context_lines":[{"line_number":1071,"context_line":"                agent_port \u003d plugin_utils.create_port("},{"line_number":1072,"context_line":"                    self._core_plugin, context, {\u0027port\u0027: port_data})"},{"line_number":1073,"context_line":"                if not agent_port:"},{"line_number":1074,"context_line":"                    fip_agent_port_obj.delete()"},{"line_number":1075,"context_line":"                    msg \u003d _(\"Unable to create Floating IP Agent Gateway port\")"},{"line_number":1076,"context_line":"                    raise n_exc.BadRequest(resource\u003d\u0027router\u0027, msg\u003dmsg)"},{"line_number":1077,"context_line":"                LOG.debug(\"Floating IP Agent Gateway port %(gw)s created \""}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_809df9bb","line":1074,"range":{"start_line":1074,"start_character":21,"end_line":1074,"end_character":47},"in_reply_to":"3fa7e38b_c796ca4a","updated":"2020-01-31 11:10:09.000000000","message":"Theoretically it can raise ObjectNotFound exception but in this case I don\u0027t think it is possible as it will be created always in L1050, otherwise it wouldn\u0027t go to this line, right?","commit_id":"615d412bc780d82ee0aa080154f8f3861160a47b"}],"neutron/db/migration/alembic_migrations/versions/ussuri/expand/2217c4222de6_add_dvr_fip_gateway_port_network_table.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"2fae54835efea0a6549991427317512443a6c227","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        \u0027dvr_fip_gateway_port_network\u0027,"},{"line_number":36,"context_line":"        sa.Column(\u0027network_id\u0027, sa.String(length\u003d36),"},{"line_number":37,"context_line":"                  sa.ForeignKey(\u0027networks.id\u0027, ondelete\u003d\u0027CASCADE\u0027),"},{"line_number":38,"context_line":"                  nullable\u003dFalse, primary_key\u003dTrue),"},{"line_number":39,"context_line":"        sa.Column(\u0027agent_id\u0027, sa.String(length\u003d36),"},{"line_number":40,"context_line":"                  sa.ForeignKey(\u0027agents.id\u0027, ondelete\u003d\u0027CASCADE\u0027),"},{"line_number":41,"context_line":"                  nullable\u003dFalse, primary_key\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_e492a14a","line":38,"range":{"start_line":38,"start_character":18,"end_line":38,"end_character":32},"updated":"2020-01-15 15:41:17.000000000","message":"If this column is a \"primary_key\", then nullable is False by default.\n\nhttps://github.com/sqlalchemy/sqlalchemy/blob/7cc2de880b0de2b127a54910761f357f3753c689/lib/sqlalchemy/sql/schema.py#L1152-L1154","commit_id":"5af92e042954855d452c5a7372066922a94f4a66"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"cb518f47ec33bf351e19a2dadca84d4edbe77357","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        \u0027dvr_fip_gateway_port_network\u0027,"},{"line_number":36,"context_line":"        sa.Column(\u0027network_id\u0027, sa.String(length\u003d36),"},{"line_number":37,"context_line":"                  sa.ForeignKey(\u0027networks.id\u0027, ondelete\u003d\u0027CASCADE\u0027),"},{"line_number":38,"context_line":"                  nullable\u003dFalse, primary_key\u003dTrue),"},{"line_number":39,"context_line":"        sa.Column(\u0027agent_id\u0027, sa.String(length\u003d36),"},{"line_number":40,"context_line":"                  sa.ForeignKey(\u0027agents.id\u0027, ondelete\u003d\u0027CASCADE\u0027),"},{"line_number":41,"context_line":"                  nullable\u003dFalse, primary_key\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_1a6f6929","line":38,"range":{"start_line":38,"start_character":18,"end_line":38,"end_character":32},"in_reply_to":"3fa7e38b_e492a14a","updated":"2020-01-28 21:08:30.000000000","message":"Done","commit_id":"5af92e042954855d452c5a7372066922a94f4a66"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"2fae54835efea0a6549991427317512443a6c227","unresolved":false,"context_lines":[{"line_number":38,"context_line":"                  nullable\u003dFalse, primary_key\u003dTrue),"},{"line_number":39,"context_line":"        sa.Column(\u0027agent_id\u0027, sa.String(length\u003d36),"},{"line_number":40,"context_line":"                  sa.ForeignKey(\u0027agents.id\u0027, ondelete\u003d\u0027CASCADE\u0027),"},{"line_number":41,"context_line":"                  nullable\u003dFalse, primary_key\u003dTrue)"},{"line_number":42,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_a4ca6944","line":41,"updated":"2020-01-15 15:41:17.000000000","message":"ditto","commit_id":"5af92e042954855d452c5a7372066922a94f4a66"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"cb518f47ec33bf351e19a2dadca84d4edbe77357","unresolved":false,"context_lines":[{"line_number":38,"context_line":"                  nullable\u003dFalse, primary_key\u003dTrue),"},{"line_number":39,"context_line":"        sa.Column(\u0027agent_id\u0027, sa.String(length\u003d36),"},{"line_number":40,"context_line":"                  sa.ForeignKey(\u0027agents.id\u0027, ondelete\u003d\u0027CASCADE\u0027),"},{"line_number":41,"context_line":"                  nullable\u003dFalse, primary_key\u003dTrue)"},{"line_number":42,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_3a6a6517","line":41,"in_reply_to":"3fa7e38b_a4ca6944","updated":"2020-01-28 21:08:30.000000000","message":"Done","commit_id":"5af92e042954855d452c5a7372066922a94f4a66"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"c992259e7ab91e8aef5ca3efc80479fb3c492377","unresolved":false,"context_lines":[{"line_number":38,"context_line":"                  primary_key\u003dTrue),"},{"line_number":39,"context_line":"        sa.Column(\u0027agent_id\u0027, sa.String(length\u003d36),"},{"line_number":40,"context_line":"                  sa.ForeignKey(\u0027agents.id\u0027, ondelete\u003d\u0027CASCADE\u0027),"},{"line_number":41,"context_line":"                  primary_key\u003dTrue)"},{"line_number":42,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_a0a8358b","line":41,"range":{"start_line":41,"start_character":18,"end_line":41,"end_character":29},"updated":"2020-01-31 11:32:34.000000000","message":"Both are primary_keys so combination for agent and networks here will be unique.","commit_id":"615d412bc780d82ee0aa080154f8f3861160a47b"}],"neutron/db/models/dvr.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"2fae54835efea0a6549991427317512443a6c227","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    network_id \u003d sa.Column(sa.String(36), sa.ForeignKey(\"networks.id\","},{"line_number":39,"context_line":"                                                        ondelete\u003d\"CASCADE\"),"},{"line_number":40,"context_line":"                           nullable\u003dFalse, primary_key\u003dTrue)"},{"line_number":41,"context_line":"    agent_id \u003d sa.Column(sa.String(36), sa.ForeignKey(\"agents.id\","},{"line_number":42,"context_line":"                                                      ondelete\u003d\"CASCADE\"),"},{"line_number":43,"context_line":"                         nullable\u003dFalse, primary_key\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_e4f94182","line":40,"range":{"start_line":40,"start_character":27,"end_line":40,"end_character":35},"updated":"2020-01-15 15:41:17.000000000","message":"ditto","commit_id":"5af92e042954855d452c5a7372066922a94f4a66"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"cb518f47ec33bf351e19a2dadca84d4edbe77357","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    network_id \u003d sa.Column(sa.String(36), sa.ForeignKey(\"networks.id\","},{"line_number":39,"context_line":"                                                        ondelete\u003d\"CASCADE\"),"},{"line_number":40,"context_line":"                           nullable\u003dFalse, primary_key\u003dTrue)"},{"line_number":41,"context_line":"    agent_id \u003d sa.Column(sa.String(36), sa.ForeignKey(\"agents.id\","},{"line_number":42,"context_line":"                                                      ondelete\u003d\"CASCADE\"),"},{"line_number":43,"context_line":"                         nullable\u003dFalse, primary_key\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_dac31105","line":40,"range":{"start_line":40,"start_character":27,"end_line":40,"end_character":35},"in_reply_to":"3fa7e38b_e4f94182","updated":"2020-01-28 21:08:30.000000000","message":"Done","commit_id":"5af92e042954855d452c5a7372066922a94f4a66"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"2fae54835efea0a6549991427317512443a6c227","unresolved":false,"context_lines":[{"line_number":40,"context_line":"                           nullable\u003dFalse, primary_key\u003dTrue)"},{"line_number":41,"context_line":"    agent_id \u003d sa.Column(sa.String(36), sa.ForeignKey(\"agents.id\","},{"line_number":42,"context_line":"                                                      ondelete\u003d\"CASCADE\"),"},{"line_number":43,"context_line":"                         nullable\u003dFalse, primary_key\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_04ffbd66","line":43,"range":{"start_line":43,"start_character":25,"end_line":43,"end_character":33},"updated":"2020-01-15 15:41:17.000000000","message":"ditto","commit_id":"5af92e042954855d452c5a7372066922a94f4a66"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"cb518f47ec33bf351e19a2dadca84d4edbe77357","unresolved":false,"context_lines":[{"line_number":40,"context_line":"                           nullable\u003dFalse, primary_key\u003dTrue)"},{"line_number":41,"context_line":"    agent_id \u003d sa.Column(sa.String(36), sa.ForeignKey(\"agents.id\","},{"line_number":42,"context_line":"                                                      ondelete\u003d\"CASCADE\"),"},{"line_number":43,"context_line":"                         nullable\u003dFalse, primary_key\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_fac60d15","line":43,"range":{"start_line":43,"start_character":25,"end_line":43,"end_character":33},"in_reply_to":"3fa7e38b_04ffbd66","updated":"2020-01-28 21:08:30.000000000","message":"Done","commit_id":"5af92e042954855d452c5a7372066922a94f4a66"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"8b4b6e61c70507614923baeefe3c8cf81f78f6ae","unresolved":false,"context_lines":[{"line_number":29,"context_line":"class DvrFipGatewayPortAgentBinding(model_base.BASEV2):"},{"line_number":30,"context_line":"    \"\"\"Represents a binding of agent\u0027s FIP gateway port and L3 agent."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    Each L3 DVR agent can only have one FIP gateway port per network."},{"line_number":33,"context_line":"    This table represents this constraint."},{"line_number":34,"context_line":"    \"\"\""},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_c76faa5e","line":32,"range":{"start_line":32,"start_character":4,"end_line":32,"end_character":69},"updated":"2020-01-29 14:14:55.000000000","message":"What about adding unique constraint here?","commit_id":"615d412bc780d82ee0aa080154f8f3861160a47b"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"c992259e7ab91e8aef5ca3efc80479fb3c492377","unresolved":false,"context_lines":[{"line_number":29,"context_line":"class DvrFipGatewayPortAgentBinding(model_base.BASEV2):"},{"line_number":30,"context_line":"    \"\"\"Represents a binding of agent\u0027s FIP gateway port and L3 agent."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    Each L3 DVR agent can only have one FIP gateway port per network."},{"line_number":33,"context_line":"    This table represents this constraint."},{"line_number":34,"context_line":"    \"\"\""},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_e0870d11","line":32,"range":{"start_line":32,"start_character":4,"end_line":32,"end_character":69},"in_reply_to":"3fa7e38b_008a6964","updated":"2020-01-31 11:32:34.000000000","message":"Ok","commit_id":"615d412bc780d82ee0aa080154f8f3861160a47b"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"9c7e28d57ee13c529344c9783541cab9cf14a937","unresolved":false,"context_lines":[{"line_number":29,"context_line":"class DvrFipGatewayPortAgentBinding(model_base.BASEV2):"},{"line_number":30,"context_line":"    \"\"\"Represents a binding of agent\u0027s FIP gateway port and L3 agent."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    Each L3 DVR agent can only have one FIP gateway port per network."},{"line_number":33,"context_line":"    This table represents this constraint."},{"line_number":34,"context_line":"    \"\"\""},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_008a6964","line":32,"range":{"start_line":32,"start_character":4,"end_line":32,"end_character":69},"in_reply_to":"3fa7e38b_c76faa5e","updated":"2020-01-31 11:10:09.000000000","message":"this isn\u0027t possible as this is the same port as any other port stored in ports table. The only difference between this kind of ports and e.g. compute ports is different device_owner and in this case router_id is set in device_id column.","commit_id":"615d412bc780d82ee0aa080154f8f3861160a47b"}]}
