)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"382fb60ec8d71d0a057c526b6b2874a851202b68","unresolved":false,"context_lines":[{"line_number":12,"context_line":"and use in-memory subnets when needed, we can avoid multiple"},{"line_number":13,"context_line":"calls for DB access."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"DocImpact"},{"line_number":16,"context_line":"APIImpact"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Change-Id: I7124974bac629fdb8946df6a7f84bd6b40f5af49"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"7af24918_f9b33498","line":15,"range":{"start_line":15,"start_character":0,"end_line":15,"end_character":9},"updated":"2016-03-03 12:33:54.000000000","message":"I can only see API impact, can you explain what doc will be impact. Besides, for docimpact, I think there should be a simple description","commit_id":"b554ca74084f25e4c8aad0ae4b4e77f7a04890ba"},{"author":{"_account_id":6685,"name":"Baodong (Robert) Li","email":"baoli@cisco.com","username":"baoli"},"change_message_id":"b4e533c09c198e31b707fa0f426548d585c2743b","unresolved":false,"context_lines":[{"line_number":12,"context_line":"and use in-memory subnets when needed, we can avoid multiple"},{"line_number":13,"context_line":"calls for DB access."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"APIImpact"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: I7124974bac629fdb8946df6a7f84bd6b40f5af49"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"7af24918_57200bf7","line":15,"range":{"start_line":15,"start_character":0,"end_line":15,"end_character":9},"updated":"2016-03-03 21:43:42.000000000","message":"why would this patch impact API? I noticed the previous comments about the http error code in the test cases. But I didn\u0027t see an explanation on why that change is necessary. In any case, I couldn\u0027t see why that would impact neutron API.","commit_id":"2b9dccb3463487bcf9c5e49d9838aaf163856fee"},{"author":{"_account_id":10267,"name":"venkata anil","email":"anilvenkata@redhat.com","username":"anil"},"change_message_id":"ce4bf748249715d710c5b618403672e56c6ae71f","unresolved":false,"context_lines":[{"line_number":12,"context_line":"and use in-memory subnets when needed, we can avoid multiple"},{"line_number":13,"context_line":"calls for DB access."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"APIImpact"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: I7124974bac629fdb8946df6a7f84bd6b40f5af49"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"5aef4532_89f96183","line":15,"range":{"start_line":15,"start_character":0,"end_line":15,"end_character":9},"in_reply_to":"5aef4532_6736c704","updated":"2016-03-08 08:44:03.000000000","message":"sure, thanks Armando","commit_id":"2b9dccb3463487bcf9c5e49d9838aaf163856fee"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"3cdeca2b62c16bb2bcd94ad930cf8f97ea1f2208","unresolved":false,"context_lines":[{"line_number":12,"context_line":"and use in-memory subnets when needed, we can avoid multiple"},{"line_number":13,"context_line":"calls for DB access."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"APIImpact"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: I7124974bac629fdb8946df6a7f84bd6b40f5af49"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"5aef4532_6736c704","line":15,"range":{"start_line":15,"start_character":0,"end_line":15,"end_character":9},"in_reply_to":"7af24918_57200bf7","updated":"2016-03-08 05:56:45.000000000","message":"Please provide an explanation of the API impact because the back and forth of review comments may be difficult to track.","commit_id":"2b9dccb3463487bcf9c5e49d9838aaf163856fee"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"c9057d1335edb86ed6c747bc6956c6d217c521e2","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Avoid calling _get_subnet(s) multiple times in ipam driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"While allocating or updating ips for port, _get_subnet and"},{"line_number":10,"context_line":"_get_subents are called multiple times. Instead if we call"},{"line_number":11,"context_line":"only _get_subents once initially and store them in memory"},{"line_number":12,"context_line":"and use in-memory subnets when needed, we can avoid multiple"},{"line_number":13,"context_line":"calls for DB access."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"5aef4532_82c4855f","line":10,"updated":"2016-03-08 16:29:13.000000000","message":"typo!\n\nThanks for providing more details on the bug report. One concern I have now is if that cached list of subnets becomes stale during the allocate/update operation and whether that\u0027s an issue. Have you given this any thought?","commit_id":"098819e5907dafc49ecae17fcea9b0e501c5fd4e"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"2151baf0f2ed2ba3d84a0c48451f86a5870cd285","unresolved":false,"context_lines":[{"line_number":1,"context_line":"Parent:     23ea124f (Merge \"Extend dicts with original model in create/update\")"},{"line_number":2,"context_line":"Author:     venkata anil \u003canil.venkata@enovance.com\u003e"},{"line_number":3,"context_line":"AuthorDate: 2016-02-17 08:39:36 +0000"},{"line_number":4,"context_line":"Commit:     venkata anil \u003canil.venkata@enovance.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"3afc51ec_fbb9c8cc","line":1,"updated":"2016-03-14 08:24:34.000000000","message":"you lost the bug report id in the commit message?","commit_id":"817d00a1c3eed8f1aa5c938dc579632a0204160e"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"53df06ca3b91171ecee13866575bba409e7e33a6","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Avoid calling _get_subnet(s) multiple times in ipam driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"While allocating or updating ips for port, _get_subnet and"},{"line_number":10,"context_line":"_get_subents are called multiple times. Instead of that,"},{"line_number":11,"context_line":"if we call only _get_subents once initially and store them"},{"line_number":12,"context_line":"in memory and use in-memory subnets when needed,"},{"line_number":13,"context_line":"we can avoid multiple calls for DB access."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"3afc51ec_33accc33","line":10,"updated":"2016-03-14 20:36:43.000000000","message":"nit: _get_subnets, L11 too","commit_id":"e7b3ec0c2d7f8c5f35399c73aa18e8c75c1274c8"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"af05d338c45f19d18566228037a556aaebb35ad5","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"While allocating or updating ips for port, _get_subnet and"},{"line_number":10,"context_line":"_get_subnets are called multiple times. Instead of that,"},{"line_number":11,"context_line":"if we call only _get_subents once initially and store them"},{"line_number":12,"context_line":"in memory and use in-memory subnets when needed,"},{"line_number":13,"context_line":"we can avoid multiple calls for DB access."},{"line_number":14,"context_line":"Please see bug report for complete description."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"da0c15f0_fbf9eb4e","line":11,"range":{"start_line":11,"start_character":16,"end_line":11,"end_character":28},"updated":"2016-03-25 11:13:07.000000000","message":"Nit: _get_subnets","commit_id":"c567956579f21c143da1fc9da937dbb6739030ca"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"aaa17967553178aaaf3d2683a51e3be13ab74f93","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Avoid calling _get_subnet(s) multiple times in ipam driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"While allocating or updating ips for port, _get_subnet and"},{"line_number":10,"context_line":"_get_subnets are called multiple times. Instead of that,"},{"line_number":11,"context_line":"if we call only _get_subnets once initially and store them"},{"line_number":12,"context_line":"in memory and use in-memory subnets when needed,"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":20,"id":"1a122d0e_807320b1","line":9,"updated":"2016-04-15 22:53:39.000000000","message":"I think this could be a little clearer.","commit_id":"0089469637f95cd78168f2dfc61fc23e2a64c46c"}],"neutron/common/utils.py":[{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"04f9c2f56e9ff0b4f0b7fb1bbd165a11e24a6fcb","unresolved":false,"context_lines":[{"line_number":649,"context_line":"    return inner"},{"line_number":650,"context_line":""},{"line_number":651,"context_line":""},{"line_number":652,"context_line":"def get_matching_subnet(subnets, subnet_id):"},{"line_number":653,"context_line":"    for subnet in subnets:"},{"line_number":654,"context_line":"        if subnet[\u0027id\u0027] \u003d\u003d subnet_id:"},{"line_number":655,"context_line":"            return subnet"}],"source_content_type":"text/x-python","patch_set":19,"id":"1a122d0e_7495f43e","line":652,"range":{"start_line":652,"start_character":4,"end_line":652,"end_character":23},"updated":"2016-04-15 16:32:19.000000000","message":"I don\u0027t think this is generally useful common utility.  I don\u0027t think it belongs here.  Honestly, I preferred it inline where you had it in PS18.  But, if you must break it out in to a separate function, break it out in the class where it is needed as a static method.\n\nIMO, common utility modules should contain carefully designed, curated, and well tested generic code.  It shouldn\u0027t be a dumping ground for stuff with a single use.  If this method proves useful more broadly in the future then we can consider graduating it to the level of a common utility.  But, I really doubt it will happen.","commit_id":"f1d3a19767fc618ed02ba609d97ced8b76863a49"}],"neutron/db/ipam_backend_mixin.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"463d8228a2037c3c2ccc71d18b0e8b3571216bf2","unresolved":false,"context_lines":[{"line_number":306,"context_line":"            msg \u003d _(\u0027Exceeded maximum amount of fixed ips per port.\u0027)"},{"line_number":307,"context_line":"            raise n_exc.InvalidInput(error_message\u003dmsg)"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"    def _get_subnet_for_fixed_ip(self, context, fixed, network_id, subnets):"},{"line_number":310,"context_line":"        if \u0027subnet_id\u0027 in fixed:"},{"line_number":311,"context_line":"            valid_subnet \u003d False"},{"line_number":312,"context_line":"            for subnet in subnets:"}],"source_content_type":"text/x-python","patch_set":1,"id":"dae33548_6206661e","line":309,"range":{"start_line":309,"start_character":55,"end_line":309,"end_character":65},"updated":"2016-02-17 09:51:43.000000000","message":"You do not need this now. for the exception below you can take the network id from the subnet","commit_id":"10d877eb7e11cf8b131bbb9046a1add659343e6d"},{"author":{"_account_id":10267,"name":"venkata anil","email":"anilvenkata@redhat.com","username":"anil"},"change_message_id":"0081363fe2acc118660315a7e90d658c24ff6236","unresolved":false,"context_lines":[{"line_number":306,"context_line":"            msg \u003d _(\u0027Exceeded maximum amount of fixed ips per port.\u0027)"},{"line_number":307,"context_line":"            raise n_exc.InvalidInput(error_message\u003dmsg)"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"    def _get_subnet_for_fixed_ip(self, context, fixed, network_id, subnets):"},{"line_number":310,"context_line":"        if \u0027subnet_id\u0027 in fixed:"},{"line_number":311,"context_line":"            valid_subnet \u003d False"},{"line_number":312,"context_line":"            for subnet in subnets:"}],"source_content_type":"text/x-python","patch_set":1,"id":"dae33548_2ef0c5c8","line":309,"range":{"start_line":309,"start_character":55,"end_line":309,"end_character":65},"in_reply_to":"dae33548_6206661e","updated":"2016-02-17 11:07:36.000000000","message":"sure, thanks","commit_id":"10d877eb7e11cf8b131bbb9046a1add659343e6d"},{"author":{"_account_id":6685,"name":"Baodong (Robert) Li","email":"baoli@cisco.com","username":"baoli"},"change_message_id":"058a53e779ca50269112c4ba30c0aa79188c0e41","unresolved":false,"context_lines":[{"line_number":306,"context_line":"            msg \u003d _(\u0027Exceeded maximum amount of fixed ips per port.\u0027)"},{"line_number":307,"context_line":"            raise n_exc.InvalidInput(error_message\u003dmsg)"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"    def _get_subnet_for_fixed_ip(self, context, fixed, subnets):"},{"line_number":310,"context_line":"        if not subnets:"},{"line_number":311,"context_line":"            msg \u003d _(\u0027IP allocation requires subnets for network\u0027)"},{"line_number":312,"context_line":"            raise n_exc.InvalidInput(error_message\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":2,"id":"dae33548_7a6f062b","line":309,"range":{"start_line":309,"start_character":33,"end_line":309,"end_character":37},"updated":"2016-02-17 21:46:00.000000000","message":"I really want to see a comment indicating that the subnets are all the subnets belonging to the same network.","commit_id":"15ce2045034ff8621a2fead58f7e11ac3a2ac6ae"},{"author":{"_account_id":10267,"name":"venkata anil","email":"anilvenkata@redhat.com","username":"anil"},"change_message_id":"24262b47ae73d8a16f3c595634cd76ee129be303","unresolved":false,"context_lines":[{"line_number":306,"context_line":"            msg \u003d _(\u0027Exceeded maximum amount of fixed ips per port.\u0027)"},{"line_number":307,"context_line":"            raise n_exc.InvalidInput(error_message\u003dmsg)"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"    def _get_subnet_for_fixed_ip(self, context, fixed, subnets):"},{"line_number":310,"context_line":"        if not subnets:"},{"line_number":311,"context_line":"            msg \u003d _(\u0027IP allocation requires subnets for network\u0027)"},{"line_number":312,"context_line":"            raise n_exc.InvalidInput(error_message\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":2,"id":"dae33548_d2b38d08","line":309,"range":{"start_line":309,"start_character":33,"end_line":309,"end_character":37},"in_reply_to":"dae33548_7a6f062b","updated":"2016-02-18 05:20:58.000000000","message":"sure, thanks","commit_id":"15ce2045034ff8621a2fead58f7e11ac3a2ac6ae"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"5ef28616e3c046670e517ee1465e324536c5fe8a","unresolved":false,"context_lines":[{"line_number":317,"context_line":"            for subnet in subnets:"},{"line_number":318,"context_line":"                if subnet[\u0027id\u0027] \u003d\u003d fixed[\u0027subnet_id\u0027]:"},{"line_number":319,"context_line":"                    break"},{"line_number":320,"context_line":"            if subnet and subnet[\u0027id\u0027] !\u003d fixed[\u0027subnet_id\u0027]:"},{"line_number":321,"context_line":"                msg \u003d (_(\"Failed to create port on network %(network_id)s\""},{"line_number":322,"context_line":"                         \", because fixed_ips included invalid subnet \""},{"line_number":323,"context_line":"                         \"%(subnet_id)s\") %"}],"source_content_type":"text/x-python","patch_set":2,"id":"dae33548_7e942342","line":320,"updated":"2016-02-17 18:30:19.000000000","message":"Could you just use an else clause on the for loop to indicate there is no match found?","commit_id":"15ce2045034ff8621a2fead58f7e11ac3a2ac6ae"},{"author":{"_account_id":6685,"name":"Baodong (Robert) Li","email":"baoli@cisco.com","username":"baoli"},"change_message_id":"058a53e779ca50269112c4ba30c0aa79188c0e41","unresolved":false,"context_lines":[{"line_number":317,"context_line":"            for subnet in subnets:"},{"line_number":318,"context_line":"                if subnet[\u0027id\u0027] \u003d\u003d fixed[\u0027subnet_id\u0027]:"},{"line_number":319,"context_line":"                    break"},{"line_number":320,"context_line":"            if subnet and subnet[\u0027id\u0027] !\u003d fixed[\u0027subnet_id\u0027]:"},{"line_number":321,"context_line":"                msg \u003d (_(\"Failed to create port on network %(network_id)s\""},{"line_number":322,"context_line":"                         \", because fixed_ips included invalid subnet \""},{"line_number":323,"context_line":"                         \"%(subnet_id)s\") %"}],"source_content_type":"text/x-python","patch_set":2,"id":"dae33548_9aa80a79","line":320,"in_reply_to":"dae33548_7e942342","updated":"2016-02-17 21:46:00.000000000","message":"+1","commit_id":"15ce2045034ff8621a2fead58f7e11ac3a2ac6ae"},{"author":{"_account_id":10267,"name":"venkata anil","email":"anilvenkata@redhat.com","username":"anil"},"change_message_id":"24262b47ae73d8a16f3c595634cd76ee129be303","unresolved":false,"context_lines":[{"line_number":317,"context_line":"            for subnet in subnets:"},{"line_number":318,"context_line":"                if subnet[\u0027id\u0027] \u003d\u003d fixed[\u0027subnet_id\u0027]:"},{"line_number":319,"context_line":"                    break"},{"line_number":320,"context_line":"            if subnet and subnet[\u0027id\u0027] !\u003d fixed[\u0027subnet_id\u0027]:"},{"line_number":321,"context_line":"                msg \u003d (_(\"Failed to create port on network %(network_id)s\""},{"line_number":322,"context_line":"                         \", because fixed_ips included invalid subnet \""},{"line_number":323,"context_line":"                         \"%(subnet_id)s\") %"}],"source_content_type":"text/x-python","patch_set":2,"id":"dae33548_b2b6c9f6","line":320,"in_reply_to":"dae33548_9aa80a79","updated":"2016-02-18 05:20:58.000000000","message":"sure, thanks","commit_id":"15ce2045034ff8621a2fead58f7e11ac3a2ac6ae"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"382fb60ec8d71d0a057c526b6b2874a851202b68","unresolved":false,"context_lines":[{"line_number":307,"context_line":"            raise n_exc.InvalidInput(error_message\u003dmsg)"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"    def _get_subnet_for_fixed_ip(self, context, fixed, subnets):"},{"line_number":310,"context_line":"        # Subnets are all the subnets belonging to the same network."},{"line_number":311,"context_line":"        if not subnets:"},{"line_number":312,"context_line":"            msg \u003d _(\u0027IP allocation requires subnets for network\u0027)"},{"line_number":313,"context_line":"            raise n_exc.InvalidInput(error_message\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":5,"id":"7af24918_7cc6f268","line":310,"range":{"start_line":310,"start_character":10,"end_line":310,"end_character":67},"updated":"2016-03-03 12:33:54.000000000","message":"Maybe better with \"**** the same network as fixed_ip.\"","commit_id":"b554ca74084f25e4c8aad0ae4b4e77f7a04890ba"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"3cdeca2b62c16bb2bcd94ad930cf8f97ea1f2208","unresolved":false,"context_lines":[{"line_number":328,"context_line":"            raise n_exc.InvalidInput(error_message\u003dmsg)"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"        filter \u003d {\u0027network_id\u0027: [network_id]}"},{"line_number":331,"context_line":"        subnets \u003d self._get_subnets(context, filters\u003dfilter)"},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"        for subnet in subnets:"},{"line_number":334,"context_line":"            if ipam_utils.check_subnet_ip(subnet[\u0027cidr\u0027],"}],"source_content_type":"text/x-python","patch_set":6,"id":"5aef4532_42a0d99f","side":"PARENT","line":331,"updated":"2016-03-08 05:56:45.000000000","message":"Are you sure that you ever see get_subnet and get_subnets called at the same time? Under which condition? I can\u0027t see that happen.","commit_id":"85abeded9e5dd1e02d943929b8cce0ac2ca27409"},{"author":{"_account_id":10267,"name":"venkata anil","email":"anilvenkata@redhat.com","username":"anil"},"change_message_id":"ce4bf748249715d710c5b618403672e56c6ae71f","unresolved":false,"context_lines":[{"line_number":328,"context_line":"            raise n_exc.InvalidInput(error_message\u003dmsg)"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"        filter \u003d {\u0027network_id\u0027: [network_id]}"},{"line_number":331,"context_line":"        subnets \u003d self._get_subnets(context, filters\u003dfilter)"},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"        for subnet in subnets:"},{"line_number":334,"context_line":"            if ipam_utils.check_subnet_ip(subnet[\u0027cidr\u0027],"}],"source_content_type":"text/x-python","patch_set":6,"id":"5aef4532_09055179","side":"PARENT","line":331,"in_reply_to":"5aef4532_42a0d99f","updated":"2016-03-08 08:44:03.000000000","message":"I explained that in https://bugs.launchpad.net/neutron/+bug/1554414","commit_id":"85abeded9e5dd1e02d943929b8cce0ac2ca27409"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"3cdeca2b62c16bb2bcd94ad930cf8f97ea1f2208","unresolved":false,"context_lines":[{"line_number":313,"context_line":"            raise n_exc.InvalidInput(error_message\u003dmsg)"},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"        if \u0027subnet_id\u0027 in fixed:"},{"line_number":316,"context_line":"            # To avoid pep8 undefined-loop-variable error"},{"line_number":317,"context_line":"            subnet \u003d None"},{"line_number":318,"context_line":"            for subnet in subnets:"},{"line_number":319,"context_line":"                if subnet[\u0027id\u0027] \u003d\u003d fixed[\u0027subnet_id\u0027]:"}],"source_content_type":"text/x-python","patch_set":6,"id":"5aef4532_a25c3d26","line":316,"updated":"2016-03-08 05:56:45.000000000","message":"don\u0027t use the same variable name that you used for the iterator.","commit_id":"2b9dccb3463487bcf9c5e49d9838aaf163856fee"},{"author":{"_account_id":10267,"name":"venkata anil","email":"anilvenkata@redhat.com","username":"anil"},"change_message_id":"ce4bf748249715d710c5b618403672e56c6ae71f","unresolved":false,"context_lines":[{"line_number":313,"context_line":"            raise n_exc.InvalidInput(error_message\u003dmsg)"},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"        if \u0027subnet_id\u0027 in fixed:"},{"line_number":316,"context_line":"            # To avoid pep8 undefined-loop-variable error"},{"line_number":317,"context_line":"            subnet \u003d None"},{"line_number":318,"context_line":"            for subnet in subnets:"},{"line_number":319,"context_line":"                if subnet[\u0027id\u0027] \u003d\u003d fixed[\u0027subnet_id\u0027]:"}],"source_content_type":"text/x-python","patch_set":6,"id":"5aef4532_89cb2153","line":316,"in_reply_to":"5aef4532_a25c3d26","updated":"2016-03-08 08:44:03.000000000","message":"Actually I don\u0027t need a variable here. I only need in iterator. When I directly use variable in iterator and later using that iterator after iteration, \"pep8\u0027 was complaining with above error message. So I declared iterator variable to avoid pep8 error.","commit_id":"2b9dccb3463487bcf9c5e49d9838aaf163856fee"},{"author":{"_account_id":10267,"name":"venkata anil","email":"anilvenkata@redhat.com","username":"anil"},"change_message_id":"4a4f6ae7c02c934f6c72c945b16482ea1568b1d8","unresolved":false,"context_lines":[{"line_number":314,"context_line":""},{"line_number":315,"context_line":"        if \u0027subnet_id\u0027 in fixed:"},{"line_number":316,"context_line":"            # To avoid pep8 undefined-loop-variable error"},{"line_number":317,"context_line":"            subnet \u003d None"},{"line_number":318,"context_line":"            for subnet in subnets:"},{"line_number":319,"context_line":"                if subnet[\u0027id\u0027] \u003d\u003d fixed[\u0027subnet_id\u0027]:"},{"line_number":320,"context_line":"                    break"}],"source_content_type":"text/x-python","patch_set":6,"id":"7af24918_b2a696be","line":317,"updated":"2016-03-04 14:51:51.000000000","message":"Here we have two cases - \n1) Previously we were calling \nsubnet \u003d self._get_subnet(context, fixed[\u0027subnet_id\u0027])\nhere, if subnet not at all found in DB, that function throws HTTPNotFound.\n2) If that function succeeds and the subnet\u0027s is not part of the port\u0027s network, then L318 throws InvalidInput error.\n\nNow we directly check if the requested subnet is part of network\u0027s subnet and for both above cases we send InvalidInput error L327.\n\nWhen client issues create/update port through CLI or horizon with no subnet in DB, we wont reach to this function as CLI checks if subnet exists in Database or not.\n\nhttp://developer.openstack.org/api-ref-networking-v2.html\nspecifies below error codes for port create/update.\nError response codes\nbadRequest (400), unauthorized (401), forbidden (403), itemNotFound (404), conflict (409)\n\nBut for invalid subnet, it doesn\u0027t specify which error code to be returned.\nAs in all other places in this function, we are returning InvalidInput as error, we can use this for both of above cases. \n\nIf I am not wrong, even API impact is not needed here as we are still returning the allowed errors for the create/update api, right?","commit_id":"2b9dccb3463487bcf9c5e49d9838aaf163856fee"},{"author":{"_account_id":6685,"name":"Baodong (Robert) Li","email":"baoli@cisco.com","username":"baoli"},"change_message_id":"8176f083dc2baf464289b4b11343172db1bd7a56","unresolved":false,"context_lines":[{"line_number":314,"context_line":""},{"line_number":315,"context_line":"        if \u0027subnet_id\u0027 in fixed:"},{"line_number":316,"context_line":"            # To avoid pep8 undefined-loop-variable error"},{"line_number":317,"context_line":"            subnet \u003d None"},{"line_number":318,"context_line":"            for subnet in subnets:"},{"line_number":319,"context_line":"                if subnet[\u0027id\u0027] \u003d\u003d fixed[\u0027subnet_id\u0027]:"},{"line_number":320,"context_line":"                    break"}],"source_content_type":"text/x-python","patch_set":6,"id":"7af24918_9447f14a","line":317,"in_reply_to":"7af24918_38d9b984","updated":"2016-03-04 21:36:06.000000000","message":"I took a close look at it, and now I understand that due to not calling _get_subnet() any more, the error case of HTTPNotFound doesn\u0027t exist any more. So yes I agree that it should have been an APIImpact.\n\nThanks for bearing with me.","commit_id":"2b9dccb3463487bcf9c5e49d9838aaf163856fee"},{"author":{"_account_id":6685,"name":"Baodong (Robert) Li","email":"baoli@cisco.com","username":"baoli"},"change_message_id":"fdf3e6325140f77ce2266409a506dce702d0c087","unresolved":false,"context_lines":[{"line_number":314,"context_line":""},{"line_number":315,"context_line":"        if \u0027subnet_id\u0027 in fixed:"},{"line_number":316,"context_line":"            # To avoid pep8 undefined-loop-variable error"},{"line_number":317,"context_line":"            subnet \u003d None"},{"line_number":318,"context_line":"            for subnet in subnets:"},{"line_number":319,"context_line":"                if subnet[\u0027id\u0027] \u003d\u003d fixed[\u0027subnet_id\u0027]:"},{"line_number":320,"context_line":"                    break"}],"source_content_type":"text/x-python","patch_set":6,"id":"7af24918_c4839501","line":317,"in_reply_to":"7af24918_b2a696be","updated":"2016-03-04 16:51:46.000000000","message":"The only change you made in test_db_base_plugin_v2.py is to replace HTTPNotFound with HTTPClientError. And that\u0027s what the original comment on that change is about.  Without that change, would the test fail?\n\nI checked the webob.exc doc, and HTTPNotFound is a subclass of HTTPClientError.","commit_id":"2b9dccb3463487bcf9c5e49d9838aaf163856fee"},{"author":{"_account_id":10267,"name":"venkata anil","email":"anilvenkata@redhat.com","username":"anil"},"change_message_id":"5d2b740b6a1af50b51142b1535b939aa40f8ee14","unresolved":false,"context_lines":[{"line_number":314,"context_line":""},{"line_number":315,"context_line":"        if \u0027subnet_id\u0027 in fixed:"},{"line_number":316,"context_line":"            # To avoid pep8 undefined-loop-variable error"},{"line_number":317,"context_line":"            subnet \u003d None"},{"line_number":318,"context_line":"            for subnet in subnets:"},{"line_number":319,"context_line":"                if subnet[\u0027id\u0027] \u003d\u003d fixed[\u0027subnet_id\u0027]:"},{"line_number":320,"context_line":"                    break"}],"source_content_type":"text/x-python","patch_set":6,"id":"7af24918_c78d542c","line":317,"in_reply_to":"7af24918_c4839501","updated":"2016-03-04 18:10:05.000000000","message":"Thanks Robert\nYes, the test was failing. That is why HTTPNotFound is replaced with HTTPClientError in the test.","commit_id":"2b9dccb3463487bcf9c5e49d9838aaf163856fee"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"e889624d77edc4aa24efd59cea7356f0e4bcd446","unresolved":false,"context_lines":[{"line_number":314,"context_line":""},{"line_number":315,"context_line":"        if \u0027subnet_id\u0027 in fixed:"},{"line_number":316,"context_line":"            # To avoid pep8 undefined-loop-variable error"},{"line_number":317,"context_line":"            subnet \u003d None"},{"line_number":318,"context_line":"            for subnet in subnets:"},{"line_number":319,"context_line":"                if subnet[\u0027id\u0027] \u003d\u003d fixed[\u0027subnet_id\u0027]:"},{"line_number":320,"context_line":"                    break"}],"source_content_type":"text/x-python","patch_set":6,"id":"7af24918_38d9b984","line":317,"in_reply_to":"7af24918_c78d542c","updated":"2016-03-04 19:11:53.000000000","message":"From https://wiki.openstack.org/wiki/GitCommitMessages#Including_external_references :\n\n\"The APIImpact line contains the string APIImpact, and a comment about why the change impacts a public HTTP API. Put APIImpact on a line by itself. Use this flag to indicate that the patch creates, updates, or deletes a public HTTP API or causes the behavior of a public HTTP API to change.\"\n\nSo I think APIImpact should stay, even though it\u0027s just the status code.","commit_id":"2b9dccb3463487bcf9c5e49d9838aaf163856fee"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"3cdeca2b62c16bb2bcd94ad930cf8f97ea1f2208","unresolved":false,"context_lines":[{"line_number":315,"context_line":"        if \u0027subnet_id\u0027 in fixed:"},{"line_number":316,"context_line":"            # To avoid pep8 undefined-loop-variable error"},{"line_number":317,"context_line":"            subnet \u003d None"},{"line_number":318,"context_line":"            for subnet in subnets:"},{"line_number":319,"context_line":"                if subnet[\u0027id\u0027] \u003d\u003d fixed[\u0027subnet_id\u0027]:"},{"line_number":320,"context_line":"                    break"},{"line_number":321,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":6,"id":"5aef4532_8274a19c","line":318,"updated":"2016-03-08 05:56:45.000000000","message":"do:\n\n  for s in subnets:","commit_id":"2b9dccb3463487bcf9c5e49d9838aaf163856fee"},{"author":{"_account_id":10267,"name":"venkata anil","email":"anilvenkata@redhat.com","username":"anil"},"change_message_id":"ce4bf748249715d710c5b618403672e56c6ae71f","unresolved":false,"context_lines":[{"line_number":315,"context_line":"        if \u0027subnet_id\u0027 in fixed:"},{"line_number":316,"context_line":"            # To avoid pep8 undefined-loop-variable error"},{"line_number":317,"context_line":"            subnet \u003d None"},{"line_number":318,"context_line":"            for subnet in subnets:"},{"line_number":319,"context_line":"                if subnet[\u0027id\u0027] \u003d\u003d fixed[\u0027subnet_id\u0027]:"},{"line_number":320,"context_line":"                    break"},{"line_number":321,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":6,"id":"5aef4532_e9e0e5ce","line":318,"in_reply_to":"5aef4532_8274a19c","updated":"2016-03-08 08:44:03.000000000","message":"above explanation","commit_id":"2b9dccb3463487bcf9c5e49d9838aaf163856fee"},{"author":{"_account_id":10267,"name":"venkata anil","email":"anilvenkata@redhat.com","username":"anil"},"change_message_id":"1322be6afc70fc546d94b10ec1c71a2c8f861dc8","unresolved":false,"context_lines":[{"line_number":311,"context_line":"        if not subnets:"},{"line_number":312,"context_line":"            msg \u003d _(\u0027IP allocation requires subnets for network\u0027)"},{"line_number":313,"context_line":"            raise n_exc.InvalidInput(error_message\u003dmsg)"},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"        if \u0027subnet_id\u0027 in fixed:"},{"line_number":316,"context_line":"            # To avoid pep8 undefined-loop-variable error"},{"line_number":317,"context_line":"            subnet \u003d None"}],"source_content_type":"text/x-python","patch_set":7,"id":"5aef4532_d92816e5","line":314,"updated":"2016-03-09 11:43:45.000000000","message":"If I use dict then,\nat L314 I should use either of the below approaches to get network_id\n1) network_id \u003d subnets.values()[0][\u0027network_id\u0027]\nor\n2) for loop to get network_id\nnetwork_id \u003d None\nfor subnet in subnets.values():\n    network_id \u003d subnet[\u0027network_id\u0027]","commit_id":"098819e5907dafc49ecae17fcea9b0e501c5fd4e"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"09fe78ed9173f53e99bbeb7004d860b9159253c5","unresolved":false,"context_lines":[{"line_number":314,"context_line":""},{"line_number":315,"context_line":"        if \u0027subnet_id\u0027 in fixed:"},{"line_number":316,"context_line":"            # To avoid pep8 undefined-loop-variable error"},{"line_number":317,"context_line":"            subnet \u003d None"},{"line_number":318,"context_line":"            for subnet in subnets:"},{"line_number":319,"context_line":"                if subnet[\u0027id\u0027] \u003d\u003d fixed[\u0027subnet_id\u0027]:"},{"line_number":320,"context_line":"                    break"},{"line_number":321,"context_line":"            else:"},{"line_number":322,"context_line":"                msg \u003d (_(\"Failed to create port on network %(network_id)s\""},{"line_number":323,"context_line":"                         \", because fixed_ips included invalid subnet \""}],"source_content_type":"text/x-python","patch_set":7,"id":"5aef4532_cc106e04","line":320,"range":{"start_line":317,"start_character":12,"end_line":320,"end_character":25},"updated":"2016-03-08 23:51:56.000000000","message":"This madness wouldn\u0027t be needed if subnets were a dict.","commit_id":"098819e5907dafc49ecae17fcea9b0e501c5fd4e"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"1824eac203aae22b5623f9d8f24119b3467ecd96","unresolved":false,"context_lines":[{"line_number":315,"context_line":"        if \u0027subnet_id\u0027 in fixed:"},{"line_number":316,"context_line":"            # To avoid pep8 undefined-loop-variable error"},{"line_number":317,"context_line":"            subnet \u003d None"},{"line_number":318,"context_line":"            for subnet in subnets:"},{"line_number":319,"context_line":"                if subnet[\u0027id\u0027] \u003d\u003d fixed[\u0027subnet_id\u0027]:"},{"line_number":320,"context_line":"                    break"},{"line_number":321,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":16,"id":"5a18252c_cc7706d3","line":318,"range":{"start_line":318,"start_character":12,"end_line":318,"end_character":34},"updated":"2016-04-12 16:56:35.000000000","message":"nit:  I dislike the \"for ... break ... else\" construct so much that I\u0027d rather see this:\n\n  def get_matching_subnet():\n      for subnet in subnets:\n          if subnet[\u0027id\u0027] \u003d\u003d fixed[\u0027subnet_id\u0027]:\n              return subnet\n  subnet \u003d get_matching_subnet()\n  if not subnet:\n      msg \u003d ...\n\nBut, what you have is functionally correct as far as I can tell so I won\u0027t try to push my personal preferences.  So, take it or leave it.  This isn\u0027t a -1.","commit_id":"647d0092bef7d24f8a9f0c476fc00392e9d62611"},{"author":{"_account_id":10267,"name":"venkata anil","email":"anilvenkata@redhat.com","username":"anil"},"change_message_id":"2eafff8ae253ccd31a9600aacaf17cb6ed35070f","unresolved":false,"context_lines":[{"line_number":315,"context_line":"        if \u0027subnet_id\u0027 in fixed:"},{"line_number":316,"context_line":"            # To avoid pep8 undefined-loop-variable error"},{"line_number":317,"context_line":"            subnet \u003d None"},{"line_number":318,"context_line":"            for subnet in subnets:"},{"line_number":319,"context_line":"                if subnet[\u0027id\u0027] \u003d\u003d fixed[\u0027subnet_id\u0027]:"},{"line_number":320,"context_line":"                    break"},{"line_number":321,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":16,"id":"5a18252c_81648649","line":318,"range":{"start_line":318,"start_character":12,"end_line":318,"end_character":34},"in_reply_to":"5a18252c_cc7706d3","updated":"2016-04-13 13:55:06.000000000","message":"done","commit_id":"647d0092bef7d24f8a9f0c476fc00392e9d62611"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"1824eac203aae22b5623f9d8f24119b3467ecd96","unresolved":false,"context_lines":[{"line_number":318,"context_line":"            for subnet in subnets:"},{"line_number":319,"context_line":"                if subnet[\u0027id\u0027] \u003d\u003d fixed[\u0027subnet_id\u0027]:"},{"line_number":320,"context_line":"                    break"},{"line_number":321,"context_line":"            else:"},{"line_number":322,"context_line":"                msg \u003d (_(\"Failed to create port on network %(network_id)s\""},{"line_number":323,"context_line":"                         \", because fixed_ips included invalid subnet \""},{"line_number":324,"context_line":"                         \"%(subnet_id)s\") %"}],"source_content_type":"text/x-python","patch_set":16,"id":"5a18252c_07c9d978","line":321,"updated":"2016-04-12 16:56:35.000000000","message":"You could still distinguish between a 400 and a 404 by calling this here and then checking to see if the network ids match.\n\n  self._get_subnet(context, fixed[\u0027subnet_id\u0027])","commit_id":"647d0092bef7d24f8a9f0c476fc00392e9d62611"},{"author":{"_account_id":10267,"name":"venkata anil","email":"anilvenkata@redhat.com","username":"anil"},"change_message_id":"2eafff8ae253ccd31a9600aacaf17cb6ed35070f","unresolved":false,"context_lines":[{"line_number":318,"context_line":"            for subnet in subnets:"},{"line_number":319,"context_line":"                if subnet[\u0027id\u0027] \u003d\u003d fixed[\u0027subnet_id\u0027]:"},{"line_number":320,"context_line":"                    break"},{"line_number":321,"context_line":"            else:"},{"line_number":322,"context_line":"                msg \u003d (_(\"Failed to create port on network %(network_id)s\""},{"line_number":323,"context_line":"                         \", because fixed_ips included invalid subnet \""},{"line_number":324,"context_line":"                         \"%(subnet_id)s\") %"}],"source_content_type":"text/x-python","patch_set":16,"id":"5a18252c_2156525c","line":321,"in_reply_to":"5a18252c_07c9d978","updated":"2016-04-13 13:55:06.000000000","message":"done","commit_id":"647d0092bef7d24f8a9f0c476fc00392e9d62611"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"2acb29135c7b162104c0854b04f35887d63ac6fa","unresolved":false,"context_lines":[{"line_number":306,"context_line":"            msg \u003d _(\u0027Exceeded maximum amount of fixed ips per port.\u0027)"},{"line_number":307,"context_line":"            raise n_exc.InvalidInput(error_message\u003dmsg)"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"    def _get_matching_subnet(self, subnet_id, subnets):"},{"line_number":310,"context_line":"        for subnet in subnets:"},{"line_number":311,"context_line":"            if subnet[\u0027id\u0027] \u003d\u003d subnet_id:"},{"line_number":312,"context_line":"                return subnet"}],"source_content_type":"text/x-python","patch_set":17,"id":"5a18252c_791636a8","line":309,"updated":"2016-04-13 16:52:41.000000000","message":"This can be inside _get_subnet_for_fixed_ip() since it\u0027s the only user.","commit_id":"4415ddbfc5a63daa2db5c5ffdbfd9db85fa71721"},{"author":{"_account_id":10267,"name":"venkata anil","email":"anilvenkata@redhat.com","username":"anil"},"change_message_id":"d0b239d61935191caf5ea9061c219885a9a438c6","unresolved":false,"context_lines":[{"line_number":306,"context_line":"            msg \u003d _(\u0027Exceeded maximum amount of fixed ips per port.\u0027)"},{"line_number":307,"context_line":"            raise n_exc.InvalidInput(error_message\u003dmsg)"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"    def _get_matching_subnet(self, subnet_id, subnets):"},{"line_number":310,"context_line":"        for subnet in subnets:"},{"line_number":311,"context_line":"            if subnet[\u0027id\u0027] \u003d\u003d subnet_id:"},{"line_number":312,"context_line":"                return subnet"}],"source_content_type":"text/x-python","patch_set":17,"id":"5a18252c_35367ee6","line":309,"in_reply_to":"5a18252c_791636a8","updated":"2016-04-13 18:11:36.000000000","message":"done","commit_id":"4415ddbfc5a63daa2db5c5ffdbfd9db85fa71721"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"9036ce595d77e7ecb27231cf2b376e82edf9aac9","unresolved":false,"context_lines":[{"line_number":313,"context_line":"            raise n_exc.InvalidInput(error_message\u003dmsg)"},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"        if \u0027subnet_id\u0027 in fixed:"},{"line_number":316,"context_line":"            def get_matching_subnet():"},{"line_number":317,"context_line":"                for subnet in subnets:"},{"line_number":318,"context_line":"                    if subnet[\u0027id\u0027] \u003d\u003d fixed[\u0027subnet_id\u0027]:"},{"line_number":319,"context_line":"                        return subnet"}],"source_content_type":"text/x-python","patch_set":18,"id":"5a18252c_7fa9df8f","line":316,"updated":"2016-04-14 05:46:08.000000000","message":"can you please move this to a utility method","commit_id":"a899d00cb951b36e86277e6d202f1f634fc3f40b"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"21161bb00a31829fb075d6bbc0fbafd2b1d60261","unresolved":false,"context_lines":[{"line_number":313,"context_line":"            raise n_exc.InvalidInput(error_message\u003dmsg)"},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"        if \u0027subnet_id\u0027 in fixed:"},{"line_number":316,"context_line":"            def get_matching_subnet():"},{"line_number":317,"context_line":"                for subnet in subnets:"},{"line_number":318,"context_line":"                    if subnet[\u0027id\u0027] \u003d\u003d fixed[\u0027subnet_id\u0027]:"},{"line_number":319,"context_line":"                        return subnet"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a122d0e_d4ba08c0","line":316,"in_reply_to":"5a18252c_448a531c","updated":"2016-04-15 16:16:51.000000000","message":"What is the reason for that?  I don\u0027t think this is a generally useful utility function.","commit_id":"a899d00cb951b36e86277e6d202f1f634fc3f40b"},{"author":{"_account_id":10267,"name":"venkata anil","email":"anilvenkata@redhat.com","username":"anil"},"change_message_id":"b96ed815f8b8570a2a180e8a13f5b114799e5309","unresolved":false,"context_lines":[{"line_number":313,"context_line":"            raise n_exc.InvalidInput(error_message\u003dmsg)"},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"        if \u0027subnet_id\u0027 in fixed:"},{"line_number":316,"context_line":"            def get_matching_subnet():"},{"line_number":317,"context_line":"                for subnet in subnets:"},{"line_number":318,"context_line":"                    if subnet[\u0027id\u0027] \u003d\u003d fixed[\u0027subnet_id\u0027]:"},{"line_number":319,"context_line":"                        return subnet"}],"source_content_type":"text/x-python","patch_set":18,"id":"5a18252c_448a531c","line":316,"in_reply_to":"5a18252c_7fa9df8f","updated":"2016-04-14 07:52:45.000000000","message":"done","commit_id":"a899d00cb951b36e86277e6d202f1f634fc3f40b"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"04f9c2f56e9ff0b4f0b7fb1bbd165a11e24a6fcb","unresolved":false,"context_lines":[{"line_number":313,"context_line":"            raise n_exc.InvalidInput(error_message\u003dmsg)"},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"        if \u0027subnet_id\u0027 in fixed:"},{"line_number":316,"context_line":"            subnet \u003d common_utils.get_matching_subnet(subnets,"},{"line_number":317,"context_line":"                                                      fixed[\u0027subnet_id\u0027])"},{"line_number":318,"context_line":"            if not subnet:"},{"line_number":319,"context_line":"                subnet \u003d self._get_subnet(context, fixed[\u0027subnet_id\u0027])"}],"source_content_type":"text/x-python","patch_set":19,"id":"1a122d0e_94a7f04e","line":316,"range":{"start_line":316,"start_character":21,"end_line":316,"end_character":53},"updated":"2016-04-15 16:32:19.000000000","message":"As I pointed out in the other file, this isn\u0027t a good common utility.  If others insist that it can\u0027t be an inline function like in PS18, just declare it as a static method before L309 in this file.","commit_id":"f1d3a19767fc618ed02ba609d97ced8b76863a49"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"04f9c2f56e9ff0b4f0b7fb1bbd165a11e24a6fcb","unresolved":false,"context_lines":[{"line_number":466,"context_line":""},{"line_number":467,"context_line":"        return subnet"},{"line_number":468,"context_line":""},{"line_number":469,"context_line":"    def _classify_subnets(self, context, subnets):"},{"line_number":470,"context_line":"        \"\"\"Split into v4, v6 stateless and v6 stateful subnets\"\"\""},{"line_number":471,"context_line":""},{"line_number":472,"context_line":"        v4, v6_stateful, v6_stateless \u003d [], [], []"}],"source_content_type":"text/x-python","patch_set":19,"id":"1a122d0e_d4cb281d","line":469,"range":{"start_line":469,"start_character":8,"end_line":469,"end_character":25},"updated":"2016-04-15 16:32:19.000000000","message":"Ya, you can blame this merge conflict on me.  Sorry about that.","commit_id":"f1d3a19767fc618ed02ba609d97ced8b76863a49"}],"neutron/db/ipam_non_pluggable_backend.py":[{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"09fe78ed9173f53e99bbeb7004d860b9159253c5","unresolved":false,"context_lines":[{"line_number":320,"context_line":"        changes \u003d self._get_changed_ips_for_port(context, original_ips,"},{"line_number":321,"context_line":"                                                 new_ips, device_owner)"},{"line_number":322,"context_line":"        net_id_filter \u003d {\u0027network_id\u0027: [network_id]}"},{"line_number":323,"context_line":"        subnets \u003d self._get_subnets(context, filters\u003dnet_id_filter)"},{"line_number":324,"context_line":"        # Check if the IP\u0027s to add are OK"},{"line_number":325,"context_line":"        to_add \u003d self._test_fixed_ips_for_port("},{"line_number":326,"context_line":"            context, network_id, changes.add, device_owner, subnets)"}],"source_content_type":"text/x-python","patch_set":7,"id":"5aef4532_6c303a9f","line":323,"updated":"2016-03-08 23:51:56.000000000","message":"You could create a dict here like this:\n\n  subnet_dict \u003d {s[\u0027id\u0027]: s for s in subnets}","commit_id":"098819e5907dafc49ecae17fcea9b0e501c5fd4e"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"14b961cadb311367cc80a9d90a6a8e12053c8151","unresolved":false,"context_lines":[{"line_number":219,"context_line":"            changes \u003d self._update_ips_for_port("},{"line_number":220,"context_line":"                context, network_id,"},{"line_number":221,"context_line":"                original[\"fixed_ips\"], new_port[\u0027fixed_ips\u0027],"},{"line_number":222,"context_line":"                original[\u0027mac_address\u0027], db_port[\u0027device_owner\u0027])"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"            # Update ips if necessary"},{"line_number":225,"context_line":"            for ip in changes.add:"}],"source_content_type":"text/x-python","patch_set":16,"id":"5a18252c_2418451d","line":222,"updated":"2016-04-12 22:13:09.000000000","message":"Seems to be an issue coming through this code path where the self._get_subnet() call on L323 returns None.\n\nhttp://logs.openstack.org/16/281116/16/gate/gate-tempest-dsvm-neutron-full/e5974dd/logs/screen-q-svc.txt.gz?level\u003dWARNING#_2016-04-12_18_58_48_195","commit_id":"647d0092bef7d24f8a9f0c476fc00392e9d62611"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"1824eac203aae22b5623f9d8f24119b3467ecd96","unresolved":false,"context_lines":[{"line_number":242,"context_line":"        \"\"\""},{"line_number":243,"context_line":"        fixed_ip_set \u003d []"},{"line_number":244,"context_line":"        for fixed in fixed_ips:"},{"line_number":245,"context_line":"            subnet \u003d self._get_subnet_for_fixed_ip("},{"line_number":246,"context_line":"                context, fixed, subnets)"},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"            is_auto_addr_subnet \u003d ipv6_utils.is_auto_address_subnet(subnet)"}],"source_content_type":"text/x-python","patch_set":16,"id":"5a18252c_0c30de00","line":245,"updated":"2016-04-12 16:56:35.000000000","message":"nit:  Why are you introducing a line break here?  The old line fit without a break and it was longer!","commit_id":"647d0092bef7d24f8a9f0c476fc00392e9d62611"}],"neutron/db/ipam_pluggable_backend.py":[{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"1824eac203aae22b5623f9d8f24119b3467ecd96","unresolved":false,"context_lines":[{"line_number":248,"context_line":"        \"\"\""},{"line_number":249,"context_line":"        fixed_ip_list \u003d []"},{"line_number":250,"context_line":"        for fixed in fixed_ips:"},{"line_number":251,"context_line":"            subnet \u003d self._get_subnet_for_fixed_ip("},{"line_number":252,"context_line":"                context, fixed, subnets)"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"            is_auto_addr_subnet \u003d ipv6_utils.is_auto_address_subnet(subnet)"}],"source_content_type":"text/x-python","patch_set":16,"id":"5a18252c_c741a13b","line":251,"updated":"2016-04-12 16:56:35.000000000","message":"Same comment here about the new line break.","commit_id":"647d0092bef7d24f8a9f0c476fc00392e9d62611"}],"neutron/tests/unit/db/test_db_base_plugin_v2.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"463d8228a2037c3c2ccc71d18b0e8b3571216bf2","unresolved":false,"context_lines":[{"line_number":2028,"context_line":"                net_id \u003d port[\u0027port\u0027][\u0027network_id\u0027]"},{"line_number":2029,"context_line":"                res \u003d self._create_port(self.fmt, net_id\u003dnet_id, **kwargs)"},{"line_number":2030,"context_line":"                port2 \u003d self.deserialize(self.fmt, res)"},{"line_number":2031,"context_line":"                self.assertEqual(webob.exc.HTTPClientError.code,"},{"line_number":2032,"context_line":"                                 res.status_int)"},{"line_number":2033,"context_line":""},{"line_number":2034,"context_line":"                # Test invalid IP address on specified subnet_id"}],"source_content_type":"text/x-python","patch_set":1,"id":"dae33548_a2718eaa","line":2031,"updated":"2016-02-17 09:51:43.000000000","message":"why is this changing?","commit_id":"10d877eb7e11cf8b131bbb9046a1add659343e6d"},{"author":{"_account_id":10267,"name":"venkata anil","email":"anilvenkata@redhat.com","username":"anil"},"change_message_id":"0081363fe2acc118660315a7e90d658c24ff6236","unresolved":false,"context_lines":[{"line_number":2028,"context_line":"                net_id \u003d port[\u0027port\u0027][\u0027network_id\u0027]"},{"line_number":2029,"context_line":"                res \u003d self._create_port(self.fmt, net_id\u003dnet_id, **kwargs)"},{"line_number":2030,"context_line":"                port2 \u003d self.deserialize(self.fmt, res)"},{"line_number":2031,"context_line":"                self.assertEqual(webob.exc.HTTPClientError.code,"},{"line_number":2032,"context_line":"                                 res.status_int)"},{"line_number":2033,"context_line":""},{"line_number":2034,"context_line":"                # Test invalid IP address on specified subnet_id"}],"source_content_type":"text/x-python","patch_set":1,"id":"dae33548_0e16a1f0","line":2031,"in_reply_to":"dae33548_a2718eaa","updated":"2016-02-17 11:07:36.000000000","message":"Previously when the subnet requested in fixed_ips is not found in DB, then because of [1] we get 404 error.\nNow, as that is removed, for the same case and because of [2], we get 400 error\n\n[1] https://github.com/openstack/neutron/blob/master/neutron/db/ipam_backend_mixin.py#L311\n[2] https://review.openstack.org/#/c/281116/1/neutron/db/ipam_backend_mixin.py L322","commit_id":"10d877eb7e11cf8b131bbb9046a1add659343e6d"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"57dc1353e8a8e177ff9c793150a57e0bfcf74a4b","unresolved":false,"context_lines":[{"line_number":2028,"context_line":"                net_id \u003d port[\u0027port\u0027][\u0027network_id\u0027]"},{"line_number":2029,"context_line":"                res \u003d self._create_port(self.fmt, net_id\u003dnet_id, **kwargs)"},{"line_number":2030,"context_line":"                port2 \u003d self.deserialize(self.fmt, res)"},{"line_number":2031,"context_line":"                self.assertEqual(webob.exc.HTTPClientError.code,"},{"line_number":2032,"context_line":"                                 res.status_int)"},{"line_number":2033,"context_line":""},{"line_number":2034,"context_line":"                # Test invalid IP address on specified subnet_id"}],"source_content_type":"text/x-python","patch_set":3,"id":"bae84128_cfe646e7","line":2031,"range":{"start_line":2031,"start_character":43,"end_line":2031,"end_character":58},"updated":"2016-02-23 23:34:57.000000000","message":"Why such change?","commit_id":"31873ef9948ac307664a516fdc51b87b4f39980b"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"897e051774b6bae89b4a571637636eec471752a5","unresolved":false,"context_lines":[{"line_number":2032,"context_line":"                res \u003d self._create_port(self.fmt, net_id\u003dnet_id, **kwargs)"},{"line_number":2033,"context_line":"                port2 \u003d self.deserialize(self.fmt, res)"},{"line_number":2034,"context_line":"                self.assertEqual(webob.exc.HTTPClientError.code,"},{"line_number":2035,"context_line":"                                 res.status_int)"},{"line_number":2036,"context_line":""},{"line_number":2037,"context_line":"                # Test invalid IP address on specified subnet_id"},{"line_number":2038,"context_line":"                kwargs \u003d {\"fixed_ips\":"}],"source_content_type":"text/x-python","patch_set":4,"id":"7af24918_9a55dafb","line":2035,"updated":"2016-03-03 02:58:06.000000000","message":"So I know you commented in a previous PS about why this changed, is this not an APIImpact for users?  We\u0027d just need to note that.","commit_id":"404af92b3523a304b6f7885ba6272a4b4d9ea148"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"1824eac203aae22b5623f9d8f24119b3467ecd96","unresolved":false,"context_lines":[{"line_number":2095,"context_line":"                net_id \u003d port[\u0027port\u0027][\u0027network_id\u0027]"},{"line_number":2096,"context_line":"                res \u003d self._create_port(self.fmt, net_id\u003dnet_id, **kwargs)"},{"line_number":2097,"context_line":"                port2 \u003d self.deserialize(self.fmt, res)"},{"line_number":2098,"context_line":"                self.assertEqual(webob.exc.HTTPClientError.code,"},{"line_number":2099,"context_line":"                                 res.status_int)"},{"line_number":2100,"context_line":""},{"line_number":2101,"context_line":"                # Test invalid IP address on specified subnet_id"}],"source_content_type":"text/x-python","patch_set":16,"id":"5a18252c_4788f122","line":2098,"updated":"2016-04-12 16:56:35.000000000","message":"You could avoid this if you want.  See my comment here [1].  But, I\u0027m not worried about it enough for a -1.\n\n [1] https://review.openstack.org/#/c/281116/16/neutron/db/ipam_backend_mixin.py","commit_id":"647d0092bef7d24f8a9f0c476fc00392e9d62611"},{"author":{"_account_id":10267,"name":"venkata anil","email":"anilvenkata@redhat.com","username":"anil"},"change_message_id":"2eafff8ae253ccd31a9600aacaf17cb6ed35070f","unresolved":false,"context_lines":[{"line_number":2095,"context_line":"                net_id \u003d port[\u0027port\u0027][\u0027network_id\u0027]"},{"line_number":2096,"context_line":"                res \u003d self._create_port(self.fmt, net_id\u003dnet_id, **kwargs)"},{"line_number":2097,"context_line":"                port2 \u003d self.deserialize(self.fmt, res)"},{"line_number":2098,"context_line":"                self.assertEqual(webob.exc.HTTPClientError.code,"},{"line_number":2099,"context_line":"                                 res.status_int)"},{"line_number":2100,"context_line":""},{"line_number":2101,"context_line":"                # Test invalid IP address on specified subnet_id"}],"source_content_type":"text/x-python","patch_set":16,"id":"5a18252c_01d876ee","line":2098,"in_reply_to":"5a18252c_4788f122","updated":"2016-04-13 13:55:06.000000000","message":"done","commit_id":"647d0092bef7d24f8a9f0c476fc00392e9d62611"}],"neutron/tests/unit/db/test_ipam_pluggable_backend.py":[{"author":{"_account_id":6685,"name":"Baodong (Robert) Li","email":"baoli@cisco.com","username":"baoli"},"change_message_id":"058a53e779ca50269112c4ba30c0aa79188c0e41","unresolved":false,"context_lines":[{"line_number":530,"context_line":"        fixed_ips_mock \u003d mock.Mock(return_value\u003dchanges.add)"},{"line_number":531,"context_line":"        mocks[\u0027ipam\u0027] \u003d ipam_pluggable_backend.IpamPluggableBackend()"},{"line_number":532,"context_line":"        mocks[\u0027ipam\u0027]._get_changed_ips_for_port \u003d changes_mock"},{"line_number":533,"context_line":"        mocks[\u0027ipam\u0027]._get_subnets \u003d get_subnets_mock"},{"line_number":534,"context_line":"        mocks[\u0027ipam\u0027]._test_fixed_ips_for_port \u003d fixed_ips_mock"},{"line_number":535,"context_line":""},{"line_number":536,"context_line":"        port_dict \u003d {\u0027device_owner\u0027: uuidutils.generate_uuid(),"}],"source_content_type":"text/x-python","patch_set":2,"id":"dae33548_3a6bbef2","line":533,"range":{"start_line":533,"start_character":37,"end_line":533,"end_character":53},"updated":"2016-02-17 21:46:00.000000000","message":"Nit: it would be sufficient to replace get_subnets_mock with mock.Mock().","commit_id":"15ce2045034ff8621a2fead58f7e11ac3a2ac6ae"},{"author":{"_account_id":10267,"name":"venkata anil","email":"anilvenkata@redhat.com","username":"anil"},"change_message_id":"24262b47ae73d8a16f3c595634cd76ee129be303","unresolved":false,"context_lines":[{"line_number":530,"context_line":"        fixed_ips_mock \u003d mock.Mock(return_value\u003dchanges.add)"},{"line_number":531,"context_line":"        mocks[\u0027ipam\u0027] \u003d ipam_pluggable_backend.IpamPluggableBackend()"},{"line_number":532,"context_line":"        mocks[\u0027ipam\u0027]._get_changed_ips_for_port \u003d changes_mock"},{"line_number":533,"context_line":"        mocks[\u0027ipam\u0027]._get_subnets \u003d get_subnets_mock"},{"line_number":534,"context_line":"        mocks[\u0027ipam\u0027]._test_fixed_ips_for_port \u003d fixed_ips_mock"},{"line_number":535,"context_line":""},{"line_number":536,"context_line":"        port_dict \u003d {\u0027device_owner\u0027: uuidutils.generate_uuid(),"}],"source_content_type":"text/x-python","patch_set":2,"id":"dae33548_f2ccd18a","line":533,"range":{"start_line":533,"start_character":37,"end_line":533,"end_character":53},"in_reply_to":"dae33548_3a6bbef2","updated":"2016-02-18 05:20:58.000000000","message":"sure, thanks","commit_id":"15ce2045034ff8621a2fead58f7e11ac3a2ac6ae"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"382fb60ec8d71d0a057c526b6b2874a851202b68","unresolved":false,"context_lines":[{"line_number":530,"context_line":"        fixed_ips_mock \u003d mock.Mock(return_value\u003dchanges.add)"},{"line_number":531,"context_line":"        mocks[\u0027ipam\u0027] \u003d ipam_pluggable_backend.IpamPluggableBackend()"},{"line_number":532,"context_line":"        mocks[\u0027ipam\u0027]._get_changed_ips_for_port \u003d changes_mock"},{"line_number":533,"context_line":"        mocks[\u0027ipam\u0027]._get_subnets \u003d mock.Mock()"},{"line_number":534,"context_line":"        mocks[\u0027ipam\u0027]._test_fixed_ips_for_port \u003d fixed_ips_mock"},{"line_number":535,"context_line":""},{"line_number":536,"context_line":"        port_dict \u003d {\u0027device_owner\u0027: uuidutils.generate_uuid(),"}],"source_content_type":"text/x-python","patch_set":5,"id":"7af24918_9c7f7edf","line":533,"range":{"start_line":533,"start_character":22,"end_line":533,"end_character":34},"updated":"2016-03-03 12:33:54.000000000","message":"Why not add a UT to verify that the call_count of _get_subnets is just one?","commit_id":"b554ca74084f25e4c8aad0ae4b4e77f7a04890ba"}]}
