)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The Modular L2 Plugin uses drivers to support separately extensible"},{"line_number":10,"context_line":"sets of network types and of mechanisms for accessing networks of"},{"line_number":11,"context_line":"those types. Unlike with the metaplugin, multiple mechanisms can be"},{"line_number":12,"context_line":"used simultaneously to access different ports of the same"},{"line_number":13,"context_line":"network. Mechanisms can utilize agents via RPC and/or use mechanism"},{"line_number":14,"context_line":"drivers to interact with external devices or controllers. Networks can"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"AAAAPH%2F%2F7sA%3D","line":11,"updated":"2013-05-19 13:43:32.000000000","message":"Does this enable different types of networks, for example, one network supporting gre traffic and the other vlan traffic?","commit_id":"2de9c5149af68a7babd87cece3da28572ce46dcc"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The Modular L2 Plugin uses drivers to support separately extensible"},{"line_number":10,"context_line":"sets of network types and of mechanisms for accessing networks of"},{"line_number":11,"context_line":"those types. Unlike with the metaplugin, multiple mechanisms can be"},{"line_number":12,"context_line":"used simultaneously to access different ports of the same"},{"line_number":13,"context_line":"network. Mechanisms can utilize agents via RPC and/or use mechanism"},{"line_number":14,"context_line":"drivers to interact with external devices or controllers. Networks can"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"AAAAPH%2F%2F50A%3D","line":11,"in_reply_to":"AAAAPH%2F%2F7sA%3D","updated":"2013-05-20 18:04:58.000000000","message":"Yes. The set of TypeDrivers determines the types of networks that can be created. The L2 agents and/or MechanismDrivers determine where/how those networks can be accessed.","commit_id":"2de9c5149af68a7babd87cece3da28572ce46dcc"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":50,"context_line":""},{"line_number":51,"context_line":"Follow-on tasks after initial merge:"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"- Additional unit tests"},{"line_number":54,"context_line":"- Return useful binding:vif_type value for GenericVIFDriver"},{"line_number":55,"context_line":"- Implement GRE tunnel endpoint management RPCs and DB (might defer)"},{"line_number":56,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"AAAAPH%2F%2FrH0%3D","line":53,"updated":"2013-05-27 21:36:03.000000000","message":"Unit tests right now are roughly equivalent to those for the linuxbridge and openvswitch plugins. Plan to add tests for the drivers, and for the RPC callback method implementations.","commit_id":"55a39b43c146c785ede98522014e381fd9e7d438"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":51,"context_line":"Follow-on tasks after initial merge:"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"- Additional unit tests"},{"line_number":54,"context_line":"- Return useful binding:vif_type value for GenericVIFDriver"},{"line_number":55,"context_line":"- Implement GRE tunnel endpoint management RPCs and DB (might defer)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"Implements: blueprint modular-l2"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"AAAAPH%2F%2FrHc%3D","line":54,"updated":"2013-05-27 21:36:03.000000000","message":"This is dependent on nova setting binding:host_id on the port prior to accessing binding:vif_type (see https://review.openstack.org/#/c/29767/).","commit_id":"55a39b43c146c785ede98522014e381fd9e7d438"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":52,"context_line":""},{"line_number":53,"context_line":"- Additional unit tests"},{"line_number":54,"context_line":"- Return useful binding:vif_type value for GenericVIFDriver"},{"line_number":55,"context_line":"- Implement GRE tunnel endpoint management RPCs and DB (might defer)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"Implements: blueprint modular-l2"},{"line_number":58,"context_line":"Change-Id: Ia8cae480180f0990af7d5e5e56f29eaeac205e0e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"AAAAPH%2F%2FrIE%3D","line":55,"updated":"2013-05-27 21:36:03.000000000","message":"Please ignore the \"might defer\". This is definitely needed in H-2.","commit_id":"55a39b43c146c785ede98522014e381fd9e7d438"}],"etc/quantum/plugins/ml2/ml2_conf.ini":[{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"24101c978a171e8721b07ecaf865cb8cb81e1600","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# TODO(rkukura): add documentation and sensible values"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"[ML2]"},{"line_number":4,"context_line":"type_drivers \u003d flat,local,vlan"},{"line_number":5,"context_line":"tenant_network_types \u003d vlan"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"[ML2_TYPE_FLAT]"}],"source_content_type":"text/x-properties","patch_set":1,"id":"AAAAM3%2F%2FPXs%3D","line":4,"updated":"2013-01-31 20:11:04.000000000","message":"what\u0027s is local driver? May be we should have brief explanation of each network type here.","commit_id":"ddb5aa8b2590ebd8d803a57b9f81ac6cf69a3948"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":1,"context_line":"# TODO(rkukura): add documentation and sensible values"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"[ML2]"},{"line_number":4,"context_line":"type_drivers \u003d flat,local,vlan"},{"line_number":5,"context_line":"tenant_network_types \u003d vlan"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"[ML2_TYPE_FLAT]"}],"source_content_type":"text/x-properties","patch_set":1,"id":"AAAAM3%2F%2FBFQ%3D","line":4,"in_reply_to":"AAAAM3%2F%2FPXs%3D","updated":"2013-02-11 15:58:42.000000000","message":"I\u0027ve been documenting the purpose of each driver in the class documentation in the driver\u0027s module, so hopefully that will explain it. The config file will definitely need more documentation as well.","commit_id":"ddb5aa8b2590ebd8d803a57b9f81ac6cf69a3948"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":1,"context_line":"# TODO(rkukura): add documentation and sensible values"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"[ML2]"},{"line_number":4,"context_line":"type_drivers \u003d flat,local,vlan"},{"line_number":5,"context_line":"tenant_network_types \u003d vlan"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"[ML2_TYPE_FLAT]"}],"source_content_type":"text/x-properties","patch_set":3,"id":"AAAAOn%2F%2FseI%3D","line":4,"updated":"2013-04-27 17:33:18.000000000","message":"should this not be a comment (ditto for the rest of the vars below)","commit_id":"9ea0009b0883102e45d6bad7dc608b781937769d"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":1,"context_line":"# TODO(rkukura): add documentation and sensible values"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"[ML2]"},{"line_number":4,"context_line":"type_drivers \u003d flat,local,vlan"},{"line_number":5,"context_line":"tenant_network_types \u003d vlan"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"[ML2_TYPE_FLAT]"}],"source_content_type":"text/x-properties","patch_set":3,"id":"AAAAOn%2F%2FiMA%3D","line":4,"in_reply_to":"AAAAOn%2F%2FseI%3D","updated":"2013-05-06 20:59:07.000000000","message":"Gary, can you clarify what you are asking for here regarding comments?\n\nNote that the built-in default values and the config file contents will be revisited before proposing a patch set for merge.","commit_id":"9ea0009b0883102e45d6bad7dc608b781937769d"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":1,"context_line":"# TODO(rkukura): add documentation and sensible example values"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"[ml2]"},{"line_number":4,"context_line":"type_drivers \u003d flat,local,vlan"},{"line_number":5,"context_line":"tenant_network_types \u003d vlan"},{"line_number":6,"context_line":""}],"source_content_type":"text/x-properties","patch_set":5,"id":"AAAAPH%2F%2F7r4%3D","line":3,"updated":"2013-05-19 13:43:32.000000000","message":"if these are the default values then they should be commented out","commit_id":"2de9c5149af68a7babd87cece3da28572ce46dcc"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":1,"context_line":"# TODO(rkukura): add documentation and sensible example values"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"[ml2]"},{"line_number":4,"context_line":"type_drivers \u003d flat,local,vlan"},{"line_number":5,"context_line":"tenant_network_types \u003d vlan"},{"line_number":6,"context_line":""}],"source_content_type":"text/x-properties","patch_set":5,"id":"AAAAPH%2F%2F5zs%3D","line":3,"in_reply_to":"AAAAPH%2F%2F7r4%3D","updated":"2013-05-20 18:04:58.000000000","message":"So the TODO above - this will be done.","commit_id":"2de9c5149af68a7babd87cece3da28572ce46dcc"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":4,"context_line":"type_drivers \u003d flat,local,vlan"},{"line_number":5,"context_line":"tenant_network_types \u003d vlan"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"[ml2_type_flat]"},{"line_number":8,"context_line":"flat_networks \u003d physnet1,physnet2"},{"line_number":9,"context_line":"#flat_networks \u003d *"},{"line_number":10,"context_line":""}],"source_content_type":"text/x-properties","patch_set":5,"id":"AAAAPH%2F%2F7r0%3D","line":7,"updated":"2013-05-19 13:43:32.000000000","message":"dittio","commit_id":"2de9c5149af68a7babd87cece3da28572ce46dcc"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":8,"context_line":"flat_networks \u003d physnet1,physnet2"},{"line_number":9,"context_line":"#flat_networks \u003d *"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"[ml2_type_vlan]"},{"line_number":12,"context_line":"network_vlan_ranges \u003d physnet1:1000:1004,physnet2"},{"line_number":13,"context_line":"#network_vlan_ranges \u003d *"}],"source_content_type":"text/x-properties","patch_set":5,"id":"AAAAPH%2F%2F7rw%3D","line":11,"updated":"2013-05-19 13:43:32.000000000","message":"ditto","commit_id":"2de9c5149af68a7babd87cece3da28572ce46dcc"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":5,"context_line":"# Default: type_drivers \u003d local,flat,vlan"},{"line_number":6,"context_line":"# Example: type_drivers \u003d flat,vlan,gre"},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"# (StrOpt) Ordered list of network_types to allocate as tenant"},{"line_number":9,"context_line":"# networks. The default value \u0027local\u0027 is useful for single-box testing"},{"line_number":10,"context_line":"# but provides no connectivity between hosts."},{"line_number":11,"context_line":"#"}],"source_content_type":"text/x-properties","patch_set":7,"id":"AAAAPH%2F%2Fqn0%3D","line":8,"updated":"2013-05-28 09:12:11.000000000","message":"This is ListOpt too","commit_id":"55a39b43c146c785ede98522014e381fd9e7d438"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":5,"context_line":"# Default: type_drivers \u003d local,flat,vlan"},{"line_number":6,"context_line":"# Example: type_drivers \u003d flat,vlan,gre"},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"# (StrOpt) Ordered list of network_types to allocate as tenant"},{"line_number":9,"context_line":"# networks. The default value \u0027local\u0027 is useful for single-box testing"},{"line_number":10,"context_line":"# but provides no connectivity between hosts."},{"line_number":11,"context_line":"#"}],"source_content_type":"text/x-properties","patch_set":7,"id":"AAAAPH%2F%2Fpao%3D","line":8,"in_reply_to":"AAAAPH%2F%2Fqn0%3D","updated":"2013-05-28 20:56:06.000000000","message":"Done","commit_id":"55a39b43c146c785ede98522014e381fd9e7d438"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":10,"context_line":"# but provides no connectivity between hosts."},{"line_number":11,"context_line":"#"},{"line_number":12,"context_line":"# Default: tenant_network_types \u003d local"},{"line_number":13,"context_line":"# Example: tenant_network_types \u003d vlan,gre"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"[ml2_type_flat]"},{"line_number":16,"context_line":"# (ListOpt) List of physical_network names with which flat networks"}],"source_content_type":"text/x-properties","patch_set":7,"id":"AAAAPH%2F%2FqWE%3D","line":13,"updated":"2013-05-28 13:47:02.000000000","message":"mechanism_drivers is not listed here. Is it because it is not supported at the moment?","commit_id":"55a39b43c146c785ede98522014e381fd9e7d438"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":10,"context_line":"# but provides no connectivity between hosts."},{"line_number":11,"context_line":"#"},{"line_number":12,"context_line":"# Default: tenant_network_types \u003d local"},{"line_number":13,"context_line":"# Example: tenant_network_types \u003d vlan,gre"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"[ml2_type_flat]"},{"line_number":16,"context_line":"# (ListOpt) List of physical_network names with which flat networks"}],"source_content_type":"text/x-properties","patch_set":7,"id":"AAAAPH%2F%2Fpag%3D","line":13,"in_reply_to":"AAAAPH%2F%2FqWE%3D","updated":"2013-05-28 20:56:06.000000000","message":"Correct. They will be added in a subsequent merge.","commit_id":"55a39b43c146c785ede98522014e381fd9e7d438"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":17,"context_line":"# can be created. Use * to allow flat networks with arbitrary"},{"line_number":18,"context_line":"# physical_network names."},{"line_number":19,"context_line":"#"},{"line_number":20,"context_line":"# Default:flat_networks \u003d "},{"line_number":21,"context_line":"# Example:flat_networks \u003d physnet1,physnet2"},{"line_number":22,"context_line":"# Example:flat_networks \u003d *"},{"line_number":23,"context_line":""}],"source_content_type":"text/x-properties","patch_set":7,"id":"AAAAPH%2F%2Fqlk%3D","line":20,"updated":"2013-05-28 09:26:37.000000000","message":"whitespace","commit_id":"55a39b43c146c785ede98522014e381fd9e7d438"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":17,"context_line":"# can be created. Use * to allow flat networks with arbitrary"},{"line_number":18,"context_line":"# physical_network names."},{"line_number":19,"context_line":"#"},{"line_number":20,"context_line":"# Default:flat_networks \u003d "},{"line_number":21,"context_line":"# Example:flat_networks \u003d physnet1,physnet2"},{"line_number":22,"context_line":"# Example:flat_networks \u003d *"},{"line_number":23,"context_line":""}],"source_content_type":"text/x-properties","patch_set":7,"id":"AAAAPH%2F%2FqoA%3D","line":20,"updated":"2013-05-28 09:12:11.000000000","message":"whitespace","commit_id":"55a39b43c146c785ede98522014e381fd9e7d438"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":17,"context_line":"# can be created. Use * to allow flat networks with arbitrary"},{"line_number":18,"context_line":"# physical_network names."},{"line_number":19,"context_line":"#"},{"line_number":20,"context_line":"# Default:flat_networks \u003d "},{"line_number":21,"context_line":"# Example:flat_networks \u003d physnet1,physnet2"},{"line_number":22,"context_line":"# Example:flat_networks \u003d *"},{"line_number":23,"context_line":""}],"source_content_type":"text/x-properties","patch_set":7,"id":"AAAAPH%2F%2FpaY%3D","line":20,"in_reply_to":"AAAAPH%2F%2Fqlk%3D","updated":"2013-05-28 20:56:06.000000000","message":"Done","commit_id":"55a39b43c146c785ede98522014e381fd9e7d438"}],"quantum/common/config.py":[{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"24101c978a171e8721b07ecaf865cb8cb81e1600","unresolved":false,"context_lines":[{"line_number":101,"context_line":"    :param conf: a cfg.ConfOpts object (unused)"},{"line_number":102,"context_line":"    \"\"\""},{"line_number":103,"context_line":"    logging.setup(None)"},{"line_number":104,"context_line":"    log_root \u003d logging.getLogger(None).logger"},{"line_number":105,"context_line":"    log_root.propagate \u003d 0"},{"line_number":106,"context_line":"    LOG.info(_(\"Logging enabled!\"))"},{"line_number":107,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FPXY%3D","line":104,"updated":"2013-01-31 20:11:04.000000000","message":"Why this change needed?","commit_id":"ddb5aa8b2590ebd8d803a57b9f81ac6cf69a3948"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":101,"context_line":"    :param conf: a cfg.ConfOpts object (unused)"},{"line_number":102,"context_line":"    \"\"\""},{"line_number":103,"context_line":"    logging.setup(None)"},{"line_number":104,"context_line":"    log_root \u003d logging.getLogger(None).logger"},{"line_number":105,"context_line":"    log_root.propagate \u003d 0"},{"line_number":106,"context_line":"    LOG.info(_(\"Logging enabled!\"))"},{"line_number":107,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FBFE%3D","line":104,"in_reply_to":"AAAAM3%2F%2FPXY%3D","updated":"2013-02-11 15:58:42.000000000","message":"Without this change, the stevedore library\u0027s (or any other 3rd party library\u0027s) logging goes into a black hole. This makes it really difficult to debug any issues that prevent stevedore from loading a driver, such as unimplemented abstract methods or missing imports or dependencies.","commit_id":"ddb5aa8b2590ebd8d803a57b9f81ac6cf69a3948"}],"quantum/db/migration/alembic_migrations/versions/5ac71e65402c_ml2_initial.py":[{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":48,"context_line":"    op.create_table("},{"line_number":49,"context_line":"        \u0027ml2_network_segments\u0027,"},{"line_number":50,"context_line":"        sa.Column(\u0027id\u0027, sa.String(length\u003d36), nullable\u003dFalse),"},{"line_number":51,"context_line":"        sa.Column(\u0027network_id\u0027, sa.String(length\u003d36), nullable\u003dTrue),"},{"line_number":52,"context_line":"        sa.Column(\u0027network_type\u0027, sa.String(length\u003d32), nullable\u003dFalse),"},{"line_number":53,"context_line":"        sa.Column(\u0027physical_network\u0027, sa.String(length\u003d64), nullable\u003dTrue),"},{"line_number":54,"context_line":"        sa.Column(\u0027segmentation_id\u0027, sa.Integer(), nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2Fqmw%3D","line":51,"updated":"2013-05-28 09:12:11.000000000","message":"You might want to make the above not nullable as well.","commit_id":"55a39b43c146c785ede98522014e381fd9e7d438"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":48,"context_line":"    op.create_table("},{"line_number":49,"context_line":"        \u0027ml2_network_segments\u0027,"},{"line_number":50,"context_line":"        sa.Column(\u0027id\u0027, sa.String(length\u003d36), nullable\u003dFalse),"},{"line_number":51,"context_line":"        sa.Column(\u0027network_id\u0027, sa.String(length\u003d36), nullable\u003dTrue),"},{"line_number":52,"context_line":"        sa.Column(\u0027network_type\u0027, sa.String(length\u003d32), nullable\u003dFalse),"},{"line_number":53,"context_line":"        sa.Column(\u0027physical_network\u0027, sa.String(length\u003d64), nullable\u003dTrue),"},{"line_number":54,"context_line":"        sa.Column(\u0027segmentation_id\u0027, sa.Integer(), nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2FpMo%3D","line":51,"in_reply_to":"AAAAPH%2F%2Fqmw%3D","updated":"2013-05-28 20:56:06.000000000","message":"Done","commit_id":"55a39b43c146c785ede98522014e381fd9e7d438"}],"quantum/db/migration/alembic_migrations/versions/folsom_initial.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":19,"context_line":"\"\"\"folsom initial database"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Revision ID: folsom"},{"line_number":22,"context_line":"Revises: None"},{"line_number":23,"context_line":"Create Date: 2012-12-03 09:14:50.579765"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"\"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2Fqlc%3D","line":22,"updated":"2013-05-28 09:26:37.000000000","message":"Why are the changes needed for folsom?","commit_id":"55a39b43c146c785ede98522014e381fd9e7d438"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":19,"context_line":"\"\"\"folsom initial database"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Revision ID: folsom"},{"line_number":22,"context_line":"Revises: None"},{"line_number":23,"context_line":"Create Date: 2012-12-03 09:14:50.579765"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"\"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2FpLE%3D","line":22,"in_reply_to":"AAAAPH%2F%2Fqlc%3D","updated":"2013-05-28 20:56:06.000000000","message":"My understanding is that these are needed so that the mixed-in tables get migrated when the ml2 plugin is configured.","commit_id":"55a39b43c146c785ede98522014e381fd9e7d438"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":"FOLSOM_QUOTA \u003d ["},{"line_number":49,"context_line":"    PLUGINS[\u0027lbr\u0027],"},{"line_number":50,"context_line":"    PLUGINS[\u0027ml2\u0027],"},{"line_number":51,"context_line":"    PLUGINS[\u0027nvp\u0027],"},{"line_number":52,"context_line":"    PLUGINS[\u0027ovs\u0027],"},{"line_number":53,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2FqmY%3D","line":50,"updated":"2013-05-28 09:12:11.000000000","message":"I am not sure if this operation should be considered legal or not.\nI think it\u0027s acceptable in this case as this is a new plugin.\nSo new deployments will run this migration too.\nExisting deployments won\u0027t need to run this migration, so they will be fine as well when switching to ML2","commit_id":"55a39b43c146c785ede98522014e381fd9e7d438"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":"FOLSOM_QUOTA \u003d ["},{"line_number":49,"context_line":"    PLUGINS[\u0027lbr\u0027],"},{"line_number":50,"context_line":"    PLUGINS[\u0027ml2\u0027],"},{"line_number":51,"context_line":"    PLUGINS[\u0027nvp\u0027],"},{"line_number":52,"context_line":"    PLUGINS[\u0027ovs\u0027],"},{"line_number":53,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2FpKg%3D","line":50,"in_reply_to":"AAAAPH%2F%2FqmY%3D","updated":"2013-05-28 20:56:06.000000000","message":"I think it is needed so that the quota migrations are run when ml2 is the configured plugin.","commit_id":"55a39b43c146c785ede98522014e381fd9e7d438"}],"quantum/plugins/ml2/config.py":[{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"420cac31c17d3dfac7e6ad0aa225ddda97bdcf5b","unresolved":false,"context_lines":[{"line_number":29,"context_line":"                \"networks.\"),"},{"line_number":30,"context_line":"    cfg.ListOpt(\u0027mechanism_drivers\u0027,"},{"line_number":31,"context_line":"                default\u003d[],"},{"line_number":32,"context_line":"                help\u003d\"List of nettworking mechanism driver entrypoints to be \""},{"line_number":33,"context_line":"                \"loaded from the quantum.ml2.mechanism_drivers namespace.\"),"},{"line_number":34,"context_line":"]"},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAOn%2F%2Ftjg%3D","line":32,"updated":"2013-04-26 18:03:06.000000000","message":"typo: networking","commit_id":"3a544a8a83761b2ed67d23911eee43e000c30071"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":21,"context_line":"ml2_opts \u003d ["},{"line_number":22,"context_line":"    cfg.ListOpt(\u0027type_drivers\u0027,"},{"line_number":23,"context_line":"                default\u003d[\u0027local\u0027],"},{"line_number":24,"context_line":"                help\u003d\"List of network type driver entrypoints to be loaded \""},{"line_number":25,"context_line":"                \"from the quantum.ml2.type_drivers namespace.\"),"},{"line_number":26,"context_line":"    cfg.ListOpt(\u0027tenant_network_types\u0027,"},{"line_number":27,"context_line":"                default\u003d[\u0027local\u0027],"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOn%2F%2FseE%3D","line":24,"updated":"2013-04-27 17:33:18.000000000","message":"in the rest of the code this has the i18n format _()","commit_id":"9ea0009b0883102e45d6bad7dc608b781937769d"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":21,"context_line":"ml2_opts \u003d ["},{"line_number":22,"context_line":"    cfg.ListOpt(\u0027type_drivers\u0027,"},{"line_number":23,"context_line":"                default\u003d[\u0027local\u0027],"},{"line_number":24,"context_line":"                help\u003d\"List of network type driver entrypoints to be loaded \""},{"line_number":25,"context_line":"                \"from the quantum.ml2.type_drivers namespace.\"),"},{"line_number":26,"context_line":"    cfg.ListOpt(\u0027tenant_network_types\u0027,"},{"line_number":27,"context_line":"                default\u003d[\u0027local\u0027],"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOn%2F%2FiLM%3D","line":24,"in_reply_to":"AAAAOn%2F%2FseE%3D","updated":"2013-05-06 20:59:07.000000000","message":"Done","commit_id":"9ea0009b0883102e45d6bad7dc608b781937769d"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":34,"context_line":"]"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"cfg.CONF.register_opts(ml2_opts, \"ML2\")"},{"line_number":38,"context_line":"cfg.CONF.register_opts(scheduler.AGENTS_SCHEDULER_OPTS)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOn%2F%2FseA%3D","line":37,"updated":"2013-04-27 17:33:18.000000000","message":"in oslo there is talk of lower case section names. i think that it is worth doing from here","commit_id":"9ea0009b0883102e45d6bad7dc608b781937769d"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":34,"context_line":"]"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"cfg.CONF.register_opts(ml2_opts, \"ML2\")"},{"line_number":38,"context_line":"cfg.CONF.register_opts(scheduler.AGENTS_SCHEDULER_OPTS)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOn%2F%2FiLE%3D","line":37,"in_reply_to":"AAAAOn%2F%2FseA%3D","updated":"2013-05-06 20:59:07.000000000","message":"Done","commit_id":"9ea0009b0883102e45d6bad7dc608b781937769d"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"unresolved":false,"context_lines":[{"line_number":26,"context_line":"    cfg.ListOpt(\u0027tenant_network_types\u0027,"},{"line_number":27,"context_line":"                default\u003d[\u0027local\u0027],"},{"line_number":28,"context_line":"                help\u003d_(\"Ordered list of network_types to allocate as tenant \""},{"line_number":29,"context_line":"                       \"networks.\")),"},{"line_number":30,"context_line":"    cfg.ListOpt(\u0027mechanism_drivers\u0027,"},{"line_number":31,"context_line":"                default\u003d[],"},{"line_number":32,"context_line":"                help\u003d_(\"List of networking mechanism driver entrypoints to \""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAOn%2F%2Fg8I%3D","line":29,"updated":"2013-05-07 09:23:41.000000000","message":"we can add these help doc into *.ini file directly.","commit_id":"9223aebd665e5eaeaa4aa84486346cbf6c1723d8"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":26,"context_line":"    cfg.ListOpt(\u0027tenant_network_types\u0027,"},{"line_number":27,"context_line":"                default\u003d[\u0027local\u0027],"},{"line_number":28,"context_line":"                help\u003d_(\"Ordered list of network_types to allocate as tenant \""},{"line_number":29,"context_line":"                       \"networks.\")),"},{"line_number":30,"context_line":"    cfg.ListOpt(\u0027mechanism_drivers\u0027,"},{"line_number":31,"context_line":"                default\u003d[],"},{"line_number":32,"context_line":"                help\u003d_(\"List of networking mechanism driver entrypoints to \""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAOn%2F%2FgTI%3D","line":29,"in_reply_to":"AAAAOn%2F%2Fg8I%3D","updated":"2013-05-07 18:50:30.000000000","message":"Yes, I have a TODO comment in the configuration file to add the help text, the default values, and examples of typical non-default values once these things are reasonably stable.","commit_id":"9223aebd665e5eaeaa4aa84486346cbf6c1723d8"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"unresolved":false,"context_lines":[{"line_number":27,"context_line":"                default\u003d[\u0027local\u0027],"},{"line_number":28,"context_line":"                help\u003d_(\"Ordered list of network_types to allocate as tenant \""},{"line_number":29,"context_line":"                       \"networks.\")),"},{"line_number":30,"context_line":"    cfg.ListOpt(\u0027mechanism_drivers\u0027,"},{"line_number":31,"context_line":"                default\u003d[],"},{"line_number":32,"context_line":"                help\u003d_(\"List of networking mechanism driver entrypoints to \""},{"line_number":33,"context_line":"                       \"be loaded from the quantum.ml2.mechanism_drivers \""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAOn%2F%2Fg8M%3D","line":30,"updated":"2013-05-07 09:23:41.000000000","message":"I cannot see the mechanism_drivers are well devised in this patch.","commit_id":"9223aebd665e5eaeaa4aa84486346cbf6c1723d8"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":27,"context_line":"                default\u003d[\u0027local\u0027],"},{"line_number":28,"context_line":"                help\u003d_(\"Ordered list of network_types to allocate as tenant \""},{"line_number":29,"context_line":"                       \"networks.\")),"},{"line_number":30,"context_line":"    cfg.ListOpt(\u0027mechanism_drivers\u0027,"},{"line_number":31,"context_line":"                default\u003d[],"},{"line_number":32,"context_line":"                help\u003d_(\"List of networking mechanism driver entrypoints to \""},{"line_number":33,"context_line":"                       \"be loaded from the quantum.ml2.mechanism_drivers \""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAOn%2F%2FgS0%3D","line":30,"in_reply_to":"AAAAOn%2F%2Fg8M%3D","updated":"2013-05-07 18:50:30.000000000","message":"Correct. See my reply to your comment in managers.py.","commit_id":"9223aebd665e5eaeaa4aa84486346cbf6c1723d8"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from oslo.config import cfg"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from quantum import scheduler"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"ml2_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2F7rs%3D","line":18,"updated":"2013-05-19 13:43:32.000000000","message":"At the moment some plugins may not support the scheduler. Does the imply that the scheduler will be enabled by default.","commit_id":"2de9c5149af68a7babd87cece3da28572ce46dcc"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from oslo.config import cfg"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from quantum import scheduler"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"ml2_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2F5y4%3D","line":18,"in_reply_to":"AAAAPH%2F%2F7rs%3D","updated":"2013-05-20 18:04:58.000000000","message":"The ml2 plugin is intended to support the scheduler. Are you saying that some L2 agents may not support the scheduler? Would that require the ability to disable the scheduler? I\u0027d prefer to make sure all the supported L2 agents do support the scheduler if possible.","commit_id":"2de9c5149af68a7babd87cece3da28572ce46dcc"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":26,"context_line":"    cfg.ListOpt(\u0027tenant_network_types\u0027,"},{"line_number":27,"context_line":"                default\u003d[\u0027local\u0027],"},{"line_number":28,"context_line":"                help\u003d_(\"Ordered list of network_types to allocate as tenant \""},{"line_number":29,"context_line":"                       \"networks.\")),"},{"line_number":30,"context_line":"    cfg.ListOpt(\u0027mechanism_drivers\u0027,"},{"line_number":31,"context_line":"                default\u003d[],"},{"line_number":32,"context_line":"                help\u003d_(\"List of networking mechanism driver entrypoints to \""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2FqEY%3D","line":29,"updated":"2013-05-28 13:47:02.000000000","message":"[Question] Is there any case multiple tenant network types is useful? One possible situation is to use flat network for backup when all vlan segments are allocated. Any other scenario?","commit_id":"55a39b43c146c785ede98522014e381fd9e7d438"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":26,"context_line":"    cfg.ListOpt(\u0027tenant_network_types\u0027,"},{"line_number":27,"context_line":"                default\u003d[\u0027local\u0027],"},{"line_number":28,"context_line":"                help\u003d_(\"Ordered list of network_types to allocate as tenant \""},{"line_number":29,"context_line":"                       \"networks.\")),"},{"line_number":30,"context_line":"    cfg.ListOpt(\u0027mechanism_drivers\u0027,"},{"line_number":31,"context_line":"                default\u003d[],"},{"line_number":32,"context_line":"                help\u003d_(\"List of networking mechanism driver entrypoints to \""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2FpJQ%3D","line":29,"in_reply_to":"AAAAPH%2F%2FqEY%3D","updated":"2013-05-28 20:56:06.000000000","message":"I had been thinking of using gre networks as a backup for vlans when there is a limited supply of vlans. \n\nLonger term, I think some sort ability to express QoS requirements for the tenant network might cause a TypeDriver to pass on allocating if it can\u0027t meet the QoS requirements, allowing a subsequent TypeDriver that can meet the QoS requirements to allocate it.","commit_id":"55a39b43c146c785ede98522014e381fd9e7d438"}],"quantum/plugins/ml2/db.py":[{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"unresolved":false,"context_lines":[{"line_number":74,"context_line":"    except exc.NoResultFound:"},{"line_number":75,"context_line":"        return"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"def get_port_from_device(device):"},{"line_number":79,"context_line":"    \"\"\"Get port from database.\"\"\""},{"line_number":80,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAOn%2F%2FgCM%3D","line":77,"updated":"2013-05-07 17:25:56.000000000","message":"It looks like logic of get_port_from_device is different from openvswitch and linuxbrige. For linuxbridge, it queries port by device name using start_with.\nHow do you support both of implementations?","commit_id":"9223aebd665e5eaeaa4aa84486346cbf6c1723d8"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":74,"context_line":"    except exc.NoResultFound:"},{"line_number":75,"context_line":"        return"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"def get_port_from_device(device):"},{"line_number":79,"context_line":"    \"\"\"Get port from database.\"\"\""},{"line_number":80,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAOn%2F%2Ff9o%3D","line":77,"in_reply_to":"AAAAOn%2F%2FgCM%3D","updated":"2013-05-07 18:50:30.000000000","message":"This code uses startswith like the linuxbridge code. This works fine with the openvswitch agent since the openvswitch agent passes the entire port ID.","commit_id":"9223aebd665e5eaeaa4aa84486346cbf6c1723d8"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":41,"context_line":"            segmentation_id\u003dsegment.get(api.SEGMENTATION_ID)"},{"line_number":42,"context_line":"        )"},{"line_number":43,"context_line":"        session.add(record)"},{"line_number":44,"context_line":"    LOG.info(_(\"added segment %(id)s of type %(network_type)s for network\""},{"line_number":45,"context_line":"               \" %(network_id)s\") % record)"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2F7ro%3D","line":44,"updated":"2013-05-19 13:43:32.000000000","message":"added \u003d\u003e Added","commit_id":"2de9c5149af68a7babd87cece3da28572ce46dcc"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":41,"context_line":"            segmentation_id\u003dsegment.get(api.SEGMENTATION_ID)"},{"line_number":42,"context_line":"        )"},{"line_number":43,"context_line":"        session.add(record)"},{"line_number":44,"context_line":"    LOG.info(_(\"added segment %(id)s of type %(network_type)s for network\""},{"line_number":45,"context_line":"               \" %(network_id)s\") % record)"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2F5yk%3D","line":44,"in_reply_to":"AAAAPH%2F%2F7ro%3D","updated":"2013-05-20 18:04:58.000000000","message":"Done","commit_id":"2de9c5149af68a7babd87cece3da28572ce46dcc"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":63,"context_line":"            return"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"def get_port(session, device):"},{"line_number":67,"context_line":"    \"\"\"Get device\u0027s port record for update within transcation.\"\"\""},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    try:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2F7rA%3D","line":66,"updated":"2013-05-19 13:43:32.000000000","message":"The ovs and linux bridge had different implementations here. The OVS has the port ID on the agent. The Linux bridge does not.\nCould this lead to problems?","commit_id":"2de9c5149af68a7babd87cece3da28572ce46dcc"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":63,"context_line":"            return"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"def get_port(session, device):"},{"line_number":67,"context_line":"    \"\"\"Get device\u0027s port record for update within transcation.\"\"\""},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    try:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2F5x4%3D","line":66,"in_reply_to":"AAAAPH%2F%2F7rA%3D","updated":"2013-05-20 18:04:58.000000000","message":"There have been previous comments on this topic. The ml2 plugin uses \"startswith()\" in its query (see below), which will match either the entire port ID used by the openvswitch agent or a sufficiently-long prefix of the port ID as used by the linuxbridge agent. Do you see an issue with this?","commit_id":"2de9c5149af68a7babd87cece3da28572ce46dcc"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"unresolved":false,"context_lines":[{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    LOG.debug(_(\"get_port_from_device() called for device %s\"), device)"},{"line_number":82,"context_line":"    session \u003d db_api.get_session()"},{"line_number":83,"context_line":"    sg_binding_port \u003d sg_db.SecurityGroupPortBinding.port_id"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    query \u003d session.query(models_v2.Port,"},{"line_number":86,"context_line":"                          sg_db.SecurityGroupPortBinding.security_group_id)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAO3%2F%2F91M%3D","line":83,"updated":"2013-05-15 22:58:16.000000000","message":"nit missing: with session.begin(subtransactions\u003dTrue):","commit_id":"2de9c5149af68a7babd87cece3da28572ce46dcc"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    LOG.debug(_(\"get_port_from_device() called for device %s\"), device)"},{"line_number":82,"context_line":"    session \u003d db_api.get_session()"},{"line_number":83,"context_line":"    sg_binding_port \u003d sg_db.SecurityGroupPortBinding.port_id"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    query \u003d session.query(models_v2.Port,"},{"line_number":86,"context_line":"                          sg_db.SecurityGroupPortBinding.security_group_id)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2F5vA%3D","line":83,"in_reply_to":"AAAAO3%2F%2F91M%3D","updated":"2013-05-20 18:04:58.000000000","message":"Done. Also added to get_port().","commit_id":"2de9c5149af68a7babd87cece3da28572ce46dcc"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"unresolved":false,"context_lines":[{"line_number":50,"context_line":"        try:"},{"line_number":51,"context_line":"            records \u003d (session.query(models.NetworkSegment)."},{"line_number":52,"context_line":"                       filter_by(network_id\u003dnetwork_id)."},{"line_number":53,"context_line":"                       all())"},{"line_number":54,"context_line":"            segments \u003d []"},{"line_number":55,"context_line":"            for record in records:"},{"line_number":56,"context_line":"                # REVISIT(rkukura): Is segment_id or network_id ever needed?"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAPH%2F%2F0s8%3D","line":53,"updated":"2013-05-22 08:47:53.000000000","message":"all() call is not needed as query itself is iterable","commit_id":"1d541c6b41b9b558889412058498ada6ac7f3867"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":50,"context_line":"        try:"},{"line_number":51,"context_line":"            records \u003d (session.query(models.NetworkSegment)."},{"line_number":52,"context_line":"                       filter_by(network_id\u003dnetwork_id)."},{"line_number":53,"context_line":"                       all())"},{"line_number":54,"context_line":"            segments \u003d []"},{"line_number":55,"context_line":"            for record in records:"},{"line_number":56,"context_line":"                # REVISIT(rkukura): Is segment_id or network_id ever needed?"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAPH%2F%2FwRE%3D","line":53,"in_reply_to":"AAAAPH%2F%2F0s8%3D","updated":"2013-05-27 20:34:20.000000000","message":"Done","commit_id":"1d541c6b41b9b558889412058498ada6ac7f3867"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"unresolved":false,"context_lines":[{"line_number":52,"context_line":"                       filter_by(network_id\u003dnetwork_id)."},{"line_number":53,"context_line":"                       all())"},{"line_number":54,"context_line":"            segments \u003d []"},{"line_number":55,"context_line":"            for record in records:"},{"line_number":56,"context_line":"                # REVISIT(rkukura): Is segment_id or network_id ever needed?"},{"line_number":57,"context_line":"                segment \u003d {api.NETWORK_TYPE: record.network_type,"},{"line_number":58,"context_line":"                           api.PHYSICAL_NETWORK: record.physical_network,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAPH%2F%2F0s4%3D","line":55,"updated":"2013-05-22 08:47:53.000000000","message":"might use list comprehension here","commit_id":"1d541c6b41b9b558889412058498ada6ac7f3867"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":52,"context_line":"                       filter_by(network_id\u003dnetwork_id)."},{"line_number":53,"context_line":"                       all())"},{"line_number":54,"context_line":"            segments \u003d []"},{"line_number":55,"context_line":"            for record in records:"},{"line_number":56,"context_line":"                # REVISIT(rkukura): Is segment_id or network_id ever needed?"},{"line_number":57,"context_line":"                segment \u003d {api.NETWORK_TYPE: record.network_type,"},{"line_number":58,"context_line":"                           api.PHYSICAL_NETWORK: record.physical_network,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAPH%2F%2FwRQ%3D","line":55,"in_reply_to":"AAAAPH%2F%2F0s4%3D","updated":"2013-05-27 20:34:20.000000000","message":"Done","commit_id":"1d541c6b41b9b558889412058498ada6ac7f3867"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"unresolved":false,"context_lines":[{"line_number":59,"context_line":"                           api.SEGMENTATION_ID: record.segmentation_id}"},{"line_number":60,"context_line":"                segments.append(segment)"},{"line_number":61,"context_line":"            return segments"},{"line_number":62,"context_line":"        except exc.NoResultFound:"},{"line_number":63,"context_line":"            return"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAPH%2F%2F0s0%3D","line":62,"updated":"2013-05-22 08:47:53.000000000","message":"query will return empty list rather then throw this exception","commit_id":"1d541c6b41b9b558889412058498ada6ac7f3867"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":59,"context_line":"                           api.SEGMENTATION_ID: record.segmentation_id}"},{"line_number":60,"context_line":"                segments.append(segment)"},{"line_number":61,"context_line":"            return segments"},{"line_number":62,"context_line":"        except exc.NoResultFound:"},{"line_number":63,"context_line":"            return"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAPH%2F%2FwRA%3D","line":62,"in_reply_to":"AAAAPH%2F%2F0s0%3D","updated":"2013-05-27 20:34:20.000000000","message":"Done","commit_id":"1d541c6b41b9b558889412058498ada6ac7f3867"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"unresolved":false,"context_lines":[{"line_number":72,"context_line":"                      filter(models_v2.Port.id.startswith(port_prefix))."},{"line_number":73,"context_line":"                      one())"},{"line_number":74,"context_line":"            return record"},{"line_number":75,"context_line":"        except exc.NoResultFound:"},{"line_number":76,"context_line":"            return"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAPH%2F%2F0sw%3D","line":75,"updated":"2013-05-22 08:47:53.000000000","message":"Might need to check for MultipleResultsFound?","commit_id":"1d541c6b41b9b558889412058498ada6ac7f3867"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":72,"context_line":"                      filter(models_v2.Port.id.startswith(port_prefix))."},{"line_number":73,"context_line":"                      one())"},{"line_number":74,"context_line":"            return record"},{"line_number":75,"context_line":"        except exc.NoResultFound:"},{"line_number":76,"context_line":"            return"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAPH%2F%2FwQ8%3D","line":75,"in_reply_to":"AAAAPH%2F%2F0sw%3D","updated":"2013-05-27 20:34:20.000000000","message":"Done","commit_id":"1d541c6b41b9b558889412058498ada6ac7f3867"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"unresolved":false,"context_lines":[{"line_number":88,"context_line":"                              sg_db.SecurityGroupPortBinding.security_group_id)"},{"line_number":89,"context_line":"        query \u003d query.outerjoin(sg_db.SecurityGroupPortBinding,"},{"line_number":90,"context_line":"                                models_v2.Port.id \u003d\u003d sg_binding_port)"},{"line_number":91,"context_line":"        query \u003d query.filter(models_v2.Port.id.startswith(port_prefix))"},{"line_number":92,"context_line":"        port_and_sgs \u003d query.all()"},{"line_number":93,"context_line":"        if not port_and_sgs:"},{"line_number":94,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAPH%2F%2FyeI%3D","line":91,"updated":"2013-05-22 23:57:57.000000000","message":"I know this is need for linuxbridge for now. \nHowever, port prefix should be port_id, because startswith is not first.\nMay be not in this patch, but in future we should fix linuxbridge to send port_id. \nI think we can setup port_id as a alias for each nic, and send it.","commit_id":"1d541c6b41b9b558889412058498ada6ac7f3867"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":88,"context_line":"                              sg_db.SecurityGroupPortBinding.security_group_id)"},{"line_number":89,"context_line":"        query \u003d query.outerjoin(sg_db.SecurityGroupPortBinding,"},{"line_number":90,"context_line":"                                models_v2.Port.id \u003d\u003d sg_binding_port)"},{"line_number":91,"context_line":"        query \u003d query.filter(models_v2.Port.id.startswith(port_prefix))"},{"line_number":92,"context_line":"        port_and_sgs \u003d query.all()"},{"line_number":93,"context_line":"        if not port_and_sgs:"},{"line_number":94,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAPH%2F%2FwLA%3D","line":91,"in_reply_to":"AAAAPH%2F%2FyeI%3D","updated":"2013-05-27 20:34:20.000000000","message":"I renamed port_prefix to port_id. \n\nI agree sending the entire port_id would be preferable, but I\u0027m not sure how much effort its worth putting into this for the linuxbridge agent. There could be other agents some day that also can\u0027t preserve the entire port_id. Maybe we should instead enforce that port_ids are unique in the 1st N characters. Anyway, feel free to file a bug for this, but its not specific to ml2 and I\u0027m not going to address it now.","commit_id":"1d541c6b41b9b558889412058498ada6ac7f3867"}],"quantum/plugins/ml2/driver_api.py":[{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"420cac31c17d3dfac7e6ad0aa225ddda97bdcf5b","unresolved":false,"context_lines":[{"line_number":127,"context_line":"        :param segment: segment dictionary using keys defined above"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"        Called inside transaction context on session to release a"},{"line_number":130,"context_line":"        tenant or provider network\u0027s type-specific resource."},{"line_number":131,"context_line":"        \"\"\""},{"line_number":132,"context_line":"        pass"},{"line_number":133,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAOn%2F%2Ftck%3D","line":130,"updated":"2013-04-26 18:03:06.000000000","message":"Do we need return an indication of success/failure?","commit_id":"3a544a8a83761b2ed67d23911eee43e000c30071"},{"author":{"_account_id":6715,"name":"satish-0","email":"satish@aristanetworks.com","username":"satish-0"},"change_message_id":"ac9ede54404bc51aa2d7b56a8fdfbfa24db020fb","unresolved":false,"context_lines":[{"line_number":150,"context_line":"        \"\"\""},{"line_number":151,"context_line":"        pass"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    # TODO(rkukura): Add methods called inside and after transaction"},{"line_number":154,"context_line":"    # for create_network, update_network, delete_network, create_port,"},{"line_number":155,"context_line":"    # update_port, delete_port, and maybe for port binding"},{"line_number":156,"context_line":"    # changes. Exceptions raised by methods called inside transactions"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOn%2F%2FpBc%3D","line":153,"updated":"2013-04-30 22:02:01.000000000","message":"Would be a good idea if this can follow an API close to what we have in: \n\nhttps://review.openstack.org/#/c/20754/32/quantum/common/hardware_driver/driver_api.py.\n\nOne useful addition (which is missing in our API also) is passing quantum network names along with the network-ids (in create_network). This is useful for debugging network issues on the physical hardware.","commit_id":"9ea0009b0883102e45d6bad7dc608b781937769d"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":150,"context_line":"        \"\"\""},{"line_number":151,"context_line":"        pass"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    # TODO(rkukura): Add methods called inside and after transaction"},{"line_number":154,"context_line":"    # for create_network, update_network, delete_network, create_port,"},{"line_number":155,"context_line":"    # update_port, delete_port, and maybe for port binding"},{"line_number":156,"context_line":"    # changes. Exceptions raised by methods called inside transactions"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOn%2F%2Fhsw%3D","line":153,"in_reply_to":"AAAAOn%2F%2FpBc%3D","updated":"2013-05-06 20:59:07.000000000","message":"Agreed in general, but details are likely to differ. This will be addressed in a future patch set.","commit_id":"9ea0009b0883102e45d6bad7dc608b781937769d"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":24,"context_line":"PHYSICAL_NETWORK \u003d \u0027physical_network\u0027"},{"line_number":25,"context_line":"SEGMENTATION_ID \u003d \u0027segmentation_id\u0027"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class TypeDriver(object):"},{"line_number":29,"context_line":"    \"\"\""},{"line_number":30,"context_line":"    Define stable abstract interface for ML2 type drivers."}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2F7qs%3D","line":27,"updated":"2013-05-19 13:43:32.000000000","message":"Minor nit - over the last few weeks there have been a number of changes supporting pep 257. Any chance you can update the comments accordingly so that we do not need to go through a set of reviews to have that updated again.","commit_id":"2de9c5149af68a7babd87cece3da28572ce46dcc"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":24,"context_line":"PHYSICAL_NETWORK \u003d \u0027physical_network\u0027"},{"line_number":25,"context_line":"SEGMENTATION_ID \u003d \u0027segmentation_id\u0027"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class TypeDriver(object):"},{"line_number":29,"context_line":"    \"\"\""},{"line_number":30,"context_line":"    Define stable abstract interface for ML2 type drivers."}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2F5uo%3D","line":27,"in_reply_to":"AAAAPH%2F%2F7qs%3D","updated":"2013-05-20 18:04:58.000000000","message":"Done. I\u0027ve been tracking these changes as they get merged, especially any that flake8 catches.","commit_id":"2de9c5149af68a7babd87cece3da28572ce46dcc"},{"author":{"_account_id":7170,"name":"Zang MingJie","email":"zealot0630@gmail.com","username":"zealot"},"change_message_id":"9915b3514c5a39fe71a2b3b7a0ba22c9bd445b22","unresolved":false,"context_lines":[{"line_number":22,"context_line":"#"},{"line_number":23,"context_line":"NETWORK_TYPE \u003d \u0027network_type\u0027"},{"line_number":24,"context_line":"PHYSICAL_NETWORK \u003d \u0027physical_network\u0027"},{"line_number":25,"context_line":"SEGMENTATION_ID \u003d \u0027segmentation_id\u0027"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class TypeDriver(object):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2FqXg%3D","line":25,"updated":"2013-05-28 11:19:54.000000000","message":"Instead using a dict, how about each type driver defines its own segment class, the base class only need get_network_type function. Also we may need several function to keep the backward compatibility.","commit_id":"55a39b43c146c785ede98522014e381fd9e7d438"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":22,"context_line":"#"},{"line_number":23,"context_line":"NETWORK_TYPE \u003d \u0027network_type\u0027"},{"line_number":24,"context_line":"PHYSICAL_NETWORK \u003d \u0027physical_network\u0027"},{"line_number":25,"context_line":"SEGMENTATION_ID \u003d \u0027segmentation_id\u0027"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class TypeDriver(object):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2FpH0%3D","line":25,"in_reply_to":"AAAAPH%2F%2FqXg%3D","updated":"2013-05-28 20:56:06.000000000","message":"This is the kind of input I was looking for during the WIP phase of the code review. I propose that we revisit the API approach this during H-2 after a few more people are involved and the MechanismDriver API starts taking shape.","commit_id":"55a39b43c146c785ede98522014e381fd9e7d438"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":129,"context_line":""},{"line_number":130,"context_line":"class MechanismDriver(object):"},{"line_number":131,"context_line":"    \"\"\"Define stable abstract interface for ML2 mechanism drivers."},{"line_number":132,"context_line":"    \"\"\""},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    __metaclass__ \u003d ABCMeta"},{"line_number":135,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2Fqik%3D","line":132,"updated":"2013-05-28 09:12:11.000000000","message":"This too looks like a stub class.\nPerhaps we should remove it from the first merge.","commit_id":"55a39b43c146c785ede98522014e381fd9e7d438"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":129,"context_line":""},{"line_number":130,"context_line":"class MechanismDriver(object):"},{"line_number":131,"context_line":"    \"\"\"Define stable abstract interface for ML2 mechanism drivers."},{"line_number":132,"context_line":"    \"\"\""},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    __metaclass__ \u003d ABCMeta"},{"line_number":135,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2FpE8%3D","line":132,"in_reply_to":"AAAAPH%2F%2Fqik%3D","updated":"2013-05-28 20:56:06.000000000","message":"It is a stub class, and I would not want to ship havana with it still present as a stub class. But I expect the MechanismDriver API to start taking shape early in H-2. Even as a stub class, I think it serves to help solidify the architectural distinction between TypeDrivers and MechanismDrivers, so I\u0027ve added a note to the doc text that this is currently just a stub class.","commit_id":"55a39b43c146c785ede98522014e381fd9e7d438"}],"quantum/plugins/ml2/drivers/type_flat.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":28,"context_line":"flat_opts \u003d ["},{"line_number":29,"context_line":"    cfg.ListOpt(\u0027flat_networks\u0027,"},{"line_number":30,"context_line":"                default\u003d[],"},{"line_number":31,"context_line":"                help\u003d\"List of physical_network names with which flat networks\""},{"line_number":32,"context_line":"                \" can be created. Use * to allow flat networks with arbitrary\""},{"line_number":33,"context_line":"                \" physical_network names.\")"},{"line_number":34,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOn%2F%2Fsd8%3D","line":31,"updated":"2013-04-27 17:33:18.000000000","message":"ditto regarding the i18n","commit_id":"9ea0009b0883102e45d6bad7dc608b781937769d"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":28,"context_line":"flat_opts \u003d ["},{"line_number":29,"context_line":"    cfg.ListOpt(\u0027flat_networks\u0027,"},{"line_number":30,"context_line":"                default\u003d[],"},{"line_number":31,"context_line":"                help\u003d\"List of physical_network names with which flat networks\""},{"line_number":32,"context_line":"                \" can be created. Use * to allow flat networks with arbitrary\""},{"line_number":33,"context_line":"                \" physical_network names.\")"},{"line_number":34,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOn%2F%2FiKE%3D","line":31,"in_reply_to":"AAAAOn%2F%2Fsd8%3D","updated":"2013-05-06 20:59:07.000000000","message":"Done","commit_id":"9ea0009b0883102e45d6bad7dc608b781937769d"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":33,"context_line":"                \" physical_network names.\")"},{"line_number":34,"context_line":"]"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"cfg.CONF.register_opts(flat_opts, \"ML2_TYPE_FLAT\")"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"class FlatAllocation(model_base.BASEV2):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOn%2F%2Fsd4%3D","line":36,"updated":"2013-04-27 17:33:18.000000000","message":"lower case","commit_id":"9ea0009b0883102e45d6bad7dc608b781937769d"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":33,"context_line":"                \" physical_network names.\")"},{"line_number":34,"context_line":"]"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"cfg.CONF.register_opts(flat_opts, \"ML2_TYPE_FLAT\")"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"class FlatAllocation(model_base.BASEV2):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOn%2F%2FiKA%3D","line":36,"in_reply_to":"AAAAOn%2F%2Fsd4%3D","updated":"2013-05-06 20:59:07.000000000","message":"Done","commit_id":"9ea0009b0883102e45d6bad7dc608b781937769d"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"unresolved":false,"context_lines":[{"line_number":115,"context_line":"                session.add(alloc)"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def allocate_tenant_segment(self, session):"},{"line_number":118,"context_line":"        return None"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    def release_segment(self, session, segment):"},{"line_number":121,"context_line":"        physical_network \u003d segment[api.PHYSICAL_NETWORK]"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAO3%2F%2F90w%3D","line":118,"updated":"2013-05-15 22:58:16.000000000","message":"nit: return","commit_id":"2de9c5149af68a7babd87cece3da28572ce46dcc"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":115,"context_line":"                session.add(alloc)"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def allocate_tenant_segment(self, session):"},{"line_number":118,"context_line":"        return None"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    def release_segment(self, session, segment):"},{"line_number":121,"context_line":"        physical_network \u003d segment[api.PHYSICAL_NETWORK]"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2F5uI%3D","line":118,"in_reply_to":"AAAAO3%2F%2F90w%3D","updated":"2013-05-20 18:04:58.000000000","message":"Done","commit_id":"2de9c5149af68a7babd87cece3da28572ce46dcc"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":129,"context_line":"                LOG.debug(_(\"Releasing flat network on physical \""},{"line_number":130,"context_line":"                            \"network %s\") % physical_network)"},{"line_number":131,"context_line":"            except sa.orm.exc.NoResultFound:"},{"line_number":132,"context_line":"                LOG.warning(_(\"flat network on physical network \""},{"line_number":133,"context_line":"                              \"%s not found\") % physical_network)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2F7qk%3D","line":132,"updated":"2013-05-19 13:43:32.000000000","message":"flat \u003d\u003e Flat","commit_id":"2de9c5149af68a7babd87cece3da28572ce46dcc"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":129,"context_line":"                LOG.debug(_(\"Releasing flat network on physical \""},{"line_number":130,"context_line":"                            \"network %s\") % physical_network)"},{"line_number":131,"context_line":"            except sa.orm.exc.NoResultFound:"},{"line_number":132,"context_line":"                LOG.warning(_(\"flat network on physical network \""},{"line_number":133,"context_line":"                              \"%s not found\") % physical_network)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2F5tM%3D","line":132,"in_reply_to":"AAAAPH%2F%2F7qk%3D","updated":"2013-05-20 18:04:58.000000000","message":"Done","commit_id":"2de9c5149af68a7babd87cece3da28572ce46dcc"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":70,"context_line":"            self.flat_networks \u003d None"},{"line_number":71,"context_line":"        else:"},{"line_number":72,"context_line":"            LOG.info(_(\"Allowable flat physical_network names: %s\")"},{"line_number":73,"context_line":"                     % self.flat_networks)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def get_type(self):"},{"line_number":76,"context_line":"        return TYPE_FLAT"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2FqUk%3D","line":73,"updated":"2013-05-28 13:47:02.000000000","message":"It is better to check a length of each physical network name. The maximum length of database entry is 64.","commit_id":"55a39b43c146c785ede98522014e381fd9e7d438"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":70,"context_line":"            self.flat_networks \u003d None"},{"line_number":71,"context_line":"        else:"},{"line_number":72,"context_line":"            LOG.info(_(\"Allowable flat physical_network names: %s\")"},{"line_number":73,"context_line":"                     % self.flat_networks)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def get_type(self):"},{"line_number":76,"context_line":"        return TYPE_FLAT"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2FpAA%3D","line":73,"in_reply_to":"AAAAPH%2F%2FqUk%3D","updated":"2013-05-28 20:56:06.000000000","message":"I\u0027ve added TODO comments here and in type_vlan.py to validate that the physical network names are neither empty nor too long. I\u0027m deferring this for this merge because it may involve changing the shared parsing code in quantum.plugins.common.utils.py and effect other plugins.","commit_id":"55a39b43c146c785ede98522014e381fd9e7d438"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":82,"context_line":"        physical_network \u003d segment.get(api.PHYSICAL_NETWORK)"},{"line_number":83,"context_line":"        if not physical_network:"},{"line_number":84,"context_line":"            msg \u003d _(\"physical_network required for flat provider network\")"},{"line_number":85,"context_line":"            raise exc.InvalidInput(error_message\u003dmsg)"},{"line_number":86,"context_line":"        if self.flat_networks and physical_network not in self.flat_networks:"},{"line_number":87,"context_line":"            msg \u003d (_(\"physical_network \u0027%s\u0027 unknown for flat provider network\")"},{"line_number":88,"context_line":"                   % physical_network)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2FqjU%3D","line":85,"updated":"2013-05-28 09:12:11.000000000","message":"You could catch the KeyError and raise an InvalidInput if it\u0027s caught","commit_id":"55a39b43c146c785ede98522014e381fd9e7d438"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":82,"context_line":"        physical_network \u003d segment.get(api.PHYSICAL_NETWORK)"},{"line_number":83,"context_line":"        if not physical_network:"},{"line_number":84,"context_line":"            msg \u003d _(\"physical_network required for flat provider network\")"},{"line_number":85,"context_line":"            raise exc.InvalidInput(error_message\u003dmsg)"},{"line_number":86,"context_line":"        if self.flat_networks and physical_network not in self.flat_networks:"},{"line_number":87,"context_line":"            msg \u003d (_(\"physical_network \u0027%s\u0027 unknown for flat provider network\")"},{"line_number":88,"context_line":"                   % physical_network)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2FpDI%3D","line":85,"in_reply_to":"AAAAPH%2F%2FqU8%3D","updated":"2013-05-28 20:56:06.000000000","message":"I prefer for the error message to distinguish between the user not supplying an attribute that is required, vs. supplying an invalid value, so I\u0027m not seeing a good reason to change this code.\n\nAn empty string should not be considered a valid value.","commit_id":"55a39b43c146c785ede98522014e381fd9e7d438"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":82,"context_line":"        physical_network \u003d segment.get(api.PHYSICAL_NETWORK)"},{"line_number":83,"context_line":"        if not physical_network:"},{"line_number":84,"context_line":"            msg \u003d _(\"physical_network required for flat provider network\")"},{"line_number":85,"context_line":"            raise exc.InvalidInput(error_message\u003dmsg)"},{"line_number":86,"context_line":"        if self.flat_networks and physical_network not in self.flat_networks:"},{"line_number":87,"context_line":"            msg \u003d (_(\"physical_network \u0027%s\u0027 unknown for flat provider network\")"},{"line_number":88,"context_line":"                   % physical_network)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2FqU8%3D","line":85,"in_reply_to":"AAAAPH%2F%2FqjU%3D","updated":"2013-05-28 13:47:02.000000000","message":"The only difference between the current code and KeyError is whether an empty string is valid or not. I am not sure whether an empty string is allowed.","commit_id":"55a39b43c146c785ede98522014e381fd9e7d438"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":97,"context_line":"        return segment"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def reserve_provider_segment(self, session, segment):"},{"line_number":100,"context_line":"        physical_network \u003d segment[api.PHYSICAL_NETWORK]"},{"line_number":101,"context_line":"        with session.begin(subtransactions\u003dTrue):"},{"line_number":102,"context_line":"            try:"},{"line_number":103,"context_line":"                alloc \u003d (session.query(FlatAllocation)."}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2FqjI%3D","line":100,"updated":"2013-05-28 09:12:11.000000000","message":"This might be a dumb question, but shouldn\u0027t there be a check for physical_network to be in self.flat_networks?","commit_id":"55a39b43c146c785ede98522014e381fd9e7d438"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":97,"context_line":"        return segment"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def reserve_provider_segment(self, session, segment):"},{"line_number":100,"context_line":"        physical_network \u003d segment[api.PHYSICAL_NETWORK]"},{"line_number":101,"context_line":"        with session.begin(subtransactions\u003dTrue):"},{"line_number":102,"context_line":"            try:"},{"line_number":103,"context_line":"                alloc \u003d (session.query(FlatAllocation)."}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2Fo%2Bk%3D","line":100,"in_reply_to":"AAAAPH%2F%2FqjI%3D","updated":"2013-05-28 20:56:06.000000000","message":"That checking is handled in validate_provider_segment(), which is called before reserve_provider_segment(). The doc text for this method in the abstract TypeDriver base class states: \"The segment dictionary passed in was returned by a previous validate_provider_segment() call.\"","commit_id":"55a39b43c146c785ede98522014e381fd9e7d438"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":112,"context_line":"                alloc \u003d FlatAllocation(physical_network\u003dphysical_network)"},{"line_number":113,"context_line":"                session.add(alloc)"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    def allocate_tenant_segment(self, session):"},{"line_number":116,"context_line":"        return"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def release_segment(self, session, segment):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2FqRM%3D","line":115,"updated":"2013-05-28 13:47:02.000000000","message":"In local type driver, {api.NETWORK_TYPE: TYPE_LOCAL} is returned. It is better to return a similar value.","commit_id":"55a39b43c146c785ede98522014e381fd9e7d438"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":112,"context_line":"                alloc \u003d FlatAllocation(physical_network\u003dphysical_network)"},{"line_number":113,"context_line":"                session.add(alloc)"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    def allocate_tenant_segment(self, session):"},{"line_number":116,"context_line":"        return"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def release_segment(self, session, segment):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2Fqk4%3D","line":115,"updated":"2013-05-28 09:26:37.000000000","message":"consider adding in a log warning here","commit_id":"55a39b43c146c785ede98522014e381fd9e7d438"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":112,"context_line":"                alloc \u003d FlatAllocation(physical_network\u003dphysical_network)"},{"line_number":113,"context_line":"                session.add(alloc)"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    def allocate_tenant_segment(self, session):"},{"line_number":116,"context_line":"        return"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def release_segment(self, session, segment):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2Fo9g%3D","line":115,"in_reply_to":"AAAAPH%2F%2FqRM%3D","updated":"2013-05-28 20:56:06.000000000","message":"This is purposely returning None to indicate that this TypeDriver was not able to allocate a tenant segment. The FlatTypeDriver does not maintain any kind of pool of flat networks from which they could be allocated. I added a comment here and also clarified this in the base class doc text, changing it from:\n\n\"If tenant network segment cannot be allocated (i.e. resource pool is exhausted), return None.\"\n\nto: \n\n\"If tenant network segment cannot be allocated (i.e. tenant networks not supported or resource pool is exhausted), return None.\"","commit_id":"55a39b43c146c785ede98522014e381fd9e7d438"}],"quantum/plugins/ml2/drivers/type_local.py":[{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"24101c978a171e8721b07ecaf865cb8cb81e1600","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    network segments provide connectivity between VMs and other"},{"line_number":31,"context_line":"    devices running on the same node, provided that a common local"},{"line_number":32,"context_line":"    network bridging technology is available to those devices. Local"},{"line_number":33,"context_line":"    network segments do not provide any connectivity between nodes."},{"line_number":34,"context_line":"    \"\"\""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def __init__(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FPXM%3D","line":33,"updated":"2013-01-31 20:11:04.000000000","message":"I\u0027m not sure why this driver is needed?","commit_id":"ddb5aa8b2590ebd8d803a57b9f81ac6cf69a3948"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":30,"context_line":"    network segments provide connectivity between VMs and other"},{"line_number":31,"context_line":"    devices running on the same node, provided that a common local"},{"line_number":32,"context_line":"    network bridging technology is available to those devices. Local"},{"line_number":33,"context_line":"    network segments do not provide any connectivity between nodes."},{"line_number":34,"context_line":"    \"\"\""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def __init__(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FBE0%3D","line":33,"in_reply_to":"AAAAM3%2F%2FPXM%3D","updated":"2013-02-11 15:58:42.000000000","message":"This network type is supported by both the openvswitch and linuxbridge plugins and their agents. Its useful for all-in-one testing where you don\u0027t have a real VLAN trunk, and may also be useful in conjunction with nova scheduler hints to co-locate instances on the same compute node.","commit_id":"ddb5aa8b2590ebd8d803a57b9f81ac6cf69a3948"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"420cac31c17d3dfac7e6ad0aa225ddda97bdcf5b","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    \"\"\""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def __init__(self):"},{"line_number":37,"context_line":"        LOG.info(_(\"ML2 LocalTypeDriver initialization complete\"))"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def get_type(self):"},{"line_number":40,"context_line":"        return TYPE_LOCAL"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAN3%2F%2F0rs%3D","line":37,"updated":"2013-03-11 12:16:15.000000000","message":"Does it make sense to refer to __class__.__name__ in the log, in case the class is renamed? (applies to other files too).","commit_id":"ddb5aa8b2590ebd8d803a57b9f81ac6cf69a3948"}],"quantum/plugins/ml2/drivers/type_vlan.py":[{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"420cac31c17d3dfac7e6ad0aa225ddda97bdcf5b","unresolved":false,"context_lines":[{"line_number":208,"context_line":"            msg \u003d _(\"segmentation_id required for VLAN provider network\")"},{"line_number":209,"context_line":"            raise exc.InvalidInput(error_message\u003dmsg)"},{"line_number":210,"context_line":"        if segmentation_id \u003c VLAN_MIN or segmentation_id \u003e VLAN_MAX:"},{"line_number":211,"context_line":"            msg \u003d _(\"segmentation_id out of range (1 through 4094)\")"},{"line_number":212,"context_line":"            raise exc.InvalidInput(error_message\u003dmsg)"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"        for key, value in segment.iteritems():"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAOn%2F%2F2gA%3D","line":211,"updated":"2013-04-17 18:41:17.000000000","message":"Nit: Probably want to use VLAN_MIN/VLAN_MAX in msg too.","commit_id":"ddb5aa8b2590ebd8d803a57b9f81ac6cf69a3948"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"420cac31c17d3dfac7e6ad0aa225ddda97bdcf5b","unresolved":false,"context_lines":[{"line_number":273,"context_line":"                inside \u003d False"},{"line_number":274,"context_line":"                for range in self.network_vlan_ranges.get(physical_network,"},{"line_number":275,"context_line":"                                                          []):"},{"line_number":276,"context_line":"                    if vlan_id \u003e\u003d range[0] and vlan_id \u003c\u003d range[1]:"},{"line_number":277,"context_line":"                        inside \u003d True"},{"line_number":278,"context_line":"                        break"},{"line_number":279,"context_line":"                if not inside:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAN3%2F%2F0qs%3D","line":276,"updated":"2013-03-11 12:16:15.000000000","message":"Readability: Could write as:\nif range[0] \u003c\u003d vlan_id \u003c\u003d range[1]:","commit_id":"ddb5aa8b2590ebd8d803a57b9f81ac6cf69a3948"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"420cac31c17d3dfac7e6ad0aa225ddda97bdcf5b","unresolved":false,"context_lines":[{"line_number":209,"context_line":"            msg \u003d _(\"segmentation_id required for VLAN provider network\")"},{"line_number":210,"context_line":"            raise exc.InvalidInput(error_message\u003dmsg)"},{"line_number":211,"context_line":"        if segmentation_id \u003c VLAN_MIN or segmentation_id \u003e VLAN_MAX:"},{"line_number":212,"context_line":"            msg \u003d _(\"segmentation_id out of range (1 through 4094)\")"},{"line_number":213,"context_line":"            raise exc.InvalidInput(error_message\u003dmsg)"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"        for key, value in segment.iteritems():"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAOn%2F%2FtaI%3D","line":212,"updated":"2013-04-26 18:03:06.000000000","message":"Use VLAN_MIN, VLAN_MAX in msg?","commit_id":"3a544a8a83761b2ed67d23911eee43e000c30071"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"420cac31c17d3dfac7e6ad0aa225ddda97bdcf5b","unresolved":false,"context_lines":[{"line_number":279,"context_line":"                inside \u003d False"},{"line_number":280,"context_line":"                for range in self.network_vlan_ranges.get(physical_network,"},{"line_number":281,"context_line":"                                                          []):"},{"line_number":282,"context_line":"                    if vlan_id \u003e\u003d range[0] and vlan_id \u003c\u003d range[1]:"},{"line_number":283,"context_line":"                        inside \u003d True"},{"line_number":284,"context_line":"                        break"},{"line_number":285,"context_line":"                if not inside:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAOn%2F%2FtZ8%3D","line":282,"updated":"2013-04-26 18:03:06.000000000","message":"Could do:\nif range[0] \u003c\u003d vlan_id \u003c\u003d range[1]:\n\nCould use tuple min_vlan, max_vlan instead of range on for loop above?","commit_id":"3a544a8a83761b2ed67d23911eee43e000c30071"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":34,"context_line":"vlan_opts \u003d ["},{"line_number":35,"context_line":"    cfg.ListOpt(\u0027network_vlan_ranges\u0027,"},{"line_number":36,"context_line":"                default\u003d[],"},{"line_number":37,"context_line":"                help\u003d\"List of \u003cphysical_network\u003e:\u003cvlan_min\u003e:\u003cvlan_max\u003e or \""},{"line_number":38,"context_line":"                \"\u003cphysical_network\u003e specifying physical_network names usable \""},{"line_number":39,"context_line":"                \"for VLAN provider and tenant networks, as well as ranges \""},{"line_number":40,"context_line":"                \"of VLAN tags on each available for allocation to tenant \""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOn%2F%2Fsd0%3D","line":37,"updated":"2013-04-27 17:33:18.000000000","message":"ditto","commit_id":"9ea0009b0883102e45d6bad7dc608b781937769d"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":34,"context_line":"vlan_opts \u003d ["},{"line_number":35,"context_line":"    cfg.ListOpt(\u0027network_vlan_ranges\u0027,"},{"line_number":36,"context_line":"                default\u003d[],"},{"line_number":37,"context_line":"                help\u003d\"List of \u003cphysical_network\u003e:\u003cvlan_min\u003e:\u003cvlan_max\u003e or \""},{"line_number":38,"context_line":"                \"\u003cphysical_network\u003e specifying physical_network names usable \""},{"line_number":39,"context_line":"                \"for VLAN provider and tenant networks, as well as ranges \""},{"line_number":40,"context_line":"                \"of VLAN tags on each available for allocation to tenant \""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOn%2F%2Fhss%3D","line":37,"in_reply_to":"AAAAOn%2F%2Fsd0%3D","updated":"2013-05-06 20:59:07.000000000","message":"Done","commit_id":"9ea0009b0883102e45d6bad7dc608b781937769d"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":42,"context_line":"                \"with arbitrary physical_network names.\")"},{"line_number":43,"context_line":"]"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"cfg.CONF.register_opts(vlan_opts, \"ML2_TYPE_VLAN\")"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"class VlanAllocation(model_base.BASEV2):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOn%2F%2Fsdw%3D","line":45,"updated":"2013-04-27 17:33:18.000000000","message":"ditto","commit_id":"9ea0009b0883102e45d6bad7dc608b781937769d"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":42,"context_line":"                \"with arbitrary physical_network names.\")"},{"line_number":43,"context_line":"]"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"cfg.CONF.register_opts(vlan_opts, \"ML2_TYPE_VLAN\")"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"class VlanAllocation(model_base.BASEV2):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOn%2F%2Fhso%3D","line":45,"in_reply_to":"AAAAOn%2F%2Fsdw%3D","updated":"2013-05-06 20:59:07.000000000","message":"Done","commit_id":"9ea0009b0883102e45d6bad7dc608b781937769d"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import sqlalchemy as sa"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from oslo.config import cfg"},{"line_number":21,"context_line":"from quantum.common import exceptions as exc"},{"line_number":22,"context_line":"from quantum.db import api as db_api"},{"line_number":23,"context_line":"from quantum.db import model_base"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAOn%2F%2Fg5k%3D","line":20,"updated":"2013-05-07 09:23:41.000000000","message":"I think we treated oslo as third party lib.","commit_id":"9223aebd665e5eaeaa4aa84486346cbf6c1723d8"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import sqlalchemy as sa"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from oslo.config import cfg"},{"line_number":21,"context_line":"from quantum.common import exceptions as exc"},{"line_number":22,"context_line":"from quantum.db import api as db_api"},{"line_number":23,"context_line":"from quantum.db import model_base"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAOn%2F%2FgR0%3D","line":20,"in_reply_to":"AAAAOn%2F%2Fg5k%3D","updated":"2013-05-07 18:50:30.000000000","message":"Done","commit_id":"9223aebd665e5eaeaa4aa84486346cbf6c1723d8"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"vlan_opts \u003d ["},{"line_number":35,"context_line":"    cfg.ListOpt(\u0027network_vlan_ranges\u0027,"},{"line_number":36,"context_line":"                default\u003d[],"},{"line_number":37,"context_line":"                help\u003d_(\"List of \u003cphysical_network\u003e:\u003cvlan_min\u003e:\u003cvlan_max\u003e or \""},{"line_number":38,"context_line":"                       \"\u003cphysical_network\u003e specifying physical_network names \""},{"line_number":39,"context_line":"                       \"usable for VLAN provider and tenant networks, as \""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAOn%2F%2Fg5c%3D","line":36,"updated":"2013-05-07 09:23:41.000000000","message":"I prefer to use * as default so that administrator does not need to do more configuration for a simple setup.","commit_id":"9223aebd665e5eaeaa4aa84486346cbf6c1723d8"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"vlan_opts \u003d ["},{"line_number":35,"context_line":"    cfg.ListOpt(\u0027network_vlan_ranges\u0027,"},{"line_number":36,"context_line":"                default\u003d[],"},{"line_number":37,"context_line":"                help\u003d_(\"List of \u003cphysical_network\u003e:\u003cvlan_min\u003e:\u003cvlan_max\u003e or \""},{"line_number":38,"context_line":"                       \"\u003cphysical_network\u003e specifying physical_network names \""},{"line_number":39,"context_line":"                       \"usable for VLAN provider and tenant networks, as \""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAOn%2F%2FenY%3D","line":36,"in_reply_to":"AAAAOn%2F%2FfQw%3D","updated":"2013-05-08 13:48:54.000000000","message":"Thanks Yong. I\u0027m now leaning more towards removing this wildcard physical_network feature as well.\n\nDo you think the same should apply to the FlatTypeDriver, which is where I first implemented the wildcarding? It seems maybe a bit more justified there, but inconsistency on this would be confusing.\n\nAny other opinions on this (mis)feature?","commit_id":"9223aebd665e5eaeaa4aa84486346cbf6c1723d8"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"vlan_opts \u003d ["},{"line_number":35,"context_line":"    cfg.ListOpt(\u0027network_vlan_ranges\u0027,"},{"line_number":36,"context_line":"                default\u003d[],"},{"line_number":37,"context_line":"                help\u003d_(\"List of \u003cphysical_network\u003e:\u003cvlan_min\u003e:\u003cvlan_max\u003e or \""},{"line_number":38,"context_line":"                       \"\u003cphysical_network\u003e specifying physical_network names \""},{"line_number":39,"context_line":"                       \"usable for VLAN provider and tenant networks, as \""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAOn%2F%2FgOo%3D","line":36,"in_reply_to":"AAAAOn%2F%2Fg5c%3D","updated":"2013-05-07 18:50:30.000000000","message":"I was considering that as well, but was leaning against specifying \"*\" as the default. In fact, I\u0027m not sure about even keeping the \"*\" wildcard physical network name feature.\n\nFirst, it only effects creating provider networks - using vlan tenant networks still requires specifying ranges of tags on specific physical networks. There is no \"safe\" range of VLAN tags that could be built in as a default.\n\nAlso, I thought it better by default to return an error when a bad physical network name is passed to the API. With \"*\", a misspelled physical network name is accepted, and VMs will successfully launch and appear to bind to the network, but will have no connectivity between hosts (they will effectively be local networks). Eventually, I hope to get the port binding to detect and report errors such as a physical network being unavailable on the node so that nova can fail the VM launch, but right now the only feedback is in the agent log.\n\nI\u0027d appreciate additional feedback on whether to make \"*\" the default, keep the wildcard feature but not have it be the default, or to remove the wildcard feature.","commit_id":"9223aebd665e5eaeaa4aa84486346cbf6c1723d8"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"vlan_opts \u003d ["},{"line_number":35,"context_line":"    cfg.ListOpt(\u0027network_vlan_ranges\u0027,"},{"line_number":36,"context_line":"                default\u003d[],"},{"line_number":37,"context_line":"                help\u003d_(\"List of \u003cphysical_network\u003e:\u003cvlan_min\u003e:\u003cvlan_max\u003e or \""},{"line_number":38,"context_line":"                       \"\u003cphysical_network\u003e specifying physical_network names \""},{"line_number":39,"context_line":"                       \"usable for VLAN provider and tenant networks, as \""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAOn%2F%2FfQw%3D","line":36,"in_reply_to":"AAAAOn%2F%2FgOo%3D","updated":"2013-05-08 03:38:42.000000000","message":"I prefer to remove * since it is not easy to maintain the integrity.","commit_id":"9223aebd665e5eaeaa4aa84486346cbf6c1723d8"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"unresolved":false,"context_lines":[{"line_number":280,"context_line":"                         one())"},{"line_number":281,"context_line":"                alloc.allocated \u003d False"},{"line_number":282,"context_line":"                inside \u003d False"},{"line_number":283,"context_line":"                for vlan_min, vlan_max in \\"},{"line_number":284,"context_line":"                        self.network_vlan_ranges.get(physical_network, []):"},{"line_number":285,"context_line":"                    if vlan_min \u003c\u003d vlan_id \u003c\u003d vlan_max:"},{"line_number":286,"context_line":"                        inside \u003d True"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAOn%2F%2Fg6I%3D","line":283,"updated":"2013-05-07 09:23:41.000000000","message":"we don\u0027t use \u0027\\\u0027","commit_id":"9223aebd665e5eaeaa4aa84486346cbf6c1723d8"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":280,"context_line":"                         one())"},{"line_number":281,"context_line":"                alloc.allocated \u003d False"},{"line_number":282,"context_line":"                inside \u003d False"},{"line_number":283,"context_line":"                for vlan_min, vlan_max in \\"},{"line_number":284,"context_line":"                        self.network_vlan_ranges.get(physical_network, []):"},{"line_number":285,"context_line":"                    if vlan_min \u003c\u003d vlan_id \u003c\u003d vlan_max:"},{"line_number":286,"context_line":"                        inside \u003d True"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAOn%2F%2Ff9w%3D","line":283,"in_reply_to":"AAAAOn%2F%2Fg6I%3D","updated":"2013-05-07 18:50:30.000000000","message":"Done","commit_id":"9223aebd665e5eaeaa4aa84486346cbf6c1723d8"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    def _sync_vlan_allocations(self):"},{"line_number":130,"context_line":"        session \u003d db_api.get_session()"},{"line_number":131,"context_line":"        with session.begin():"},{"line_number":132,"context_line":"            # get existing allocations for all physical networks"},{"line_number":133,"context_line":"            allocations \u003d dict()"},{"line_number":134,"context_line":"            allocs \u003d (session.query(VlanAllocation)."}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2F7qc%3D","line":131,"updated":"2013-05-19 13:43:32.000000000","message":"subtransaction\u003dTrue?","commit_id":"2de9c5149af68a7babd87cece3da28572ce46dcc"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    def _sync_vlan_allocations(self):"},{"line_number":130,"context_line":"        session \u003d db_api.get_session()"},{"line_number":131,"context_line":"        with session.begin():"},{"line_number":132,"context_line":"            # get existing allocations for all physical networks"},{"line_number":133,"context_line":"            allocations \u003d dict()"},{"line_number":134,"context_line":"            allocs \u003d (session.query(VlanAllocation)."}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2F5ss%3D","line":131,"in_reply_to":"AAAAPH%2F%2F7qc%3D","updated":"2013-05-20 18:04:58.000000000","message":"Done","commit_id":"2de9c5149af68a7babd87cece3da28572ce46dcc"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"class VlanAllocation(model_base.BASEV2):"},{"line_number":48,"context_line":"    \"\"\"Represent persistent allocation state of a vlan_id on a"},{"line_number":49,"context_line":"    physical network."},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    If allocated is False, the vlan_id on the physical_network is"},{"line_number":52,"context_line":"    available for allocation to a tenant network. If allocated is"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2FqTk%3D","line":49,"updated":"2013-05-28 13:47:02.000000000","message":"Docstring convention says the summary line should be one line.","commit_id":"55a39b43c146c785ede98522014e381fd9e7d438"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"class VlanAllocation(model_base.BASEV2):"},{"line_number":48,"context_line":"    \"\"\"Represent persistent allocation state of a vlan_id on a"},{"line_number":49,"context_line":"    physical network."},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    If allocated is False, the vlan_id on the physical_network is"},{"line_number":52,"context_line":"    available for allocation to a tenant network. If allocated is"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2Fo84%3D","line":49,"in_reply_to":"AAAAPH%2F%2FqTk%3D","updated":"2013-05-28 20:56:06.000000000","message":"Done","commit_id":"55a39b43c146c785ede98522014e381fd9e7d438"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":85,"context_line":"    def _parse_network_vlan_ranges(self):"},{"line_number":86,"context_line":"        try:"},{"line_number":87,"context_line":"            self.network_vlan_ranges \u003d plugin_utils.parse_network_vlan_ranges("},{"line_number":88,"context_line":"                cfg.CONF.ml2_type_vlan.network_vlan_ranges)"},{"line_number":89,"context_line":"        except Exception as ex:"},{"line_number":90,"context_line":"            LOG.critical(_(\"%s. Service terminated!\"), ex)"},{"line_number":91,"context_line":"            sys.exit(1)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2FqS8%3D","line":88,"updated":"2013-05-28 13:47:02.000000000","message":"It is better to check a length of physical network name here.","commit_id":"55a39b43c146c785ede98522014e381fd9e7d438"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":85,"context_line":"    def _parse_network_vlan_ranges(self):"},{"line_number":86,"context_line":"        try:"},{"line_number":87,"context_line":"            self.network_vlan_ranges \u003d plugin_utils.parse_network_vlan_ranges("},{"line_number":88,"context_line":"                cfg.CONF.ml2_type_vlan.network_vlan_ranges)"},{"line_number":89,"context_line":"        except Exception as ex:"},{"line_number":90,"context_line":"            LOG.critical(_(\"%s. Service terminated!\"), ex)"},{"line_number":91,"context_line":"            sys.exit(1)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2Fo8c%3D","line":88,"in_reply_to":"AAAAPH%2F%2FqS8%3D","updated":"2013-05-28 20:56:06.000000000","message":"I added a TODO comment for this. See reply to similar comment on type_flat.py.","commit_id":"55a39b43c146c785ede98522014e381fd9e7d438"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":87,"context_line":"            self.network_vlan_ranges \u003d plugin_utils.parse_network_vlan_ranges("},{"line_number":88,"context_line":"                cfg.CONF.ml2_type_vlan.network_vlan_ranges)"},{"line_number":89,"context_line":"        except Exception as ex:"},{"line_number":90,"context_line":"            LOG.critical(_(\"%s. Service terminated!\"), ex)"},{"line_number":91,"context_line":"            sys.exit(1)"},{"line_number":92,"context_line":"        LOG.info(_(\"Network VLAN ranges: %s\") % self.network_vlan_ranges)"},{"line_number":93,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2Fqko%3D","line":90,"updated":"2013-05-28 09:26:37.000000000","message":"LOG.exception(_(\"Service terminated!\"))","commit_id":"55a39b43c146c785ede98522014e381fd9e7d438"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":87,"context_line":"            self.network_vlan_ranges \u003d plugin_utils.parse_network_vlan_ranges("},{"line_number":88,"context_line":"                cfg.CONF.ml2_type_vlan.network_vlan_ranges)"},{"line_number":89,"context_line":"        except Exception as ex:"},{"line_number":90,"context_line":"            LOG.critical(_(\"%s. Service terminated!\"), ex)"},{"line_number":91,"context_line":"            sys.exit(1)"},{"line_number":92,"context_line":"        LOG.info(_(\"Network VLAN ranges: %s\") % self.network_vlan_ranges)"},{"line_number":93,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2Fo7g%3D","line":90,"in_reply_to":"AAAAPH%2F%2Fqko%3D","updated":"2013-05-28 20:56:06.000000000","message":"Done","commit_id":"55a39b43c146c785ede98522014e381fd9e7d438"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":98,"context_line":"            allocations \u003d dict()"},{"line_number":99,"context_line":"            allocs \u003d (session.query(VlanAllocation)."},{"line_number":100,"context_line":"                      with_lockmode(\u0027update\u0027)."},{"line_number":101,"context_line":"                      all())"},{"line_number":102,"context_line":"            for alloc in allocs:"},{"line_number":103,"context_line":"                if alloc.physical_network not in allocations:"},{"line_number":104,"context_line":"                    allocations[alloc.physical_network] \u003d set()"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2FqSc%3D","line":101,"updated":"2013-05-28 13:47:02.000000000","message":"all() is not needed since query acts as an interator. If I remember correctly, unnecessary all()s are cleanup-ed recently.","commit_id":"55a39b43c146c785ede98522014e381fd9e7d438"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":98,"context_line":"            allocations \u003d dict()"},{"line_number":99,"context_line":"            allocs \u003d (session.query(VlanAllocation)."},{"line_number":100,"context_line":"                      with_lockmode(\u0027update\u0027)."},{"line_number":101,"context_line":"                      all())"},{"line_number":102,"context_line":"            for alloc in allocs:"},{"line_number":103,"context_line":"                if alloc.physical_network not in allocations:"},{"line_number":104,"context_line":"                    allocations[alloc.physical_network] \u003d set()"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2Fo7Y%3D","line":101,"in_reply_to":"AAAAPH%2F%2FqSc%3D","updated":"2013-05-28 20:56:06.000000000","message":"Done","commit_id":"55a39b43c146c785ede98522014e381fd9e7d438"}],"quantum/plugins/ml2/managers.py":[{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"420cac31c17d3dfac7e6ad0aa225ddda97bdcf5b","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        self._check_tenant_network_types(cfg.CONF.ML2.tenant_network_types)"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def _register_types(self):"},{"line_number":48,"context_line":"        for ext in self:"},{"line_number":49,"context_line":"            type \u003d ext.obj.get_type()"},{"line_number":50,"context_line":"            if type in self.drivers:"},{"line_number":51,"context_line":"                LOG.error(_(\"Type driver \u0027%(new_driver)s\u0027 ignored because type\""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAOn%2F%2FtZo%3D","line":48,"updated":"2013-04-26 18:03:06.000000000","message":"Is this right?","commit_id":"3a544a8a83761b2ed67d23911eee43e000c30071"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import stevedore"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from oslo.config import cfg"},{"line_number":19,"context_line":"from quantum.common import exceptions as exc"},{"line_number":20,"context_line":"from quantum.openstack.common import log"},{"line_number":21,"context_line":"from quantum.plugins.ml2 import driver_api as api"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOn%2F%2Fsds%3D","line":18,"updated":"2013-04-27 17:33:18.000000000","message":"new line","commit_id":"9ea0009b0883102e45d6bad7dc608b781937769d"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import stevedore"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from oslo.config import cfg"},{"line_number":19,"context_line":"from quantum.common import exceptions as exc"},{"line_number":20,"context_line":"from quantum.openstack.common import log"},{"line_number":21,"context_line":"from quantum.plugins.ml2 import driver_api as api"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOn%2F%2FiRE%3D","line":18,"in_reply_to":"AAAAOn%2F%2Fsds%3D","updated":"2013-05-06 20:59:07.000000000","message":"Done","commit_id":"9ea0009b0883102e45d6bad7dc608b781937769d"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"unresolved":false,"context_lines":[{"line_number":102,"context_line":"        driver.obj.release_segment(session, segment)"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"class MechanismManager(stevedore.named.NamedExtensionManager):"},{"line_number":106,"context_line":"    \"\"\"Manage networking mechanisms using drivers.\"\"\""},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    def __init__(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAOn%2F%2Fg8c%3D","line":105,"updated":"2013-05-07 09:23:41.000000000","message":"This class is not well devised. How do u want to use it?","commit_id":"9223aebd665e5eaeaa4aa84486346cbf6c1723d8"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":102,"context_line":"        driver.obj.release_segment(session, segment)"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"class MechanismManager(stevedore.named.NamedExtensionManager):"},{"line_number":106,"context_line":"    \"\"\"Manage networking mechanisms using drivers.\"\"\""},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    def __init__(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAOn%2F%2Ff9I%3D","line":105,"in_reply_to":"AAAAOn%2F%2Fg8c%3D","updated":"2013-05-07 18:50:30.000000000","message":"Correct. As implied by the TODOs here and in driver_api.py, support for mechanism drivers is not yet fully implemented. The current MechanismDriver interface is just a scaffolding to which the actual functions will be added. \n\nThe current plan is for the initial merge to only support the existing openvswitch, linuxbridge, and hyperv RPC-based mechanisms, and its not clear yet whether this will require any calls into MechanismDriver functions. \n\nA subsequent merge will add the MechanismDriver support needed for interfaces with controllers, top-of-rack switches, etc..","commit_id":"9223aebd665e5eaeaa4aa84486346cbf6c1723d8"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":36,"context_line":"        # driver fails."},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"        LOG.info(_(\"Configured type driver names: %s\")"},{"line_number":39,"context_line":"                 % cfg.CONF.ml2.type_drivers)"},{"line_number":40,"context_line":"        super(TypeManager, self).__init__(\u0027quantum.ml2.type_drivers\u0027,"},{"line_number":41,"context_line":"                                          cfg.CONF.ml2.type_drivers,"},{"line_number":42,"context_line":"                                          invoke_on_load\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2Fqlg%3D","line":39,"updated":"2013-05-28 09:12:11.000000000","message":"You can replace the \u0027%\u0027 with a comma","commit_id":"55a39b43c146c785ede98522014e381fd9e7d438"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":36,"context_line":"        # driver fails."},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"        LOG.info(_(\"Configured type driver names: %s\")"},{"line_number":39,"context_line":"                 % cfg.CONF.ml2.type_drivers)"},{"line_number":40,"context_line":"        super(TypeManager, self).__init__(\u0027quantum.ml2.type_drivers\u0027,"},{"line_number":41,"context_line":"                                          cfg.CONF.ml2.type_drivers,"},{"line_number":42,"context_line":"                                          invoke_on_load\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2Fo08%3D","line":39,"in_reply_to":"AAAAPH%2F%2Fqlg%3D","updated":"2013-05-28 20:56:06.000000000","message":"Done throughout the code.","commit_id":"55a39b43c146c785ede98522014e381fd9e7d438"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":65,"context_line":"                self.tenant_network_types.append(network_type)"},{"line_number":66,"context_line":"            else:"},{"line_number":67,"context_line":"                LOG.error(_(\"No type driver for tenant network_type: %s\")"},{"line_number":68,"context_line":"                          % network_type)"},{"line_number":69,"context_line":"        LOG.info(_(\"Tenant network_types: %s\") % self.tenant_network_types)"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def initialize(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2FqlQ%3D","line":68,"updated":"2013-05-28 09:12:11.000000000","message":"This error conditions should probably be fatal. What\u0027s your opinion?","commit_id":"55a39b43c146c785ede98522014e381fd9e7d438"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":65,"context_line":"                self.tenant_network_types.append(network_type)"},{"line_number":66,"context_line":"            else:"},{"line_number":67,"context_line":"                LOG.error(_(\"No type driver for tenant network_type: %s\")"},{"line_number":68,"context_line":"                          % network_type)"},{"line_number":69,"context_line":"        LOG.info(_(\"Tenant network_types: %s\") % self.tenant_network_types)"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def initialize(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2Fo0c%3D","line":68,"in_reply_to":"AAAAPH%2F%2FqlQ%3D","updated":"2013-05-28 20:56:06.000000000","message":"Done","commit_id":"55a39b43c146c785ede98522014e381fd9e7d438"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":92,"context_line":"            driver \u003d self.drivers.get(network_type)"},{"line_number":93,"context_line":"            segment \u003d driver.obj.allocate_tenant_segment(session)"},{"line_number":94,"context_line":"            if segment:"},{"line_number":95,"context_line":"                return segment"},{"line_number":96,"context_line":"        raise exc.NoNetworkAvailable()"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def release_segment(self, session, segment):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2Fqjc%3D","line":95,"updated":"2013-05-28 09:12:11.000000000","message":"Seems like \u0027if segment\u0027 can be removed","commit_id":"55a39b43c146c785ede98522014e381fd9e7d438"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":92,"context_line":"            driver \u003d self.drivers.get(network_type)"},{"line_number":93,"context_line":"            segment \u003d driver.obj.allocate_tenant_segment(session)"},{"line_number":94,"context_line":"            if segment:"},{"line_number":95,"context_line":"                return segment"},{"line_number":96,"context_line":"        raise exc.NoNetworkAvailable()"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def release_segment(self, session, segment):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2Fo1I%3D","line":95,"in_reply_to":"AAAAPH%2F%2Fqjc%3D","updated":"2013-05-28 20:56:06.000000000","message":"If a TypeDriver\u0027s allocate_tenant_segment() returns None, the next TypeDriver is tried, so I think the current code is what\u0027s needed.","commit_id":"55a39b43c146c785ede98522014e381fd9e7d438"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":101,"context_line":"        driver.obj.release_segment(session, segment)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"class MechanismManager(stevedore.named.NamedExtensionManager):"},{"line_number":105,"context_line":"    \"\"\"Manage networking mechanisms using drivers.\"\"\""},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    def __init__(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2Fqk0%3D","line":104,"updated":"2013-05-28 09:12:11.000000000","message":"This looks like a stub at the moment.\nI have a slight preference for removing stub code from what we are going to merge.\n\nOtherwise, specifically stating that is a stub will be fine as well.","commit_id":"55a39b43c146c785ede98522014e381fd9e7d438"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":101,"context_line":"        driver.obj.release_segment(session, segment)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"class MechanismManager(stevedore.named.NamedExtensionManager):"},{"line_number":105,"context_line":"    \"\"\"Manage networking mechanisms using drivers.\"\"\""},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    def __init__(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2Fo1A%3D","line":104,"in_reply_to":"AAAAPH%2F%2Fqk0%3D","updated":"2013-05-28 20:56:06.000000000","message":"Added a note to the doc text as in the MechanismDriver class.","commit_id":"55a39b43c146c785ede98522014e381fd9e7d438"}],"quantum/plugins/ml2/models.py":[{"author":{"_account_id":7170,"name":"Zang MingJie","email":"zealot0630@gmail.com","username":"zealot"},"change_message_id":"9915b3514c5a39fe71a2b3b7a0ba22c9bd445b22","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    network_id \u003d sa.Column(sa.String(36),"},{"line_number":33,"context_line":"                           sa.ForeignKey(\u0027networks.id\u0027, ondelete\u003d\"CASCADE\"))"},{"line_number":34,"context_line":"    network_type \u003d sa.Column(sa.String(32), nullable\u003dFalse)"},{"line_number":35,"context_line":"    physical_network \u003d sa.Column(sa.String(64))"},{"line_number":36,"context_line":"    segmentation_id \u003d sa.Column(sa.Integer)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2FqXs%3D","line":35,"updated":"2013-05-28 11:19:54.000000000","message":"IMO, not all type driver has physical network and segmentation id, can we push down these fields to type driver implementations ?","commit_id":"55a39b43c146c785ede98522014e381fd9e7d438"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":32,"context_line":"    network_id \u003d sa.Column(sa.String(36),"},{"line_number":33,"context_line":"                           sa.ForeignKey(\u0027networks.id\u0027, ondelete\u003d\"CASCADE\"))"},{"line_number":34,"context_line":"    network_type \u003d sa.Column(sa.String(32), nullable\u003dFalse)"},{"line_number":35,"context_line":"    physical_network \u003d sa.Column(sa.String(64))"},{"line_number":36,"context_line":"    segmentation_id \u003d sa.Column(sa.Integer)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2Fozg%3D","line":35,"in_reply_to":"AAAAPH%2F%2FqXs%3D","updated":"2013-05-28 20:56:06.000000000","message":"I had considered that, but decided this approach would be simpler for now. Let\u0027s revisit the driver APIs after the initial merge and we see how the MechanismDriver API starts taking shape.\n\nAre you aware of specific potential network types that would not fit this model?","commit_id":"55a39b43c146c785ede98522014e381fd9e7d438"}],"quantum/plugins/ml2/plugin.py":[{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"420cac31c17d3dfac7e6ad0aa225ddda97bdcf5b","unresolved":false,"context_lines":[{"line_number":151,"context_line":"        id \u003d network[\u0027id\u0027]"},{"line_number":152,"context_line":"        segments \u003d db.get_network_segments(context.session, id)"},{"line_number":153,"context_line":"        if not segments:"},{"line_number":154,"context_line":"            LOG.error(_(\"Network % has no segments\") % id)"},{"line_number":155,"context_line":"            network[provider.NETWORK_TYPE] \u003d None"},{"line_number":156,"context_line":"            network[provider.PHYSICAL_NETWORK] \u003d None"},{"line_number":157,"context_line":"            network[provider.SEGMENTATION_ID] \u003d None"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAOn%2F%2FtY8%3D","line":154,"updated":"2013-04-26 18:03:06.000000000","message":"Typo at %? Missing type or identifier?","commit_id":"3a544a8a83761b2ed67d23911eee43e000c30071"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":78,"context_line":"    # REVISIT(rkukura): Move policy actions to"},{"line_number":79,"context_line":"    # quantum.extensions.providernet?"},{"line_number":80,"context_line":"    network_view_action \u003d \"extension:provider_network:view\""},{"line_number":81,"context_line":"    network_set_action \u003d \"extension:provider_network:set\""},{"line_number":82,"context_line":"    binding_view_action \u003d \"extension:port_binding:view\""},{"line_number":83,"context_line":"    binding_set_action \u003d \"extension:port_binding:set\""},{"line_number":84,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOn%2F%2Fsdo%3D","line":81,"updated":"2013-04-27 17:33:18.000000000","message":"please see https://review.openstack.org/#/c/26394/","commit_id":"9ea0009b0883102e45d6bad7dc608b781937769d"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":156,"context_line":"            network[provider.PHYSICAL_NETWORK] \u003d None"},{"line_number":157,"context_line":"            network[provider.SEGMENTATION_ID] \u003d None"},{"line_number":158,"context_line":"        elif len(segments) \u003e 1:"},{"line_number":159,"context_line":"            network[provider.NETWORK_TYPE] \u003d \u0027multi-segment\u0027"},{"line_number":160,"context_line":"            network[provider.PHYSICAL_NETWORK] \u003d None"},{"line_number":161,"context_line":"            network[provider.SEGMENTATION_ID] \u003d None"},{"line_number":162,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOn%2F%2Fsdk%3D","line":159,"updated":"2013-04-27 17:33:18.000000000","message":"why not a define for multi-segment?","commit_id":"9ea0009b0883102e45d6bad7dc608b781937769d"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"unresolved":false,"context_lines":[{"line_number":46,"context_line":"TYPE_MULTI_SEGMENT \u003d \u0027multi-segment\u0027"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"class Ml2Plugin(db_base_plugin_v2.QuantumDbPluginV2,"},{"line_number":50,"context_line":"                extraroute_db.ExtraRoute_db_mixin,"},{"line_number":51,"context_line":"                sg_db_rpc.SecurityGroupServerRpcMixin,"},{"line_number":52,"context_line":"                agentschedulers_db.AgentSchedulerDbMixin):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAOn%2F%2FetU%3D","line":49,"updated":"2013-05-08 12:10:50.000000000","message":"Will this class have subnet and plug/unplug functions as well?","commit_id":"2de9c5149af68a7babd87cece3da28572ce46dcc"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":46,"context_line":"TYPE_MULTI_SEGMENT \u003d \u0027multi-segment\u0027"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"class Ml2Plugin(db_base_plugin_v2.QuantumDbPluginV2,"},{"line_number":50,"context_line":"                extraroute_db.ExtraRoute_db_mixin,"},{"line_number":51,"context_line":"                sg_db_rpc.SecurityGroupServerRpcMixin,"},{"line_number":52,"context_line":"                agentschedulers_db.AgentSchedulerDbMixin):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAOn%2F%2FeoY%3D","line":49,"in_reply_to":"AAAAOn%2F%2FetU%3D","updated":"2013-05-08 13:49:11.000000000","message":"So far there has been no need to override the inherited subnet CRUD functions in the ml2 plugin. But I see that some of the existing plugins (bigswitch, cisco, midonet, and plumgrid at least) do interact with controllers in these. So it does make sense to implement these plugin functions so they call into the MechanismDrivers in the future patch set where the full MechanismDriver API is fleshed out.\n\nRegarding plug and unplug functions, I think those were only in the V1 quantum API. In V2, they are sort of replaced by the portbinding extension, where the VIF driver can call port_update() to set the binding:host_id attribute. I intend to have this action involve the MechanismDrivers, and result in the establishment of a binding for the port. I am concerned that the current port binding (or plug/unplug) semantics in the quantum API are somewhat ill-defined, and that the old V1 approach that made this more explicit had some merit. We also need to figure out how port binding handles VM migration, where details such as the host_id (and maybe even the vif_type) change.","commit_id":"2de9c5149af68a7babd87cece3da28572ce46dcc"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":147,"context_line":"            raise exc.InvalidInput(error_message\u003dmsg)"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    def _extend_network_dict_provider(self, context, network):"},{"line_number":150,"context_line":"        if not policy.check(context, self.network_view_action, network):"},{"line_number":151,"context_line":"            return"},{"line_number":152,"context_line":"        id \u003d network[\u0027id\u0027]"},{"line_number":153,"context_line":"        segments \u003d db.get_network_segments(context.session, id)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2F7qY%3D","line":150,"updated":"2013-05-19 13:43:32.000000000","message":"Is this still needed? I think that Salvatore addressed something like this. Not sure.","commit_id":"2de9c5149af68a7babd87cece3da28572ce46dcc"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":147,"context_line":"            raise exc.InvalidInput(error_message\u003dmsg)"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    def _extend_network_dict_provider(self, context, network):"},{"line_number":150,"context_line":"        if not policy.check(context, self.network_view_action, network):"},{"line_number":151,"context_line":"            return"},{"line_number":152,"context_line":"        id \u003d network[\u0027id\u0027]"},{"line_number":153,"context_line":"        segments \u003d db.get_network_segments(context.session, id)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2F5sI%3D","line":150,"in_reply_to":"AAAAPH%2F%2F7qY%3D","updated":"2013-05-20 18:04:58.000000000","message":"I\u0027ve been tracking these merges, so the policy checking code has been removed.","commit_id":"2de9c5149af68a7babd87cece3da28572ce46dcc"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"unresolved":false,"context_lines":[{"line_number":70,"context_line":"    # List of supported extensions"},{"line_number":71,"context_line":"    _supported_extension_aliases \u003d [\"provider\", \"router\", \"extraroute\","},{"line_number":72,"context_line":"                                    \"binding\", \"quotas\", \"security-group\","},{"line_number":73,"context_line":"                                    \"agent\", \"agent_scheduler\"]"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    @property"},{"line_number":76,"context_line":"    def supported_extension_aliases(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAPH%2F%2FyeA%3D","line":73,"updated":"2013-05-22 23:57:57.000000000","message":"ex-gw should be added in near feature\n(see https://review.openstack.org/#/c/25525/ )","commit_id":"1d541c6b41b9b558889412058498ada6ac7f3867"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":70,"context_line":"    # List of supported extensions"},{"line_number":71,"context_line":"    _supported_extension_aliases \u003d [\"provider\", \"router\", \"extraroute\","},{"line_number":72,"context_line":"                                    \"binding\", \"quotas\", \"security-group\","},{"line_number":73,"context_line":"                                    \"agent\", \"agent_scheduler\"]"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    @property"},{"line_number":76,"context_line":"    def supported_extension_aliases(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAPH%2F%2Fwic%3D","line":73,"in_reply_to":"AAAAPH%2F%2FyeA%3D","updated":"2013-05-27 20:34:20.000000000","message":"Looks easy enough. I try to pick up new extensions or changes to existing plugins with each updated patch set.","commit_id":"1d541c6b41b9b558889412058498ada6ac7f3867"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":152,"context_line":"        elif len(segments) \u003e 1:"},{"line_number":153,"context_line":"            network[provider.NETWORK_TYPE] \u003d TYPE_MULTI_SEGMENT"},{"line_number":154,"context_line":"            network[provider.PHYSICAL_NETWORK] \u003d None"},{"line_number":155,"context_line":"            network[provider.SEGMENTATION_ID] \u003d None"},{"line_number":156,"context_line":"        else:"},{"line_number":157,"context_line":"            segment \u003d segments[0]"},{"line_number":158,"context_line":"            network[provider.NETWORK_TYPE] \u003d segment[api.NETWORK_TYPE]"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2Fqic%3D","line":155,"updated":"2013-05-28 09:12:11.000000000","message":"This needs a #TODO, I think.\nWe need to figure out how to tweak the provider network extension for visualizing multi-segments and not break backward compability.","commit_id":"55a39b43c146c785ede98522014e381fd9e7d438"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":152,"context_line":"        elif len(segments) \u003e 1:"},{"line_number":153,"context_line":"            network[provider.NETWORK_TYPE] \u003d TYPE_MULTI_SEGMENT"},{"line_number":154,"context_line":"            network[provider.PHYSICAL_NETWORK] \u003d None"},{"line_number":155,"context_line":"            network[provider.SEGMENTATION_ID] \u003d None"},{"line_number":156,"context_line":"        else:"},{"line_number":157,"context_line":"            segment \u003d segments[0]"},{"line_number":158,"context_line":"            network[provider.NETWORK_TYPE] \u003d segment[api.NETWORK_TYPE]"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2Foyg%3D","line":155,"in_reply_to":"AAAAPH%2F%2Fqic%3D","updated":"2013-05-28 20:56:06.000000000","message":"My thinking is that segments, whether there are one or more, would also be accessible either as a sub-resource to network or as a separate top-level resource. I\u0027m not sure which makes more sense in terms of the current extension machinery. Either way, I don\u0027t think the code in this function would change, so I don\u0027t think we need a TODO here. I\u0027m considering filing a separate blueprint for adding multi-segment support to the provider extension.","commit_id":"55a39b43c146c785ede98522014e381fd9e7d438"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":204,"context_line":"            result \u003d super(Ml2Plugin, self).create_network(context, network)"},{"line_number":205,"context_line":"            id \u003d result[\u0027id\u0027]"},{"line_number":206,"context_line":"            self._process_l3_create(context, attrs, id)"},{"line_number":207,"context_line":"            db.add_network_segment(session, id, segment)"},{"line_number":208,"context_line":"            self._extend_network_dict_provider(context, result)"},{"line_number":209,"context_line":"            self._extend_network_dict_l3(context, result)"},{"line_number":210,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2FqkM%3D","line":207,"updated":"2013-05-28 09:12:11.000000000","message":"I wonder if the above (line 207) shouldn\u0027t be performed by the type manager. Ideally one would defer to this objects all the operations pertaining network segments.","commit_id":"55a39b43c146c785ede98522014e381fd9e7d438"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":204,"context_line":"            result \u003d super(Ml2Plugin, self).create_network(context, network)"},{"line_number":205,"context_line":"            id \u003d result[\u0027id\u0027]"},{"line_number":206,"context_line":"            self._process_l3_create(context, attrs, id)"},{"line_number":207,"context_line":"            db.add_network_segment(session, id, segment)"},{"line_number":208,"context_line":"            self._extend_network_dict_provider(context, result)"},{"line_number":209,"context_line":"            self._extend_network_dict_l3(context, result)"},{"line_number":210,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2FoyE%3D","line":207,"in_reply_to":"AAAAPH%2F%2FqkM%3D","updated":"2013-05-28 20:56:06.000000000","message":"I think the reserve and allocate steps need to be performed before calling the base create_network(), and adding the segment to the DB would need to be performed after, so this would require a new TypeManager function. I\u0027ve added a REVISIT for this.","commit_id":"55a39b43c146c785ede98522014e381fd9e7d438"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":212,"context_line":""},{"line_number":213,"context_line":"    def update_network(self, context, id, network):"},{"line_number":214,"context_line":"        attrs \u003d network[\u0027network\u0027]"},{"line_number":215,"context_line":"        self._check_provider_update(context, attrs)"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"        session \u003d context.session"},{"line_number":218,"context_line":"        with session.begin(subtransactions\u003dTrue):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2FqkE%3D","line":215,"updated":"2013-05-28 09:12:11.000000000","message":"Is allowing for updating provider attributes something which will happen at some point during this release cycle?","commit_id":"55a39b43c146c785ede98522014e381fd9e7d438"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":212,"context_line":""},{"line_number":213,"context_line":"    def update_network(self, context, id, network):"},{"line_number":214,"context_line":"        attrs \u003d network[\u0027network\u0027]"},{"line_number":215,"context_line":"        self._check_provider_update(context, attrs)"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"        session \u003d context.session"},{"line_number":218,"context_line":"        with session.begin(subtransactions\u003dTrue):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2Fox8%3D","line":215,"in_reply_to":"AAAAPH%2F%2FqkE%3D","updated":"2013-05-28 20:56:06.000000000","message":"I\u0027m not sure. I haven\u0027t heard any argument to prioritize it yet. Rather than modifying an existing segment, a better model might be to add a new segment and then remove the old segment. Either way, it seems it would need to trigger rebinding all the ports using the segment.","commit_id":"55a39b43c146c785ede98522014e381fd9e7d438"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":262,"context_line":"        self.notifier.network_delete(context, id)"},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"    def create_port(self, context, port):"},{"line_number":265,"context_line":"        #REVISIT(rkukura): Modify attrs"},{"line_number":266,"context_line":"        port[\u0027port\u0027][\u0027status\u0027] \u003d const.PORT_STATUS_DOWN"},{"line_number":267,"context_line":"        attrs \u003d port[\u0027port\u0027]"},{"line_number":268,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2Fqj0%3D","line":265,"updated":"2013-05-28 09:12:11.000000000","message":"What do you mean?","commit_id":"55a39b43c146c785ede98522014e381fd9e7d438"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":262,"context_line":"        self.notifier.network_delete(context, id)"},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"    def create_port(self, context, port):"},{"line_number":265,"context_line":"        #REVISIT(rkukura): Modify attrs"},{"line_number":266,"context_line":"        port[\u0027port\u0027][\u0027status\u0027] \u003d const.PORT_STATUS_DOWN"},{"line_number":267,"context_line":"        attrs \u003d port[\u0027port\u0027]"},{"line_number":268,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2Fow0%3D","line":265,"in_reply_to":"AAAAPH%2F%2Fqj0%3D","updated":"2013-05-28 20:56:06.000000000","message":"It was just a reminder to myself to optimize the following code, which I\u0027ve taken care of.","commit_id":"55a39b43c146c785ede98522014e381fd9e7d438"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":299,"context_line":"            context, original_port, updated_port)"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"        if original_port[\u0027admin_state_up\u0027] !\u003d updated_port[\u0027admin_state_up\u0027]:"},{"line_number":302,"context_line":"            need_port_update_notify \u003d True"},{"line_number":303,"context_line":""},{"line_number":304,"context_line":"        if need_port_update_notify:"},{"line_number":305,"context_line":"            self._notify_port_updated(context, updated_port)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2Fqjs%3D","line":302,"updated":"2013-05-28 09:12:11.000000000","message":"This logic is copied from the OVS plugin, so I see what you\u0027re doing here.\n\nHowever, a simple improvement would be to do the check at line 301-302 first and in the else branch do the check at line 298-299.\n\nOf course if need_port_update_notify was set to true at line 291 there no point in doing any further check!","commit_id":"55a39b43c146c785ede98522014e381fd9e7d438"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":299,"context_line":"            context, original_port, updated_port)"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"        if original_port[\u0027admin_state_up\u0027] !\u003d updated_port[\u0027admin_state_up\u0027]:"},{"line_number":302,"context_line":"            need_port_update_notify \u003d True"},{"line_number":303,"context_line":""},{"line_number":304,"context_line":"        if need_port_update_notify:"},{"line_number":305,"context_line":"            self._notify_port_updated(context, updated_port)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2Fow8%3D","line":302,"in_reply_to":"AAAAPH%2F%2FqP0%3D","updated":"2013-05-28 20:56:06.000000000","message":"Seems no change is required if I follow correctly.","commit_id":"55a39b43c146c785ede98522014e381fd9e7d438"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":299,"context_line":"            context, original_port, updated_port)"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"        if original_port[\u0027admin_state_up\u0027] !\u003d updated_port[\u0027admin_state_up\u0027]:"},{"line_number":302,"context_line":"            need_port_update_notify \u003d True"},{"line_number":303,"context_line":""},{"line_number":304,"context_line":"        if need_port_update_notify:"},{"line_number":305,"context_line":"            self._notify_port_updated(context, updated_port)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2FqP0%3D","line":302,"in_reply_to":"AAAAPH%2F%2Fqjs%3D","updated":"2013-05-28 13:47:02.000000000","message":"In is_security_group_member_updated() method, a notification related to security group is invoked, so we cannot move L.298-299 in \u0027else\u0027 branch. The method name is confusing and should be renamed :-(","commit_id":"55a39b43c146c785ede98522014e381fd9e7d438"}],"quantum/plugins/ml2/rpc.py":[{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"unresolved":false,"context_lines":[{"line_number":172,"context_line":""},{"line_number":173,"context_line":"    def port_update(self, context, port, network_type, segmentation_id,"},{"line_number":174,"context_line":"                    physical_network):"},{"line_number":175,"context_line":"        # REVISIT(rkukura): The linuxbridge agent expects vlan_id."},{"line_number":176,"context_line":"        self.fanout_cast(context,"},{"line_number":177,"context_line":"                         self.make_msg(\u0027port_update\u0027,"},{"line_number":178,"context_line":"                                       port\u003dport,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAOn%2F%2Fg14%3D","line":175,"updated":"2013-05-07 09:23:41.000000000","message":"I suggest to do some modification to linuxbridge agent and linuxbridge plugin.","commit_id":"9223aebd665e5eaeaa4aa84486346cbf6c1723d8"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":172,"context_line":""},{"line_number":173,"context_line":"    def port_update(self, context, port, network_type, segmentation_id,"},{"line_number":174,"context_line":"                    physical_network):"},{"line_number":175,"context_line":"        # REVISIT(rkukura): The linuxbridge agent expects vlan_id."},{"line_number":176,"context_line":"        self.fanout_cast(context,"},{"line_number":177,"context_line":"                         self.make_msg(\u0027port_update\u0027,"},{"line_number":178,"context_line":"                                       port\u003dport,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAOn%2F%2Ff80%3D","line":175,"in_reply_to":"AAAAOn%2F%2Fg14%3D","updated":"2013-05-07 18:50:30.000000000","message":"Yes, that is the plan. I think a subset of the changes in https://review.openstack.org/#/c/26516/ should suffice.","commit_id":"9223aebd665e5eaeaa4aa84486346cbf6c1723d8"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"unresolved":false,"context_lines":[{"line_number":181,"context_line":"                                       physical_network\u003dphysical_network),"},{"line_number":182,"context_line":"                         topic\u003dself.topic_port_update)"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"    # TODO(rkukura): Extend via MechanismDriver"},{"line_number":185,"context_line":"    # def tunnel_update(self, context, tunnel_ip, tunnel_id):"},{"line_number":186,"context_line":"    #     self.fanout_cast(context,"},{"line_number":187,"context_line":"    #                      self.make_msg(\u0027tunnel_update\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAOn%2F%2Fg8Q%3D","line":184,"updated":"2013-05-07 09:23:41.000000000","message":"why does only tunnel need MechanismDriver? Cannot we treat network, port and tunnel alike?","commit_id":"9223aebd665e5eaeaa4aa84486346cbf6c1723d8"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":181,"context_line":"                                       physical_network\u003dphysical_network),"},{"line_number":182,"context_line":"                         topic\u003dself.topic_port_update)"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"    # TODO(rkukura): Extend via MechanismDriver"},{"line_number":185,"context_line":"    # def tunnel_update(self, context, tunnel_ip, tunnel_id):"},{"line_number":186,"context_line":"    #     self.fanout_cast(context,"},{"line_number":187,"context_line":"    #                      self.make_msg(\u0027tunnel_update\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAOn%2F%2Ff8A%3D","line":184,"in_reply_to":"AAAAOn%2F%2Fg8Q%3D","updated":"2013-05-07 18:50:30.000000000","message":"Network and port are core quantum abstractions, whereas tunnel is an implementation detail of one way of implementing those abstractions.\n\nMy TODO comment is that agent-based networking mechanisms might require extending the L2 RPC interface, and that there should be a way for MechanismDrivers to do this when needed.\n\nExcluding tunnel endpoint support, the L2 RPC interface does seem to be common across all the agents, where a network (network segment in ml2) is described by a (network_type, physical_network, segmentation_id) tuple. For now, I\u0027ve decided to build that into ml2, but I had considered making this extensible or completely under the control of the TypeDrivers. It might make sense to eventually revisit this, but building this in right now seems most straightforward.\n\nThe RPCs for managing tunnel endpoint RPC support is needed for openvswitch plugin parity, and is coming later this week prior to the initial ml2 merge. I\u0027m still not 100% sure whether to build this in, or implement it via a GRE-specific MechanismDriver that extends the L2 RPC interface.","commit_id":"9223aebd665e5eaeaa4aa84486346cbf6c1723d8"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":181,"context_line":"        # TODO(rkukura): Extend via MechanismDriver"},{"line_number":182,"context_line":"        # self.topic_tunnel_update \u003d topics.get_topic_name(topic,"},{"line_number":183,"context_line":"        #                                                  constants.TUNNEL,"},{"line_number":184,"context_line":"        #                                                  topics.UPDATE)"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    def network_delete(self, context, network_id):"},{"line_number":187,"context_line":"        self.fanout_cast(context,"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2Fqi4%3D","line":184,"updated":"2013-05-28 09:12:11.000000000","message":"commented out code should be removed (that\u0027s the openstack policy)","commit_id":"55a39b43c146c785ede98522014e381fd9e7d438"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":181,"context_line":"        # TODO(rkukura): Extend via MechanismDriver"},{"line_number":182,"context_line":"        # self.topic_tunnel_update \u003d topics.get_topic_name(topic,"},{"line_number":183,"context_line":"        #                                                  constants.TUNNEL,"},{"line_number":184,"context_line":"        #                                                  topics.UPDATE)"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    def network_delete(self, context, network_id):"},{"line_number":187,"context_line":"        self.fanout_cast(context,"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2Fovk%3D","line":184,"in_reply_to":"AAAAPH%2F%2Fqi4%3D","updated":"2013-05-28 20:56:06.000000000","message":"Done","commit_id":"55a39b43c146c785ede98522014e381fd9e7d438"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":206,"context_line":"    #                      self.make_msg(\u0027tunnel_update\u0027,"},{"line_number":207,"context_line":"    #                                    tunnel_ip\u003dtunnel_ip,"},{"line_number":208,"context_line":"    #                                    tunnel_id\u003dtunnel_id),"},{"line_number":209,"context_line":"    #                      topic\u003dself.topic_tunnel_update)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2Fqiw%3D","line":209,"updated":"2013-05-28 09:12:11.000000000","message":"same as above","commit_id":"55a39b43c146c785ede98522014e381fd9e7d438"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":206,"context_line":"    #                      self.make_msg(\u0027tunnel_update\u0027,"},{"line_number":207,"context_line":"    #                                    tunnel_ip\u003dtunnel_ip,"},{"line_number":208,"context_line":"    #                                    tunnel_id\u003dtunnel_id),"},{"line_number":209,"context_line":"    #                      topic\u003dself.topic_tunnel_update)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2Fovg%3D","line":209,"in_reply_to":"AAAAPH%2F%2Fqiw%3D","updated":"2013-05-28 20:56:06.000000000","message":"Done","commit_id":"55a39b43c146c785ede98522014e381fd9e7d438"}],"quantum/tests/unit/ml2/test_agent_scheduler.py":[{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"unresolved":false,"context_lines":[{"line_number":17,"context_line":"from quantum.tests.unit.openvswitch import test_agent_scheduler"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"class LbAgentSchedulerTestCase("},{"line_number":21,"context_line":"    test_agent_scheduler.OvsAgentSchedulerTestCase):"},{"line_number":22,"context_line":"    plugin_str \u003d test_ml2_plugin.PLUGIN_NAME"},{"line_number":23,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAPH%2F%2Fydw%3D","line":20,"updated":"2013-05-22 23:57:57.000000000","message":"What\u0027s Lb ?","commit_id":"1d541c6b41b9b558889412058498ada6ac7f3867"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":17,"context_line":"from quantum.tests.unit.openvswitch import test_agent_scheduler"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"class LbAgentSchedulerTestCase("},{"line_number":21,"context_line":"    test_agent_scheduler.OvsAgentSchedulerTestCase):"},{"line_number":22,"context_line":"    plugin_str \u003d test_ml2_plugin.PLUGIN_NAME"},{"line_number":23,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAPH%2F%2FwiI%3D","line":20,"in_reply_to":"AAAAPH%2F%2Fydw%3D","updated":"2013-05-27 20:34:20.000000000","message":"Copy-and-paste from linuxbridge unit test. Changed to Ml2.","commit_id":"1d541c6b41b9b558889412058498ada6ac7f3867"}],"quantum/tests/unit/ml2/test_rpcapi.py":[{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"420cac31c17d3dfac7e6ad0aa225ddda97bdcf5b","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        self.assertEqual(retval, expected_retval)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        expected_args \u003d [ctxt, topic, expected_msg]"},{"line_number":50,"context_line":"        for arg, expected_arg in zip(rpc_method_mock.call_args[0],"},{"line_number":51,"context_line":"                                     expected_args):"},{"line_number":52,"context_line":"            self.assertEqual(arg, expected_arg)"},{"line_number":53,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAOn%2F%2FtYU%3D","line":50,"updated":"2013-04-26 18:03:06.000000000","message":"Check for missing/extraneous args?","commit_id":"3a544a8a83761b2ed67d23911eee43e000c30071"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":72,"context_line":"                           segmentation_id\u003d\u0027fake_segmentation_id\u0027,"},{"line_number":73,"context_line":"                           physical_network\u003d\u0027fake_physical_network\u0027)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    # def test_tunnel_update(self):"},{"line_number":76,"context_line":"    #     rpcapi \u003d plugin_rpc.AgentNotifierApi(topics.AGENT)"},{"line_number":77,"context_line":"    #     self._test_rpc_api(rpcapi,"},{"line_number":78,"context_line":"    #                        topics.get_topic_name(topics.AGENT,"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOn%2F%2Fsdc%3D","line":75,"updated":"2013-04-27 17:33:18.000000000","message":"is this intentional?","commit_id":"9ea0009b0883102e45d6bad7dc608b781937769d"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":72,"context_line":"                           segmentation_id\u003d\u0027fake_segmentation_id\u0027,"},{"line_number":73,"context_line":"                           physical_network\u003d\u0027fake_physical_network\u0027)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    # def test_tunnel_update(self):"},{"line_number":76,"context_line":"    #     rpcapi \u003d plugin_rpc.AgentNotifierApi(topics.AGENT)"},{"line_number":77,"context_line":"    #     self._test_rpc_api(rpcapi,"},{"line_number":78,"context_line":"    #                        topics.get_topic_name(topics.AGENT,"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOn%2F%2FiQ4%3D","line":75,"in_reply_to":"AAAAOn%2F%2Fsdc%3D","updated":"2013-05-06 20:59:07.000000000","message":"Yes, for now. It will be enabled when the GRE tunnel support is implemented.","commit_id":"9ea0009b0883102e45d6bad7dc608b781937769d"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":95,"context_line":"                           device\u003d\u0027fake_device\u0027,"},{"line_number":96,"context_line":"                           agent_id\u003d\u0027fake_agent_id\u0027)"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    # def test_tunnel_sync(self):"},{"line_number":99,"context_line":"    #     rpcapi \u003d agent_rpc.PluginApi(topics.PLUGIN)"},{"line_number":100,"context_line":"    #     self._test_rpc_api(rpcapi, topics.PLUGIN,"},{"line_number":101,"context_line":"    #                        \u0027tunnel_sync\u0027, rpc_method\u003d\u0027call\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOn%2F%2FsdY%3D","line":98,"updated":"2013-04-27 17:33:18.000000000","message":"ditto","commit_id":"9ea0009b0883102e45d6bad7dc608b781937769d"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":95,"context_line":"                           device\u003d\u0027fake_device\u0027,"},{"line_number":96,"context_line":"                           agent_id\u003d\u0027fake_agent_id\u0027)"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    # def test_tunnel_sync(self):"},{"line_number":99,"context_line":"    #     rpcapi \u003d agent_rpc.PluginApi(topics.PLUGIN)"},{"line_number":100,"context_line":"    #     self._test_rpc_api(rpcapi, topics.PLUGIN,"},{"line_number":101,"context_line":"    #                        \u0027tunnel_sync\u0027, rpc_method\u003d\u0027call\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOn%2F%2FiQ0%3D","line":98,"in_reply_to":"AAAAOn%2F%2FsdY%3D","updated":"2013-05-06 20:59:07.000000000","message":"ditto","commit_id":"9ea0009b0883102e45d6bad7dc608b781937769d"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":23,"context_line":"from quantum.common import topics"},{"line_number":24,"context_line":"from quantum.openstack.common import context"},{"line_number":25,"context_line":"from quantum.openstack.common import rpc"},{"line_number":26,"context_line":"#from quantum.plugins.openvswitch.common import constants"},{"line_number":27,"context_line":"from quantum.plugins.ml2 import rpc as plugin_rpc"},{"line_number":28,"context_line":"from quantum.tests import base"},{"line_number":29,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2F7qQ%3D","line":26,"updated":"2013-05-19 13:43:32.000000000","message":"do you need this","commit_id":"2de9c5149af68a7babd87cece3da28572ce46dcc"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":23,"context_line":"from quantum.common import topics"},{"line_number":24,"context_line":"from quantum.openstack.common import context"},{"line_number":25,"context_line":"from quantum.openstack.common import rpc"},{"line_number":26,"context_line":"#from quantum.plugins.openvswitch.common import constants"},{"line_number":27,"context_line":"from quantum.plugins.ml2 import rpc as plugin_rpc"},{"line_number":28,"context_line":"from quantum.tests import base"},{"line_number":29,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2F5rQ%3D","line":26,"in_reply_to":"AAAAPH%2F%2F7qQ%3D","updated":"2013-05-20 18:04:58.000000000","message":"Done","commit_id":"2de9c5149af68a7babd87cece3da28572ce46dcc"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"unresolved":false,"context_lines":[{"line_number":27,"context_line":"from quantum.tests import base"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"class rpcApiTestCase(base.BaseTestCase):"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def _test_rpc_api(self, rpcapi, topic, method, rpc_method, **kwargs):"},{"line_number":33,"context_line":"        ctxt \u003d context.RequestContext(\u0027fake_user\u0027, \u0027fake_project\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAPH%2F%2Fydo%3D","line":30,"updated":"2013-05-22 23:57:57.000000000","message":"nit: RpcApiTestCase ?","commit_id":"1d541c6b41b9b558889412058498ada6ac7f3867"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":27,"context_line":"from quantum.tests import base"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"class rpcApiTestCase(base.BaseTestCase):"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def _test_rpc_api(self, rpcapi, topic, method, rpc_method, **kwargs):"},{"line_number":33,"context_line":"        ctxt \u003d context.RequestContext(\u0027fake_user\u0027, \u0027fake_project\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAPH%2F%2FwiA%3D","line":30,"in_reply_to":"AAAAPH%2F%2Fydo%3D","updated":"2013-05-27 20:34:20.000000000","message":"Done","commit_id":"1d541c6b41b9b558889412058498ada6ac7f3867"}],"setup.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":53,"context_line":"meta_plugin_config_path \u003d \u0027etc/quantum/plugins/metaplugin\u0027"},{"line_number":54,"context_line":"nec_plugin_config_path \u003d \u0027etc/quantum/plugins/nec\u0027"},{"line_number":55,"context_line":"hyperv_plugin_config_path \u003d \u0027etc/quantum/plugins/hyperv\u0027"},{"line_number":56,"context_line":"plumgrid_plugin_config_path \u003d \u0027etc/quantum/plugins/plumgrid\u0027"},{"line_number":57,"context_line":"midonet_plugin_config_path \u003d \u0027etc/quantum/plugins/midonet\u0027"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"if sys.platform \u003d\u003d \u0027win32\u0027:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOn%2F%2FsdU%3D","line":56,"updated":"2013-04-27 17:33:18.000000000","message":"what about the ini file for the ml2?","commit_id":"9ea0009b0883102e45d6bad7dc608b781937769d"},{"author":{"_account_id":1689,"name":"Robert Kukura","email":"rk@theep.net","username":"rkukura"},"unresolved":false,"context_lines":[{"line_number":53,"context_line":"meta_plugin_config_path \u003d \u0027etc/quantum/plugins/metaplugin\u0027"},{"line_number":54,"context_line":"nec_plugin_config_path \u003d \u0027etc/quantum/plugins/nec\u0027"},{"line_number":55,"context_line":"hyperv_plugin_config_path \u003d \u0027etc/quantum/plugins/hyperv\u0027"},{"line_number":56,"context_line":"plumgrid_plugin_config_path \u003d \u0027etc/quantum/plugins/plumgrid\u0027"},{"line_number":57,"context_line":"midonet_plugin_config_path \u003d \u0027etc/quantum/plugins/midonet\u0027"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"if sys.platform \u003d\u003d \u0027win32\u0027:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOn%2F%2FiJM%3D","line":56,"in_reply_to":"AAAAOn%2F%2FsdU%3D","updated":"2013-05-06 20:59:07.000000000","message":"Done","commit_id":"9ea0009b0883102e45d6bad7dc608b781937769d"}],"tools/pip-requires":[{"author":{"_account_id":490,"name":"Sumit Naiksatam","email":"sumitnaiksatam@gmail.com","username":"snaiksat"},"unresolved":false,"context_lines":[{"line_number":16,"context_line":"WebOb\u003e\u003d1.2"},{"line_number":17,"context_line":"python-keystoneclient\u003e\u003d0.2.0"},{"line_number":18,"context_line":"alembic\u003e\u003d0.4.1"},{"line_number":19,"context_line":"stevedore\u003e\u003d0.8"},{"line_number":20,"context_line":"# Cisco plugin dependencies"},{"line_number":21,"context_line":"python-novaclient"},{"line_number":22,"context_line":"# End Cisco dependencies"}],"source_content_type":"application/octet-stream","patch_set":1,"id":"AAAAM3%2F%2Bz64%3D","line":19,"updated":"2013-02-18 19:38:16.000000000","message":"Would this be required in the tools/test-requires as well?\nAlso, If this is only for ML2 maybe qualify with a comment?","commit_id":"ddb5aa8b2590ebd8d803a57b9f81ac6cf69a3948"}]}
