)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"9bb36f6f04692253772da551534090a4e4cb96fe","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Gary Kotton \u003cgkotton@redhat.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2012-06-28 10:40:06 -0400"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"blueprint lb-api-v2-support"},{"line_number":8,"context_line":"v2 support for the linux bridge"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"Plugin support for the linuxbrdige using the v2 API"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"AAAAI3%2F%2F6Xg%3D","line":7,"updated":"2012-06-28 15:23:55.000000000","message":"Please follow the gerrit workflow (http://wiki.openstack.org/GerritWorkflow) convention for commit messages.  Specifically, the first line should be a 50 char or less summary.  The blueprint reference should not be the first line.\n\nSuggestion:\n\nAdd v2 api support to the linuxbridge plugin\n\nblueprint lb-api-v2-support\n\n...","commit_id":"9bff75f92ac772f4b0e4cd951fc70b564cf61ccd"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"9bb36f6f04692253772da551534090a4e4cb96fe","unresolved":false,"context_lines":[{"line_number":8,"context_line":"v2 support for the linux bridge"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"Plugin support for the linuxbrdige using the v2 API"},{"line_number":11,"context_line":"1. The core_plugin in quantum.conf my be set to:"},{"line_number":12,"context_line":"quantum.plugins.linuxbridge.LinuxBridgePluginV2.LinuxBridgePluginV2"},{"line_number":13,"context_line":"2. A command line parameter -a indicates that it is v2"},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"AAAAI3%2F%2F6Uk%3D","line":11,"updated":"2012-06-28 15:23:55.000000000","message":"my \u003d\u003e may","commit_id":"9bff75f92ac772f4b0e4cd951fc70b564cf61ccd"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"9bb36f6f04692253772da551534090a4e4cb96fe","unresolved":false,"context_lines":[{"line_number":10,"context_line":"Plugin support for the linuxbrdige using the v2 API"},{"line_number":11,"context_line":"1. The core_plugin in quantum.conf my be set to:"},{"line_number":12,"context_line":"quantum.plugins.linuxbridge.LinuxBridgePluginV2.LinuxBridgePluginV2"},{"line_number":13,"context_line":"2. A command line parameter -a indicates that it is v2"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: I2e196859c13b28e535c6ec394ec3f5bc907bf019"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"AAAAI3%2F%2F6Ug%3D","line":13,"updated":"2012-06-28 15:23:55.000000000","message":"What about future extensibility?  If we have a v3 or v4 api, what will the command line parameter be?  It may be wise to provide a value to -a/--api-version rather than simply storing True or False.","commit_id":"9bff75f92ac772f4b0e4cd951fc70b564cf61ccd"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"5440ea53992bee08136768382f26d175b062d4ec","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Gary Kotton \u003cgkotton@redhat.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2012-07-01 12:25:06 -0400"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"blueprint lb-api-v2-support"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"v2 support for the linux bridge plugin"},{"line_number":10,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"AAAAJ3%2F%2F%2FzU%3D","line":7,"updated":"2012-07-02 02:16:33.000000000","message":"Summary line first and then blueprint.","commit_id":"4961891c29ce2f87a816cb601f3575c0ad347094"}],"quantum/db/db_base_plugin_v2.py":[{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"9bb36f6f04692253772da551534090a4e4cb96fe","unresolved":false,"context_lines":[{"line_number":341,"context_line":"                                    filters\u003dfilters, fields\u003dfields,"},{"line_number":342,"context_line":"                                    verbose\u003dverbose)"},{"line_number":343,"context_line":""},{"line_number":344,"context_line":"    def get_tenant_id_for_create(self, context, resource):"},{"line_number":345,"context_line":"        return self._get_tenant_id_for_create(context, resource)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAI3%2F%2F6XU%3D","line":344,"updated":"2012-06-28 15:23:55.000000000","message":"Consider renaming _get_tenant_id_for_create to get_tenant_id_for_create and removing this method.","commit_id":"9bff75f92ac772f4b0e4cd951fc70b564cf61ccd"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":341,"context_line":"                                    filters\u003dfilters, fields\u003dfields,"},{"line_number":342,"context_line":"                                    verbose\u003dverbose)"},{"line_number":343,"context_line":""},{"line_number":344,"context_line":"    def get_tenant_id_for_create(self, context, resource):"},{"line_number":345,"context_line":"        return self._get_tenant_id_for_create(context, resource)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAI3%2F%2F6R0%3D","line":344,"in_reply_to":"AAAAI3%2F%2F6XU%3D","updated":"2012-06-28 15:56:50.000000000","message":"Done","commit_id":"9bff75f92ac772f4b0e4cd951fc70b564cf61ccd"}],"quantum/plugins/linuxbridge/LinuxBridgePluginV2.py":[{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"9bb36f6f04692253772da551534090a4e4cb96fe","unresolved":false,"context_lines":[{"line_number":22,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class LinuxBridgePluginV2(db_base_plugin_v2.QuantumDbPluginV2):"},{"line_number":26,"context_line":"    \"\"\""},{"line_number":27,"context_line":"    LinuxBridgePlugin provides support for Quantum abstractions"},{"line_number":28,"context_line":"    using LinuxBridge. A new VLAN is created for each network."}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAI3%2F%2F6Wk%3D","line":25,"updated":"2012-06-28 15:23:55.000000000","message":"Are the V1 and V2 plugins both going to be maintained going forward, or will the V1 client be EOL\u0027d before folsom?","commit_id":"9bff75f92ac772f4b0e4cd951fc70b564cf61ccd"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":22,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class LinuxBridgePluginV2(db_base_plugin_v2.QuantumDbPluginV2):"},{"line_number":26,"context_line":"    \"\"\""},{"line_number":27,"context_line":"    LinuxBridgePlugin provides support for Quantum abstractions"},{"line_number":28,"context_line":"    using LinuxBridge. A new VLAN is created for each network."}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAI3%2F%2F6Rk%3D","line":25,"in_reply_to":"AAAAI3%2F%2F6Wk%3D","updated":"2012-06-28 15:56:50.000000000","message":"I understand that this will be removed when V2 is fully supported. I think that maybe a mail to the list can clarify this. What do you think?","commit_id":"9bff75f92ac772f4b0e4cd951fc70b564cf61ccd"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"9bb36f6f04692253772da551534090a4e4cb96fe","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def __init__(self):"},{"line_number":34,"context_line":"        cdb.initialize(base\u003dmodels_v2.model_base.BASEV2)"},{"line_number":35,"context_line":"        LOG.debug(\"Linux Bridge Plugin initialization done successfully\")"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def _release_vlan_for_tenant(self, net_id):"},{"line_number":38,"context_line":"        \"\"\"Release the ID\"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAI3%2F%2F6WY%3D","line":35,"updated":"2012-06-28 15:23:55.000000000","message":"done successfully \u003d\u003e complete","commit_id":"9bff75f92ac772f4b0e4cd951fc70b564cf61ccd"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def __init__(self):"},{"line_number":34,"context_line":"        cdb.initialize(base\u003dmodels_v2.model_base.BASEV2)"},{"line_number":35,"context_line":"        LOG.debug(\"Linux Bridge Plugin initialization done successfully\")"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def _release_vlan_for_tenant(self, net_id):"},{"line_number":38,"context_line":"        \"\"\"Release the ID\"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAI3%2F%2F6Rg%3D","line":35,"in_reply_to":"AAAAI3%2F%2F6WY%3D","updated":"2012-06-28 15:56:50.000000000","message":"Done","commit_id":"9bff75f92ac772f4b0e4cd951fc70b564cf61ccd"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"9bb36f6f04692253772da551534090a4e4cb96fe","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        LOG.debug(\"Linux Bridge Plugin initialization done successfully\")"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def _release_vlan_for_tenant(self, net_id):"},{"line_number":38,"context_line":"        \"\"\"Release the ID\"\"\""},{"line_number":39,"context_line":"        vlan_binding \u003d cdb.get_vlan_binding(net_id)"},{"line_number":40,"context_line":"        return cdb.release_vlanid(vlan_binding[const.VLANID])"},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAI3%2F%2F6WM%3D","line":38,"updated":"2012-06-28 15:23:55.000000000","message":"This docstring doesn\u0027t provide any information over and above the method signature, so consider removing it.","commit_id":"9bff75f92ac772f4b0e4cd951fc70b564cf61ccd"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":35,"context_line":"        LOG.debug(\"Linux Bridge Plugin initialization done successfully\")"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def _release_vlan_for_tenant(self, net_id):"},{"line_number":38,"context_line":"        \"\"\"Release the ID\"\"\""},{"line_number":39,"context_line":"        vlan_binding \u003d cdb.get_vlan_binding(net_id)"},{"line_number":40,"context_line":"        return cdb.release_vlanid(vlan_binding[const.VLANID])"},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAI3%2F%2F6RQ%3D","line":38,"in_reply_to":"AAAAI3%2F%2F6WM%3D","updated":"2012-06-28 15:56:50.000000000","message":"Done","commit_id":"9bff75f92ac772f4b0e4cd951fc70b564cf61ccd"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"9bb36f6f04692253772da551534090a4e4cb96fe","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        cdb.add_vlan_binding(vlan_id, new_network[\u0027id\u0027])"},{"line_number":49,"context_line":"        return new_network"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def update_network(self, context, id, network):"},{"line_number":52,"context_line":"        return super(LinuxBridgePluginV2, self).update_network(context, id,"},{"line_number":53,"context_line":"                                                               network)"},{"line_number":54,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAI3%2F%2F6WA%3D","line":51,"updated":"2012-06-28 15:23:55.000000000","message":"This method definition is unnecessary.  The class already exposes the update_method() from the parent class.  Please remove.","commit_id":"9bff75f92ac772f4b0e4cd951fc70b564cf61ccd"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":48,"context_line":"        cdb.add_vlan_binding(vlan_id, new_network[\u0027id\u0027])"},{"line_number":49,"context_line":"        return new_network"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def update_network(self, context, id, network):"},{"line_number":52,"context_line":"        return super(LinuxBridgePluginV2, self).update_network(context, id,"},{"line_number":53,"context_line":"                                                               network)"},{"line_number":54,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAI3%2F%2F6Qc%3D","line":51,"in_reply_to":"AAAAI3%2F%2F6WA%3D","updated":"2012-06-28 15:56:50.000000000","message":"Done","commit_id":"9bff75f92ac772f4b0e4cd951fc70b564cf61ccd"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"9bb36f6f04692253772da551534090a4e4cb96fe","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        cdb.remove_vlan_binding(id)"},{"line_number":58,"context_line":"        return super(LinuxBridgePluginV2, self).delete_network(context, id)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def get_network(self, context, id, fields\u003dNone, verbose\u003dNone):"},{"line_number":61,"context_line":"        return super(LinuxBridgePluginV2, self).get_network(context, id,"},{"line_number":62,"context_line":"                                                            fields, verbose)"},{"line_number":63,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAI3%2F%2F6V4%3D","line":60,"updated":"2012-06-28 15:23:55.000000000","message":"Unnecessary - please remove.  The same is true for all subsequent methods in this class.","commit_id":"9bff75f92ac772f4b0e4cd951fc70b564cf61ccd"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":57,"context_line":"        cdb.remove_vlan_binding(id)"},{"line_number":58,"context_line":"        return super(LinuxBridgePluginV2, self).delete_network(context, id)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def get_network(self, context, id, fields\u003dNone, verbose\u003dNone):"},{"line_number":61,"context_line":"        return super(LinuxBridgePluginV2, self).get_network(context, id,"},{"line_number":62,"context_line":"                                                            fields, verbose)"},{"line_number":63,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAI3%2F%2F6QY%3D","line":60,"in_reply_to":"AAAAI3%2F%2F6V4%3D","updated":"2012-06-28 15:56:50.000000000","message":"Done","commit_id":"9bff75f92ac772f4b0e4cd951fc70b564cf61ccd"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"9bb36f6f04692253772da551534090a4e4cb96fe","unresolved":false,"context_lines":[{"line_number":22,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class LinuxBridgePluginV2(db_base_plugin_v2.QuantumDbPluginV2):"},{"line_number":26,"context_line":"    \"\"\""},{"line_number":27,"context_line":"    LinuxBridgePlugin provides support for Quantum abstractions"},{"line_number":28,"context_line":"    using LinuxBridge. A new VLAN is created for each network."}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAI3%2F%2F6LE%3D","line":25,"updated":"2012-06-28 16:18:33.000000000","message":"Asking for clarification on the mailing list as to whether V1 and V2 have to be supported concurrently would be a good idea.  I\u0027ve seen Nova support both v1 and v2, but I\u0027m not sure Quantum needs to support backwards compatible until after folsom is released.  Ideally V1 code could simply be removed, but that seems pretty optimistic.","commit_id":"0b78747e8b214d7aae68e983883f12899b94950d"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":22,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class LinuxBridgePluginV2(db_base_plugin_v2.QuantumDbPluginV2):"},{"line_number":26,"context_line":"    \"\"\""},{"line_number":27,"context_line":"    LinuxBridgePlugin provides support for Quantum abstractions"},{"line_number":28,"context_line":"    using LinuxBridge. A new VLAN is created for each network."}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAJn%2F%2F%2FiM%3D","line":25,"in_reply_to":"AAAAI3%2F%2F6LE%3D","updated":"2012-06-29 21:14:29.000000000","message":"Yes, being discussed on list.  I\u0027m in favor of removing v1 during Folsom, but I think we could decide to tolerate a little overlap during the F-2 -\u003e F-3 transition.","commit_id":"0b78747e8b214d7aae68e983883f12899b94950d"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":22,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class LinuxBridgePluginV2(db_base_plugin_v2.QuantumDbPluginV2):"},{"line_number":26,"context_line":"    \"\"\""},{"line_number":27,"context_line":"    LinuxBridgePlugin provides support for Quantum abstractions"},{"line_number":28,"context_line":"    using LinuxBridge. A new VLAN is created for each network."}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAJn%2F%2F%2FIM%3D","line":25,"in_reply_to":"AAAAJn%2F%2F%2FiM%3D","updated":"2012-07-01 09:24:37.000000000","message":"I too am in favor of this approach.","commit_id":"0b78747e8b214d7aae68e983883f12899b94950d"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def create_network(self, context, network):"},{"line_number":42,"context_line":"        tenant_id \u003d super(LinuxBridgePluginV2, self).get_tenant_id_for_create("},{"line_number":43,"context_line":"            context, network[\u0027network\u0027])"},{"line_number":44,"context_line":"        new_network \u003d super(LinuxBridgePluginV2, self).create_network(context,"},{"line_number":45,"context_line":"                                                                      network)"},{"line_number":46,"context_line":"        vlan_id \u003d cdb.reserve_vlanid()"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAJn%2F%2F%2FiU%3D","line":43,"updated":"2012-06-29 21:14:29.000000000","message":"Looks like tenant_id is not used here.  Does that mean rename of _get_tenant_id to get_tenant_id is not needed either?","commit_id":"0b78747e8b214d7aae68e983883f12899b94950d"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def create_network(self, context, network):"},{"line_number":42,"context_line":"        tenant_id \u003d super(LinuxBridgePluginV2, self).get_tenant_id_for_create("},{"line_number":43,"context_line":"            context, network[\u0027network\u0027])"},{"line_number":44,"context_line":"        new_network \u003d super(LinuxBridgePluginV2, self).create_network(context,"},{"line_number":45,"context_line":"                                                                      network)"},{"line_number":46,"context_line":"        vlan_id \u003d cdb.reserve_vlanid()"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAJn%2F%2F%2FII%3D","line":43,"in_reply_to":"AAAAJn%2F%2F%2FiU%3D","updated":"2012-07-01 09:24:37.000000000","message":"Done","commit_id":"0b78747e8b214d7aae68e983883f12899b94950d"}],"quantum/plugins/linuxbridge/agent/linuxbridge_quantum_agent.py":[{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"9bb36f6f04692253772da551534090a4e4cb96fe","unresolved":false,"context_lines":[{"line_number":206,"context_line":"                      (bridge_name, interface))"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"        utils.execute([\u0027brctl\u0027, \u0027addif\u0027, bridge_name, interface],"},{"line_number":209,"context_line":"                      root_helper\u003dself.root_helper, check_exit_code\u003dFalse)"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"    def add_tap_interface(self, network_id, vlan_id, tap_device_name):"},{"line_number":212,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAI3%2F%2F6Vc%3D","line":209,"updated":"2012-06-28 15:23:55.000000000","message":"If for some reason brctl is not present or not executable, ignoring the exit code will cause silent failure (though execute will of course debug log the result).  Why is ignoring failure  desirable?","commit_id":"9bff75f92ac772f4b0e4cd951fc70b564cf61ccd"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":206,"context_line":"                      (bridge_name, interface))"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"        utils.execute([\u0027brctl\u0027, \u0027addif\u0027, bridge_name, interface],"},{"line_number":209,"context_line":"                      root_helper\u003dself.root_helper, check_exit_code\u003dFalse)"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"    def add_tap_interface(self, network_id, vlan_id, tap_device_name):"},{"line_number":212,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAI3%2F%2F6Po%3D","line":209,"in_reply_to":"AAAAI3%2F%2F6Vc%3D","updated":"2012-06-28 15:56:50.000000000","message":"Whilst testing I got:- \nDEBUG:__main__:Adding device tap36cef818-a2 to bridge brq87b7eef5-89\nTraceback (most recent call last):\n  File \"/opt/stack/quantum/quantum/plugins/linuxbridge/agent/linuxbridge_quantum_agent.py\", line 524, in \u003cmodule\u003e\n    main()\n  File \"/opt/stack/quantum/quantum/plugins/linuxbridge/agent/linuxbridge_quantum_agent.py\", line 519, in main\n    plugin.daemon_loop(db_connection_url)\n  File \"/opt/stack/quantum/quantum/plugins/linuxbridge/agent/linuxbridge_quantum_agent.py\", line 477, in daemon_loop\n    old_port_bindings)\n  File \"/opt/stack/quantum/quantum/plugins/linuxbridge/agent/linuxbridge_quantum_agent.py\", line 438, in manage_networks_on_host\n    vlan_id):\n  File \"/opt/stack/quantum/quantum/plugins/linuxbridge/agent/linuxbridge_quantum_agent.py\", line 322, in process_port_binding\n    return self.linux_br.add_interface(network_id, vlan_id, interface_id)\n  File \"/opt/stack/quantum/quantum/plugins/linuxbridge/agent/linuxbridge_quantum_agent.py\", line 254, in add_interface\n    return self.add_tap_interface(network_id, vlan_id, tap_device_name)\n  File \"/opt/stack/quantum/quantum/plugins/linuxbridge/agent/linuxbridge_quantum_agent.py\", line 235, in add_tap_interface\n    self.ensure_vlan_bridge(network_id, vlan_id)\n  File \"/opt/stack/quantum/quantum/plugins/linuxbridge/agent/linuxbridge_quantum_agent.py\", line 166, in ensure_vlan_bridge\n    self.ensure_bridge(bridge_name, interface)\n  File \"/opt/stack/quantum/quantum/plugins/linuxbridge/agent/linuxbridge_quantum_agent.py\", line 209, in ensure_bridge\n    root_helper\u003dself.root_helper)\n  File \"/opt/stack/quantum/quantum/agent/linux/utils.py\", line 50, in execute\n    raise RuntimeError(m)\nRuntimeError:\nCommand: [\u0027sudo\u0027, \u0027brctl\u0027, \u0027addif\u0027, \u0027brq87b7eef5-89\u0027, \u0027eth0.2405\u0027]\nExit code: 1\nStdout: \u0027\u0027\nStderr: \"device eth0.2405 is already a member of a bridge; can\u0027t enslave it to bridge brq87b7eef5-89.\\n\"\nopenstack@openstack:~/devstack$ vi /opt/stack/quantum/quantum/agent/linux/utils.py\n\nI did not want to change the flow here. I think that this is a result of recent changes to the linux bridge code. This should be investigated further.","commit_id":"9bff75f92ac772f4b0e4cd951fc70b564cf61ccd"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"9bb36f6f04692253772da551534090a4e4cb96fe","unresolved":false,"context_lines":[{"line_number":305,"context_line":"class LinuxBridgeQuantumAgent:"},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"    def __init__(self, br_name_prefix, physical_interface, polling_interval,"},{"line_number":308,"context_line":"                 reconnect_interval, root_helper, v2):"},{"line_number":309,"context_line":"        self.polling_interval \u003d polling_interval"},{"line_number":310,"context_line":"        self.reconnect_interval \u003d reconnect_interval"},{"line_number":311,"context_line":"        self.root_helper \u003d root_helper"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAI3%2F%2F6VQ%3D","line":308,"updated":"2012-06-28 15:23:55.000000000","message":"Consider using a more descriptive variable name for the v2 boolean flag, e.g. target_v2_api.","commit_id":"9bff75f92ac772f4b0e4cd951fc70b564cf61ccd"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":305,"context_line":"class LinuxBridgeQuantumAgent:"},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"    def __init__(self, br_name_prefix, physical_interface, polling_interval,"},{"line_number":308,"context_line":"                 reconnect_interval, root_helper, v2):"},{"line_number":309,"context_line":"        self.polling_interval \u003d polling_interval"},{"line_number":310,"context_line":"        self.reconnect_interval \u003d reconnect_interval"},{"line_number":311,"context_line":"        self.root_helper \u003d root_helper"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAI3%2F%2F6Pc%3D","line":308,"in_reply_to":"AAAAI3%2F%2F6VQ%3D","updated":"2012-06-28 15:56:50.000000000","message":"Done","commit_id":"9bff75f92ac772f4b0e4cd951fc70b564cf61ccd"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"9bb36f6f04692253772da551534090a4e4cb96fe","unresolved":false,"context_lines":[{"line_number":205,"context_line":"            LOG.debug(\"Done starting bridge %s for subinterface %s\" %"},{"line_number":206,"context_line":"                      (bridge_name, interface))"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"        # TODO(garyk) check why we need the exit\u003dFalse"},{"line_number":209,"context_line":"        utils.execute([\u0027brctl\u0027, \u0027addif\u0027, bridge_name, interface],"},{"line_number":210,"context_line":"                      root_helper\u003dself.root_helper, check_exit_code\u003dFalse)"},{"line_number":211,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAI3%2F%2F6LQ%3D","line":208,"updated":"2012-06-28 16:18:33.000000000","message":"Based on the error message in your comment, it might be desirable to review the error codes that brctl will return to see if some indicate warnings rather than errors and can be safely ignored.  Checking stderr for known-safe error messages (e.g. \u0027is already a member\u0027) would also be a reasonable approach.","commit_id":"0b78747e8b214d7aae68e983883f12899b94950d"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":205,"context_line":"            LOG.debug(\"Done starting bridge %s for subinterface %s\" %"},{"line_number":206,"context_line":"                      (bridge_name, interface))"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"        # TODO(garyk) check why we need the exit\u003dFalse"},{"line_number":209,"context_line":"        utils.execute([\u0027brctl\u0027, \u0027addif\u0027, bridge_name, interface],"},{"line_number":210,"context_line":"                      root_helper\u003dself.root_helper, check_exit_code\u003dFalse)"},{"line_number":211,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAJn%2F%2F%2FIE%3D","line":208,"in_reply_to":"AAAAI3%2F%2F6LQ%3D","updated":"2012-07-01 09:24:37.000000000","message":"I have addressed this in https://review.openstack.org/#/c/9203/. When it is through I\u0027ll merge the code.","commit_id":"0b78747e8b214d7aae68e983883f12899b94950d"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":407,"context_line":"                         \u0027admin_state_up\u0027: bind.admin_state_up,"},{"line_number":408,"context_line":"                         \u0027status\u0027: bind.status,"},{"line_number":409,"context_line":"                         \u0027id\u0027: bind.id}"},{"line_number":410,"context_line":"                append_entry \u003d bind.status \u003d\u003d \u0027ACTIVE\u0027"},{"line_number":411,"context_line":"            else:"},{"line_number":412,"context_line":"                all_bindings[bind.uuid] \u003d bind"},{"line_number":413,"context_line":"                entry \u003d {\u0027network_id\u0027: bind.network_id, \u0027state\u0027: bind.state,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAJn%2F%2F%2FiA%3D","line":410,"updated":"2012-06-29 21:14:29.000000000","message":"v2 status is not equivalent to v1 state.  \n\nv2 status is equivalent to v1 op_status\nv2 admin_state_up is equivalent to v1 state (with the type change from string to boolean).","commit_id":"0b78747e8b214d7aae68e983883f12899b94950d"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":407,"context_line":"                         \u0027admin_state_up\u0027: bind.admin_state_up,"},{"line_number":408,"context_line":"                         \u0027status\u0027: bind.status,"},{"line_number":409,"context_line":"                         \u0027id\u0027: bind.id}"},{"line_number":410,"context_line":"                append_entry \u003d bind.status \u003d\u003d \u0027ACTIVE\u0027"},{"line_number":411,"context_line":"            else:"},{"line_number":412,"context_line":"                all_bindings[bind.uuid] \u003d bind"},{"line_number":413,"context_line":"                entry \u003d {\u0027network_id\u0027: bind.network_id, \u0027state\u0027: bind.state,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAJn%2F%2F%2FIA%3D","line":410,"in_reply_to":"AAAAJn%2F%2F%2FiA%3D","updated":"2012-07-01 09:24:37.000000000","message":"Done","commit_id":"0b78747e8b214d7aae68e983883f12899b94950d"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":424,"context_line":"            interface_id \u003d None"},{"line_number":425,"context_line":"            port_id \u003d \"\""},{"line_number":426,"context_line":"            if self.target_v2_api:"},{"line_number":427,"context_line":"                if pb[\u0027status\u0027] \u003d\u003d \u0027ACTIVE\u0027:"},{"line_number":428,"context_line":"                    interface_id \u003d pb[\u0027id\u0027]"},{"line_number":429,"context_line":"                    port_id \u003d pb[\u0027id\u0027]"},{"line_number":430,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAJn%2F%2F%2Fh8%3D","line":427,"updated":"2012-06-29 21:14:29.000000000","message":"not sure, but I suspect there\u0027s some state vs. status confusion here.","commit_id":"0b78747e8b214d7aae68e983883f12899b94950d"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":424,"context_line":"            interface_id \u003d None"},{"line_number":425,"context_line":"            port_id \u003d \"\""},{"line_number":426,"context_line":"            if self.target_v2_api:"},{"line_number":427,"context_line":"                if pb[\u0027status\u0027] \u003d\u003d \u0027ACTIVE\u0027:"},{"line_number":428,"context_line":"                    interface_id \u003d pb[\u0027id\u0027]"},{"line_number":429,"context_line":"                    port_id \u003d pb[\u0027id\u0027]"},{"line_number":430,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAJn%2F%2F%2FH4%3D","line":427,"in_reply_to":"AAAAJn%2F%2F%2Fh8%3D","updated":"2012-07-01 09:24:37.000000000","message":":) \nFollowing your explanation above this has been addressed","commit_id":"0b78747e8b214d7aae68e983883f12899b94950d"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":437,"context_line":"                                             pb[\u0027network_id\u0027],"},{"line_number":438,"context_line":"                                             interface_id,"},{"line_number":439,"context_line":"                                             vlan_id):"},{"line_number":440,"context_line":"                    all_bindings[port_id].op_status \u003d OP_STATUS_UP"},{"line_number":441,"context_line":"                plugged_interfaces.append(interface_id)"},{"line_number":442,"context_line":""},{"line_number":443,"context_line":"        if old_port_bindings !\u003d port_bindings:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAJn%2F%2F%2Fh4%3D","line":440,"updated":"2012-06-29 21:14:29.000000000","message":"op_status is specific to v1","commit_id":"0b78747e8b214d7aae68e983883f12899b94950d"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":437,"context_line":"                                             pb[\u0027network_id\u0027],"},{"line_number":438,"context_line":"                                             interface_id,"},{"line_number":439,"context_line":"                                             vlan_id):"},{"line_number":440,"context_line":"                    all_bindings[port_id].op_status \u003d OP_STATUS_UP"},{"line_number":441,"context_line":"                plugged_interfaces.append(interface_id)"},{"line_number":442,"context_line":""},{"line_number":443,"context_line":"        if old_port_bindings !\u003d port_bindings:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAJn%2F%2F%2FH8%3D","line":440,"in_reply_to":"AAAAJn%2F%2F%2Fh4%3D","updated":"2012-07-01 09:24:37.000000000","message":"Done","commit_id":"0b78747e8b214d7aae68e983883f12899b94950d"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"5440ea53992bee08136768382f26d175b062d4ec","unresolved":false,"context_lines":[{"line_number":485,"context_line":"                      help\u003d\"turn on verbose logging\")"},{"line_number":486,"context_line":"    parser.add_option(\"-a\", \"--api-v2\", dest\u003d\"target_v2_api\","},{"line_number":487,"context_line":"                      action\u003d\"store_true\", default\u003dFalse,"},{"line_number":488,"context_line":"                      help\u003d\"support v2\")"},{"line_number":489,"context_line":""},{"line_number":490,"context_line":"    options, args \u003d parser.parse_args()"},{"line_number":491,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAJ3%2F%2F%2Fzo%3D","line":488,"updated":"2012-07-02 02:14:54.000000000","message":"I prefer this option resides in plugin  config file.","commit_id":"4961891c29ce2f87a816cb601f3575c0ad347094"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":205,"context_line":"            LOG.debug(\"Done starting bridge %s for subinterface %s\" %"},{"line_number":206,"context_line":"                      (bridge_name, interface))"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"        # TODO(garyk) check why we need the exit\u003dFalse"},{"line_number":209,"context_line":"        utils.execute([\u0027brctl\u0027, \u0027addif\u0027, bridge_name, interface],"},{"line_number":210,"context_line":"                      root_helper\u003dself.root_helper, check_exit_code\u003dFalse)"},{"line_number":211,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAJ3%2F%2F%2B8o%3D","line":208,"updated":"2012-07-02 23:06:54.000000000","message":"This is interesting - because it means that in some cases brctl addif fails - probably because the specified interface does not exist.\nCannot tell however whether this is desired behaviour, problem of a specific environment, or bug in the code.","commit_id":"3448f4a01a6859555606e65047850712ca03c155"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"unresolved":false,"context_lines":[{"line_number":205,"context_line":"            LOG.debug(\"Done starting bridge %s for subinterface %s\" %"},{"line_number":206,"context_line":"                      (bridge_name, interface))"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"        # TODO(garyk) check why we need the exit\u003dFalse"},{"line_number":209,"context_line":"        utils.execute([\u0027brctl\u0027, \u0027addif\u0027, bridge_name, interface],"},{"line_number":210,"context_line":"                      root_helper\u003dself.root_helper, check_exit_code\u003dFalse)"},{"line_number":211,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAJ3%2F%2F%2B6A%3D","line":208,"in_reply_to":"AAAAJ3%2F%2F%2B8o%3D","updated":"2012-07-02 23:44:29.000000000","message":"I think we have fix it in https://review.openstack.org/#/c/9203/8. So we need a rebase.","commit_id":"3448f4a01a6859555606e65047850712ca03c155"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":405,"context_line":"                all_bindings[bind.id] \u003d bind"},{"line_number":406,"context_line":"                entry \u003d {\u0027network_id\u0027: bind.network_id,"},{"line_number":407,"context_line":"                         \u0027uuid\u0027: bind.id,"},{"line_number":408,"context_line":"                         \u0027status\u0027: bind.status,"},{"line_number":409,"context_line":"                         \u0027interface_id\u0027: bind.id}"},{"line_number":410,"context_line":"                append_entry \u003d bind.admin_state_up"},{"line_number":411,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAJ3%2F%2F%2B8E%3D","line":408,"updated":"2012-07-02 23:06:54.000000000","message":"Doesn\u0027t seem we need this attribute in the entry dict","commit_id":"3448f4a01a6859555606e65047850712ca03c155"}],"quantum/plugins/linuxbridge/common/config.py":[{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":37,"context_line":"agent_opts \u003d ["},{"line_number":38,"context_line":"    cfg.IntOpt(\u0027polling_interval\u0027, default\u003d2),"},{"line_number":39,"context_line":"    cfg.StrOpt(\u0027root_helper\u0027, default\u003d\u0027sudo\u0027),"},{"line_number":40,"context_line":"    cfg.BoolOpt(\u0027target_v2_api\u0027, default\u003dFalse),"},{"line_number":41,"context_line":"]"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAJ3%2F%2F%2B9E%3D","line":40,"updated":"2012-07-02 23:06:54.000000000","message":"the default value is \u0027True\u0027 for the OVS plugin, but it\u0027s definitely not a blocker.","commit_id":"3448f4a01a6859555606e65047850712ca03c155"}],"quantum/plugins/linuxbridge/db/l2network_db.py":[{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":34,"context_line":"CONF \u003d config.parse(CONF_FILE)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"# The global variable for the database version model"},{"line_number":37,"context_line":"L2_MODEL \u003d l2network_models"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"def initialize(base\u003dNone):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAJn%2F%2F%2Fhg%3D","line":37,"updated":"2012-06-29 21:14:29.000000000","message":"is there a reason to make this global vs. making it a member?","commit_id":"0b78747e8b214d7aae68e983883f12899b94950d"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":34,"context_line":"CONF \u003d config.parse(CONF_FILE)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"# The global variable for the database version model"},{"line_number":37,"context_line":"L2_MODEL \u003d l2network_models"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"def initialize(base\u003dNone):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAJn%2F%2F%2FHw%3D","line":37,"in_reply_to":"AAAAJn%2F%2F%2Fhg%3D","updated":"2012-07-01 09:24:37.000000000","message":"I did not want to change all of the v1 instances. If I Understand correctly this will be dropped soon.\nI would prefer that the V2 support be done in two stages. The first is to have ti working in parallel with v1. The second stage is the cleanup. If this is acceptable then I would like to address this in the cleanup - that is remove the global variable and pass as a parameter.","commit_id":"0b78747e8b214d7aae68e983883f12899b94950d"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":41,"context_line":"    global L2_MODEL"},{"line_number":42,"context_line":"    options \u003d {\"sql_connection\": \"%s\" % CONF.DATABASE.sql_connection}"},{"line_number":43,"context_line":"    options.update({\"reconnect_interval\": CONF.DATABASE.reconnect_interval})"},{"line_number":44,"context_line":"    if base:"},{"line_number":45,"context_line":"        options.update({\"base\": base})"},{"line_number":46,"context_line":"        L2_MODEL \u003d l2network_models_v2"},{"line_number":47,"context_line":"    db.configure_db(options)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAJn%2F%2F%2Fhw%3D","line":44,"updated":"2012-06-29 21:14:29.000000000","message":"It would seem cleaner to actually have both v1 and v2 of the agent pass in a value for base, and set the model based on which base class is passed in.","commit_id":"0b78747e8b214d7aae68e983883f12899b94950d"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":41,"context_line":"    global L2_MODEL"},{"line_number":42,"context_line":"    options \u003d {\"sql_connection\": \"%s\" % CONF.DATABASE.sql_connection}"},{"line_number":43,"context_line":"    options.update({\"reconnect_interval\": CONF.DATABASE.reconnect_interval})"},{"line_number":44,"context_line":"    if base:"},{"line_number":45,"context_line":"        options.update({\"base\": base})"},{"line_number":46,"context_line":"        L2_MODEL \u003d l2network_models_v2"},{"line_number":47,"context_line":"    db.configure_db(options)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAJn%2F%2F%2FHs%3D","line":44,"in_reply_to":"AAAAJn%2F%2F%2Fhw%3D","updated":"2012-07-01 09:24:37.000000000","message":"I agree. Same reasoning as above - would prefer to address this when we do the cleanup of V1.","commit_id":"0b78747e8b214d7aae68e983883f12899b94950d"}],"quantum/plugins/linuxbridge/db/l2network_models_v2.py":[{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":19,"context_line":"from quantum.db import model_base"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"class VlanID(model_base.BASEV2):"},{"line_number":23,"context_line":"    \"\"\"Represents a vlan_id usage\"\"\""},{"line_number":24,"context_line":"    __tablename__ \u003d \u0027vlan_ids\u0027"},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAJn%2F%2F%2Fgo%3D","line":22,"updated":"2012-06-29 21:14:29.000000000","message":"Is there a way we can avoid copying this code?  Can these classes inherit from BASE and BASEV2?  This again comes back to the question of whether we want to simultaneously support v1 and v2.","commit_id":"0b78747e8b214d7aae68e983883f12899b94950d"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":19,"context_line":"from quantum.db import model_base"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"class VlanID(model_base.BASEV2):"},{"line_number":23,"context_line":"    \"\"\"Represents a vlan_id usage\"\"\""},{"line_number":24,"context_line":"    __tablename__ \u003d \u0027vlan_ids\u0027"},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAJn%2F%2F%2FHk%3D","line":22,"in_reply_to":"AAAAJn%2F%2F%2Fgo%3D","updated":"2012-07-01 09:24:37.000000000","message":"I am in favor of dropping V1.","commit_id":"0b78747e8b214d7aae68e983883f12899b94950d"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"47e7a0e146332dcfa2dc9c187c668e3778562fcb","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    \"\"\"Represents a vlan_id usage\"\"\""},{"line_number":24,"context_line":"    __tablename__ \u003d \u0027vlan_ids\u0027"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    vlan_id \u003d sa.Column(sa.Integer, nullable\u003dFalse)"},{"line_number":27,"context_line":"    vlan_used \u003d sa.Column(sa.Boolean, nullable\u003dFalse)"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    def __init__(self, vlan_id):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAJ3%2F%2F%2Ft0%3D","line":26,"updated":"2012-07-02 06:56:06.000000000","message":"Should be set to primary_key\u003dTrue. Though you won\u0027t be able to make this change until my changes go in which adds HasId() and removes id from: (quantum/db/model_base.py)\n\nclass QuantumBaseV2(QuantumBase):\n    id \u003d sa.Column(sa.String(36), primary_key\u003dTrue, default\u003dstr_uuid)","commit_id":"a849de6445846c9b36a0e2e29c59d97160b756a5"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":23,"context_line":"    \"\"\"Represents a vlan_id usage\"\"\""},{"line_number":24,"context_line":"    __tablename__ \u003d \u0027vlan_ids\u0027"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    vlan_id \u003d sa.Column(sa.Integer, nullable\u003dFalse)"},{"line_number":27,"context_line":"    vlan_used \u003d sa.Column(sa.Boolean, nullable\u003dFalse)"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    def __init__(self, vlan_id):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAJ3%2F%2F%2FEQ%3D","line":26,"in_reply_to":"AAAAJ3%2F%2F%2Ft0%3D","updated":"2012-07-02 21:34:42.000000000","message":"Done","commit_id":"a849de6445846c9b36a0e2e29c59d97160b756a5"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"47e7a0e146332dcfa2dc9c187c668e3778562fcb","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    \"\"\"Represents a binding of vlan_id to network_id\"\"\""},{"line_number":39,"context_line":"    __tablename__ \u003d \u0027vlan_bindings\u0027"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    network_id \u003d sa.Column(sa.String(36), sa.ForeignKey(\u0027networks.id\u0027))"},{"line_number":42,"context_line":"    vlan_id \u003d sa.Column(sa.Integer, nullable\u003dFalse)"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def __init__(self, vlan_id, network_id):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAJ3%2F%2F%2Ft4%3D","line":41,"updated":"2012-07-02 06:56:06.000000000","message":"primary_key\u003dTrue","commit_id":"a849de6445846c9b36a0e2e29c59d97160b756a5"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":38,"context_line":"    \"\"\"Represents a binding of vlan_id to network_id\"\"\""},{"line_number":39,"context_line":"    __tablename__ \u003d \u0027vlan_bindings\u0027"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    network_id \u003d sa.Column(sa.String(36), sa.ForeignKey(\u0027networks.id\u0027))"},{"line_number":42,"context_line":"    vlan_id \u003d sa.Column(sa.Integer, nullable\u003dFalse)"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def __init__(self, vlan_id, network_id):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAJ3%2F%2F%2FEM%3D","line":41,"in_reply_to":"AAAAJ3%2F%2F%2Ft4%3D","updated":"2012-07-02 21:34:42.000000000","message":"Done","commit_id":"a849de6445846c9b36a0e2e29c59d97160b756a5"}],"quantum/plugins/linuxbridge/db/l2network_modelsv2.py":[{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"9bb36f6f04692253772da551534090a4e4cb96fe","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2012 OpenStack, LLC."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":4,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAI3%2F%2F6Us%3D","line":1,"updated":"2012-06-28 15:23:55.000000000","message":"The name of this module would ideally be l2network_models_v2.  Prefer underscore separation for module and variable names where reasonable.","commit_id":"9bff75f92ac772f4b0e4cd951fc70b564cf61ccd"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2012 OpenStack, LLC."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":4,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAI3%2F%2F6OI%3D","line":1,"in_reply_to":"AAAAI3%2F%2F6Us%3D","updated":"2012-06-28 15:56:50.000000000","message":"Done","commit_id":"9bff75f92ac772f4b0e4cd951fc70b564cf61ccd"}]}
