)]}'
{"neutron/plugins/bigswitch/config.py":[{"author":{"_account_id":490,"name":"Sumit Naiksatam","email":"sumitnaiksatam@gmail.com","username":"snaiksat"},"change_message_id":"86131eaf1f4c3413f4f6550d171b6f053bf9e6e0","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    cfg.IntOpt(\u0027server_timeout\u0027, default\u003d10,"},{"line_number":47,"context_line":"               help\u003d_(\"Maximum number of seconds to wait for proxy request \""},{"line_number":48,"context_line":"                      \"to connect and complete.\")),"},{"line_number":49,"context_line":"    cfg.IntOpt(\u0027thread_pool_size\u0027, default\u003d10000,"},{"line_number":50,"context_line":"               help\u003d_(\"Maximum number of threads to spawn to handle large \""},{"line_number":51,"context_line":"                      \"volumes of port creations.\")),"},{"line_number":52,"context_line":"    cfg.StrOpt(\u0027neutron_id\u0027, default\u003d\u0027neutron-\u0027 + utils.get_hostname(),"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUX%2F%2BTW0%3D","line":49,"updated":"2014-02-22 02:19:18.000000000","message":"Is this a realistic number? Have you tested with it? Given that you are using it as default, you want to put something that you have actually tested with.","commit_id":"43cb98230f55a990fab688c7f1d875d12fdfae85"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"af97f3dd0f3410423fb14930b8bfdc7ac6c0c8f5","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    cfg.IntOpt(\u0027server_timeout\u0027, default\u003d10,"},{"line_number":47,"context_line":"               help\u003d_(\"Maximum number of seconds to wait for proxy request \""},{"line_number":48,"context_line":"                      \"to connect and complete.\")),"},{"line_number":49,"context_line":"    cfg.IntOpt(\u0027thread_pool_size\u0027, default\u003d10000,"},{"line_number":50,"context_line":"               help\u003d_(\"Maximum number of threads to spawn to handle large \""},{"line_number":51,"context_line":"                      \"volumes of port creations.\")),"},{"line_number":52,"context_line":"    cfg.StrOpt(\u0027neutron_id\u0027, default\u003d\u0027neutron-\u0027 + utils.get_hostname(),"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUX%2F%2BS4I%3D","line":49,"in_reply_to":"AAAAUX%2F%2BTW0%3D","updated":"2014-02-22 05:19:20.000000000","message":"I think it\u0027s realistic. Greenthreads are allocated on the heap and aren\u0027t \u0027real threads\u0027 from the kernel\u0027s perspective so they don\u0027t have much overhead. Additionally, the only thing these ones do is wait for a lock and then make a rest call when they get it. To put it in perspective, the default GreenPool size is 1000 if you don\u0027t specify anything. \n\nI have tested it by calling create_port 50000 times. Once it reached the point where all 10000 threads were in use (mysql was the major bottleneck getting to this point), the process used about 290MB.  \n\nThere may be another issue though. Nova starts the instance even when the port is in the BUILD state. I believe there was another patch to address this but it must not have gone through yet because I can see it\u0027s starting them right away. For now I will make the default really low to compensate for this.","commit_id":"43cb98230f55a990fab688c7f1d875d12fdfae85"}],"neutron/plugins/bigswitch/plugin.py":[{"author":{"_account_id":10310,"name":"Mandeep Dhami","email":"dhami@noironetworks.com","username":"mandeepdhami"},"change_message_id":"7c53ebfdbabfcc23f457cdd281b64ce63d8a90c4","unresolved":false,"context_lines":[{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    supported_extension_aliases \u003d [\"binding\"]"},{"line_number":106,"context_line":"    servers \u003d None"},{"line_number":107,"context_line":"    evpool \u003d eventlet.GreenPool(10000)"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    def __init__(self, server_timeout\u003dNone):"},{"line_number":110,"context_line":"        # This base class is not intended to be instantiated directly."}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2BhhE%3D","line":107,"updated":"2014-02-20 18:07:35.000000000","message":"How did you decide on 10000 as the appropriate size for this greenpool? Is that driven by Big Switch backend constraints, or is it driven by neutron requirements? Also, should this be configurable?","commit_id":"37c47957cc28957f83b1ebef37d728c333c75359"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"83277a7020075ca6a912a66425a42eb629c0685e","unresolved":false,"context_lines":[{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    supported_extension_aliases \u003d [\"binding\"]"},{"line_number":106,"context_line":"    servers \u003d None"},{"line_number":107,"context_line":"    evpool \u003d eventlet.GreenPool(10000)"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    def __init__(self, server_timeout\u003dNone):"},{"line_number":110,"context_line":"        # This base class is not intended to be instantiated directly."}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2BhYU%3D","line":107,"in_reply_to":"AAAAUX%2F%2BhhE%3D","updated":"2014-02-20 18:33:42.000000000","message":"It was just an arbitrarily large number since green threads are cheap. This number doesn\u0027t impact the backend since they are still governed by the rest_call lock.\n\nI will make it configurable.","commit_id":"37c47957cc28957f83b1ebef37d728c333c75359"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"8edbaf8724d3f781fcbdc75567f22531887917a5","unresolved":false,"context_lines":[{"line_number":82,"context_line":"from neutron.plugins.bigswitch.version import version_string_with_vcs"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":85,"context_line":"eventlet.monkey_patch()"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"SYNTAX_ERROR_MESSAGE \u003d _(\u0027Syntax error in server config file, aborting plugin\u0027)"},{"line_number":88,"context_line":"METADATA_SERVER_IP \u003d \u0027169.254.169.254\u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAU3%2F%2F%2FFg%3D","line":85,"updated":"2014-02-23 02:13:38.000000000","message":"This is done for you when the server is started and you should not need to call this again.","commit_id":"fddac29235370b3a06f6977cfc4752b42e0c7f53"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"6039e6ba1266dc8f8b98c3854e36090aafc19031","unresolved":false,"context_lines":[{"line_number":82,"context_line":"from neutron.plugins.bigswitch.version import version_string_with_vcs"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":85,"context_line":"eventlet.monkey_patch()"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"SYNTAX_ERROR_MESSAGE \u003d _(\u0027Syntax error in server config file, aborting plugin\u0027)"},{"line_number":88,"context_line":"METADATA_SERVER_IP \u003d \u0027169.254.169.254\u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAU3%2F%2F%2Bto%3D","line":85,"in_reply_to":"AAAAU3%2F%2F%2FFg%3D","updated":"2014-02-23 05:33:58.000000000","message":"Done","commit_id":"fddac29235370b3a06f6977cfc4752b42e0c7f53"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"8edbaf8724d3f781fcbdc75567f22531887917a5","unresolved":false,"context_lines":[{"line_number":331,"context_line":"        try:"},{"line_number":332,"context_line":"            port \u003d session.query(models_v2.Port).filter_by(id\u003dport_id).one()"},{"line_number":333,"context_line":"            port[\u0027status\u0027] \u003d status"},{"line_number":334,"context_line":"            session.merge(port)"},{"line_number":335,"context_line":"            session.flush()"},{"line_number":336,"context_line":"        except sqlexc.NoResultFound:"},{"line_number":337,"context_line":"            raise exceptions.PortNotFound(port_id\u003dport_id)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAU3%2F%2F%2FFQ%3D","line":334,"updated":"2014-02-23 02:13:38.000000000","message":"Port is already in this session.  Why the merge?","commit_id":"fddac29235370b3a06f6977cfc4752b42e0c7f53"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"6039e6ba1266dc8f8b98c3854e36090aafc19031","unresolved":false,"context_lines":[{"line_number":331,"context_line":"        try:"},{"line_number":332,"context_line":"            port \u003d session.query(models_v2.Port).filter_by(id\u003dport_id).one()"},{"line_number":333,"context_line":"            port[\u0027status\u0027] \u003d status"},{"line_number":334,"context_line":"            session.merge(port)"},{"line_number":335,"context_line":"            session.flush()"},{"line_number":336,"context_line":"        except sqlexc.NoResultFound:"},{"line_number":337,"context_line":"            raise exceptions.PortNotFound(port_id\u003dport_id)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAU3%2F%2F%2Bt8%3D","line":334,"in_reply_to":"AAAAU3%2F%2F%2FFQ%3D","updated":"2014-02-23 05:33:58.000000000","message":"I didn\u0027t know the object returned from a query could be modified to directly update the database. I\u0027ve adjusted it to remove this.","commit_id":"fddac29235370b3a06f6977cfc4752b42e0c7f53"},{"author":{"_account_id":7962,"name":"Ronak Shah","email":"ronak.malav.shah@gmail.com","username":"ronak"},"change_message_id":"3cb39c55c443f14cf48a832993c893f917aabd26","unresolved":false,"context_lines":[{"line_number":334,"context_line":"            session.flush()"},{"line_number":335,"context_line":"        except sqlexc.NoResultFound:"},{"line_number":336,"context_line":"            raise exceptions.PortNotFound(port_id\u003dport_id)"},{"line_number":337,"context_line":""},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"class NeutronRestProxyV2(NeutronRestProxyV2Base,"},{"line_number":340,"context_line":"                         extradhcpopt_db.ExtraDhcpOptMixin,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAU3%2F%2FwbE%3D","line":337,"updated":"2014-02-24 23:05:35.000000000","message":"Could following scenario happen?\nYou create and delete port p1 in quick succession.\nBefore the async create gets called for p1, it got deleted. In that case, when async_port_create is called, the set_port_status will raise PortNotFound exception.\n\nAssuming that via delete_port method, you would have cleaned the port from backend (controller), the state is actually sane. Will exception makes sense than?\n\nIn what other cases exception of PortNotFound can occur?","commit_id":"0202323d5f08c2e9b18da4eef4e715aa3c5ee7f8"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"160ade644264dd309213f686b2c590096ff1f1f7","unresolved":false,"context_lines":[{"line_number":334,"context_line":"            session.flush()"},{"line_number":335,"context_line":"        except sqlexc.NoResultFound:"},{"line_number":336,"context_line":"            raise exceptions.PortNotFound(port_id\u003dport_id)"},{"line_number":337,"context_line":""},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"class NeutronRestProxyV2(NeutronRestProxyV2Base,"},{"line_number":340,"context_line":"                         extradhcpopt_db.ExtraDhcpOptMixin,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAU3%2F%2FvXg%3D","line":337,"in_reply_to":"AAAAU3%2F%2FwbE%3D","updated":"2014-02-25 01:12:45.000000000","message":"Actually, there is a condition where the backend could be inconsistent here. If a port is created and deleted in quick succession, the rest calls could be re-ordered since they require a lock that doesn\u0027t guarantee order. \n\nI have updated the patch to cover this case.","commit_id":"0202323d5f08c2e9b18da4eef4e715aa3c5ee7f8"},{"author":{"_account_id":7962,"name":"Ronak Shah","email":"ronak.malav.shah@gmail.com","username":"ronak"},"change_message_id":"3cb39c55c443f14cf48a832993c893f917aabd26","unresolved":false,"context_lines":[{"line_number":351,"context_line":"        pl_config.register_config()"},{"line_number":352,"context_line":"        self.evpool \u003d eventlet.GreenPool(cfg.CONF.RESTPROXY.thread_pool_size)"},{"line_number":353,"context_line":"        # init DB, proxy\u0027s persistent store defaults to in-memory sql-lite DB"},{"line_number":354,"context_line":"        db.configure_db()"},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"        # Include the BigSwitch Extensions path in the api_extensions"},{"line_number":357,"context_line":"        neutron_extensions.append_api_extensions_path(extensions.__path__)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAU3%2F%2FwhA%3D","line":354,"updated":"2014-02-24 23:05:35.000000000","message":"With latest code change in base plugin class, you need to call super\u0027s init rather than directly calling db.configure_db().  Aaron Rosen already made changes to this file so you will have to rebase the code to latest.","commit_id":"0202323d5f08c2e9b18da4eef4e715aa3c5ee7f8"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"160ade644264dd309213f686b2c590096ff1f1f7","unresolved":false,"context_lines":[{"line_number":351,"context_line":"        pl_config.register_config()"},{"line_number":352,"context_line":"        self.evpool \u003d eventlet.GreenPool(cfg.CONF.RESTPROXY.thread_pool_size)"},{"line_number":353,"context_line":"        # init DB, proxy\u0027s persistent store defaults to in-memory sql-lite DB"},{"line_number":354,"context_line":"        db.configure_db()"},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"        # Include the BigSwitch Extensions path in the api_extensions"},{"line_number":357,"context_line":"        neutron_extensions.append_api_extensions_path(extensions.__path__)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAU3%2F%2Fvpo%3D","line":354,"in_reply_to":"AAAAU3%2F%2FwhA%3D","updated":"2014-02-25 01:12:45.000000000","message":"Done","commit_id":"0202323d5f08c2e9b18da4eef4e715aa3c5ee7f8"},{"author":{"_account_id":7962,"name":"Ronak Shah","email":"ronak.malav.shah@gmail.com","username":"ronak"},"change_message_id":"97d0664633a467559734c95f2d383b7751873241","unresolved":false,"context_lines":[{"line_number":332,"context_line":"                      else const.PORT_STATUS_DOWN)"},{"line_number":333,"context_line":"        try:"},{"line_number":334,"context_line":"            self.set_port_status(port[\u0027id\u0027], new_status)"},{"line_number":335,"context_line":"        except exceptions.PortNotFound as e:"},{"line_number":336,"context_line":"            # This port was deleted before the create made it to the controller"},{"line_number":337,"context_line":"            # so it now needs to be deleted since the normal delete request"},{"line_number":338,"context_line":"            # would have deleted an non-existent port."}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAU3%2F%2FvPM%3D","line":335,"updated":"2014-02-25 01:25:58.000000000","message":"e is not used here. Probably you can remove it.","commit_id":"26842fe5effd8f32b7f4ea84d6e8c650a6c75c68"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"991d9220d659e90f5bc95e89ffb3c89e7ff91c16","unresolved":false,"context_lines":[{"line_number":332,"context_line":"                      else const.PORT_STATUS_DOWN)"},{"line_number":333,"context_line":"        try:"},{"line_number":334,"context_line":"            self.set_port_status(port[\u0027id\u0027], new_status)"},{"line_number":335,"context_line":"        except exceptions.PortNotFound as e:"},{"line_number":336,"context_line":"            # This port was deleted before the create made it to the controller"},{"line_number":337,"context_line":"            # so it now needs to be deleted since the normal delete request"},{"line_number":338,"context_line":"            # would have deleted an non-existent port."}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAU3%2F%2FunI%3D","line":335,"in_reply_to":"AAAAU3%2F%2FvPM%3D","updated":"2014-02-25 02:51:35.000000000","message":"Done","commit_id":"26842fe5effd8f32b7f4ea84d6e8c650a6c75c68"},{"author":{"_account_id":490,"name":"Sumit Naiksatam","email":"sumitnaiksatam@gmail.com","username":"snaiksat"},"change_message_id":"e399675969e67a2b97be94fa8e5862bb59d9442a","unresolved":false,"context_lines":[{"line_number":45,"context_line":"\"\"\""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"import copy"},{"line_number":48,"context_line":"import eventlet"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"from oslo.config import cfg"},{"line_number":51,"context_line":"from sqlalchemy.orm import exc as sqlexc"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAU3%2F%2FuHY%3D","line":48,"updated":"2014-02-25 04:05:32.000000000","message":"eventlet is 3rd party so goes into the next block","commit_id":"3914006a95843210bb9362b94591b40758263db6"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"e9d0c19e97d4783450e8907539863bf4ae3b29a0","unresolved":false,"context_lines":[{"line_number":45,"context_line":"\"\"\""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"import copy"},{"line_number":48,"context_line":"import eventlet"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"from oslo.config import cfg"},{"line_number":51,"context_line":"from sqlalchemy.orm import exc as sqlexc"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAU3%2F%2FpHk%3D","line":48,"in_reply_to":"AAAAU3%2F%2FuHY%3D","updated":"2014-02-25 14:15:21.000000000","message":"Done","commit_id":"3914006a95843210bb9362b94591b40758263db6"},{"author":{"_account_id":490,"name":"Sumit Naiksatam","email":"sumitnaiksatam@gmail.com","username":"snaiksat"},"change_message_id":"e399675969e67a2b97be94fa8e5862bb59d9442a","unresolved":false,"context_lines":[{"line_number":338,"context_line":"            # would have deleted an non-existent port."},{"line_number":339,"context_line":"            self.servers.rest_delete_port(tenant_id, net_id, port[\u0027id\u0027])"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"    def set_port_status(self, port_id, status):"},{"line_number":342,"context_line":"        session \u003d db.get_session()"},{"line_number":343,"context_line":"        try:"},{"line_number":344,"context_line":"            port \u003d session.query(models_v2.Port).filter_by(id\u003dport_id).one()"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAU3%2F%2FuHQ%3D","line":341,"updated":"2014-02-25 04:05:32.000000000","message":"Should this be a private method?","commit_id":"3914006a95843210bb9362b94591b40758263db6"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"e9d0c19e97d4783450e8907539863bf4ae3b29a0","unresolved":false,"context_lines":[{"line_number":338,"context_line":"            # would have deleted an non-existent port."},{"line_number":339,"context_line":"            self.servers.rest_delete_port(tenant_id, net_id, port[\u0027id\u0027])"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"    def set_port_status(self, port_id, status):"},{"line_number":342,"context_line":"        session \u003d db.get_session()"},{"line_number":343,"context_line":"        try:"},{"line_number":344,"context_line":"            port \u003d session.query(models_v2.Port).filter_by(id\u003dport_id).one()"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAU3%2F%2FpFk%3D","line":341,"in_reply_to":"AAAAU3%2F%2Ft%2FM%3D","updated":"2014-02-25 14:15:21.000000000","message":"For now I\u0027m not going to make it a static method. Being the only static method in the plugin would hint that something leverages it as a staticmethod, which currently isn\u0027t the case.","commit_id":"3914006a95843210bb9362b94591b40758263db6"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"e9d0c19e97d4783450e8907539863bf4ae3b29a0","unresolved":false,"context_lines":[{"line_number":338,"context_line":"            # would have deleted an non-existent port."},{"line_number":339,"context_line":"            self.servers.rest_delete_port(tenant_id, net_id, port[\u0027id\u0027])"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"    def set_port_status(self, port_id, status):"},{"line_number":342,"context_line":"        session \u003d db.get_session()"},{"line_number":343,"context_line":"        try:"},{"line_number":344,"context_line":"            port \u003d session.query(models_v2.Port).filter_by(id\u003dport_id).one()"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAU3%2F%2FpG4%3D","line":341,"in_reply_to":"AAAAU3%2F%2FuHQ%3D","updated":"2014-02-25 14:15:21.000000000","message":"Done","commit_id":"3914006a95843210bb9362b94591b40758263db6"},{"author":{"_account_id":7962,"name":"Ronak Shah","email":"ronak.malav.shah@gmail.com","username":"ronak"},"change_message_id":"80597adb0caa651e0ae72e060c36f3757e7da398","unresolved":false,"context_lines":[{"line_number":338,"context_line":"            # would have deleted an non-existent port."},{"line_number":339,"context_line":"            self.servers.rest_delete_port(tenant_id, net_id, port[\u0027id\u0027])"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"    def set_port_status(self, port_id, status):"},{"line_number":342,"context_line":"        session \u003d db.get_session()"},{"line_number":343,"context_line":"        try:"},{"line_number":344,"context_line":"            port \u003d session.query(models_v2.Port).filter_by(id\u003dport_id).one()"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAU3%2F%2Ft%2FM%3D","line":341,"in_reply_to":"AAAAU3%2F%2FuHQ%3D","updated":"2014-02-25 04:22:06.000000000","message":"I would argue that it can be made staticmethod. There is no use of class variable within and it can be called without instantiating the restproxy class as well if required. \n\nJust my 2 cents.","commit_id":"3914006a95843210bb9362b94591b40758263db6"}],"neutron/plugins/ml2/drivers/mech_bigswitch/driver.py":[{"author":{"_account_id":490,"name":"Sumit Naiksatam","email":"sumitnaiksatam@gmail.com","username":"snaiksat"},"change_message_id":"e399675969e67a2b97be94fa8e5862bb59d9442a","unresolved":false,"context_lines":[{"line_number":16,"context_line":"#    under the License."},{"line_number":17,"context_line":"#"},{"line_number":18,"context_line":"# @author: Sumit Naiksatam, sumitnaiksatam@gmail.com, Big Switch Networks, Inc."},{"line_number":19,"context_line":"import eventlet"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from oslo.config import cfg"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAU3%2F%2FuG0%3D","line":19,"updated":"2014-02-25 04:05:32.000000000","message":"ditto","commit_id":"3914006a95843210bb9362b94591b40758263db6"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"e9d0c19e97d4783450e8907539863bf4ae3b29a0","unresolved":false,"context_lines":[{"line_number":16,"context_line":"#    under the License."},{"line_number":17,"context_line":"#"},{"line_number":18,"context_line":"# @author: Sumit Naiksatam, sumitnaiksatam@gmail.com, Big Switch Networks, Inc."},{"line_number":19,"context_line":"import eventlet"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from oslo.config import cfg"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAU3%2F%2FpEI%3D","line":19,"in_reply_to":"AAAAU3%2F%2FuG0%3D","updated":"2014-02-25 14:15:21.000000000","message":"Done","commit_id":"3914006a95843210bb9362b94591b40758263db6"}]}
