)]}'
{"neutron/db/migration/alembic_migrations/versions/1b2580001654_nsx_sec_group_mappin.py":[{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"54b011b683a46d5e199132e9270489636db06a8b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Copyright 2013 OpenStack Foundation"},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":6,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F9YUY%3D","line":3,"updated":"2014-02-07 10:26:38.000000000","message":"Should be 2014?","commit_id":"5b8ed2db6bdbb95d3f59c4698de720c600b7f384"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"74876216702a08ec7bf80c994349c72ff2cc1e51","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Copyright 2013 OpenStack Foundation"},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUX%2F%2FiBQ%3D","line":1,"updated":"2014-02-12 15:13:16.000000000","message":"1 - 3 not needed","commit_id":"380c4a47e36ee15ed2d5bd93187fdf5e5bab7bcb"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"b3e5e48f37fc70e849ee56a3a2e4cb1d58873de9","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"migration_for_plugins \u003d ["},{"line_number":29,"context_line":"    \u0027neutron.plugins.nicira.NeutronPlugin.NvpPluginV2\u0027,"},{"line_number":30,"context_line":"    \u0027neutron.plugins.nicira.NeutronServicePlugin.NvpAdvancedPlugin\u0027"},{"line_number":31,"context_line":"]"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"from alembic import op"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAU3%2F%2FamU%3D","line":30,"updated":"2014-02-26 19:41:17.000000000","message":"You need to add:   \n\n  \u0027neutron.plugins.vmware.plugin.NsxPlugin\u0027,\n    \u0027neutron.plugins.vmware.plugin.NsxServicePlugin\u0027\n\nas well.","commit_id":"4534a351715c9f0719ee83244f4f0e5169e86141"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"4eef5fe2cd441de4897ef29cfd7c69e4c71f09b3","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"migration_for_plugins \u003d ["},{"line_number":29,"context_line":"    \u0027neutron.plugins.nicira.NeutronPlugin.NvpPluginV2\u0027,"},{"line_number":30,"context_line":"    \u0027neutron.plugins.nicira.NeutronServicePlugin.NvpAdvancedPlugin\u0027"},{"line_number":31,"context_line":"]"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"from alembic import op"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAVX%2F%2F%2F%2B4%3D","line":30,"in_reply_to":"AAAAU3%2F%2FamU%3D","updated":"2014-02-26 22:36:18.000000000","message":"ah right","commit_id":"4534a351715c9f0719ee83244f4f0e5169e86141"}],"neutron/plugins/nicira/NeutronPlugin.py":[{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"b3e5e48f37fc70e849ee56a3a2e4cb1d58873de9","unresolved":false,"context_lines":[{"line_number":416,"context_line":"        nsx_sec_profile_ids \u003d ["},{"line_number":417,"context_line":"            nsx_utils.get_nsx_security_group_id("},{"line_number":418,"context_line":"                session, self.cluster, neutron_sg_id) for"},{"line_number":419,"context_line":"            neutron_sg_id in port_data[ext_sg.SECURITYGROUPS]]"},{"line_number":420,"context_line":"        return switchlib.create_lport(self.cluster,"},{"line_number":421,"context_line":"                                      ls_uuid,"},{"line_number":422,"context_line":"                                      port_data[\u0027tenant_id\u0027],"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAU3%2F%2Faew%3D","line":419,"updated":"2014-02-26 19:41:17.000000000","message":"this is assuming port_data[ext_sg.SECURITYGROUPS] to always be a list which i don\u0027t think is always true because we can pass in None for this to create a port without a security group :( . Though we probably shouldn\u0027t support his and only support [] :(","commit_id":"4534a351715c9f0719ee83244f4f0e5169e86141"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"4eef5fe2cd441de4897ef29cfd7c69e4c71f09b3","unresolved":false,"context_lines":[{"line_number":416,"context_line":"        nsx_sec_profile_ids \u003d ["},{"line_number":417,"context_line":"            nsx_utils.get_nsx_security_group_id("},{"line_number":418,"context_line":"                session, self.cluster, neutron_sg_id) for"},{"line_number":419,"context_line":"            neutron_sg_id in port_data[ext_sg.SECURITYGROUPS]]"},{"line_number":420,"context_line":"        return switchlib.create_lport(self.cluster,"},{"line_number":421,"context_line":"                                      ls_uuid,"},{"line_number":422,"context_line":"                                      port_data[\u0027tenant_id\u0027],"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAVX%2F%2F%2F%2BM%3D","line":419,"in_reply_to":"AAAAU3%2F%2Faew%3D","updated":"2014-02-26 22:36:18.000000000","message":"I thought we already did this conversion before calling into _nvp_create_port_helper.\n\nI will double check and fix if that\u0027s the case","commit_id":"4534a351715c9f0719ee83244f4f0e5169e86141"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"b3e5e48f37fc70e849ee56a3a2e4cb1d58873de9","unresolved":false,"context_lines":[{"line_number":2121,"context_line":"            s[\u0027id\u0027] \u003d neutron_id"},{"line_number":2122,"context_line":"            sec_group \u003d super(NvpPluginV2, self).create_security_group("},{"line_number":2123,"context_line":"                context, security_group, default_sg)"},{"line_number":2124,"context_line":"            context.session.flush()"},{"line_number":2125,"context_line":"            # Add mapping between neutron and nsx identifiers"},{"line_number":2126,"context_line":"            nsx_db.add_neutron_nsx_security_group_mapping("},{"line_number":2127,"context_line":"                context.session, neutron_id, nvp_secgroup[\u0027uuid\u0027])"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAU3%2F%2FaUQ%3D","line":2124,"updated":"2014-02-26 19:41:17.000000000","message":"quick question.. why is this flush needed?","commit_id":"4534a351715c9f0719ee83244f4f0e5169e86141"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"4eef5fe2cd441de4897ef29cfd7c69e4c71f09b3","unresolved":false,"context_lines":[{"line_number":2121,"context_line":"            s[\u0027id\u0027] \u003d neutron_id"},{"line_number":2122,"context_line":"            sec_group \u003d super(NvpPluginV2, self).create_security_group("},{"line_number":2123,"context_line":"                context, security_group, default_sg)"},{"line_number":2124,"context_line":"            context.session.flush()"},{"line_number":2125,"context_line":"            # Add mapping between neutron and nsx identifiers"},{"line_number":2126,"context_line":"            nsx_db.add_neutron_nsx_security_group_mapping("},{"line_number":2127,"context_line":"                context.session, neutron_id, nvp_secgroup[\u0027uuid\u0027])"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAVX%2F%2F%2F9Y%3D","line":2124,"in_reply_to":"AAAAU3%2F%2FaUQ%3D","updated":"2014-02-26 22:36:18.000000000","message":"Because for the mapping, which is created in the same transaction, it is needed that data are moved from the sqlalchemy session into the transaction buffer, otherwise it will fail because of foreign key violation.\n\nIn some cases I\u0027ve seen (and probably also done myself) nested transactions. That\u0027s not wrong, but even unnecessary as what the nesting is doing in that case is just moving stuff into the db engine transaction buffer.","commit_id":"4534a351715c9f0719ee83244f4f0e5169e86141"}],"neutron/plugins/nicira/common/nsx_utils.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"74876216702a08ec7bf80c994349c72ff2cc1e51","unresolved":false,"context_lines":[{"line_number":147,"context_line":"            LOG.warn(_(\"Unable to find NSX security profile for Neutron \""},{"line_number":148,"context_line":"                       \"security group %s\"), neutron_id)"},{"line_number":149,"context_line":"            return"},{"line_number":150,"context_line":"        elif len(nsx_sec_profiles) \u003e 1:"},{"line_number":151,"context_line":"            LOG.warn(_(\"Multiple NSX security profiles found for Neutron \""},{"line_number":152,"context_line":"                       \"security group %s\"), neutron_id)"},{"line_number":153,"context_line":"        nsx_sec_profile \u003d nsx_sec_profiles[0]"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUX%2F%2FiAg%3D","line":150,"updated":"2014-02-12 15:13:16.000000000","message":"elif len(nsx_sec_profiles):","commit_id":"380c4a47e36ee15ed2d5bd93187fdf5e5bab7bcb"}],"neutron/plugins/nicira/dbexts/db.py":[{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"b3e5e48f37fc70e849ee56a3a2e4cb1d58873de9","unresolved":false,"context_lines":[{"line_number":146,"context_line":"    except exc.NoResultFound:"},{"line_number":147,"context_line":"        LOG.debug(_(\"NSX identifiers for neutron security group %s not yet \""},{"line_number":148,"context_line":"                    \"stored in Neutron DB\"), neutron_id)"},{"line_number":149,"context_line":"        return None, None"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"def _delete_by_neutron_id(session, model, neutron_id):"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAU3%2F%2Fahs%3D","line":149,"updated":"2014-02-26 19:41:17.000000000","message":"you\u0027re returning a tuple here.","commit_id":"4534a351715c9f0719ee83244f4f0e5169e86141"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"4eef5fe2cd441de4897ef29cfd7c69e4c71f09b3","unresolved":false,"context_lines":[{"line_number":146,"context_line":"    except exc.NoResultFound:"},{"line_number":147,"context_line":"        LOG.debug(_(\"NSX identifiers for neutron security group %s not yet \""},{"line_number":148,"context_line":"                    \"stored in Neutron DB\"), neutron_id)"},{"line_number":149,"context_line":"        return None, None"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"def _delete_by_neutron_id(session, model, neutron_id):"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAVX%2F%2F%2F9Q%3D","line":149,"in_reply_to":"AAAAU3%2F%2Fahs%3D","updated":"2014-02-26 22:36:18.000000000","message":"copy \u0026 paste error","commit_id":"4534a351715c9f0719ee83244f4f0e5169e86141"}],"neutron/plugins/nicira/dbexts/models.py":[{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"b3e5e48f37fc70e849ee56a3a2e4cb1d58873de9","unresolved":false,"context_lines":[{"line_number":80,"context_line":"    neutron_id \u003d Column(String(36),"},{"line_number":81,"context_line":"                        ForeignKey(\u0027securitygroups.id\u0027, ondelete\u003d\"CASCADE\"),"},{"line_number":82,"context_line":"                        primary_key\u003dTrue)"},{"line_number":83,"context_line":"    nsx_id \u003d Column(String(36))"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"class NeutronNsxPortMapping(model_base.BASEV2):"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAU3%2F%2Faf8%3D","line":83,"updated":"2014-02-26 19:41:17.000000000","message":"I\u0027m not sure what the default is for:  nullable on a column but in your migration you set nullable\u003dTrue here and nullable\u003dFalse on neutron_id. Perhaps having something as primary_key\u003dTrue is explicitly nullable\u003dFalse though and the default is nullable\u003dTrue . It would probably be best to add nullable here as well.","commit_id":"4534a351715c9f0719ee83244f4f0e5169e86141"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"4eef5fe2cd441de4897ef29cfd7c69e4c71f09b3","unresolved":false,"context_lines":[{"line_number":80,"context_line":"    neutron_id \u003d Column(String(36),"},{"line_number":81,"context_line":"                        ForeignKey(\u0027securitygroups.id\u0027, ondelete\u003d\"CASCADE\"),"},{"line_number":82,"context_line":"                        primary_key\u003dTrue)"},{"line_number":83,"context_line":"    nsx_id \u003d Column(String(36))"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"class NeutronNsxPortMapping(model_base.BASEV2):"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAVX%2F%2F%2F8Y%3D","line":83,"in_reply_to":"AAAAU3%2F%2Faf8%3D","updated":"2014-02-26 22:36:18.000000000","message":"I\u0027ll do either of those.\nI prefer to keep the primary key on a single attribute unless we feel it might be better to do otherwise.","commit_id":"4534a351715c9f0719ee83244f4f0e5169e86141"}],"neutron/plugins/nicira/dbexts/nicira_db.py":[{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"934a6fd20074e0bf1ce02cbafa41da21dc47b2ff","unresolved":false,"context_lines":[{"line_number":147,"context_line":"    except exc.NoResultFound:"},{"line_number":148,"context_line":"        LOG.debug(_(\"NSX identifiers for neutron security group %s not yet \""},{"line_number":149,"context_line":"                    \"stored in Neutron DB\"), neutron_id)"},{"line_number":150,"context_line":"        return None, None"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"def _delete_by_neutron_id(session, model, neutron_id):"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUX%2F%2FdBo%3D","line":150,"updated":"2014-02-13 04:03:38.000000000","message":"Looks like you have an extra None here?","commit_id":"a7aa2581b41a0d852d33dd0ed8779f31f49ea013"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"59c80594aa314b8750002baefdbac5d8d2822ce7","unresolved":false,"context_lines":[{"line_number":147,"context_line":"    except exc.NoResultFound:"},{"line_number":148,"context_line":"        LOG.debug(_(\"NSX identifiers for neutron security group %s not yet \""},{"line_number":149,"context_line":"                    \"stored in Neutron DB\"), neutron_id)"},{"line_number":150,"context_line":"        return None, None"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"def _delete_by_neutron_id(session, model, neutron_id):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAUX%2F%2FbkQ%3D","line":150,"updated":"2014-02-13 09:05:29.000000000","message":"same as last patch.","commit_id":"25ead8a6944b8b4855062309babb8f122d742514"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"c5372d51a3dd7d85d6b83f1fbe77cc8b086e6d87","unresolved":false,"context_lines":[{"line_number":147,"context_line":"    except exc.NoResultFound:"},{"line_number":148,"context_line":"        LOG.debug(_(\"NSX identifiers for neutron security group %s not yet \""},{"line_number":149,"context_line":"                    \"stored in Neutron DB\"), neutron_id)"},{"line_number":150,"context_line":"        return None, None"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"def _delete_by_neutron_id(session, model, neutron_id):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAUX%2F%2Fbeg%3D","line":150,"in_reply_to":"AAAAUX%2F%2FbkQ%3D","updated":"2014-02-13 09:13:10.000000000","message":"I did not see your previous comment","commit_id":"25ead8a6944b8b4855062309babb8f122d742514"}]}
