)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":7,"context_line":"plugin/ryu: add tunnel support"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"blueprint ryu-tunnel-support"},{"line_number":10,"context_line":"This patch adds to Ryu pluing to tunneling support."},{"line_number":11,"context_line":"Ryu supports gre tunneling which requires quantum ryu pluing to manage"},{"line_number":12,"context_line":"key assignment."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"AAAALn%2F%2FxWU%3D","line":10,"updated":"2012-11-07 10:26:12.000000000","message":"Need typo fix (pluing -\u003e plugin) and a minor grammar fix.\n\"This patch add tunneling support to Ryu plugin.\"","commit_id":"bc7c773c390c879e47fe14b6158cf16b1c782853"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"unresolved":false,"context_lines":[{"line_number":7,"context_line":"plugin/ryu: add tunnel support"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"blueprint ryu-tunnel-support"},{"line_number":10,"context_line":"This patch adds to Ryu pluing to tunneling support."},{"line_number":11,"context_line":"Ryu supports gre tunneling which requires quantum ryu pluing to manage"},{"line_number":12,"context_line":"key assignment."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"AAAALn%2F%2FvDQ%3D","line":10,"in_reply_to":"AAAALn%2F%2FxWU%3D","updated":"2012-11-09 10:07:23.000000000","message":"Done","commit_id":"bc7c773c390c879e47fe14b6158cf16b1c782853"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"blueprint ryu-tunnel-support"},{"line_number":10,"context_line":"This patch adds to Ryu pluing to tunneling support."},{"line_number":11,"context_line":"Ryu supports gre tunneling which requires quantum ryu pluing to manage"},{"line_number":12,"context_line":"key assignment."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I9f8db0913941c3da13045170e1557d333f0c68e2"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"AAAALn%2F%2FxWQ%3D","line":11,"updated":"2012-11-07 10:26:12.000000000","message":"pluing -\u003e plugin\nAlso \"Ryu supports gre tunneling which\" at the beginning seems to be unnecessary.","commit_id":"bc7c773c390c879e47fe14b6158cf16b1c782853"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"blueprint ryu-tunnel-support"},{"line_number":10,"context_line":"This patch adds to Ryu pluing to tunneling support."},{"line_number":11,"context_line":"Ryu supports gre tunneling which requires quantum ryu pluing to manage"},{"line_number":12,"context_line":"key assignment."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I9f8db0913941c3da13045170e1557d333f0c68e2"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"AAAALn%2F%2FvDM%3D","line":11,"in_reply_to":"AAAALn%2F%2FxWQ%3D","updated":"2012-11-09 10:07:23.000000000","message":"Done","commit_id":"bc7c773c390c879e47fe14b6158cf16b1c782853"}],"etc/quantum/plugins/ryu/ryu.ini":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":13,"context_line":"openflow_rest_api \u003d 127.0.0.1:8080"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"# tunnel key range: 0 \u003c tunnel_key_min \u003c tunnel_key_max"},{"line_number":16,"context_line":"# VLAN: 12bits, GRE, VLAN: 24bits"},{"line_number":17,"context_line":"# tunnel_key_min \u003d 1"},{"line_number":18,"context_line":"# tunnel_key_max \u003d 0xffffff"},{"line_number":19,"context_line":""}],"source_content_type":"text/x-properties","patch_set":8,"id":"AAAALn%2F%2FxWE%3D","line":16,"updated":"2012-11-07 10:26:12.000000000","message":"GRE, VLAN -\u003e GRE, VXLAN?","commit_id":"bc7c773c390c879e47fe14b6158cf16b1c782853"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"unresolved":false,"context_lines":[{"line_number":13,"context_line":"openflow_rest_api \u003d 127.0.0.1:8080"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"# tunnel key range: 0 \u003c tunnel_key_min \u003c tunnel_key_max"},{"line_number":16,"context_line":"# VLAN: 12bits, GRE, VLAN: 24bits"},{"line_number":17,"context_line":"# tunnel_key_min \u003d 1"},{"line_number":18,"context_line":"# tunnel_key_max \u003d 0xffffff"},{"line_number":19,"context_line":""}],"source_content_type":"text/x-properties","patch_set":8,"id":"AAAALn%2F%2FvDI%3D","line":16,"in_reply_to":"AAAALn%2F%2FxWE%3D","updated":"2012-11-09 10:07:23.000000000","message":"Done","commit_id":"bc7c773c390c879e47fe14b6158cf16b1c782853"}],"quantum/plugins/ryu/db/api_v2.py":[{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"f2deee953b2e07d5a41b57e992d6b09d6e0075b1","unresolved":false,"context_lines":[{"line_number":129,"context_line":"            \u0027AND t.tunnel_key \u003e\u003d :last_key \u0027"},{"line_number":130,"context_line":"            \u0027ORDER BY new_key LIMIT 1) \u0027"},{"line_number":131,"context_line":"        ).params(last_key\u003dlast_key).one()"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"    new_key \u003d new_key[0]  # the result is tuple."},{"line_number":134,"context_line":"    LOG.debug(\"last_key %s new_key %s\", last_key, new_key)"},{"line_number":135,"context_line":"    if new_key \u003e _TUNNEL_KEY_MAX:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALH%2F%2Fy4U%3D","line":132,"updated":"2012-08-11 15:22:35.000000000","message":"I\u0027m not sure if this works with multiple Quantum server.\nAt least, shouldn\u0027t we try several times to try to get new used key?","commit_id":"639824792df3ac7cb3f8dab8ebc6b3ff32b6fb10"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"unresolved":false,"context_lines":[{"line_number":129,"context_line":"            \u0027AND t.tunnel_key \u003e\u003d :last_key \u0027"},{"line_number":130,"context_line":"            \u0027ORDER BY new_key LIMIT 1) \u0027"},{"line_number":131,"context_line":"        ).params(last_key\u003dlast_key).one()"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"    new_key \u003d new_key[0]  # the result is tuple."},{"line_number":134,"context_line":"    LOG.debug(\"last_key %s new_key %s\", last_key, new_key)"},{"line_number":135,"context_line":"    if new_key \u003e _TUNNEL_KEY_MAX:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALH%2F%2Fylc%3D","line":132,"in_reply_to":"AAAALH%2F%2Fy4U%3D","updated":"2012-08-12 03:56:42.000000000","message":"Is multiple Quantum server in the scope? It sounds interesting.\nAnyway I\u0027ll modify the code such that it catches the transaction abort and restarts transaction.","commit_id":"639824792df3ac7cb3f8dab8ebc6b3ff32b6fb10"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":138,"context_line":"    return new_key"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"def _tunnel_key_allocate(session, network_id):"},{"line_number":142,"context_line":"    last_key \u003d _tunnel_key_last(session)"},{"line_number":143,"context_line":"    try:"},{"line_number":144,"context_line":"        new_key \u003d _tunnel_key_find(session, last_key.last_key)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAALH%2F%2Fvb0%3D","line":141,"updated":"2012-08-15 06:48:11.000000000","message":"Doe the tunnel ID need to be unique per network or unique?","commit_id":"2404ad6a8ad8362f39a71a956967c5f919fec1e0"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"unresolved":false,"context_lines":[{"line_number":138,"context_line":"    return new_key"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"def _tunnel_key_allocate(session, network_id):"},{"line_number":142,"context_line":"    last_key \u003d _tunnel_key_last(session)"},{"line_number":143,"context_line":"    try:"},{"line_number":144,"context_line":"        new_key \u003d _tunnel_key_find(session, last_key.last_key)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAALH%2F%2FuGM%3D","line":141,"in_reply_to":"AAAALH%2F%2Fvb0%3D","updated":"2012-08-16 07:19:37.000000000","message":"Yes. This is same to VLAN id of LB or OVS plugin.","commit_id":"2404ad6a8ad8362f39a71a956967c5f919fec1e0"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":152,"context_line":"    return new_key"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"_TRANSACTION_RETRY_MAX \u003d 16  # how many?"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"def tunnel_key_allocate(network_id):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAALH%2F%2FvcI%3D","line":155,"updated":"2012-08-15 06:48:11.000000000","message":"Is this something that you may want to add to the ryu.ini file (at least give a user a change to update the config instead of the code)","commit_id":"2404ad6a8ad8362f39a71a956967c5f919fec1e0"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"unresolved":false,"context_lines":[{"line_number":152,"context_line":"    return new_key"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"_TRANSACTION_RETRY_MAX \u003d 16  # how many?"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"def tunnel_key_allocate(network_id):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAALH%2F%2FuGI%3D","line":155,"in_reply_to":"AAAALH%2F%2FvcI%3D","updated":"2012-08-16 07:19:37.000000000","message":"No. User isn\u0027t interested in how many internal db transaction retries are allowed.\nAssuming that only single Quantum server is active, the retry won\u0027t happen.\nI changed it such that it returns 503 when retry max is reached, so that user can\nre-issue the request.","commit_id":"2404ad6a8ad8362f39a71a956967c5f919fec1e0"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"ab5bc5353e0b372d8b42910c4c3ad8ca475574c7","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    session \u003d db.get_session()"},{"line_number":44,"context_line":"    return session.query(models_v2.Network).all()"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"# VLAN: 12 bits"},{"line_number":48,"context_line":"# GRE, VXLAN: 24bits"},{"line_number":49,"context_line":"# TODO(yamahata): STT: 64bits"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAALn%2F%2F%2FAs%3D","line":46,"updated":"2012-10-23 13:27:57.000000000","message":"This module uses internal global values to maintain private state between method invocations.  You should refactor this into a class.","commit_id":"8660b015564662c288beed0c8c020574fc36e262"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"unresolved":false,"context_lines":[{"line_number":43,"context_line":"    session \u003d db.get_session()"},{"line_number":44,"context_line":"    return session.query(models_v2.Network).all()"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"# VLAN: 12 bits"},{"line_number":48,"context_line":"# GRE, VXLAN: 24bits"},{"line_number":49,"context_line":"# TODO(yamahata): STT: 64bits"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAALn%2F%2F8Z4%3D","line":46,"in_reply_to":"AAAALn%2F%2F%2FAs%3D","updated":"2012-10-25 18:33:35.000000000","message":"Done","commit_id":"8660b015564662c288beed0c8c020574fc36e262"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"#    under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import logging"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from sqlalchemy import exc as sa_exc"},{"line_number":20,"context_line":"from sqlalchemy import func"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAMH%2F%2F%2F1c%3D","line":17,"updated":"2012-11-12 07:32:15.000000000","message":"please use common loggin.","commit_id":"17f84f325aa642b04663639bba5cca89986ae562"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"#    under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import logging"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from sqlalchemy import exc as sa_exc"},{"line_number":20,"context_line":"from sqlalchemy import func"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAMH%2F%2F%2FxM%3D","line":17,"in_reply_to":"AAAAMH%2F%2F%2F1c%3D","updated":"2012-11-12 09:05:51.000000000","message":"Done","commit_id":"17f84f325aa642b04663639bba5cca89986ae562"}],"quantum/plugins/ryu/db/models_v2.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":25,"context_line":"    __tablename__ \u003d \u0027ofp_server\u0027"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    id \u003d sa.Column(sa.Integer, primary_key\u003dTrue, autoincrement\u003dTrue)"},{"line_number":28,"context_line":"    address \u003d sa.Column(sa.String(255))       # netloc \u003chost ip address\u003e:\u003cport\u003e"},{"line_number":29,"context_line":"    host_type \u003d sa.Column(sa.String(255))     # server type"},{"line_number":30,"context_line":"                                              # Controller, REST_API"},{"line_number":31,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAALH%2F%2FvZ0%3D","line":28,"updated":"2012-08-15 06:48:11.000000000","message":"Does this need to be 255. Maximum IPv6 address length should be ok with 64 you can add in a 6 extra bytes for the port and :","commit_id":"2404ad6a8ad8362f39a71a956967c5f919fec1e0"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"unresolved":false,"context_lines":[{"line_number":25,"context_line":"    __tablename__ \u003d \u0027ofp_server\u0027"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    id \u003d sa.Column(sa.Integer, primary_key\u003dTrue, autoincrement\u003dTrue)"},{"line_number":28,"context_line":"    address \u003d sa.Column(sa.String(255))       # netloc \u003chost ip address\u003e:\u003cport\u003e"},{"line_number":29,"context_line":"    host_type \u003d sa.Column(sa.String(255))     # server type"},{"line_number":30,"context_line":"                                              # Controller, REST_API"},{"line_number":31,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAALH%2F%2FuGE%3D","line":28,"in_reply_to":"AAAALH%2F%2FvZ0%3D","updated":"2012-08-16 07:19:37.000000000","message":"changed it to 64","commit_id":"2404ad6a8ad8362f39a71a956967c5f919fec1e0"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"class TunnelKeyLast(model_base.BASEV2):"},{"line_number":38,"context_line":"    \"\"\"Lastly allocated Tunnel key. The next key allocation will be started"},{"line_number":39,"context_line":"    from this value + 1"},{"line_number":40,"context_line":"    \"\"\""},{"line_number":41,"context_line":"    last_key \u003d sa.Column(sa.Integer, primary_key\u003dTrue)"},{"line_number":42,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAALH%2F%2FvZs%3D","line":39,"updated":"2012-08-15 06:48:11.000000000","message":"What happens if this is 0xffffffff, is there some wrap around?","commit_id":"2404ad6a8ad8362f39a71a956967c5f919fec1e0"},{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"class TunnelKeyLast(model_base.BASEV2):"},{"line_number":38,"context_line":"    \"\"\"Lastly allocated Tunnel key. The next key allocation will be started"},{"line_number":39,"context_line":"    from this value + 1"},{"line_number":40,"context_line":"    \"\"\""},{"line_number":41,"context_line":"    last_key \u003d sa.Column(sa.Integer, primary_key\u003dTrue)"},{"line_number":42,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAALH%2F%2FuGA%3D","line":39,"in_reply_to":"AAAALH%2F%2FvZs%3D","updated":"2012-08-16 07:19:37.000000000","message":"I added limit check which allows at most 24bits. Thus overlapping won\u0027t happen.","commit_id":"2404ad6a8ad8362f39a71a956967c5f919fec1e0"}],"quantum/plugins/ryu/ryu_quantum_plugin.py":[{"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.orm import exc as sql_exc"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from ryu.app import client"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAALH%2F%2FvZo%3D","line":19,"updated":"2012-08-15 06:48:11.000000000","message":"There should be a new line here","commit_id":"2404ad6a8ad8362f39a71a956967c5f919fec1e0"},{"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.orm import exc as sql_exc"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from ryu.app import client"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAALH%2F%2FuF4%3D","line":19,"in_reply_to":"AAAALH%2F%2FvZo%3D","updated":"2012-08-16 07:19:37.000000000","message":"Done","commit_id":"2404ad6a8ad8362f39a71a956967c5f919fec1e0"},{"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":""},{"line_number":21,"context_line":"from sqlalchemy.orm import exc as sql_exc"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAMH%2F%2F%2F1Y%3D","line":19,"updated":"2012-11-12 07:32:15.000000000","message":"ditto","commit_id":"17f84f325aa642b04663639bba5cca89986ae562"},{"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":""},{"line_number":21,"context_line":"from sqlalchemy.orm import exc as sql_exc"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAMH%2F%2F%2FxI%3D","line":19,"in_reply_to":"AAAAMH%2F%2F%2F1Y%3D","updated":"2012-11-12 09:05:51.000000000","message":"Done","commit_id":"17f84f325aa642b04663639bba5cca89986ae562"}]}
