)]}'
{"etc/quantum/plugins/ryu/ryu.ini":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"# tunnel_ip \u003d \u003cip address for tunneling\u003e"},{"line_number":21,"context_line":"# tunnel_interface \u003d interface for tunneling"},{"line_number":22,"context_line":"#                    when tunnel_ip is NOT specified, ip address is gotten"},{"line_number":23,"context_line":"#                    from this interface"},{"line_number":24,"context_line":"# tunnel_ip \u003d"},{"line_number":25,"context_line":"# tunnel_interface \u003d"}],"source_content_type":"text/x-properties","patch_set":3,"id":"AAAALn%2F%2F6oQ%3D","line":22,"updated":"2012-10-28 09:48:51.000000000","message":"gotten \u003d\u003e read","commit_id":"55e8b6ef1df10d5aa47d4d10ee460d161a45644b"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"# tunnel_ip \u003d \u003cip address for tunneling\u003e"},{"line_number":21,"context_line":"# tunnel_interface \u003d interface for tunneling"},{"line_number":22,"context_line":"#                    when tunnel_ip is NOT specified, ip address is gotten"},{"line_number":23,"context_line":"#                    from this interface"},{"line_number":24,"context_line":"# tunnel_ip \u003d"},{"line_number":25,"context_line":"# tunnel_interface \u003d"}],"source_content_type":"text/x-properties","patch_set":3,"id":"AAAALn%2F%2F4Ng%3D","line":22,"in_reply_to":"AAAALn%2F%2F6oQ%3D","updated":"2012-10-31 04:18:03.000000000","message":"Done","commit_id":"55e8b6ef1df10d5aa47d4d10ee460d161a45644b"}],"quantum/plugins/ryu/agent/ryu_quantum_agent.py":[{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"7c2fe5be33148f51c18c10032c012364728a1716","unresolved":false,"context_lines":[{"line_number":177,"context_line":"        while True:"},{"line_number":178,"context_line":"            # nothing"},{"line_number":179,"context_line":"            time.sleep(2)"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"def check_ofp_rest_api_addr(db):"},{"line_number":183,"context_line":"    LOG.debug(\"checking db\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALn%2F%2F%2BHI%3D","line":180,"updated":"2012-10-24 03:54:39.000000000","message":"Is there any reason to keep this process running once this agent sets up the integration bridge?","commit_id":"366bd8ab7f20207348ff7d7d9b2ed403bf0dd7ba"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"unresolved":false,"context_lines":[{"line_number":177,"context_line":"        while True:"},{"line_number":178,"context_line":"            # nothing"},{"line_number":179,"context_line":"            time.sleep(2)"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"def check_ofp_rest_api_addr(db):"},{"line_number":183,"context_line":"    LOG.debug(\"checking db\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALn%2F%2F8ZA%3D","line":180,"in_reply_to":"AAAALn%2F%2F%2BHI%3D","updated":"2012-10-25 18:39:17.000000000","message":"Not to surprise users.\nThe agent kept running before this patchset, and agents of other plugin keep running. If Ryu agent exits, users may think that something went wrong and ask why.\n\nadding the comment is ok?\nOr should the agent exit?","commit_id":"366bd8ab7f20207348ff7d7d9b2ed403bf0dd7ba"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":161,"context_line":""},{"line_number":162,"context_line":"        ryu_rest_client \u003d client.OFPClient(ofp_rest_api_addr)"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"        self.vif_ports \u003d VifPortSet(self.int_br, ryu_rest_client)"},{"line_number":165,"context_line":"        self.vif_ports.setup()"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"        sc_client \u003d client.SwitchConfClient(ofp_rest_api_addr)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAALn%2F%2F6n0%3D","line":164,"updated":"2012-10-28 09:48:51.000000000","message":"If these operations fail do you need to retry or log?","commit_id":"55e8b6ef1df10d5aa47d4d10ee460d161a45644b"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"unresolved":false,"context_lines":[{"line_number":161,"context_line":""},{"line_number":162,"context_line":"        ryu_rest_client \u003d client.OFPClient(ofp_rest_api_addr)"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"        self.vif_ports \u003d VifPortSet(self.int_br, ryu_rest_client)"},{"line_number":165,"context_line":"        self.vif_ports.setup()"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"        sc_client \u003d client.SwitchConfClient(ofp_rest_api_addr)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAALn%2F%2F4NM%3D","line":164,"in_reply_to":"AAAALn%2F%2F6n0%3D","updated":"2012-10-31 04:18:03.000000000","message":"Okay. It raises HTTPException. I\u0027ll catch it in main and log it.","commit_id":"55e8b6ef1df10d5aa47d4d10ee460d161a45644b"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":165,"context_line":"        self.vif_ports.setup()"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"        sc_client \u003d client.SwitchConfClient(ofp_rest_api_addr)"},{"line_number":168,"context_line":"        sc_client.set_key(self.int_br.datapath_id,"},{"line_number":169,"context_line":"                          conf_switch_key.OVS_TUNNEL_ADDR, tunnel_ip)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"        # Currently Ryu supports only tcp methods. (ssl isn\u0027t supported yet)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAALn%2F%2F6nw%3D","line":168,"updated":"2012-10-28 09:48:51.000000000","message":"Ditto","commit_id":"55e8b6ef1df10d5aa47d4d10ee460d161a45644b"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"unresolved":false,"context_lines":[{"line_number":179,"context_line":"            # The agent kept running before, and agents of other plugin keep"},{"line_number":180,"context_line":"            # running. If this Ryu agent exits, users may think that something"},{"line_number":181,"context_line":"            # went wrong and ask why."},{"line_number":182,"context_line":"            time.sleep(2)"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"def check_ofp_rest_api_addr(db):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAALn%2F%2F5EQ%3D","line":182,"updated":"2012-10-30 14:16:39.000000000","message":"I think I understand why this agent runs in a loop, but it may be better to document the fact the agent isn\u0027t needed once the bridges are setup, and have it actually exit, than spin here.","commit_id":"55e8b6ef1df10d5aa47d4d10ee460d161a45644b"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"unresolved":false,"context_lines":[{"line_number":179,"context_line":"            # The agent kept running before, and agents of other plugin keep"},{"line_number":180,"context_line":"            # running. If this Ryu agent exits, users may think that something"},{"line_number":181,"context_line":"            # went wrong and ask why."},{"line_number":182,"context_line":"            time.sleep(2)"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"def check_ofp_rest_api_addr(db):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAALn%2F%2F4NU%3D","line":182,"in_reply_to":"AAAALn%2F%2F5Aw%3D","updated":"2012-10-31 04:18:03.000000000","message":"Okay, I\u0027ll make Ryu agent exit.\nWhen exiting successfully, log it as its normal.\nI hesitate the rename because it\u0027s apparent user visible change.","commit_id":"55e8b6ef1df10d5aa47d4d10ee460d161a45644b"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"7c2fe5be33148f51c18c10032c012364728a1716","unresolved":false,"context_lines":[{"line_number":179,"context_line":"            # The agent kept running before, and agents of other plugin keep"},{"line_number":180,"context_line":"            # running. If this Ryu agent exits, users may think that something"},{"line_number":181,"context_line":"            # went wrong and ask why."},{"line_number":182,"context_line":"            time.sleep(2)"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"def check_ofp_rest_api_addr(db):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAALn%2F%2F5Aw%3D","line":182,"in_reply_to":"AAAALn%2F%2F5EQ%3D","updated":"2012-10-30 14:48:13.000000000","message":"+1  I don\u0027t like the idea of an agent that loops just to exist.  Might be better just to rename this file to ryu_quantum_nodeinitialization.py and document that should run once after the node boots.","commit_id":"55e8b6ef1df10d5aa47d4d10ee460d161a45644b"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":20,"context_line":"#    under the License."},{"line_number":21,"context_line":"# @author: Isaku Yamahata"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"import logging as LOG"},{"line_number":24,"context_line":"import httplib"},{"line_number":25,"context_line":"import netifaces"},{"line_number":26,"context_line":"import socket"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAALn%2F%2FyhY%3D","line":23,"updated":"2012-11-06 13:54:47.000000000","message":"please use common logging","commit_id":"9c68ed8efba8447ae5ad5c5e66c891a5620bb625"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"unresolved":false,"context_lines":[{"line_number":20,"context_line":"#    under the License."},{"line_number":21,"context_line":"# @author: Isaku Yamahata"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"import logging as LOG"},{"line_number":24,"context_line":"import httplib"},{"line_number":25,"context_line":"import netifaces"},{"line_number":26,"context_line":"import socket"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAALn%2F%2FxX8%3D","line":23,"in_reply_to":"AAAALn%2F%2FyhY%3D","updated":"2012-11-07 09:35:48.000000000","message":"Done","commit_id":"9c68ed8efba8447ae5ad5c5e66c891a5620bb625"},{"author":{"_account_id":704,"name":"Edgar Magana","email":"emagana@gmail.com","username":"emagana"},"unresolved":false,"context_lines":[{"line_number":24,"context_line":"import httplib"},{"line_number":25,"context_line":"import netifaces"},{"line_number":26,"context_line":"import socket"},{"line_number":27,"context_line":"import sys"},{"line_number":28,"context_line":"from sqlalchemy.ext.sqlsoup import SqlSoup"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"from ryu.app import client"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAALn%2F%2F2xU%3D","line":27,"updated":"2012-11-01 05:32:49.000000000","message":"Verify the order of the imports","commit_id":"9c68ed8efba8447ae5ad5c5e66c891a5620bb625"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"unresolved":false,"context_lines":[{"line_number":24,"context_line":"import httplib"},{"line_number":25,"context_line":"import netifaces"},{"line_number":26,"context_line":"import socket"},{"line_number":27,"context_line":"import sys"},{"line_number":28,"context_line":"from sqlalchemy.ext.sqlsoup import SqlSoup"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"from ryu.app import client"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAALn%2F%2Fyls%3D","line":27,"in_reply_to":"AAAALn%2F%2F2xU%3D","updated":"2012-11-06 12:50:37.000000000","message":"Done","commit_id":"9c68ed8efba8447ae5ad5c5e66c891a5620bb625"},{"author":{"_account_id":704,"name":"Edgar Magana","email":"emagana@gmail.com","username":"emagana"},"unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"# This is stolen from nova/flags.py"},{"line_number":43,"context_line":"def _get_my_ip():"},{"line_number":44,"context_line":"    \"\"\""},{"line_number":45,"context_line":"    Returns the actual ip of the local machine."},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAALn%2F%2F2xQ%3D","line":43,"updated":"2012-11-01 05:32:49.000000000","message":"I do agree with taking code from other projects but let\u0027s be more clear on the code precedence, maybe just pointing the class that has been copied.","commit_id":"9c68ed8efba8447ae5ad5c5e66c891a5620bb625"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"# This is stolen from nova/flags.py"},{"line_number":43,"context_line":"def _get_my_ip():"},{"line_number":44,"context_line":"    \"\"\""},{"line_number":45,"context_line":"    Returns the actual ip of the local machine."},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAALn%2F%2FylY%3D","line":43,"in_reply_to":"AAAALn%2F%2F2xQ%3D","updated":"2012-11-06 12:50:37.000000000","message":"I\u0027m not sure what you\u0027re suggesting.\nI updated the comment as follows\n# This is copied of nova.flags._get_my_ip()                                     \n# Agent shouldn\u0027t depend on nova module","commit_id":"9c68ed8efba8447ae5ad5c5e66c891a5620bb625"},{"author":{"_account_id":2649,"name":"Zhang Hua","email":"zhuadl@cn.ibm.com","username":"zhang-hare"},"change_message_id":"9e05913d53dce97be1389985cb1a25cc185cf7a6","unresolved":false,"context_lines":[{"line_number":191,"context_line":""},{"line_number":192,"context_line":"    LOG.debug(\"api %s\", ofp_rest_api_addr)"},{"line_number":193,"context_line":"    if ofp_controller_addr:"},{"line_number":194,"context_line":"        LOG.warn(\u0027OF controller parameter is stale %s\u0027, ofp_controller_addr)"},{"line_number":195,"context_line":"    if not ofp_rest_api_addr:"},{"line_number":196,"context_line":"        raise RuntimeError(\"Ryu rest API port isn\u0027t specified\")"},{"line_number":197,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAALn%2F%2FxfY%3D","line":194,"updated":"2012-11-07 07:41:05.000000000","message":"we\u0027d better use _ function for i18n message.","commit_id":"9c68ed8efba8447ae5ad5c5e66c891a5620bb625"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"unresolved":false,"context_lines":[{"line_number":191,"context_line":""},{"line_number":192,"context_line":"    LOG.debug(\"api %s\", ofp_rest_api_addr)"},{"line_number":193,"context_line":"    if ofp_controller_addr:"},{"line_number":194,"context_line":"        LOG.warn(\u0027OF controller parameter is stale %s\u0027, ofp_controller_addr)"},{"line_number":195,"context_line":"    if not ofp_rest_api_addr:"},{"line_number":196,"context_line":"        raise RuntimeError(\"Ryu rest API port isn\u0027t specified\")"},{"line_number":197,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAALn%2F%2FxXg%3D","line":194,"in_reply_to":"AAAALn%2F%2FxfY%3D","updated":"2012-11-07 10:00:54.000000000","message":"Done","commit_id":"9c68ed8efba8447ae5ad5c5e66c891a5620bb625"},{"author":{"_account_id":2649,"name":"Zhang Hua","email":"zhuadl@cn.ibm.com","username":"zhang-hare"},"change_message_id":"9e05913d53dce97be1389985cb1a25cc185cf7a6","unresolved":false,"context_lines":[{"line_number":195,"context_line":"    if not ofp_rest_api_addr:"},{"line_number":196,"context_line":"        raise RuntimeError(\"Ryu rest API port isn\u0027t specified\")"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"    LOG.debug(\"going to ofp controller mode %s\", ofp_rest_api_addr)"},{"line_number":199,"context_line":"    return ofp_rest_api_addr"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAALn%2F%2FxfU%3D","line":198,"updated":"2012-11-07 07:41:05.000000000","message":"we should use _ function for i18n message.","commit_id":"9c68ed8efba8447ae5ad5c5e66c891a5620bb625"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"unresolved":false,"context_lines":[{"line_number":195,"context_line":"    if not ofp_rest_api_addr:"},{"line_number":196,"context_line":"        raise RuntimeError(\"Ryu rest API port isn\u0027t specified\")"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"    LOG.debug(\"going to ofp controller mode %s\", ofp_rest_api_addr)"},{"line_number":199,"context_line":"    return ofp_rest_api_addr"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAALn%2F%2FxXc%3D","line":198,"in_reply_to":"AAAALn%2F%2FxfU%3D","updated":"2012-11-07 10:00:54.000000000","message":"Done","commit_id":"9c68ed8efba8447ae5ad5c5e66c891a5620bb625"},{"author":{"_account_id":1994,"name":"Zhongyue Luo","email":"zhongyue.luo@gmail.com","username":"zyluo"},"unresolved":false,"context_lines":[{"line_number":24,"context_line":"import netifaces"},{"line_number":25,"context_line":"import socket"},{"line_number":26,"context_line":"from sqlalchemy.ext.sqlsoup import SqlSoup"},{"line_number":27,"context_line":"import sys"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"from ryu.app import client"},{"line_number":30,"context_line":"from ryu.app import conf_switch_key"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAALn%2F%2FwfY%3D","line":27,"updated":"2012-11-08 05:20:52.000000000","message":"This is a default package. It should be below \"import socket\"","commit_id":"c5d4404a8edb9f34e564f69806e5caad73beb5a2"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"unresolved":false,"context_lines":[{"line_number":24,"context_line":"import netifaces"},{"line_number":25,"context_line":"import socket"},{"line_number":26,"context_line":"from sqlalchemy.ext.sqlsoup import SqlSoup"},{"line_number":27,"context_line":"import sys"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"from ryu.app import client"},{"line_number":30,"context_line":"from ryu.app import conf_switch_key"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAALn%2F%2FwSM%3D","line":27,"in_reply_to":"AAAALn%2F%2FwfY%3D","updated":"2012-11-08 09:17:34.000000000","message":"Done","commit_id":"c5d4404a8edb9f34e564f69806e5caad73beb5a2"},{"author":{"_account_id":1994,"name":"Zhongyue Luo","email":"zhongyue.luo@gmail.com","username":"zyluo"},"unresolved":false,"context_lines":[{"line_number":25,"context_line":"import socket"},{"line_number":26,"context_line":"from sqlalchemy.ext.sqlsoup import SqlSoup"},{"line_number":27,"context_line":"import sys"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"from ryu.app import client"},{"line_number":30,"context_line":"from ryu.app import conf_switch_key"},{"line_number":31,"context_line":"from ryu.app import rest_nw_id"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAALn%2F%2FwfM%3D","line":28,"updated":"2012-11-08 05:20:52.000000000","message":"sqlalchemy and ryu are third party libraries from quantum\u0027s point of view. Therefore this blank line should be deleted and \"from sqlalchemy.ext.sqlsoup import SqlSoup\" should go right under \"from ryu.app import rest_nw_id\"","commit_id":"c5d4404a8edb9f34e564f69806e5caad73beb5a2"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"unresolved":false,"context_lines":[{"line_number":25,"context_line":"import socket"},{"line_number":26,"context_line":"from sqlalchemy.ext.sqlsoup import SqlSoup"},{"line_number":27,"context_line":"import sys"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"from ryu.app import client"},{"line_number":30,"context_line":"from ryu.app import conf_switch_key"},{"line_number":31,"context_line":"from ryu.app import rest_nw_id"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAALn%2F%2FwSI%3D","line":28,"in_reply_to":"AAAALn%2F%2FwfM%3D","updated":"2012-11-08 09:17:34.000000000","message":"Done","commit_id":"c5d4404a8edb9f34e564f69806e5caad73beb5a2"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":21,"context_line":"# @author: Isaku Yamahata"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"import httplib"},{"line_number":24,"context_line":"import netifaces"},{"line_number":25,"context_line":"import socket"},{"line_number":26,"context_line":"import sys"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAALn%2F%2FwMM%3D","line":24,"updated":"2012-11-08 12:19:59.000000000","message":"I thnk it Is 3rd party library. Need to be moved to the second group of import.","commit_id":"24a917271d1143bdf0b39c16afe69d6fe6401824"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"unresolved":false,"context_lines":[{"line_number":21,"context_line":"# @author: Isaku Yamahata"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"import httplib"},{"line_number":24,"context_line":"import netifaces"},{"line_number":25,"context_line":"import socket"},{"line_number":26,"context_line":"import sys"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAALn%2F%2FvF0%3D","line":24,"in_reply_to":"AAAALn%2F%2FwMM%3D","updated":"2012-11-09 08:00:35.000000000","message":"Done","commit_id":"24a917271d1143bdf0b39c16afe69d6fe6401824"}],"quantum/plugins/ryu/db/api_v2.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":187,"context_line":""},{"line_number":188,"context_line":"def port_binding_create(port_id, net_id, dpid, port_no):"},{"line_number":189,"context_line":"    session \u003d db.get_session()"},{"line_number":190,"context_line":"    session.query(models_v2.Port).filter("},{"line_number":191,"context_line":"        models_v2.Port.network_id \u003d\u003d net_id).filter("},{"line_number":192,"context_line":"            models_v2.Port.id \u003d\u003d port_id)  # confirm port exists"},{"line_number":193,"context_line":"    with session.begin():"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAALn%2F%2F6ns%3D","line":190,"updated":"2012-10-28 09:48:51.000000000","message":"What if the port does not exist?","commit_id":"55e8b6ef1df10d5aa47d4d10ee460d161a45644b"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"unresolved":false,"context_lines":[{"line_number":187,"context_line":""},{"line_number":188,"context_line":"def port_binding_create(port_id, net_id, dpid, port_no):"},{"line_number":189,"context_line":"    session \u003d db.get_session()"},{"line_number":190,"context_line":"    session.query(models_v2.Port).filter("},{"line_number":191,"context_line":"        models_v2.Port.network_id \u003d\u003d net_id).filter("},{"line_number":192,"context_line":"            models_v2.Port.id \u003d\u003d port_id)  # confirm port exists"},{"line_number":193,"context_line":"    with session.begin():"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAALn%2F%2F4NI%3D","line":190,"in_reply_to":"AAAALn%2F%2F6ns%3D","updated":"2012-10-31 04:18:03.000000000","message":"This raises exception.\nEventual caller, REST API request gets 404.","commit_id":"55e8b6ef1df10d5aa47d4d10ee460d161a45644b"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":188,"context_line":"    session \u003d db.get_session()"},{"line_number":189,"context_line":"    session.query(models_v2.Port).filter("},{"line_number":190,"context_line":"        models_v2.Port.network_id \u003d\u003d net_id).filter("},{"line_number":191,"context_line":"            models_v2.Port.id \u003d\u003d port_id)  # confirm port exists"},{"line_number":192,"context_line":"    with session.begin():"},{"line_number":193,"context_line":"        port_binding \u003d ryu_models_v2.PortBinding(net_id, port_id,"},{"line_number":194,"context_line":"                                                 dpid, port_no)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAALn%2F%2Fwjs%3D","line":191,"updated":"2012-11-08 03:47:46.000000000","message":"Don\u0027t we need to check the result of query()? I think this call would succeed even if the port does not exist. Is it right?\n\nSame question for port_binding_get() and port_binding_destroy().","commit_id":"c5d4404a8edb9f34e564f69806e5caad73beb5a2"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"unresolved":false,"context_lines":[{"line_number":188,"context_line":"    session \u003d db.get_session()"},{"line_number":189,"context_line":"    session.query(models_v2.Port).filter("},{"line_number":190,"context_line":"        models_v2.Port.network_id \u003d\u003d net_id).filter("},{"line_number":191,"context_line":"            models_v2.Port.id \u003d\u003d port_id)  # confirm port exists"},{"line_number":192,"context_line":"    with session.begin():"},{"line_number":193,"context_line":"        port_binding \u003d ryu_models_v2.PortBinding(net_id, port_id,"},{"line_number":194,"context_line":"                                                 dpid, port_no)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAALn%2F%2FwOE%3D","line":191,"in_reply_to":"AAAALn%2F%2FwPk%3D","updated":"2012-11-08 11:24:24.000000000","message":"Oops. You\u0027re right. I\u0027ll fix it by adding .one().","commit_id":"c5d4404a8edb9f34e564f69806e5caad73beb5a2"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":188,"context_line":"    session \u003d db.get_session()"},{"line_number":189,"context_line":"    session.query(models_v2.Port).filter("},{"line_number":190,"context_line":"        models_v2.Port.network_id \u003d\u003d net_id).filter("},{"line_number":191,"context_line":"            models_v2.Port.id \u003d\u003d port_id)  # confirm port exists"},{"line_number":192,"context_line":"    with session.begin():"},{"line_number":193,"context_line":"        port_binding \u003d ryu_models_v2.PortBinding(net_id, port_id,"},{"line_number":194,"context_line":"                                                 dpid, port_no)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAALn%2F%2FwPk%3D","line":191,"in_reply_to":"AAAALn%2F%2FwSo%3D","updated":"2012-11-08 10:24:23.000000000","message":"Please let me clarify the situation a little more.\n\nI did a similar test with quantum.db.models_v2.Network and the log is available at http://paste.openstack.org/show/24966/.\nAccording to my test result, session.query(...).filter(...) does not raise an exception. If I added .one() at the end, I got NoResultFound.\n\nI am afraid I missed something.","commit_id":"c5d4404a8edb9f34e564f69806e5caad73beb5a2"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"unresolved":false,"context_lines":[{"line_number":188,"context_line":"    session \u003d db.get_session()"},{"line_number":189,"context_line":"    session.query(models_v2.Port).filter("},{"line_number":190,"context_line":"        models_v2.Port.network_id \u003d\u003d net_id).filter("},{"line_number":191,"context_line":"            models_v2.Port.id \u003d\u003d port_id)  # confirm port exists"},{"line_number":192,"context_line":"    with session.begin():"},{"line_number":193,"context_line":"        port_binding \u003d ryu_models_v2.PortBinding(net_id, port_id,"},{"line_number":194,"context_line":"                                                 dpid, port_no)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAALn%2F%2FwSo%3D","line":191,"in_reply_to":"AAAALn%2F%2Fwjs%3D","updated":"2012-11-08 09:17:34.000000000","message":"No. If no port exists, exception raised.\nEventually it results in 404.","commit_id":"c5d4404a8edb9f34e564f69806e5caad73beb5a2"}],"quantum/plugins/ryu/nova/linux_net.py":[{"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":"class LinuxOVSRyuInterfaceDriver(linux_net.LinuxOVSInterfaceDriver):"},{"line_number":42,"context_line":"    def __init__(self):"},{"line_number":43,"context_line":"        super(LinuxOVSRyuInterfaceDriver, self).__init__()"},{"line_number":44,"context_line":"        self.client \u003d client.Client(endpoint_url\u003dFLAGS.quantum_url,"},{"line_number":45,"context_line":"                                    auth_strategy\u003dNone,"},{"line_number":46,"context_line":"                                    timeout\u003dFLAGS.quantum_url_timeout)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAALn%2F%2F6no%3D","line":43,"updated":"2012-10-28 09:48:51.000000000","message":"Why not have this as part of the RYU plugin on Quantum? Why does this need to be maintained in nova?","commit_id":"55e8b6ef1df10d5aa47d4d10ee460d161a45644b"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"class LinuxOVSRyuInterfaceDriver(linux_net.LinuxOVSInterfaceDriver):"},{"line_number":42,"context_line":"    def __init__(self):"},{"line_number":43,"context_line":"        super(LinuxOVSRyuInterfaceDriver, self).__init__()"},{"line_number":44,"context_line":"        self.client \u003d client.Client(endpoint_url\u003dFLAGS.quantum_url,"},{"line_number":45,"context_line":"                                    auth_strategy\u003dNone,"},{"line_number":46,"context_line":"                                    timeout\u003dFLAGS.quantum_url_timeout)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAALn%2F%2F4NE%3D","line":43,"in_reply_to":"AAAALn%2F%2F6no%3D","updated":"2012-10-31 04:18:03.000000000","message":"I\u0027d planned another patchset to remove nova directory entirely.\nI\u0027ll include such part into this patchset.","commit_id":"55e8b6ef1df10d5aa47d4d10ee460d161a45644b"}],"quantum/plugins/ryu/nova/vif.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":43,"context_line":"        super(LibvirtOpenVswitchOFPRyuDriver, self).__init__()"},{"line_number":44,"context_line":"        LOG.debug(\u0027ryu rest host %s\u0027, FLAGS.libvirt_ovs_bridge)"},{"line_number":45,"context_line":"        self.datapath_id \u003d _get_datapath_id(FLAGS.libvirt_ovs_bridge)"},{"line_number":46,"context_line":"        self.client \u003d client.Client(endpoint_url\u003dFLAGS.quantum_url,"},{"line_number":47,"context_line":"                                    auth_strategy\u003dNone,"},{"line_number":48,"context_line":"                                    timeout\u003dFLAGS.quantum_url_timeout)"},{"line_number":49,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAALn%2F%2F6nk%3D","line":46,"updated":"2012-10-28 09:48:51.000000000","message":"Sam as with linux net driver? Why not maintain this in Quantum?","commit_id":"55e8b6ef1df10d5aa47d4d10ee460d161a45644b"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"unresolved":false,"context_lines":[{"line_number":43,"context_line":"        super(LibvirtOpenVswitchOFPRyuDriver, self).__init__()"},{"line_number":44,"context_line":"        LOG.debug(\u0027ryu rest host %s\u0027, FLAGS.libvirt_ovs_bridge)"},{"line_number":45,"context_line":"        self.datapath_id \u003d _get_datapath_id(FLAGS.libvirt_ovs_bridge)"},{"line_number":46,"context_line":"        self.client \u003d client.Client(endpoint_url\u003dFLAGS.quantum_url,"},{"line_number":47,"context_line":"                                    auth_strategy\u003dNone,"},{"line_number":48,"context_line":"                                    timeout\u003dFLAGS.quantum_url_timeout)"},{"line_number":49,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAALn%2F%2F4M8%3D","line":46,"in_reply_to":"AAAALn%2F%2F6nk%3D","updated":"2012-10-31 04:18:03.000000000","message":"Remove this nova directory entirely was planned as another patchset, though.\nI\u0027ll include those change into this patchset.","commit_id":"55e8b6ef1df10d5aa47d4d10ee460d161a45644b"}],"quantum/plugins/ryu/ryu_quantum_plugin.py":[{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"7c2fe5be33148f51c18c10032c012364728a1716","unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"class RyuQuantumPluginV2(db_base_plugin_v2.QuantumDbPluginV2,"},{"line_number":47,"context_line":"                         l3_db.L3_NAT_db_mixin):"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    supported_extension_aliases \u003d [\"router\"]"},{"line_number":50,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALn%2F%2F%2FAU%3D","line":47,"updated":"2012-10-23 13:49:18.000000000","message":"Your plugin does not appear to support DHCP.  Do you intend to support it via another method?","commit_id":"366bd8ab7f20207348ff7d7d9b2ed403bf0dd7ba"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"7c2fe5be33148f51c18c10032c012364728a1716","unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"class RyuQuantumPluginV2(db_base_plugin_v2.QuantumDbPluginV2,"},{"line_number":47,"context_line":"                         l3_db.L3_NAT_db_mixin):"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    supported_extension_aliases \u003d [\"router\"]"},{"line_number":50,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALn%2F%2F%2BHY%3D","line":47,"in_reply_to":"AAAALn%2F%2F%2BKk%3D","updated":"2012-10-24 03:54:39.000000000","message":"You\u0027re correct I missed the rpc setup.  Sorry for the confusion.","commit_id":"366bd8ab7f20207348ff7d7d9b2ed403bf0dd7ba"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"class RyuQuantumPluginV2(db_base_plugin_v2.QuantumDbPluginV2,"},{"line_number":47,"context_line":"                         l3_db.L3_NAT_db_mixin):"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    supported_extension_aliases \u003d [\"router\"]"},{"line_number":50,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALn%2F%2F%2BKk%3D","line":47,"in_reply_to":"AAAALn%2F%2F%2FAU%3D","updated":"2012-10-24 03:00:37.000000000","message":"The plugin does support DHCP.\nWhat issue are you seeing?","commit_id":"366bd8ab7f20207348ff7d7d9b2ed403bf0dd7ba"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":102,"context_line":"            except orm_exc.MultipleResultsFound:"},{"line_number":103,"context_line":"                continue"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"            self.client.update_port(network_id, dpid, port_no)"},{"line_number":106,"context_line":"            self.client.update_mac(network_id, dpid, port_no, port.mac_address)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    def _client_create_network(self, net_id, tunnel_key):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAALn%2F%2F6ng%3D","line":105,"updated":"2012-10-28 09:48:51.000000000","message":"What if this fails, will the mac be updated?","commit_id":"55e8b6ef1df10d5aa47d4d10ee460d161a45644b"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"unresolved":false,"context_lines":[{"line_number":102,"context_line":"            except orm_exc.MultipleResultsFound:"},{"line_number":103,"context_line":"                continue"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"            self.client.update_port(network_id, dpid, port_no)"},{"line_number":106,"context_line":"            self.client.update_mac(network_id, dpid, port_no, port.mac_address)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    def _client_create_network(self, net_id, tunnel_key):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAALn%2F%2F4M0%3D","line":105,"in_reply_to":"AAAALn%2F%2F6ng%3D","updated":"2012-10-31 04:18:03.000000000","message":"No.\nIf it fails, it raises exception and quantum server fails to start because this function\nis called as start up initialization. And it will be logged.\nOperator should check http connectivity and restart quantum server.","commit_id":"55e8b6ef1df10d5aa47d4d10ee460d161a45644b"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":16,"context_line":"#    under the License."},{"line_number":17,"context_line":"# @author: Isaku Yamahata"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import logging"},{"line_number":20,"context_line":"from sqlalchemy.exc import IntegrityError"},{"line_number":21,"context_line":"from sqlalchemy.orm import exc as orm_exc"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAALn%2F%2F4E0%3D","line":19,"updated":"2012-10-31 08:05:23.000000000","message":"Please have a new line here","commit_id":"c04a36b61b2ad9d21610c37b4b7ba67c30078bd2"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"unresolved":false,"context_lines":[{"line_number":16,"context_line":"#    under the License."},{"line_number":17,"context_line":"# @author: Isaku Yamahata"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import logging"},{"line_number":20,"context_line":"from sqlalchemy.exc import IntegrityError"},{"line_number":21,"context_line":"from sqlalchemy.orm import exc as orm_exc"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAALn%2F%2F2x4%3D","line":19,"in_reply_to":"AAAALn%2F%2F4E0%3D","updated":"2012-11-01 03:55:58.000000000","message":"Done","commit_id":"c04a36b61b2ad9d21610c37b4b7ba67c30078bd2"},{"author":{"_account_id":2649,"name":"Zhang Hua","email":"zhuadl@cn.ibm.com","username":"zhang-hare"},"change_message_id":"9e05913d53dce97be1389985cb1a25cc185cf7a6","unresolved":false,"context_lines":[{"line_number":220,"context_line":"            if (port_binding.dpid !\u003d datapath_id or"},{"line_number":221,"context_line":"                    port_binding.port_no !\u003d port_no):"},{"line_number":222,"context_line":"                raise q_exc.InvalidInput("},{"line_number":223,"context_line":"                    error_message\u003d\u0027invalid (datapath_id, port_no) requested \u0027"},{"line_number":224,"context_line":"                    \u0027(%s, %s), but (%s, %s)\u0027 %"},{"line_number":225,"context_line":"                    (datapath_id, port_no,"},{"line_number":226,"context_line":"                     port_binding.dpid, port_binding.port_no))"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAALn%2F%2FxfM%3D","line":223,"updated":"2012-11-07 07:41:05.000000000","message":"we should use _ function for i18n message.","commit_id":"9c68ed8efba8447ae5ad5c5e66c891a5620bb625"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"unresolved":false,"context_lines":[{"line_number":220,"context_line":"            if (port_binding.dpid !\u003d datapath_id or"},{"line_number":221,"context_line":"                    port_binding.port_no !\u003d port_no):"},{"line_number":222,"context_line":"                raise q_exc.InvalidInput("},{"line_number":223,"context_line":"                    error_message\u003d\u0027invalid (datapath_id, port_no) requested \u0027"},{"line_number":224,"context_line":"                    \u0027(%s, %s), but (%s, %s)\u0027 %"},{"line_number":225,"context_line":"                    (datapath_id, port_no,"},{"line_number":226,"context_line":"                     port_binding.dpid, port_binding.port_no))"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAALn%2F%2FxXY%3D","line":223,"in_reply_to":"AAAALn%2F%2FxfM%3D","updated":"2012-11-07 10:00:54.000000000","message":"Done","commit_id":"9c68ed8efba8447ae5ad5c5e66c891a5620bb625"},{"author":{"_account_id":1994,"name":"Zhongyue Luo","email":"zhongyue.luo@gmail.com","username":"zyluo"},"unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from sqlalchemy.exc import IntegrityError"},{"line_number":20,"context_line":"from sqlalchemy.orm import exc as orm_exc"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from ryu.app import client"},{"line_number":23,"context_line":"from ryu.app.client import ignore_http_not_found"},{"line_number":24,"context_line":"from ryu.app import rest_nw_id"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAALn%2F%2FwcE%3D","line":21,"updated":"2012-11-08 05:20:52.000000000","message":"This line should be deleted and sqlalchemy imports should go right after ryu imports with no blank line","commit_id":"c5d4404a8edb9f34e564f69806e5caad73beb5a2"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from sqlalchemy.exc import IntegrityError"},{"line_number":20,"context_line":"from sqlalchemy.orm import exc as orm_exc"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from ryu.app import client"},{"line_number":23,"context_line":"from ryu.app.client import ignore_http_not_found"},{"line_number":24,"context_line":"from ryu.app import rest_nw_id"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAALn%2F%2FwSg%3D","line":21,"in_reply_to":"AAAALn%2F%2FwcE%3D","updated":"2012-11-08 09:17:34.000000000","message":"Done","commit_id":"c5d4404a8edb9f34e564f69806e5caad73beb5a2"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":16,"context_line":"#    under the License."},{"line_number":17,"context_line":"# @author: Isaku Yamahata"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from ryu.app import client"},{"line_number":20,"context_line":"from ryu.app.client import ignore_http_not_found"},{"line_number":21,"context_line":"from ryu.app import rest_nw_id"},{"line_number":22,"context_line":"from sqlalchemy.exc import IntegrityError"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAMH%2F%2F%2F1s%3D","line":19,"updated":"2012-11-12 07:28:18.000000000","message":"the ryu imports should be below. no?","commit_id":"d3f6dec0438e7409487454e5fcba896dda6e43f1"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"unresolved":false,"context_lines":[{"line_number":16,"context_line":"#    under the License."},{"line_number":17,"context_line":"# @author: Isaku Yamahata"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from ryu.app import client"},{"line_number":20,"context_line":"from ryu.app.client import ignore_http_not_found"},{"line_number":21,"context_line":"from ryu.app import rest_nw_id"},{"line_number":22,"context_line":"from sqlalchemy.exc import IntegrityError"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAMH%2F%2F%2FPc%3D","line":19,"in_reply_to":"AAAAMH%2F%2F%2F1s%3D","updated":"2012-11-12 19:15:26.000000000","message":"I\u0027m not sure what you are suggesting.\nThird party lib is ordered by full module path.","commit_id":"d3f6dec0438e7409487454e5fcba896dda6e43f1"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":16,"context_line":"#    under the License."},{"line_number":17,"context_line":"# @author: Isaku Yamahata"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from ryu.app import client"},{"line_number":20,"context_line":"from ryu.app.client import ignore_http_not_found"},{"line_number":21,"context_line":"from ryu.app import rest_nw_id"},{"line_number":22,"context_line":"from sqlalchemy.exc import IntegrityError"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAMH%2F%2F%2BzA%3D","line":19,"in_reply_to":"AAAAMH%2F%2F%2FPc%3D","updated":"2012-11-13 03:03:31.000000000","message":"The current order follows HACKING.rst and it right.","commit_id":"d3f6dec0438e7409487454e5fcba896dda6e43f1"},{"author":{"_account_id":1994,"name":"Zhongyue Luo","email":"zhongyue.luo@gmail.com","username":"zyluo"},"unresolved":false,"context_lines":[{"line_number":210,"context_line":"            try:"},{"line_number":211,"context_line":"                db_api_v2.port_binding_create(id, net_id, datapath_id, port_no)"},{"line_number":212,"context_line":"            except IntegrityError:"},{"line_number":213,"context_line":"                # TODO:XXX should do transaction?"},{"line_number":214,"context_line":"                return p"},{"line_number":215,"context_line":"            self.client.create_port(net_id, datapath_id, port_no)"},{"line_number":216,"context_line":"            self.client.create_mac(net_id, datapath_id, port_no, mac_address)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAMH%2F%2F%2F7I%3D","line":213,"updated":"2012-11-12 02:40:52.000000000","message":"How about:\n\n except IntegrityError:\n     # TODO:XXX should do transaction?\n     pass\n else:\n     self.client.create_port(net_id, datapath_id, port_no)\n     self.client.create_mac(net_id, datapath_id, port_no, mac_address)\n\nThis way it would be easier to understand the transaction rollback later when it is added.","commit_id":"d3f6dec0438e7409487454e5fcba896dda6e43f1"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"unresolved":false,"context_lines":[{"line_number":210,"context_line":"            try:"},{"line_number":211,"context_line":"                db_api_v2.port_binding_create(id, net_id, datapath_id, port_no)"},{"line_number":212,"context_line":"            except IntegrityError:"},{"line_number":213,"context_line":"                # TODO:XXX should do transaction?"},{"line_number":214,"context_line":"                return p"},{"line_number":215,"context_line":"            self.client.create_port(net_id, datapath_id, port_no)"},{"line_number":216,"context_line":"            self.client.create_mac(net_id, datapath_id, port_no, mac_address)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAMH%2F%2F%2FPo%3D","line":213,"in_reply_to":"AAAAMH%2F%2F%2F7I%3D","updated":"2012-11-12 19:15:26.000000000","message":"Done","commit_id":"d3f6dec0438e7409487454e5fcba896dda6e43f1"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":219,"context_line":"                    port_binding.port_no !\u003d port_no):"},{"line_number":220,"context_line":"                raise q_exc.InvalidInput("},{"line_number":221,"context_line":"                    error_message\u003d_(\u0027invalid (datapath_id, port_no) \u0027"},{"line_number":222,"context_line":"                                    \u0027requested (%s, %s), but (%s, %s)\u0027) %"},{"line_number":223,"context_line":"                    (datapath_id, port_no,"},{"line_number":224,"context_line":"                     port_binding.dpid, port_binding.port_no))"},{"line_number":225,"context_line":"            self.client.update_network(net_id)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAMH%2F%2F%2F1k%3D","line":222,"updated":"2012-11-12 07:28:18.000000000","message":"For localization with multiple arguments in the string it\u0027s better to use named interpolation, for example (%(datapath_id)s, so translators can rearrange the order of the words, if needed for the language.","commit_id":"d3f6dec0438e7409487454e5fcba896dda6e43f1"},{"author":{"_account_id":1994,"name":"Zhongyue Luo","email":"zhongyue.luo@gmail.com","username":"zyluo"},"unresolved":false,"context_lines":[{"line_number":219,"context_line":"                    port_binding.port_no !\u003d port_no):"},{"line_number":220,"context_line":"                raise q_exc.InvalidInput("},{"line_number":221,"context_line":"                    error_message\u003d_(\u0027invalid (datapath_id, port_no) \u0027"},{"line_number":222,"context_line":"                                    \u0027requested (%s, %s), but (%s, %s)\u0027) %"},{"line_number":223,"context_line":"                    (datapath_id, port_no,"},{"line_number":224,"context_line":"                     port_binding.dpid, port_binding.port_no))"},{"line_number":225,"context_line":"            self.client.update_network(net_id)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAMH%2F%2F%2F7E%3D","line":222,"updated":"2012-11-12 02:40:52.000000000","message":"The \"(datapath_id,\" should align with \"\u0027requested\"","commit_id":"d3f6dec0438e7409487454e5fcba896dda6e43f1"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"unresolved":false,"context_lines":[{"line_number":219,"context_line":"                    port_binding.port_no !\u003d port_no):"},{"line_number":220,"context_line":"                raise q_exc.InvalidInput("},{"line_number":221,"context_line":"                    error_message\u003d_(\u0027invalid (datapath_id, port_no) \u0027"},{"line_number":222,"context_line":"                                    \u0027requested (%s, %s), but (%s, %s)\u0027) %"},{"line_number":223,"context_line":"                    (datapath_id, port_no,"},{"line_number":224,"context_line":"                     port_binding.dpid, port_binding.port_no))"},{"line_number":225,"context_line":"            self.client.update_network(net_id)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAMH%2F%2F%2FPs%3D","line":222,"in_reply_to":"AAAAMH%2F%2F%2F1k%3D","updated":"2012-11-12 19:15:26.000000000","message":"Done, And fixed similar ones.","commit_id":"d3f6dec0438e7409487454e5fcba896dda6e43f1"}]}
