)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"44c00f77dee024267038c93777d2e4a82aef5ea4","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Added flavor:route property for router"},{"line_number":10,"context_line":"Rename flavor:id to flavor:network"},{"line_number":11,"context_line":"Fixes 1038778"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: Ia358b4f03c1b96ade2d1b7323298b117b2cbe52a"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"AAAALH%2F%2FoTU%3D","line":11,"updated":"2012-08-24 16:50:57.000000000","message":"\u003d\u003e Fixes bug 103878\n\nPlease include \u0027bug\u0027 or \u0027lp\u0027 before the bug number to ensure that Gerrit will insert a hyperlink.","commit_id":"b939e7da3d10ca8f7f25cfad5fb0ea531ce97d45"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Added flavor:route property for router"},{"line_number":10,"context_line":"Rename flavor:id to flavor:network"},{"line_number":11,"context_line":"Fixes 1038778"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: Ia358b4f03c1b96ade2d1b7323298b117b2cbe52a"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"AAAALH%2F%2Fk44%3D","line":11,"in_reply_to":"AAAALH%2F%2FoTU%3D","updated":"2012-08-29 23:23:55.000000000","message":"Done","commit_id":"b939e7da3d10ca8f7f25cfad5fb0ea531ce97d45"}],"quantum/plugins/metaplugin/README":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":1,"context_line":"# -- Background"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"This plugin support multiple plugin at same time. This plugin is for L3 connectivility"},{"line_number":4,"context_line":"between networks which are realized by different plugins.This plugin add new attribute \u0027flavor:network\u0027 and \u0027flavor:router\"."},{"line_number":5,"context_line":"flavor:network correspond to specific l2 plugin ( flavor-plugin mapping could be configureable by plugin_list config."},{"line_number":6,"context_line":"flavor:router correspond to specific l3 plugin ( flavor-plugin mapping could be configureable by l3_plugin_list config. Note that Metaplugin can provide l3 functionaliteis for l2 plugin which didn\u0027t support l3 extension yet."},{"line_number":7,"context_line":"This plugin also support extensions. We can map extension to plugin by using extension_map config."}],"source_content_type":"application/octet-stream","patch_set":7,"id":"AAAALH%2F%2FimY%3D","line":4,"updated":"2012-09-02 11:16:39.000000000","message":"plugins.This \u003d\u003e plugins. This\n\nAlso please change \"This plugin add\" to \"This plugin adds new attributes\"","commit_id":"4dea9df8337be5b88c38a01d1840809eb3cd26ae"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"unresolved":false,"context_lines":[{"line_number":1,"context_line":"# -- Background"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"This plugin support multiple plugin at same time. This plugin is for L3 connectivility"},{"line_number":4,"context_line":"between networks which are realized by different plugins.This plugin add new attribute \u0027flavor:network\u0027 and \u0027flavor:router\"."},{"line_number":5,"context_line":"flavor:network correspond to specific l2 plugin ( flavor-plugin mapping could be configureable by plugin_list config."},{"line_number":6,"context_line":"flavor:router correspond to specific l3 plugin ( flavor-plugin mapping could be configureable by l3_plugin_list config. Note that Metaplugin can provide l3 functionaliteis for l2 plugin which didn\u0027t support l3 extension yet."},{"line_number":7,"context_line":"This plugin also support extensions. We can map extension to plugin by using extension_map config."}],"source_content_type":"application/octet-stream","patch_set":7,"id":"AAAALH%2F%2Fiks%3D","line":4,"in_reply_to":"AAAALH%2F%2FimY%3D","updated":"2012-09-02 15:34:10.000000000","message":"Done","commit_id":"4dea9df8337be5b88c38a01d1840809eb3cd26ae"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":2,"context_line":""},{"line_number":3,"context_line":"This plugin support multiple plugin at same time. This plugin is for L3 connectivility"},{"line_number":4,"context_line":"between networks which are realized by different plugins.This plugin add new attribute \u0027flavor:network\u0027 and \u0027flavor:router\"."},{"line_number":5,"context_line":"flavor:network correspond to specific l2 plugin ( flavor-plugin mapping could be configureable by plugin_list config."},{"line_number":6,"context_line":"flavor:router correspond to specific l3 plugin ( flavor-plugin mapping could be configureable by l3_plugin_list config. Note that Metaplugin can provide l3 functionaliteis for l2 plugin which didn\u0027t support l3 extension yet."},{"line_number":7,"context_line":"This plugin also support extensions. We can map extension to plugin by using extension_map config."},{"line_number":8,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":7,"id":"AAAALH%2F%2FimU%3D","line":5,"updated":"2012-09-02 11:16:39.000000000","message":"correspon \u003d\u003e corresponds","commit_id":"4dea9df8337be5b88c38a01d1840809eb3cd26ae"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"unresolved":false,"context_lines":[{"line_number":2,"context_line":""},{"line_number":3,"context_line":"This plugin support multiple plugin at same time. This plugin is for L3 connectivility"},{"line_number":4,"context_line":"between networks which are realized by different plugins.This plugin add new attribute \u0027flavor:network\u0027 and \u0027flavor:router\"."},{"line_number":5,"context_line":"flavor:network correspond to specific l2 plugin ( flavor-plugin mapping could be configureable by plugin_list config."},{"line_number":6,"context_line":"flavor:router correspond to specific l3 plugin ( flavor-plugin mapping could be configureable by l3_plugin_list config. Note that Metaplugin can provide l3 functionaliteis for l2 plugin which didn\u0027t support l3 extension yet."},{"line_number":7,"context_line":"This plugin also support extensions. We can map extension to plugin by using extension_map config."},{"line_number":8,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":7,"id":"AAAALH%2F%2Fiko%3D","line":5,"in_reply_to":"AAAALH%2F%2FimU%3D","updated":"2012-09-02 15:34:10.000000000","message":"Done","commit_id":"4dea9df8337be5b88c38a01d1840809eb3cd26ae"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":76,"context_line":"meta_flavor_driver_mappings \u003d \"openvswitch:quantum.agent.linux.interface.OVSInterfaceDriver,proxy:quantum.plugins.metaplugin.proxy_quantum_plugin.ProxyPluginV2\""},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"- Limited L3 support"},{"line_number":79,"context_line":"In folsom version, l3 is an extension. There is no way to extend exntension attributes."},{"line_number":80,"context_line":"so you can set flavor:router value but you can\u0027t get flavor:router value in API output."},{"line_number":81,"context_line":"L3 agent didn\u0027t support flavor:router. So this extension value is for whom writes new l3-agent."},{"line_number":82,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":7,"id":"AAAALH%2F%2FimQ%3D","line":79,"updated":"2012-09-02 11:16:39.000000000","message":"exntension - typo","commit_id":"4dea9df8337be5b88c38a01d1840809eb3cd26ae"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":78,"context_line":"- Limited L3 support"},{"line_number":79,"context_line":"In folsom version, l3 is an extension. There is no way to extend exntension attributes."},{"line_number":80,"context_line":"so you can set flavor:router value but you can\u0027t get flavor:router value in API output."},{"line_number":81,"context_line":"L3 agent didn\u0027t support flavor:router. So this extension value is for whom writes new l3-agent."},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"[Proxy]"},{"line_number":84,"context_line":"auth_url \u003d http://10.0.0.1:35357/v2.0"}],"source_content_type":"application/octet-stream","patch_set":7,"id":"AAAALH%2F%2FimM%3D","line":81,"updated":"2012-09-02 11:16:39.000000000","message":"didn\u0027t \u003d\u003e doesn\u0027t\n\nI am not really sure that I understand the comment.","commit_id":"4dea9df8337be5b88c38a01d1840809eb3cd26ae"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":1,"context_line":"# -- Background"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"This plugin supports multiple plugin at same time. This plugin is for L3 connectivility"},{"line_number":4,"context_line":"between networks which are realized by different plugins.This plugin adds new attributes \u0027flavor:network\u0027 and \u0027flavor:router\"."},{"line_number":5,"context_line":"flavor:network corresponds to specific l2 plugin ( flavor-plugin mapping could be configureable by plugin_list config."},{"line_number":6,"context_line":"flavor:router corresponds to specific l3 plugin ( flavor-plugin mapping could be configureable by l3_plugin_list config. Note that Metaplugin can provide l3 functionaliteis for l2 plugin which didn\u0027t support l3 extension yet."},{"line_number":7,"context_line":"This plugin also support extensions. We can map extension to plugin by using extension_map config."}],"source_content_type":"application/octet-stream","patch_set":12,"id":"AAAALH%2F%2FiVo%3D","line":4,"updated":"2012-09-03 11:59:04.000000000","message":"Please add a space before the new sentence \"This plugin adds...\".","commit_id":"34d3e21a408c96632ec94742ad0e30796b0b4968"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":3,"context_line":"This plugin supports multiple plugin at same time. This plugin is for L3 connectivility"},{"line_number":4,"context_line":"between networks which are realized by different plugins.This plugin adds new attributes \u0027flavor:network\u0027 and \u0027flavor:router\"."},{"line_number":5,"context_line":"flavor:network corresponds to specific l2 plugin ( flavor-plugin mapping could be configureable by plugin_list config."},{"line_number":6,"context_line":"flavor:router corresponds to specific l3 plugin ( flavor-plugin mapping could be configureable by l3_plugin_list config. Note that Metaplugin can provide l3 functionaliteis for l2 plugin which didn\u0027t support l3 extension yet."},{"line_number":7,"context_line":"This plugin also support extensions. We can map extension to plugin by using extension_map config."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"[DATABASE]"}],"source_content_type":"application/octet-stream","patch_set":12,"id":"AAAALH%2F%2FiVc%3D","line":6,"updated":"2012-09-03 11:59:04.000000000","message":"typo functionalit*ie*s","commit_id":"34d3e21a408c96632ec94742ad0e30796b0b4968"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":4,"context_line":"between networks which are realized by different plugins.This plugin adds new attributes \u0027flavor:network\u0027 and \u0027flavor:router\"."},{"line_number":5,"context_line":"flavor:network corresponds to specific l2 plugin ( flavor-plugin mapping could be configureable by plugin_list config."},{"line_number":6,"context_line":"flavor:router corresponds to specific l3 plugin ( flavor-plugin mapping could be configureable by l3_plugin_list config. Note that Metaplugin can provide l3 functionaliteis for l2 plugin which didn\u0027t support l3 extension yet."},{"line_number":7,"context_line":"This plugin also support extensions. We can map extension to plugin by using extension_map config."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"[DATABASE]"},{"line_number":10,"context_line":"# This line MUST be changed to actually run the plugin."}],"source_content_type":"application/octet-stream","patch_set":12,"id":"AAAALH%2F%2FiVY%3D","line":7,"updated":"2012-09-03 11:59:04.000000000","message":"support -\u003e support*s*","commit_id":"34d3e21a408c96632ec94742ad0e30796b0b4968"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"# -- Agent"},{"line_number":59,"context_line":"Agents for Metaplugin are in quantum/plugins/metaplugin/agent"},{"line_number":60,"context_line":"linuxbridge_quantum_agent and ovs_quantum_agent is available."},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"# -- Extensions"},{"line_number":63,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":12,"id":"AAAALH%2F%2FiVM%3D","line":60,"updated":"2012-09-03 11:59:04.000000000","message":"is -\u003e are","commit_id":"34d3e21a408c96632ec94742ad0e30796b0b4968"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"# -- Extensions"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"- flavor"},{"line_number":65,"context_line":"MetaPlugin supports flavor and provider net extension."},{"line_number":66,"context_line":"Metaplugin select plugin_list using flavor."},{"line_number":67,"context_line":"One plugin may use multiple flavor value. If the plugin support flavor, it may provide"}],"source_content_type":"application/octet-stream","patch_set":12,"id":"AAAALH%2F%2FiUI%3D","line":64,"updated":"2012-09-03 11:59:04.000000000","message":"metaplugin provides native support for flavor and os-quantum-router.\nIMO, this section should describe additional extension support such as providernet.","commit_id":"34d3e21a408c96632ec94742ad0e30796b0b4968"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":75,"context_line":""},{"line_number":76,"context_line":"#- limitations"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"Basically, All plugin should inherit QuantumDBPluginV2."},{"line_number":79,"context_line":"Metaplugin assumes all plugin share same Database expecially for IPAM part in QuantumV2 API."},{"line_number":80,"context_line":"You can use another plugin if you use ProxyPluginV2, which proxies request to the another quantum server."},{"line_number":81,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":12,"id":"AAAALH%2F%2FiUw%3D","line":78,"updated":"2012-09-03 11:59:04.000000000","message":"plugin -\u003e plugins","commit_id":"34d3e21a408c96632ec94742ad0e30796b0b4968"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":76,"context_line":"#- limitations"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"Basically, All plugin should inherit QuantumDBPluginV2."},{"line_number":79,"context_line":"Metaplugin assumes all plugin share same Database expecially for IPAM part in QuantumV2 API."},{"line_number":80,"context_line":"You can use another plugin if you use ProxyPluginV2, which proxies request to the another quantum server."},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"Example flavor configration for ProxyPluginV2"}],"source_content_type":"application/octet-stream","patch_set":12,"id":"AAAALH%2F%2FiUs%3D","line":79,"updated":"2012-09-03 11:59:04.000000000","message":"plugin -\u003e plugins\nexpecially -\u003e especially?\nsame Database -\u003e the same database","commit_id":"34d3e21a408c96632ec94742ad0e30796b0b4968"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":84,"context_line":"meta_flavor_driver_mappings \u003d \"openvswitch:quantum.agent.linux.interface.OVSInterfaceDriver,proxy:quantum.plugins.metaplugin.proxy_quantum_plugin.ProxyPluginV2\""},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"- Limited L3 support"},{"line_number":87,"context_line":"In folsom version, l3 is an extension. There is no way to extend exntension attributes."},{"line_number":88,"context_line":"so you can set flavor:router value but you can\u0027t get flavor:router value in API output."},{"line_number":89,"context_line":"L3 agent dont\u0027s support flavor:router."},{"line_number":90,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":12,"id":"AAAALH%2F%2FiVI%3D","line":87,"updated":"2012-09-03 11:59:04.000000000","message":"folsom version -\u003e folsom release?","commit_id":"34d3e21a408c96632ec94742ad0e30796b0b4968"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":85,"context_line":""},{"line_number":86,"context_line":"- Limited L3 support"},{"line_number":87,"context_line":"In folsom version, l3 is an extension. There is no way to extend exntension attributes."},{"line_number":88,"context_line":"so you can set flavor:router value but you can\u0027t get flavor:router value in API output."},{"line_number":89,"context_line":"L3 agent dont\u0027s support flavor:router."},{"line_number":90,"context_line":""},{"line_number":91,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":12,"id":"AAAALH%2F%2FiU8%3D","line":88,"updated":"2012-09-03 11:59:04.000000000","message":"Change so -\u003e So  or change the end of the previous sentence from \".\" to \",\".","commit_id":"34d3e21a408c96632ec94742ad0e30796b0b4968"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":86,"context_line":"- Limited L3 support"},{"line_number":87,"context_line":"In folsom version, l3 is an extension. There is no way to extend exntension attributes."},{"line_number":88,"context_line":"so you can set flavor:router value but you can\u0027t get flavor:router value in API output."},{"line_number":89,"context_line":"L3 agent dont\u0027s support flavor:router."},{"line_number":90,"context_line":""},{"line_number":91,"context_line":""},{"line_number":92,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":12,"id":"AAAALH%2F%2FiU0%3D","line":89,"updated":"2012-09-03 11:59:04.000000000","message":"dont\u0027s -\u003e does not","commit_id":"34d3e21a408c96632ec94742ad0e30796b0b4968"}],"quantum/plugins/metaplugin/common/config.py":[{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"44c00f77dee024267038c93777d2e4a82aef5ea4","unresolved":false,"context_lines":[{"line_number":25,"context_line":"]"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"meta_plugin_opts \u003d ["},{"line_number":28,"context_line":"    cfg.StrOpt(\u0027plugin_list\u0027, default\u003d\u0027\u0027),"},{"line_number":29,"context_line":"    cfg.StrOpt(\u0027l3_plugin_list\u0027, default\u003d\u0027\u0027),"},{"line_number":30,"context_line":"    cfg.StrOpt(\u0027default_flavor\u0027, default\u003d\u0027\u0027),"},{"line_number":31,"context_line":"    cfg.StrOpt(\u0027default_l3_flavor\u0027, default\u003d\u0027\u0027),"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAALH%2F%2Fk1w%3D","line":28,"updated":"2012-08-30 00:22:28.000000000","message":"(Suggestion only) Consider setting required\u003dTrue for all of plugin_list, l3_plugin_list, default_flavor, and default_l3_flavor.  If no value is provided for any of these, an Invalid exception will raised on plugin init (via the \u0027self.default_plugin in self.plugins\u0027 check), but it won\u0027t be as instructive as an error indicating that a value for a config option was required but not provided.\n\nThis change suggests adding a test ensuring that an appropriate error is received if the plugin is misconfigured.","commit_id":"709c1ba9662ff0bb6fcbf6bb742d5c2cbccbd1fa"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"unresolved":false,"context_lines":[{"line_number":25,"context_line":"]"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"meta_plugin_opts \u003d ["},{"line_number":28,"context_line":"    cfg.StrOpt(\u0027plugin_list\u0027, default\u003d\u0027\u0027),"},{"line_number":29,"context_line":"    cfg.StrOpt(\u0027l3_plugin_list\u0027, default\u003d\u0027\u0027),"},{"line_number":30,"context_line":"    cfg.StrOpt(\u0027default_flavor\u0027, default\u003d\u0027\u0027),"},{"line_number":31,"context_line":"    cfg.StrOpt(\u0027default_l3_flavor\u0027, default\u003d\u0027\u0027),"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAALH%2F%2Fk0w%3D","line":28,"in_reply_to":"AAAALH%2F%2Fk1w%3D","updated":"2012-08-30 02:16:30.000000000","message":"It looks required\u003dTrue didn\u0027t works. All Test start fails. In addition, another code looks didn\u0027t use it. So. I\u0027ll fix this in another patch.","commit_id":"709c1ba9662ff0bb6fcbf6bb742d5c2cbccbd1fa"}],"quantum/plugins/metaplugin/meta_quantum_plugin.py":[{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"44c00f77dee024267038c93777d2e4a82aef5ea4","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from quantum.api.v2 import attributes"},{"line_number":23,"context_line":"from quantum.common.utils import find_config_file"},{"line_number":24,"context_line":"from quantum.db import api as db"},{"line_number":25,"context_line":"from quantum.db import l3_db"},{"line_number":26,"context_line":"from quantum.db import db_base_plugin_v2"},{"line_number":27,"context_line":"from quantum.db import models_v2"},{"line_number":28,"context_line":"from quantum.openstack.common import cfg"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAALH%2F%2FoWs%3D","line":25,"updated":"2012-08-24 16:50:57.000000000","message":"HACKING - import ordering","commit_id":"b939e7da3d10ca8f7f25cfad5fb0ea531ce97d45"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"unresolved":false,"context_lines":[{"line_number":22,"context_line":"from quantum.api.v2 import attributes"},{"line_number":23,"context_line":"from quantum.common.utils import find_config_file"},{"line_number":24,"context_line":"from quantum.db import api as db"},{"line_number":25,"context_line":"from quantum.db import l3_db"},{"line_number":26,"context_line":"from quantum.db import db_base_plugin_v2"},{"line_number":27,"context_line":"from quantum.db import models_v2"},{"line_number":28,"context_line":"from quantum.openstack.common import cfg"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAALH%2F%2Flfs%3D","line":25,"in_reply_to":"AAAALH%2F%2FoWs%3D","updated":"2012-08-29 23:23:55.000000000","message":"Done","commit_id":"b939e7da3d10ca8f7f25cfad5fb0ea531ce97d45"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"44c00f77dee024267038c93777d2e4a82aef5ea4","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        options.update({\"reconnect_interval\": reconnect_interval})"},{"line_number":49,"context_line":"        self.supported_extension_aliases \u003d \\"},{"line_number":50,"context_line":"            cfg.CONF.META.supported_extension_aliases.split(\u0027,\u0027)"},{"line_number":51,"context_line":"        self.supported_extension_aliases +\u003d [\u0027flavor\u0027, \"os-quantum-router\"]"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        # Ignore config option overapping"},{"line_number":54,"context_line":"        def _is_opt_registered(opts, opt):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAALH%2F%2FoWM%3D","line":51,"updated":"2012-08-24 16:50:57.000000000","message":"(Suggestion only) Consider using the same quote char for all strings in a given line (\" \u003d\u003e \u0027)","commit_id":"b939e7da3d10ca8f7f25cfad5fb0ea531ce97d45"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"unresolved":false,"context_lines":[{"line_number":48,"context_line":"        options.update({\"reconnect_interval\": reconnect_interval})"},{"line_number":49,"context_line":"        self.supported_extension_aliases \u003d \\"},{"line_number":50,"context_line":"            cfg.CONF.META.supported_extension_aliases.split(\u0027,\u0027)"},{"line_number":51,"context_line":"        self.supported_extension_aliases +\u003d [\u0027flavor\u0027, \"os-quantum-router\"]"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        # Ignore config option overapping"},{"line_number":54,"context_line":"        def _is_opt_registered(opts, opt):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAALH%2F%2Flfo%3D","line":51,"in_reply_to":"AAAALH%2F%2FoWM%3D","updated":"2012-08-29 23:23:55.000000000","message":"Done","commit_id":"b939e7da3d10ca8f7f25cfad5fb0ea531ce97d45"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"44c00f77dee024267038c93777d2e4a82aef5ea4","unresolved":false,"context_lines":[{"line_number":69,"context_line":"                       in cfg.CONF.META.plugin_list.split(\u0027,\u0027)]"},{"line_number":70,"context_line":"        for flavor, plugin_provider in plugin_list:"},{"line_number":71,"context_line":"            self.plugins[flavor] \u003d self._load_plugin(plugin_provider)"},{"line_number":72,"context_line":"            db._ENGINE \u003d None"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        self.l3_plugins \u003d {}"},{"line_number":75,"context_line":"        l3_plugin_list \u003d [plugin_set.split(\u0027:\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAALH%2F%2FoV0%3D","line":72,"updated":"2012-08-24 16:50:57.000000000","message":"As per the other review (https://review.openstack.org/#/c/11474/), why does the engine have to be set to None?  Something to do with creating tables if they don\u0027t already exist on a per-plugin basis?","commit_id":"b939e7da3d10ca8f7f25cfad5fb0ea531ce97d45"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"unresolved":false,"context_lines":[{"line_number":69,"context_line":"                       in cfg.CONF.META.plugin_list.split(\u0027,\u0027)]"},{"line_number":70,"context_line":"        for flavor, plugin_provider in plugin_list:"},{"line_number":71,"context_line":"            self.plugins[flavor] \u003d self._load_plugin(plugin_provider)"},{"line_number":72,"context_line":"            db._ENGINE \u003d None"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        self.l3_plugins \u003d {}"},{"line_number":75,"context_line":"        l3_plugin_list \u003d [plugin_set.split(\u0027:\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAALH%2F%2Flfc%3D","line":72,"in_reply_to":"AAAALH%2F%2FoV0%3D","updated":"2012-08-29 23:23:55.000000000","message":"This is merged by another commit. The reason is current plugin framework didn\u0027t support metaplugin framework. This is this patchy code needed.","commit_id":"b939e7da3d10ca8f7f25cfad5fb0ea531ce97d45"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"44c00f77dee024267038c93777d2e4a82aef5ea4","unresolved":false,"context_lines":[{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        self.default_l3_flavor \u003d cfg.CONF.META.default_l3_flavor"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        if not self.default_l3_flavor in self.l3_plugins:"},{"line_number":103,"context_line":"            raise exc.Invalid(\u0027default_l3_flavor %s is not plugin list\u0027 %"},{"line_number":104,"context_line":"                              self.default_l3_flavor)"},{"line_number":105,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAALH%2F%2FoVk%3D","line":102,"updated":"2012-08-24 16:50:57.000000000","message":"(Suggestion only) Consider checking whether the default l3 flavor exists sooner, as per the principle of fail-fast.  The ideal place would seem to be right after the plugin list is determined (i.e. after lines 75-77).  The same comment applies to checking whether the default flavor is present.","commit_id":"b939e7da3d10ca8f7f25cfad5fb0ea531ce97d45"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"unresolved":false,"context_lines":[{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        self.default_l3_flavor \u003d cfg.CONF.META.default_l3_flavor"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        if not self.default_l3_flavor in self.l3_plugins:"},{"line_number":103,"context_line":"            raise exc.Invalid(\u0027default_l3_flavor %s is not plugin list\u0027 %"},{"line_number":104,"context_line":"                              self.default_l3_flavor)"},{"line_number":105,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAALH%2F%2FlfQ%3D","line":102,"in_reply_to":"AAAALH%2F%2FoVk%3D","updated":"2012-08-29 23:23:55.000000000","message":"Done","commit_id":"b939e7da3d10ca8f7f25cfad5fb0ea531ce97d45"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"44c00f77dee024267038c93777d2e4a82aef5ea4","unresolved":false,"context_lines":[{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def _get_l3_plugin(self, flavor):"},{"line_number":125,"context_line":"        if not flavor in self.l3_plugins:"},{"line_number":126,"context_line":"            raise Exception(\"Plugin for flavor %s not found.\" % flavor)"},{"line_number":127,"context_line":"        return self.l3_plugins[flavor]"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    def __getattr__(self, key):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAALH%2F%2FoVQ%3D","line":126,"updated":"2012-08-24 16:50:57.000000000","message":"Shouldn\u0027t a specific exception be thrown, something derived from exc.NotFound (e.g. create exc.FlavorNotFound and throw here)?","commit_id":"b939e7da3d10ca8f7f25cfad5fb0ea531ce97d45"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"unresolved":false,"context_lines":[{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def _get_l3_plugin(self, flavor):"},{"line_number":125,"context_line":"        if not flavor in self.l3_plugins:"},{"line_number":126,"context_line":"            raise Exception(\"Plugin for flavor %s not found.\" % flavor)"},{"line_number":127,"context_line":"        return self.l3_plugins[flavor]"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    def __getattr__(self, key):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAALH%2F%2FlfE%3D","line":126,"in_reply_to":"AAAALH%2F%2FoVQ%3D","updated":"2012-08-29 23:23:55.000000000","message":"Done","commit_id":"b939e7da3d10ca8f7f25cfad5fb0ea531ce97d45"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"44c00f77dee024267038c93777d2e4a82aef5ea4","unresolved":false,"context_lines":[{"line_number":189,"context_line":"        if filters:"},{"line_number":190,"context_line":"            for key, value in filters.iteritems():"},{"line_number":191,"context_line":"                if key \u003d\u003d \u0027flavor:network\u0027:"},{"line_number":192,"context_line":"                    column \u003d Flavor.flavor"},{"line_number":193,"context_line":"                else:"},{"line_number":194,"context_line":"                    column \u003d getattr(models_v2.Network, key, None)"},{"line_number":195,"context_line":"                if column:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAALH%2F%2FoVM%3D","line":192,"updated":"2012-08-24 16:50:57.000000000","message":"I\u0027m guessing a change is required here:\n\ncolumn \u003d model.flavor (or NetworkFlavor.flavor)","commit_id":"b939e7da3d10ca8f7f25cfad5fb0ea531ce97d45"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"unresolved":false,"context_lines":[{"line_number":189,"context_line":"        if filters:"},{"line_number":190,"context_line":"            for key, value in filters.iteritems():"},{"line_number":191,"context_line":"                if key \u003d\u003d \u0027flavor:network\u0027:"},{"line_number":192,"context_line":"                    column \u003d Flavor.flavor"},{"line_number":193,"context_line":"                else:"},{"line_number":194,"context_line":"                    column \u003d getattr(models_v2.Network, key, None)"},{"line_number":195,"context_line":"                if column:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAALH%2F%2FlfA%3D","line":192,"in_reply_to":"AAAALH%2F%2FoVM%3D","updated":"2012-08-29 23:23:55.000000000","message":"Done","commit_id":"b939e7da3d10ca8f7f25cfad5fb0ea531ce97d45"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"44c00f77dee024267038c93777d2e4a82aef5ea4","unresolved":false,"context_lines":[{"line_number":258,"context_line":"        except Exception as e:"},{"line_number":259,"context_line":"            LOG.error(\u0027failed to add flavor bindings\u0027)"},{"line_number":260,"context_line":"            plugin.delete_router(context, r_in_db[\u0027id\u0027])"},{"line_number":261,"context_line":"            raise Exception(\u0027Failed to create router\u0027)"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"        LOG.debug(\"Created router: %s\" % r_in_db[\u0027id\u0027])"},{"line_number":264,"context_line":"        self._extend_router_dict(context, r_in_db)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAALH%2F%2FoVI%3D","line":261,"updated":"2012-08-24 16:50:57.000000000","message":"Please raise a more specific exception class.","commit_id":"b939e7da3d10ca8f7f25cfad5fb0ea531ce97d45"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"unresolved":false,"context_lines":[{"line_number":258,"context_line":"        except Exception as e:"},{"line_number":259,"context_line":"            LOG.error(\u0027failed to add flavor bindings\u0027)"},{"line_number":260,"context_line":"            plugin.delete_router(context, r_in_db[\u0027id\u0027])"},{"line_number":261,"context_line":"            raise Exception(\u0027Failed to create router\u0027)"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"        LOG.debug(\"Created router: %s\" % r_in_db[\u0027id\u0027])"},{"line_number":264,"context_line":"        self._extend_router_dict(context, r_in_db)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAALH%2F%2Flek%3D","line":261,"in_reply_to":"AAAALH%2F%2FoVI%3D","updated":"2012-08-29 23:23:55.000000000","message":"Done","commit_id":"b939e7da3d10ca8f7f25cfad5fb0ea531ce97d45"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"44c00f77dee024267038c93777d2e4a82aef5ea4","unresolved":false,"context_lines":[{"line_number":261,"context_line":"            raise Exception(\u0027Failed to create router\u0027)"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"        LOG.debug(\"Created router: %s\" % r_in_db[\u0027id\u0027])"},{"line_number":264,"context_line":"        self._extend_router_dict(context, r_in_db)"},{"line_number":265,"context_line":"        return r_in_db"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"    def update_router(self, context, id, router):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAALH%2F%2FoUs%3D","line":264,"updated":"2012-08-24 16:50:57.000000000","message":"_extend_router_dict() is not defined.","commit_id":"b939e7da3d10ca8f7f25cfad5fb0ea531ce97d45"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"unresolved":false,"context_lines":[{"line_number":261,"context_line":"            raise Exception(\u0027Failed to create router\u0027)"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"        LOG.debug(\"Created router: %s\" % r_in_db[\u0027id\u0027])"},{"line_number":264,"context_line":"        self._extend_router_dict(context, r_in_db)"},{"line_number":265,"context_line":"        return r_in_db"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"    def update_router(self, context, id, router):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAALH%2F%2FleU%3D","line":264,"in_reply_to":"AAAALH%2F%2FoUs%3D","updated":"2012-08-29 23:23:55.000000000","message":"Done","commit_id":"b939e7da3d10ca8f7f25cfad5fb0ea531ce97d45"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"44c00f77dee024267038c93777d2e4a82aef5ea4","unresolved":false,"context_lines":[{"line_number":267,"context_line":"    def update_router(self, context, id, router):"},{"line_number":268,"context_line":"        flavor \u003d meta_db_v2.get_flavor_by_router(id)"},{"line_number":269,"context_line":"        plugin \u003d self._get_l3_plugin(flavor)"},{"line_number":270,"context_line":"        return plugin.delete_router(context, id, router)"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"    def delete_router(self, context, id):"},{"line_number":273,"context_line":"        flavor \u003d meta_db_v2.get_flavor_by_router(id)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAALH%2F%2FoUo%3D","line":270,"updated":"2012-08-24 16:50:57.000000000","message":"I\u0027m guessing the intention is not to delete the router.","commit_id":"b939e7da3d10ca8f7f25cfad5fb0ea531ce97d45"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"unresolved":false,"context_lines":[{"line_number":267,"context_line":"    def update_router(self, context, id, router):"},{"line_number":268,"context_line":"        flavor \u003d meta_db_v2.get_flavor_by_router(id)"},{"line_number":269,"context_line":"        plugin \u003d self._get_l3_plugin(flavor)"},{"line_number":270,"context_line":"        return plugin.delete_router(context, id, router)"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"    def delete_router(self, context, id):"},{"line_number":273,"context_line":"        flavor \u003d meta_db_v2.get_flavor_by_router(id)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAALH%2F%2FleQ%3D","line":270,"in_reply_to":"AAAALH%2F%2FoUo%3D","updated":"2012-08-29 23:23:55.000000000","message":"Done","commit_id":"b939e7da3d10ca8f7f25cfad5fb0ea531ce97d45"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"44c00f77dee024267038c93777d2e4a82aef5ea4","unresolved":false,"context_lines":[{"line_number":286,"context_line":"                                fields\u003dNone, verbose\u003dNone):"},{"line_number":287,"context_line":"        collection \u003d self._model_query(context, models_v2.router)"},{"line_number":288,"context_line":"        model \u003d RouterFlavor"},{"line_number":289,"context_line":"        collection \u003d collection.join(model,"},{"line_number":290,"context_line":"                                     models_v2.router.id \u003d\u003d model.router_id)"},{"line_number":291,"context_line":"        if filters:"},{"line_number":292,"context_line":"            for key, value in filters.iteritems():"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAALH%2F%2FoTs%3D","line":289,"updated":"2012-08-24 16:50:57.000000000","message":"(Suggestion only) Consider avoiding reuse of the same variable name.","commit_id":"b939e7da3d10ca8f7f25cfad5fb0ea531ce97d45"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"44c00f77dee024267038c93777d2e4a82aef5ea4","unresolved":false,"context_lines":[{"line_number":296,"context_line":"                    column \u003d getattr(models_v2.router, key, None)"},{"line_number":297,"context_line":"                if column:"},{"line_number":298,"context_line":"                    collection \u003d collection.filter(column.in_(value))"},{"line_number":299,"context_line":"        return [self._make_router_dict(c, fields) for c in collection.all()]"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"    def get_routers(self, context, filters\u003dNone, fields\u003dNone, verbose\u003dNone):"},{"line_number":302,"context_line":"        routers \u003d self.get_routers_with_flavor(context, filters,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAALH%2F%2FoTg%3D","line":299,"updated":"2012-08-24 16:50:57.000000000","message":"_make_router_dict() is not defined.","commit_id":"b939e7da3d10ca8f7f25cfad5fb0ea531ce97d45"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"unresolved":false,"context_lines":[{"line_number":296,"context_line":"                    column \u003d getattr(models_v2.router, key, None)"},{"line_number":297,"context_line":"                if column:"},{"line_number":298,"context_line":"                    collection \u003d collection.filter(column.in_(value))"},{"line_number":299,"context_line":"        return [self._make_router_dict(c, fields) for c in collection.all()]"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"    def get_routers(self, context, filters\u003dNone, fields\u003dNone, verbose\u003dNone):"},{"line_number":302,"context_line":"        routers \u003d self.get_routers_with_flavor(context, filters,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAALH%2F%2FleI%3D","line":299,"in_reply_to":"AAAALH%2F%2FoTg%3D","updated":"2012-08-29 23:23:55.000000000","message":"This is defined in super class","commit_id":"b939e7da3d10ca8f7f25cfad5fb0ea531ce97d45"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"44c00f77dee024267038c93777d2e4a82aef5ea4","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import logging"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from quantum import policy"},{"line_number":21,"context_line":"from quantum.api.v2 import attributes"},{"line_number":22,"context_line":"from quantum.common import exceptions as exc"},{"line_number":23,"context_line":"from quantum.common.utils import find_config_file"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAALH%2F%2Fk3o%3D","line":20,"updated":"2012-08-30 00:22:28.000000000","message":"HACKING - This line belongs after line 32.  The guidelines for ordering require ordering by the absolute import path.","commit_id":"709c1ba9662ff0bb6fcbf6bb742d5c2cbccbd1fa"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import logging"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from quantum import policy"},{"line_number":21,"context_line":"from quantum.api.v2 import attributes"},{"line_number":22,"context_line":"from quantum.common import exceptions as exc"},{"line_number":23,"context_line":"from quantum.common.utils import find_config_file"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAALH%2F%2Fk0s%3D","line":20,"in_reply_to":"AAAALH%2F%2Fk3o%3D","updated":"2012-08-30 02:16:30.000000000","message":"Done","commit_id":"709c1ba9662ff0bb6fcbf6bb742d5c2cbccbd1fa"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"44c00f77dee024267038c93777d2e4a82aef5ea4","unresolved":false,"context_lines":[{"line_number":27,"context_line":"from quantum.db import models_v2"},{"line_number":28,"context_line":"from quantum.openstack.common import cfg"},{"line_number":29,"context_line":"from quantum.openstack.common import importutils"},{"line_number":30,"context_line":"from quantum.plugins.metaplugin import meta_db_v2"},{"line_number":31,"context_line":"from quantum.plugins.metaplugin.common import config"},{"line_number":32,"context_line":"from quantum.plugins.metaplugin.meta_models_v2 import NetworkFlavor"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAALH%2F%2Fk3k%3D","line":30,"updated":"2012-08-30 00:22:28.000000000","message":"HACKING - This line should appear after line 31.","commit_id":"709c1ba9662ff0bb6fcbf6bb742d5c2cbccbd1fa"},{"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.db import models_v2"},{"line_number":28,"context_line":"from quantum.openstack.common import cfg"},{"line_number":29,"context_line":"from quantum.openstack.common import importutils"},{"line_number":30,"context_line":"from quantum.plugins.metaplugin import meta_db_v2"},{"line_number":31,"context_line":"from quantum.plugins.metaplugin.common import config"},{"line_number":32,"context_line":"from quantum.plugins.metaplugin.meta_models_v2 import NetworkFlavor"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAALH%2F%2Fk0o%3D","line":30,"in_reply_to":"AAAALH%2F%2Fk3k%3D","updated":"2012-08-30 02:16:30.000000000","message":"Done","commit_id":"709c1ba9662ff0bb6fcbf6bb742d5c2cbccbd1fa"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"44c00f77dee024267038c93777d2e4a82aef5ea4","unresolved":false,"context_lines":[{"line_number":138,"context_line":"            if plugin and hasattr(plugin, key):"},{"line_number":139,"context_line":"                return getattr(plugin, key)"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"        # Second, try to match extension method in order of pluign list"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"        for flavor, plugin in self.plugins.items():"},{"line_number":144,"context_line":"            if plugin and hasattr(plugin, key):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAALH%2F%2Fk3c%3D","line":141,"updated":"2012-08-30 00:22:28.000000000","message":"(Unrelated - consider updating in a separate change) pluign \u003d\u003e plugin","commit_id":"709c1ba9662ff0bb6fcbf6bb742d5c2cbccbd1fa"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"unresolved":false,"context_lines":[{"line_number":138,"context_line":"            if plugin and hasattr(plugin, key):"},{"line_number":139,"context_line":"                return getattr(plugin, key)"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"        # Second, try to match extension method in order of pluign list"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"        for flavor, plugin in self.plugins.items():"},{"line_number":144,"context_line":"            if plugin and hasattr(plugin, key):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAALH%2F%2Fk0g%3D","line":141,"in_reply_to":"AAAALH%2F%2Fk3c%3D","updated":"2012-08-30 02:16:30.000000000","message":"Done","commit_id":"709c1ba9662ff0bb6fcbf6bb742d5c2cbccbd1fa"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"44c00f77dee024267038c93777d2e4a82aef5ea4","unresolved":false,"context_lines":[{"line_number":161,"context_line":"        LOG.debug(\"Created network: %s with flavor %s \" % (net[\u0027id\u0027], flavor))"},{"line_number":162,"context_line":"        try:"},{"line_number":163,"context_line":"            meta_db_v2.add_network_flavor_binding(flavor, str(net[\u0027id\u0027]))"},{"line_number":164,"context_line":"        except Exception as e:"},{"line_number":165,"context_line":"            LOG.error(\u0027failed to add flavor bindings\u0027)"},{"line_number":166,"context_line":"            plugin.delete_network(context, net[\u0027id\u0027])"},{"line_number":167,"context_line":"            raise FaildToAddFlavorBinding()"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAALH%2F%2Fk3U%3D","line":164,"updated":"2012-08-30 00:22:28.000000000","message":"(Unrelated - consider fixing in another change) \u0027as e\u0027 is unnecessary, as \u0027e\u0027 is never referenced.","commit_id":"709c1ba9662ff0bb6fcbf6bb742d5c2cbccbd1fa"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"unresolved":false,"context_lines":[{"line_number":161,"context_line":"        LOG.debug(\"Created network: %s with flavor %s \" % (net[\u0027id\u0027], flavor))"},{"line_number":162,"context_line":"        try:"},{"line_number":163,"context_line":"            meta_db_v2.add_network_flavor_binding(flavor, str(net[\u0027id\u0027]))"},{"line_number":164,"context_line":"        except Exception as e:"},{"line_number":165,"context_line":"            LOG.error(\u0027failed to add flavor bindings\u0027)"},{"line_number":166,"context_line":"            plugin.delete_network(context, net[\u0027id\u0027])"},{"line_number":167,"context_line":"            raise FaildToAddFlavorBinding()"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAALH%2F%2Fk0c%3D","line":164,"in_reply_to":"AAAALH%2F%2Fk3U%3D","updated":"2012-08-30 02:16:30.000000000","message":"I got it","commit_id":"709c1ba9662ff0bb6fcbf6bb742d5c2cbccbd1fa"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"44c00f77dee024267038c93777d2e4a82aef5ea4","unresolved":false,"context_lines":[{"line_number":162,"context_line":"        try:"},{"line_number":163,"context_line":"            meta_db_v2.add_network_flavor_binding(flavor, str(net[\u0027id\u0027]))"},{"line_number":164,"context_line":"        except Exception as e:"},{"line_number":165,"context_line":"            LOG.error(\u0027failed to add flavor bindings\u0027)"},{"line_number":166,"context_line":"            plugin.delete_network(context, net[\u0027id\u0027])"},{"line_number":167,"context_line":"            raise FaildToAddFlavorBinding()"},{"line_number":168,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAALH%2F%2Fk3Y%3D","line":165,"updated":"2012-08-30 00:22:28.000000000","message":"(Unrelated - consider fixing in another change) This should probably be LOG.exception to ensure the traceback is captured for debugging purposes.","commit_id":"709c1ba9662ff0bb6fcbf6bb742d5c2cbccbd1fa"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"unresolved":false,"context_lines":[{"line_number":162,"context_line":"        try:"},{"line_number":163,"context_line":"            meta_db_v2.add_network_flavor_binding(flavor, str(net[\u0027id\u0027]))"},{"line_number":164,"context_line":"        except Exception as e:"},{"line_number":165,"context_line":"            LOG.error(\u0027failed to add flavor bindings\u0027)"},{"line_number":166,"context_line":"            plugin.delete_network(context, net[\u0027id\u0027])"},{"line_number":167,"context_line":"            raise FaildToAddFlavorBinding()"},{"line_number":168,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAALH%2F%2Fk0Y%3D","line":165,"in_reply_to":"AAAALH%2F%2Fk3Y%3D","updated":"2012-08-30 02:16:30.000000000","message":"I got it","commit_id":"709c1ba9662ff0bb6fcbf6bb742d5c2cbccbd1fa"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"44c00f77dee024267038c93777d2e4a82aef5ea4","unresolved":false,"context_lines":[{"line_number":256,"context_line":"    def create_router(self, context, router):"},{"line_number":257,"context_line":"        r \u003d router[\u0027router\u0027]"},{"line_number":258,"context_line":"        flavor \u003d r.get(\u0027flavor:router\u0027)"},{"line_number":259,"context_line":"        if not str(flavor) in self.l3_plugins:"},{"line_number":260,"context_line":"            flavor \u003d self.default_l3_flavor"},{"line_number":261,"context_line":"        plugin \u003d self._get_l3_plugin(flavor)"},{"line_number":262,"context_line":"        r_in_db \u003d plugin.create_router(context, router)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAALH%2F%2Fk3A%3D","line":259,"updated":"2012-08-30 00:22:28.000000000","message":"(Suggestion only) If the specified flavor is not available, should the fact that a default flavor is being selected instead be logged?","commit_id":"709c1ba9662ff0bb6fcbf6bb742d5c2cbccbd1fa"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"unresolved":false,"context_lines":[{"line_number":256,"context_line":"    def create_router(self, context, router):"},{"line_number":257,"context_line":"        r \u003d router[\u0027router\u0027]"},{"line_number":258,"context_line":"        flavor \u003d r.get(\u0027flavor:router\u0027)"},{"line_number":259,"context_line":"        if not str(flavor) in self.l3_plugins:"},{"line_number":260,"context_line":"            flavor \u003d self.default_l3_flavor"},{"line_number":261,"context_line":"        plugin \u003d self._get_l3_plugin(flavor)"},{"line_number":262,"context_line":"        r_in_db \u003d plugin.create_router(context, router)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAALH%2F%2Fk0M%3D","line":259,"in_reply_to":"AAAALH%2F%2Fk3A%3D","updated":"2012-08-30 02:16:30.000000000","message":"I agree. However another code follows same way, so I wanna fix all of it in another patch in G release.","commit_id":"709c1ba9662ff0bb6fcbf6bb742d5c2cbccbd1fa"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"44c00f77dee024267038c93777d2e4a82aef5ea4","unresolved":false,"context_lines":[{"line_number":264,"context_line":"                                                          flavor))"},{"line_number":265,"context_line":"        try:"},{"line_number":266,"context_line":"            meta_db_v2.add_router_flavor_binding(flavor, str(r_in_db[\u0027id\u0027]))"},{"line_number":267,"context_line":"        except Exception as e:"},{"line_number":268,"context_line":"            LOG.error(\u0027failed to add flavor bindings\u0027)"},{"line_number":269,"context_line":"            plugin.delete_router(context, r_in_db[\u0027id\u0027])"},{"line_number":270,"context_line":"            raise FaildToAddFlavorBinding()"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAALH%2F%2Fk28%3D","line":267,"updated":"2012-08-30 00:22:28.000000000","message":"(Suggestion only) Since \u0027e\u0027 is never referenced, consider leaving off \u0027as e\u0027.","commit_id":"709c1ba9662ff0bb6fcbf6bb742d5c2cbccbd1fa"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"unresolved":false,"context_lines":[{"line_number":264,"context_line":"                                                          flavor))"},{"line_number":265,"context_line":"        try:"},{"line_number":266,"context_line":"            meta_db_v2.add_router_flavor_binding(flavor, str(r_in_db[\u0027id\u0027]))"},{"line_number":267,"context_line":"        except Exception as e:"},{"line_number":268,"context_line":"            LOG.error(\u0027failed to add flavor bindings\u0027)"},{"line_number":269,"context_line":"            plugin.delete_router(context, r_in_db[\u0027id\u0027])"},{"line_number":270,"context_line":"            raise FaildToAddFlavorBinding()"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAALH%2F%2Fkzc%3D","line":267,"in_reply_to":"AAAALH%2F%2Fk28%3D","updated":"2012-08-30 02:16:30.000000000","message":"Done","commit_id":"709c1ba9662ff0bb6fcbf6bb742d5c2cbccbd1fa"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"44c00f77dee024267038c93777d2e4a82aef5ea4","unresolved":false,"context_lines":[{"line_number":265,"context_line":"        try:"},{"line_number":266,"context_line":"            meta_db_v2.add_router_flavor_binding(flavor, str(r_in_db[\u0027id\u0027]))"},{"line_number":267,"context_line":"        except Exception as e:"},{"line_number":268,"context_line":"            LOG.error(\u0027failed to add flavor bindings\u0027)"},{"line_number":269,"context_line":"            plugin.delete_router(context, r_in_db[\u0027id\u0027])"},{"line_number":270,"context_line":"            raise FaildToAddFlavorBinding()"},{"line_number":271,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAALH%2F%2Fk24%3D","line":268,"updated":"2012-08-30 00:22:28.000000000","message":"(Suggestion only) Consider using LOG.exception to ensure that the traceback will be available for debugging purposes.  This is only suggested because catching Exception without logging can mask unanticipated exceptions.","commit_id":"709c1ba9662ff0bb6fcbf6bb742d5c2cbccbd1fa"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"unresolved":false,"context_lines":[{"line_number":265,"context_line":"        try:"},{"line_number":266,"context_line":"            meta_db_v2.add_router_flavor_binding(flavor, str(r_in_db[\u0027id\u0027]))"},{"line_number":267,"context_line":"        except Exception as e:"},{"line_number":268,"context_line":"            LOG.error(\u0027failed to add flavor bindings\u0027)"},{"line_number":269,"context_line":"            plugin.delete_router(context, r_in_db[\u0027id\u0027])"},{"line_number":270,"context_line":"            raise FaildToAddFlavorBinding()"},{"line_number":271,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAALH%2F%2FkzY%3D","line":268,"in_reply_to":"AAAALH%2F%2Fk24%3D","updated":"2012-08-30 02:16:30.000000000","message":"Done","commit_id":"709c1ba9662ff0bb6fcbf6bb742d5c2cbccbd1fa"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"44c00f77dee024267038c93777d2e4a82aef5ea4","unresolved":false,"context_lines":[{"line_number":295,"context_line":"                                fields\u003dNone, verbose\u003dNone):"},{"line_number":296,"context_line":"        collection \u003d self._model_query(context, models_v2.router)"},{"line_number":297,"context_line":"        r_model \u003d RouterFlavor"},{"line_number":298,"context_line":"        collection \u003d collection.join(r_model,"},{"line_number":299,"context_line":"                                     models_v2.router.id \u003d\u003d r_model.router_id)"},{"line_number":300,"context_line":"        if filters:"},{"line_number":301,"context_line":"            for key, value in filters.iteritems():"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAALH%2F%2Fk3M%3D","line":298,"updated":"2012-08-30 00:22:28.000000000","message":"(Suggestion only) I apologize for not being specific in my previous comment - I meant to avoid avoid assigning again to collection.  No change to the \u0027model\u0027 variable name was intended.  But, no change required, the issue isn\u0027t functional.","commit_id":"709c1ba9662ff0bb6fcbf6bb742d5c2cbccbd1fa"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"unresolved":false,"context_lines":[{"line_number":295,"context_line":"                                fields\u003dNone, verbose\u003dNone):"},{"line_number":296,"context_line":"        collection \u003d self._model_query(context, models_v2.router)"},{"line_number":297,"context_line":"        r_model \u003d RouterFlavor"},{"line_number":298,"context_line":"        collection \u003d collection.join(r_model,"},{"line_number":299,"context_line":"                                     models_v2.router.id \u003d\u003d r_model.router_id)"},{"line_number":300,"context_line":"        if filters:"},{"line_number":301,"context_line":"            for key, value in filters.iteritems():"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAALH%2F%2Fk0Q%3D","line":298,"in_reply_to":"AAAALH%2F%2Fk3M%3D","updated":"2012-08-30 02:16:30.000000000","message":"Ahh I got your point now. This is same style in db_plugin, so I follow same style for now.","commit_id":"709c1ba9662ff0bb6fcbf6bb742d5c2cbccbd1fa"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":226,"context_line":"        return plugin.update_port(context, id, port)"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    def delete_port(self, context, id):"},{"line_number":229,"context_line":"        self.disassociate_floatingips(context, id)"},{"line_number":230,"context_line":"        port_in_db \u003d self.get_port(context, id)"},{"line_number":231,"context_line":"        plugin \u003d self._get_plugin_by_network_id(port_in_db[\u0027network_id\u0027])"},{"line_number":232,"context_line":"        return plugin.delete_port(context, id)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAALH%2F%2Fjsc%3D","line":229,"updated":"2012-08-31 09:21:48.000000000","message":"self.disassociate_floatingips() seems to be called twice (here and in plugin.delete_port()) if the plugin supports os-quantum-router. I am afraid the second call in plugin.delete_port() will fail. I am not sure which is better whether disassociate_floatingips() is called here or in plugin.delete_port().  (I have not tested this patch yet)","commit_id":"0693bde4bee0b94cafbfb7a18ea1fa1bc063d355"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"unresolved":false,"context_lines":[{"line_number":226,"context_line":"        return plugin.update_port(context, id, port)"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    def delete_port(self, context, id):"},{"line_number":229,"context_line":"        self.disassociate_floatingips(context, id)"},{"line_number":230,"context_line":"        port_in_db \u003d self.get_port(context, id)"},{"line_number":231,"context_line":"        plugin \u003d self._get_plugin_by_network_id(port_in_db[\u0027network_id\u0027])"},{"line_number":232,"context_line":"        return plugin.delete_port(context, id)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAALH%2F%2FjDw%3D","line":229,"in_reply_to":"AAAALH%2F%2Fjsc%3D","updated":"2012-08-31 20:38:48.000000000","message":"It is not fail. Because disassociate_floatingip do nothign if there are no floating ip. \nI wanna let support L2 plugin which is not support L3. So this call is needed.","commit_id":"0693bde4bee0b94cafbfb7a18ea1fa1bc063d355"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":91,"context_line":"            else:"},{"line_number":92,"context_line":"                # For l3 only plugin"},{"line_number":93,"context_line":"                self.l3_plugins[flavor] \u003d self._load_plugin(plugin_provider)"},{"line_number":94,"context_line":"                db._ENGINE \u003d None"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        self.default_flavor \u003d cfg.CONF.META.default_flavor"},{"line_number":97,"context_line":"        if not self.default_flavor in self.plugins:"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAALH%2F%2FimI%3D","line":94,"updated":"2012-09-02 11:16:39.000000000","message":"Does this need to be set to none again?","commit_id":"4dea9df8337be5b88c38a01d1840809eb3cd26ae"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"unresolved":false,"context_lines":[{"line_number":91,"context_line":"            else:"},{"line_number":92,"context_line":"                # For l3 only plugin"},{"line_number":93,"context_line":"                self.l3_plugins[flavor] \u003d self._load_plugin(plugin_provider)"},{"line_number":94,"context_line":"                db._ENGINE \u003d None"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        self.default_flavor \u003d cfg.CONF.META.default_flavor"},{"line_number":97,"context_line":"        if not self.default_flavor in self.plugins:"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAALH%2F%2FilE%3D","line":94,"in_reply_to":"AAAALH%2F%2FimI%3D","updated":"2012-09-02 15:34:10.000000000","message":"Yes. It is needed for plugins which has their tables.","commit_id":"4dea9df8337be5b88c38a01d1840809eb3cd26ae"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    def _extend_network_dict(self, context, network):"},{"line_number":151,"context_line":"        flavor \u003d self._get_flavor_by_network_id(network[\u0027id\u0027])"},{"line_number":152,"context_line":"        network[\u0027flavor:network\u0027] \u003d flavor"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    def create_network(self, context, network):"},{"line_number":155,"context_line":"        n \u003d network[\u0027network\u0027]"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAALH%2F%2FimE%3D","line":152,"updated":"2012-09-02 11:16:39.000000000","message":"Consider having \u0027flavor:network\u0027 as a define (similarly with router)","commit_id":"4dea9df8337be5b88c38a01d1840809eb3cd26ae"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"unresolved":false,"context_lines":[{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    def _extend_network_dict(self, context, network):"},{"line_number":151,"context_line":"        flavor \u003d self._get_flavor_by_network_id(network[\u0027id\u0027])"},{"line_number":152,"context_line":"        network[\u0027flavor:network\u0027] \u003d flavor"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    def create_network(self, context, network):"},{"line_number":155,"context_line":"        n \u003d network[\u0027network\u0027]"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAALH%2F%2Fik4%3D","line":152,"in_reply_to":"AAAALH%2F%2FimE%3D","updated":"2012-09-02 15:34:10.000000000","message":"Done","commit_id":"4dea9df8337be5b88c38a01d1840809eb3cd26ae"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":226,"context_line":"        plugin \u003d self._get_plugin_by_network_id(port_in_db[\u0027network_id\u0027])"},{"line_number":227,"context_line":"        return plugin.update_port(context, id, port)"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"    def delete_port(self, context, id):"},{"line_number":230,"context_line":"        self.disassociate_floatingips(context, id)"},{"line_number":231,"context_line":"        port_in_db \u003d self.get_port(context, id)"},{"line_number":232,"context_line":"        plugin \u003d self._get_plugin_by_network_id(port_in_db[\u0027network_id\u0027])"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAALH%2F%2FimA%3D","line":229,"updated":"2012-09-02 11:16:39.000000000","message":"This should be:\n\n    def delete_port(self, context, id, l3_port_check\u003dTrue):\n\n        # if needed, check to see if this is a port owned by\n        # and l3-router.  If so, we should prevent deletion.\n        if l3_port_check:\n            self.prevent_l3_port_deletion(context, id)","commit_id":"4dea9df8337be5b88c38a01d1840809eb3cd26ae"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"unresolved":false,"context_lines":[{"line_number":226,"context_line":"        plugin \u003d self._get_plugin_by_network_id(port_in_db[\u0027network_id\u0027])"},{"line_number":227,"context_line":"        return plugin.update_port(context, id, port)"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"    def delete_port(self, context, id):"},{"line_number":230,"context_line":"        self.disassociate_floatingips(context, id)"},{"line_number":231,"context_line":"        port_in_db \u003d self.get_port(context, id)"},{"line_number":232,"context_line":"        plugin \u003d self._get_plugin_by_network_id(port_in_db[\u0027network_id\u0027])"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAALH%2F%2Fik0%3D","line":229,"in_reply_to":"AAAALH%2F%2FimA%3D","updated":"2012-09-02 15:34:10.000000000","message":"Done","commit_id":"4dea9df8337be5b88c38a01d1840809eb3cd26ae"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":233,"context_line":"        self.disassociate_floatingips(context, id)"},{"line_number":234,"context_line":"        port_in_db \u003d self.get_port(context, id)"},{"line_number":235,"context_line":"        plugin \u003d self._get_plugin_by_network_id(port_in_db[\u0027network_id\u0027])"},{"line_number":236,"context_line":"        return plugin.delete_port(context, id, l3_port_check\u003dTrue)"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    def create_subnet(self, context, subnet):"},{"line_number":239,"context_line":"        s \u003d subnet[\u0027subnet\u0027]"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAALH%2F%2Fijs%3D","line":236,"updated":"2012-09-02 18:08:53.000000000","message":"The l3 check here is not needed. The check above suffices.","commit_id":"3e574c1e00e68104ba9cb3e56d3e219cf775157c"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":233,"context_line":"        self.disassociate_floatingips(context, id)"},{"line_number":234,"context_line":"        port_in_db \u003d self.get_port(context, id)"},{"line_number":235,"context_line":"        plugin \u003d self._get_plugin_by_network_id(port_in_db[\u0027network_id\u0027])"},{"line_number":236,"context_line":"        return plugin.delete_port(context, id, l3_port_check\u003dFalse)"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    def create_subnet(self, context, subnet):"},{"line_number":239,"context_line":"        s \u003d subnet[\u0027subnet\u0027]"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAALH%2F%2Fiek%3D","line":236,"updated":"2012-09-03 06:28:09.000000000","message":"You do not need this code l3_port_check\u003dFalse. It should be:\nreturn plugin.delete_port(context, id)","commit_id":"36fafdfb72fade0012451f95d75636df5d6bd838"}],"quantum/plugins/metaplugin/proxy_quantum_plugin.py":[{"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 delete_port(self, context, id, l3_port_check\u003dTrue):"},{"line_number":130,"context_line":"        try:"},{"line_number":131,"context_line":"            self._get_client().delete_port(id)"},{"line_number":132,"context_line":"        except exceptions.PortNotFoundClient:"},{"line_number":133,"context_line":"            LOG.warn(\"port in remote have already deleted\")"},{"line_number":134,"context_line":"        return super(ProxyPluginV2, self).delete_port(context, id)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAALH%2F%2FikM%3D","line":131,"updated":"2012-09-02 15:46:24.000000000","message":"I think that you may need to check if this port is used by the router. If so it should not be allowed to be deleted.","commit_id":"a070b3afaff1c4398f97a8d6364a8bfa5e66c977"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"unresolved":false,"context_lines":[{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    def delete_port(self, context, id, l3_port_check\u003dTrue):"},{"line_number":130,"context_line":"        try:"},{"line_number":131,"context_line":"            self._get_client().delete_port(id)"},{"line_number":132,"context_line":"        except exceptions.PortNotFoundClient:"},{"line_number":133,"context_line":"            LOG.warn(\"port in remote have already deleted\")"},{"line_number":134,"context_line":"        return super(ProxyPluginV2, self).delete_port(context, id)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAALH%2F%2Fij8%3D","line":131,"in_reply_to":"AAAALH%2F%2FikM%3D","updated":"2012-09-02 16:05:40.000000000","message":"I got it!","commit_id":"a070b3afaff1c4398f97a8d6364a8bfa5e66c977"}],"quantum/tests/unit/metaplugin/test_metaplugin.py":[{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"44c00f77dee024267038c93777d2e4a82aef5ea4","unresolved":false,"context_lines":[{"line_number":295,"context_line":"        self.assertEqual(\u0027fake1\u0027, router_in_db1[\u0027flavor:router\u0027])"},{"line_number":296,"context_line":"        self.assertEqual(\u0027fake2\u0027, router_in_db2[\u0027flavor:router\u0027])"},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"        self.plugin.delete_router(self.context, router_ret1[\u0027id\u0027])"},{"line_number":299,"context_line":"        self.plugin.delete_router(self.context, router_ret2[\u0027id\u0027])"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"    def test_extension_method(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAALH%2F%2Fk3E%3D","line":298,"updated":"2012-08-30 00:22:28.000000000","message":"The name of the test suggests that deletion is being tested.  Should there be assertions ensuring the deletion was successful?","commit_id":"709c1ba9662ff0bb6fcbf6bb742d5c2cbccbd1fa"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"unresolved":false,"context_lines":[{"line_number":295,"context_line":"        self.assertEqual(\u0027fake1\u0027, router_in_db1[\u0027flavor:router\u0027])"},{"line_number":296,"context_line":"        self.assertEqual(\u0027fake2\u0027, router_in_db2[\u0027flavor:router\u0027])"},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"        self.plugin.delete_router(self.context, router_ret1[\u0027id\u0027])"},{"line_number":299,"context_line":"        self.plugin.delete_router(self.context, router_ret2[\u0027id\u0027])"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"    def test_extension_method(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAALH%2F%2Fkyk%3D","line":298,"in_reply_to":"AAAALH%2F%2Fk3E%3D","updated":"2012-08-30 02:16:30.000000000","message":"Done","commit_id":"709c1ba9662ff0bb6fcbf6bb742d5c2cbccbd1fa"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"44c00f77dee024267038c93777d2e4a82aef5ea4","unresolved":false,"context_lines":[{"line_number":298,"context_line":""},{"line_number":299,"context_line":"        self.plugin.delete_router(self.context, router_ret1[\u0027id\u0027])"},{"line_number":300,"context_line":"        self.plugin.delete_router(self.context, router_ret2[\u0027id\u0027])"},{"line_number":301,"context_line":"        try:"},{"line_number":302,"context_line":"            router_in_db1 \u003d self.plugin.get_router(self.context,"},{"line_number":303,"context_line":"                                                   router_ret1[\u0027id\u0027])"},{"line_number":304,"context_line":"        except l3.RouterNotFound:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAALH%2F%2Fkjg%3D","line":301,"updated":"2012-08-30 11:38:18.000000000","message":"(Suggestion only) This method of the assertion will work but the following is cleaner:\n\nself.assertRaises(l3.RouterNotFound, self.plugin.get_router, self.context, router_ret1[\u0027id\u0027])\n\nIf you change \u0027import unittest\u0027 to \u0027import unittest2 as unittest\u0027 (unittest2 is already a dependency) in this module, the \u0027with\u0027 keyword can be used for even cleaner syntax:\n\nwith self.assertRaises(l3.RouterNotFound):\n  self.plugin.get_router(self.context, router_ret1[\u0027id\u0027])","commit_id":"2106207509341c1524437c006e5b477e2b71c1b4"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"44c00f77dee024267038c93777d2e4a82aef5ea4","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import os"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import mox"},{"line_number":21,"context_line":"import mock"},{"line_number":22,"context_line":"import unittest2 as unittest"},{"line_number":23,"context_line":"import uuid"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAALH%2F%2Fkd0%3D","line":20,"updated":"2012-08-30 14:42:47.000000000","message":"(Suggestion only) HACKING - no action required for this change, since order was incorrect before, but the import ordering is incorrect (mock \u003c mox, stubout \u003c unittest2, uuid is stdlib).","commit_id":"0693bde4bee0b94cafbfb7a18ea1fa1bc063d355"}]}
