)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":4656,"name":"Sean M. Collins","email":"sean@coreitpro.com","username":"scollins"},"change_message_id":"12d2c6f73b0e74f7435cd9a77b80296e54a67c90","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Refactor _update_ips_for_port()"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This commit is a preparation step for using pluggable IPAM."},{"line_number":10,"context_line":"_update_ips_for_port was refactored and splitted into two methods:"},{"line_number":11,"context_line":"- _get_changed_ips_for_port()"},{"line_number":12,"context_line":"  This method contains calculations common for pluggable and"},{"line_number":13,"context_line":"  non-pluggable IPAM implementation, was moved to ipam_backend_mixin."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3afb71cf_88850cd0","line":10,"updated":"2015-06-10 15:00:36.000000000","message":"and split into two methods","commit_id":"42a7863a4c104a765167bf71c9f7e531008993a2"},{"author":{"_account_id":13768,"name":"Pavel Bondar","email":"pbondar@infoblox.com","username":"pavel_bondar"},"change_message_id":"3f23bf90c8be4c544206108d6d0d004345d85d56","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Refactor _update_ips_for_port()"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This commit is a preparation step for using pluggable IPAM."},{"line_number":10,"context_line":"_update_ips_for_port was refactored and splitted into two methods:"},{"line_number":11,"context_line":"- _get_changed_ips_for_port()"},{"line_number":12,"context_line":"  This method contains calculations common for pluggable and"},{"line_number":13,"context_line":"  non-pluggable IPAM implementation, was moved to ipam_backend_mixin."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3afb71cf_ce80ad8d","line":10,"in_reply_to":"3afb71cf_88850cd0","updated":"2015-06-10 15:21:38.000000000","message":"will fix withing next patchset","commit_id":"42a7863a4c104a765167bf71c9f7e531008993a2"},{"author":{"_account_id":12912,"name":"John Belamaric","email":"jbelamaric@infoblox.com","username":"johnbelamaric"},"change_message_id":"197ef62b1268c564e1e8213a31f00c8d46d5eca1","unresolved":false,"context_lines":[{"line_number":20,"context_line":"  ips (previously added and original ips were returned)."},{"line_number":21,"context_line":"  List of removed ips is required by pluggable IPAM implementaion"},{"line_number":22,"context_line":"  to apply rollback-on-failure logic;"},{"line_number":23,"context_line":"- removed unused port_id agrument from _update_ips_for_port argument list;"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"Partially-Implements: blueprint neutron-ipam"},{"line_number":26,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3afb71cf_d366de28","line":23,"updated":"2015-06-11 15:29:00.000000000","message":"s/agrument/argument/","commit_id":"6ad0e7453deb4f7e050b8556598733ed2f0e6444"},{"author":{"_account_id":13768,"name":"Pavel Bondar","email":"pbondar@infoblox.com","username":"pavel_bondar"},"change_message_id":"c616ae4fe89ae0a4440e21f2c4b392449e2cf5ec","unresolved":false,"context_lines":[{"line_number":20,"context_line":"  ips (previously added and original ips were returned)."},{"line_number":21,"context_line":"  List of removed ips is required by pluggable IPAM implementaion"},{"line_number":22,"context_line":"  to apply rollback-on-failure logic;"},{"line_number":23,"context_line":"- removed unused port_id agrument from _update_ips_for_port argument list;"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"Partially-Implements: blueprint neutron-ipam"},{"line_number":26,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"1af86dd1_81691f8e","line":23,"in_reply_to":"3afb71cf_d366de28","updated":"2015-06-12 12:46:59.000000000","message":"Done","commit_id":"6ad0e7453deb4f7e050b8556598733ed2f0e6444"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"d96a6f9a4966bc932fcb859a56fd22539762db53","unresolved":false,"context_lines":[{"line_number":16,"context_line":"  was moved to ipam_non_pluggable_backend_common."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Other changes:"},{"line_number":19,"context_line":"- _update_ips_for_port now returns dict with added, removed, original"},{"line_number":20,"context_line":"  ips (previously added and original ips were returned)."},{"line_number":21,"context_line":"  List of removed ips is required by pluggable IPAM implementaion"},{"line_number":22,"context_line":"  to apply rollback-on-failure logic;"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"fa32b979_1e58def9","line":19,"range":{"start_line":19,"start_character":35,"end_line":19,"end_character":39},"updated":"2015-06-15 11:02:47.000000000","message":"namedtuple, not dict","commit_id":"60e5b46f1793886828019e9e6de5c46f0b52712a"}],"neutron/db/db_base_plugin_v2.py":[{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"ff39da0d8bbb3c6b9828cb7b81e58a07ce8c5510","unresolved":false,"context_lines":[{"line_number":1165,"context_line":"            if \u0027fixed_ips\u0027 in p:"},{"line_number":1166,"context_line":"                changed_ips \u003d True"},{"line_number":1167,"context_line":"                original \u003d self._make_port_dict(port, process_extensions\u003dFalse)"},{"line_number":1168,"context_line":"                changes \u003d self._update_ips_for_port("},{"line_number":1169,"context_line":"                    context, network_id,"},{"line_number":1170,"context_line":"                    original[\"fixed_ips\"], p[\u0027fixed_ips\u0027],"},{"line_number":1171,"context_line":"                    original[\u0027mac_address\u0027], port[\u0027device_owner\u0027])"}],"source_content_type":"text/x-python","patch_set":3,"id":"3afb71cf_0111bdaf","line":1168,"updated":"2015-06-11 17:47:10.000000000","message":"Nit:  The change here from tuple to dict is okay.  You might consider a namedtuple in collections to maintain immutability and change references like changes[\u0027add\u0027] to changes.add.","commit_id":"6ad0e7453deb4f7e050b8556598733ed2f0e6444"},{"author":{"_account_id":13768,"name":"Pavel Bondar","email":"pbondar@infoblox.com","username":"pavel_bondar"},"change_message_id":"c616ae4fe89ae0a4440e21f2c4b392449e2cf5ec","unresolved":false,"context_lines":[{"line_number":1165,"context_line":"            if \u0027fixed_ips\u0027 in p:"},{"line_number":1166,"context_line":"                changed_ips \u003d True"},{"line_number":1167,"context_line":"                original \u003d self._make_port_dict(port, process_extensions\u003dFalse)"},{"line_number":1168,"context_line":"                changes \u003d self._update_ips_for_port("},{"line_number":1169,"context_line":"                    context, network_id,"},{"line_number":1170,"context_line":"                    original[\"fixed_ips\"], p[\u0027fixed_ips\u0027],"},{"line_number":1171,"context_line":"                    original[\u0027mac_address\u0027], port[\u0027device_owner\u0027])"}],"source_content_type":"text/x-python","patch_set":3,"id":"1af86dd1_4131e7a1","line":1168,"in_reply_to":"3afb71cf_0111bdaf","updated":"2015-06-12 12:46:59.000000000","message":"switched to namedtuple in PS5","commit_id":"6ad0e7453deb4f7e050b8556598733ed2f0e6444"},{"author":{"_account_id":8190,"name":"Drew Thorstensen (thorst)","email":"thorst@us.ibm.com","username":"thorst"},"change_message_id":"fd2ad1cb84b9d8f2761cc22e2839820592757f59","unresolved":false,"context_lines":[{"line_number":1186,"context_line":"        result \u003d self._make_port_dict(port)"},{"line_number":1187,"context_line":"        # Keep up with fields that changed"},{"line_number":1188,"context_line":"        if changed_ips:"},{"line_number":1189,"context_line":"            result[\u0027fixed_ips\u0027] \u003d changes.original + changes.add"},{"line_number":1190,"context_line":"        return result"},{"line_number":1191,"context_line":""},{"line_number":1192,"context_line":"    def delete_port(self, context, id):"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa32b979_8e8ca380","line":1189,"updated":"2015-06-15 19:30:29.000000000","message":"The changes that comes back has original, add and remove.  The previous API didn\u0027t have that verbosity.\n\nGiven that increased resolution, should this line instead be:\n- result[\u0027fixed_ips\u0027] \u003d changes.original + changes.add - changes.remove\n\nOr does this flow not allow for removes and thus does not need to be concerned with that?","commit_id":"a89f99c6b700b1c6f918fe359c7271ac25ed4bc4"},{"author":{"_account_id":12912,"name":"John Belamaric","email":"jbelamaric@infoblox.com","username":"johnbelamaric"},"change_message_id":"a3aab8a36408b0d702b62317e77e3460ce87b481","unresolved":false,"context_lines":[{"line_number":1186,"context_line":"        result \u003d self._make_port_dict(port)"},{"line_number":1187,"context_line":"        # Keep up with fields that changed"},{"line_number":1188,"context_line":"        if changed_ips:"},{"line_number":1189,"context_line":"            result[\u0027fixed_ips\u0027] \u003d changes.original + changes.add"},{"line_number":1190,"context_line":"        return result"},{"line_number":1191,"context_line":""},{"line_number":1192,"context_line":"    def delete_port(self, context, id):"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa32b979_61860d67","line":1189,"in_reply_to":"fa32b979_8e8ca380","updated":"2015-06-15 21:10:31.000000000","message":"The value of changes.original is the same as the prior code had for prev_ips. If you look at ipam_backend_mixin.py lines 177-199 you will see this.","commit_id":"a89f99c6b700b1c6f918fe359c7271ac25ed4bc4"}],"neutron/db/ipam_backend_mixin.py":[{"author":{"_account_id":4656,"name":"Sean M. Collins","email":"sean@coreitpro.com","username":"scollins"},"change_message_id":"12d2c6f73b0e74f7435cd9a77b80296e54a67c90","unresolved":false,"context_lines":[{"line_number":173,"context_line":""},{"line_number":174,"context_line":"        # Remove all of the intersecting elements"},{"line_number":175,"context_line":"        for original_ip in original_ips[:]:"},{"line_number":176,"context_line":"            for new_ip in new_ips[:]:"},{"line_number":177,"context_line":"                if (\u0027ip_address\u0027 in new_ip and"},{"line_number":178,"context_line":"                    original_ip[\u0027ip_address\u0027] \u003d\u003d new_ip[\u0027ip_address\u0027]):"},{"line_number":179,"context_line":"                    original_ips.remove(original_ip)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3afb71cf_6871b00e","line":176,"updated":"2015-06-10 15:00:36.000000000","message":"Do you need to use slice notation here?","commit_id":"42a7863a4c104a765167bf71c9f7e531008993a2"},{"author":{"_account_id":13768,"name":"Pavel Bondar","email":"pbondar@infoblox.com","username":"pavel_bondar"},"change_message_id":"99c653520656c0fb220bc223100651884863c1fe","unresolved":false,"context_lines":[{"line_number":173,"context_line":""},{"line_number":174,"context_line":"        # Remove all of the intersecting elements"},{"line_number":175,"context_line":"        for original_ip in original_ips[:]:"},{"line_number":176,"context_line":"            for new_ip in new_ips[:]:"},{"line_number":177,"context_line":"                if (\u0027ip_address\u0027 in new_ip and"},{"line_number":178,"context_line":"                    original_ip[\u0027ip_address\u0027] \u003d\u003d new_ip[\u0027ip_address\u0027]):"},{"line_number":179,"context_line":"                    original_ips.remove(original_ip)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3afb71cf_63f763d3","line":176,"in_reply_to":"3afb71cf_039a16b9","updated":"2015-06-11 12:58:01.000000000","message":"Created [1] to track switching to sets to calculate changed ips.\n\n[1] https://review.openstack.org/190623","commit_id":"42a7863a4c104a765167bf71c9f7e531008993a2"},{"author":{"_account_id":13768,"name":"Pavel Bondar","email":"pbondar@infoblox.com","username":"pavel_bondar"},"change_message_id":"3f23bf90c8be4c544206108d6d0d004345d85d56","unresolved":false,"context_lines":[{"line_number":173,"context_line":""},{"line_number":174,"context_line":"        # Remove all of the intersecting elements"},{"line_number":175,"context_line":"        for original_ip in original_ips[:]:"},{"line_number":176,"context_line":"            for new_ip in new_ips[:]:"},{"line_number":177,"context_line":"                if (\u0027ip_address\u0027 in new_ip and"},{"line_number":178,"context_line":"                    original_ip[\u0027ip_address\u0027] \u003d\u003d new_ip[\u0027ip_address\u0027]):"},{"line_number":179,"context_line":"                    original_ips.remove(original_ip)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3afb71cf_aef6915a","line":176,"in_reply_to":"3afb71cf_6871b00e","updated":"2015-06-10 15:21:38.000000000","message":"Yes, it is needed here, because we are deleting items from both original_ips and new_ips.\n\nIterator ommit next element in case of deletion from the same array:\n\n\u003e\u003e\u003e ips \u003d [1,3,5]\n\n\u003e\u003e\u003e for ip in ips:\n\n...    ips.remove(ip)\n\n...    print ip\n\n... \n\n1\n\n5\n\nComparing to:\n\n\u003e\u003e\u003e ips \u003d [1,3,5]\n\n\u003e\u003e\u003e for ip in ips[:]:\n\n...    ips.remove(ip)\n\n...    print ip\n\n... \n\n1\n\n3\n\n5","commit_id":"42a7863a4c104a765167bf71c9f7e531008993a2"},{"author":{"_account_id":4656,"name":"Sean M. Collins","email":"sean@coreitpro.com","username":"scollins"},"change_message_id":"d6876f6bc4ae747920d159fdf3ccbbd19e73ed58","unresolved":false,"context_lines":[{"line_number":173,"context_line":""},{"line_number":174,"context_line":"        # Remove all of the intersecting elements"},{"line_number":175,"context_line":"        for original_ip in original_ips[:]:"},{"line_number":176,"context_line":"            for new_ip in new_ips[:]:"},{"line_number":177,"context_line":"                if (\u0027ip_address\u0027 in new_ip and"},{"line_number":178,"context_line":"                    original_ip[\u0027ip_address\u0027] \u003d\u003d new_ip[\u0027ip_address\u0027]):"},{"line_number":179,"context_line":"                    original_ips.remove(original_ip)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3afb71cf_b18a7062","line":176,"in_reply_to":"3afb71cf_aef6915a","updated":"2015-06-10 15:26:41.000000000","message":"Instead of doing this - have we considered refactoring to use sets? That way we can just do set operations?\n\nhttps://docs.python.org/2/library/sets.html","commit_id":"42a7863a4c104a765167bf71c9f7e531008993a2"},{"author":{"_account_id":13768,"name":"Pavel Bondar","email":"pbondar@infoblox.com","username":"pavel_bondar"},"change_message_id":"afa296f08eba8aace5a2f38dd89e5d19f268dd34","unresolved":false,"context_lines":[{"line_number":173,"context_line":""},{"line_number":174,"context_line":"        # Remove all of the intersecting elements"},{"line_number":175,"context_line":"        for original_ip in original_ips[:]:"},{"line_number":176,"context_line":"            for new_ip in new_ips[:]:"},{"line_number":177,"context_line":"                if (\u0027ip_address\u0027 in new_ip and"},{"line_number":178,"context_line":"                    original_ip[\u0027ip_address\u0027] \u003d\u003d new_ip[\u0027ip_address\u0027]):"},{"line_number":179,"context_line":"                    original_ips.remove(original_ip)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3afb71cf_bdbda103","line":176,"in_reply_to":"3afb71cf_b18a7062","updated":"2015-06-10 17:06:45.000000000","message":"To clarify, this part of code was moved from _update_ips_for_port() db_base_plugin.\nAnd main purpose of current refactoring was to split parts that are common for both IPAM backends(like _get_changed_ips_for_port part) from parts, that are IPAM backend specific(like the rest of _update_ips_for_port).\n\nSince changing ips caluculation was not intention of this patch, I would prefer to do not touch it here.","commit_id":"42a7863a4c104a765167bf71c9f7e531008993a2"},{"author":{"_account_id":13768,"name":"Pavel Bondar","email":"pbondar@infoblox.com","username":"pavel_bondar"},"change_message_id":"81a6332b3cb5c73e08ed24bf6f3361bc777c20e2","unresolved":false,"context_lines":[{"line_number":173,"context_line":""},{"line_number":174,"context_line":"        # Remove all of the intersecting elements"},{"line_number":175,"context_line":"        for original_ip in original_ips[:]:"},{"line_number":176,"context_line":"            for new_ip in new_ips[:]:"},{"line_number":177,"context_line":"                if (\u0027ip_address\u0027 in new_ip and"},{"line_number":178,"context_line":"                    original_ip[\u0027ip_address\u0027] \u003d\u003d new_ip[\u0027ip_address\u0027]):"},{"line_number":179,"context_line":"                    original_ips.remove(original_ip)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3afb71cf_039a16b9","line":176,"in_reply_to":"3afb71cf_bdbda103","updated":"2015-06-11 12:33:16.000000000","message":"Will create dependent review to track switching to use sets here.\nHave some workable version locally, will post link after upload to gerrit.","commit_id":"42a7863a4c104a765167bf71c9f7e531008993a2"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"ff39da0d8bbb3c6b9828cb7b81e58a07ce8c5510","unresolved":false,"context_lines":[{"line_number":172,"context_line":"            raise n_exc.InvalidInput(error_message\u003dmsg)"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"        # Remove all of the intersecting elements"},{"line_number":175,"context_line":"        for original_ip in original_ips[:]:"},{"line_number":176,"context_line":"            for new_ip in new_ips[:]:"},{"line_number":177,"context_line":"                if (\u0027ip_address\u0027 in new_ip and"},{"line_number":178,"context_line":"                    original_ip[\u0027ip_address\u0027] \u003d\u003d new_ip[\u0027ip_address\u0027]):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3afb71cf_6473dfe8","line":175,"updated":"2015-06-11 17:47:10.000000000","message":"Optional follow-on:  Could we take the opportunity to get rid of this pattern of mutating the lists we\u0027re trying to iterate over.  Could sets be used instead of lists?  This logic feels like it should be done with set operations instead of iterations.  Sometimes, I find that sets drop in to places like this.  Other times, it is a bit more work.","commit_id":"6ad0e7453deb4f7e050b8556598733ed2f0e6444"},{"author":{"_account_id":13768,"name":"Pavel Bondar","email":"pbondar@infoblox.com","username":"pavel_bondar"},"change_message_id":"c616ae4fe89ae0a4440e21f2c4b392449e2cf5ec","unresolved":false,"context_lines":[{"line_number":172,"context_line":"            raise n_exc.InvalidInput(error_message\u003dmsg)"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"        # Remove all of the intersecting elements"},{"line_number":175,"context_line":"        for original_ip in original_ips[:]:"},{"line_number":176,"context_line":"            for new_ip in new_ips[:]:"},{"line_number":177,"context_line":"                if (\u0027ip_address\u0027 in new_ip and"},{"line_number":178,"context_line":"                    original_ip[\u0027ip_address\u0027] \u003d\u003d new_ip[\u0027ip_address\u0027]):"}],"source_content_type":"text/x-python","patch_set":3,"id":"1af86dd1_a19f7b5e","line":175,"in_reply_to":"3afb71cf_3fee10b5","updated":"2015-06-12 12:46:59.000000000","message":"Done","commit_id":"6ad0e7453deb4f7e050b8556598733ed2f0e6444"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"1042da6157b00fa57e518f0e1463995cdb705c5d","unresolved":false,"context_lines":[{"line_number":172,"context_line":"            raise n_exc.InvalidInput(error_message\u003dmsg)"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"        # Remove all of the intersecting elements"},{"line_number":175,"context_line":"        for original_ip in original_ips[:]:"},{"line_number":176,"context_line":"            for new_ip in new_ips[:]:"},{"line_number":177,"context_line":"                if (\u0027ip_address\u0027 in new_ip and"},{"line_number":178,"context_line":"                    original_ip[\u0027ip_address\u0027] \u003d\u003d new_ip[\u0027ip_address\u0027]):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3afb71cf_3fee10b5","line":175,"in_reply_to":"3afb71cf_6473dfe8","updated":"2015-06-11 17:48:37.000000000","message":"You\u0027re one step ahead of me.  I didn\u0027t realize that one of your follow-ons already does this.  Nice!","commit_id":"6ad0e7453deb4f7e050b8556598733ed2f0e6444"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"53ac5b37ac32185ac0830740f9e4e60f3a07c2c4","unresolved":false,"context_lines":[{"line_number":171,"context_line":""},{"line_number":172,"context_line":"        # the new_ips contain all of the fixed_ips that are to be updated"},{"line_number":173,"context_line":"        if len(new_ips) \u003e cfg.CONF.max_fixed_ips_per_port:"},{"line_number":174,"context_line":"            msg \u003d _(\u0027Exceeded maximim amount of fixed ips per port\u0027)"},{"line_number":175,"context_line":"            raise n_exc.InvalidInput(error_message\u003dmsg)"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"        # Remove all of the intersecting elements"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa32b979_776852bb","line":174,"updated":"2015-06-13 03:57:22.000000000","message":"*maximum\n\nBut, the original had the same mis-spelling.  So, only fix it if you have another reason to crack open this patch.","commit_id":"b51cc3d8788b807812676c442847c8c337b29489"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"b30501234c8d9c147ebb57e0e010fa0fe2e1589a","unresolved":false,"context_lines":[{"line_number":165,"context_line":"    def _get_changed_ips_for_port(self, context, original_ips,"},{"line_number":166,"context_line":"                                  new_ips, device_owner):"},{"line_number":167,"context_line":"        \"\"\"Calculate changes in IPs for the port.\"\"\""},{"line_number":168,"context_line":"        # These ips are still on the port and haven\u0027t been removed"},{"line_number":169,"context_line":"        prev_ips \u003d []"},{"line_number":170,"context_line":"        Changes \u003d collections.namedtuple(\u0027Changes\u0027, \u0027add original remove\u0027)"},{"line_number":171,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_581a1a19","line":168,"updated":"2015-06-13 16:17:52.000000000","message":"minor nits lines 169 and 170 can be done after the ip validations","commit_id":"60e5b46f1793886828019e9e6de5c46f0b52712a"},{"author":{"_account_id":13768,"name":"Pavel Bondar","email":"pbondar@infoblox.com","username":"pavel_bondar"},"change_message_id":"d944d073d197d04c76945ba892dd8a864117da97","unresolved":false,"context_lines":[{"line_number":165,"context_line":"    def _get_changed_ips_for_port(self, context, original_ips,"},{"line_number":166,"context_line":"                                  new_ips, device_owner):"},{"line_number":167,"context_line":"        \"\"\"Calculate changes in IPs for the port.\"\"\""},{"line_number":168,"context_line":"        # These ips are still on the port and haven\u0027t been removed"},{"line_number":169,"context_line":"        prev_ips \u003d []"},{"line_number":170,"context_line":"        Changes \u003d collections.namedtuple(\u0027Changes\u0027, \u0027add original remove\u0027)"},{"line_number":171,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_47e8e07c","line":168,"in_reply_to":"fa32b979_581a1a19","updated":"2015-06-15 11:27:15.000000000","message":"Done","commit_id":"60e5b46f1793886828019e9e6de5c46f0b52712a"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"b30501234c8d9c147ebb57e0e010fa0fe2e1589a","unresolved":false,"context_lines":[{"line_number":167,"context_line":"        \"\"\"Calculate changes in IPs for the port.\"\"\""},{"line_number":168,"context_line":"        # These ips are still on the port and haven\u0027t been removed"},{"line_number":169,"context_line":"        prev_ips \u003d []"},{"line_number":170,"context_line":"        Changes \u003d collections.namedtuple(\u0027Changes\u0027, \u0027add original remove\u0027)"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"        # the new_ips contain all of the fixed_ips that are to be updated"},{"line_number":173,"context_line":"        if len(new_ips) \u003e cfg.CONF.max_fixed_ips_per_port:"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_7817deed","line":170,"updated":"2015-06-13 16:17:52.000000000","message":"Why is this declared in the method and is not a global variable?","commit_id":"60e5b46f1793886828019e9e6de5c46f0b52712a"},{"author":{"_account_id":13768,"name":"Pavel Bondar","email":"pbondar@infoblox.com","username":"pavel_bondar"},"change_message_id":"d944d073d197d04c76945ba892dd8a864117da97","unresolved":false,"context_lines":[{"line_number":167,"context_line":"        \"\"\"Calculate changes in IPs for the port.\"\"\""},{"line_number":168,"context_line":"        # These ips are still on the port and haven\u0027t been removed"},{"line_number":169,"context_line":"        prev_ips \u003d []"},{"line_number":170,"context_line":"        Changes \u003d collections.namedtuple(\u0027Changes\u0027, \u0027add original remove\u0027)"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"        # the new_ips contain all of the fixed_ips that are to be updated"},{"line_number":173,"context_line":"        if len(new_ips) \u003e cfg.CONF.max_fixed_ips_per_port:"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_0703b843","line":170,"in_reply_to":"fa32b979_7817deed","updated":"2015-06-15 11:27:15.000000000","message":"Done","commit_id":"60e5b46f1793886828019e9e6de5c46f0b52712a"}],"neutron/db/ipam_non_pluggable_backend.py":[{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"ff39da0d8bbb3c6b9828cb7b81e58a07ce8c5510","unresolved":false,"context_lines":[{"line_number":300,"context_line":"        return ips"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"    def _update_ips_for_port(self, context, network_id, original_ips,"},{"line_number":303,"context_line":"                             new_ips, mac_address, device_owner):"},{"line_number":304,"context_line":"        changes \u003d self._get_changed_ips_for_port(context, original_ips,"},{"line_number":305,"context_line":"                                                 new_ips, device_owner)"},{"line_number":306,"context_line":"        # Check if the IP\u0027s to add are OK"}],"source_content_type":"text/x-python","patch_set":3,"id":"3afb71cf_9f1f4409","line":303,"updated":"2015-06-11 17:47:10.000000000","message":"nit:  The docstring was removed.  Granted, it wasn\u0027t all that helpful in the first place.","commit_id":"6ad0e7453deb4f7e050b8556598733ed2f0e6444"},{"author":{"_account_id":13768,"name":"Pavel Bondar","email":"pbondar@infoblox.com","username":"pavel_bondar"},"change_message_id":"c616ae4fe89ae0a4440e21f2c4b392449e2cf5ec","unresolved":false,"context_lines":[{"line_number":300,"context_line":"        return ips"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"    def _update_ips_for_port(self, context, network_id, original_ips,"},{"line_number":303,"context_line":"                             new_ips, mac_address, device_owner):"},{"line_number":304,"context_line":"        changes \u003d self._get_changed_ips_for_port(context, original_ips,"},{"line_number":305,"context_line":"                                                 new_ips, device_owner)"},{"line_number":306,"context_line":"        # Check if the IP\u0027s to add are OK"}],"source_content_type":"text/x-python","patch_set":3,"id":"1af86dd1_819c7f6a","line":303,"in_reply_to":"3afb71cf_9f1f4409","updated":"2015-06-12 12:46:59.000000000","message":"Done","commit_id":"6ad0e7453deb4f7e050b8556598733ed2f0e6444"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"ff39da0d8bbb3c6b9828cb7b81e58a07ce8c5510","unresolved":false,"context_lines":[{"line_number":315,"context_line":""},{"line_number":316,"context_line":"        if to_add:"},{"line_number":317,"context_line":"            LOG.debug(\"Port update. Adding %s\", to_add)"},{"line_number":318,"context_line":"            changes[\u0027add\u0027] \u003d self._allocate_fixed_ips(context, to_add,"},{"line_number":319,"context_line":"                                                      mac_address)"},{"line_number":320,"context_line":"        else:"},{"line_number":321,"context_line":"            changes[\u0027add\u0027] \u003d []"}],"source_content_type":"text/x-python","patch_set":3,"id":"3afb71cf_9f7bc429","line":318,"updated":"2015-06-11 17:47:10.000000000","message":"The semantics of changes[\u0027add\u0027] are not clear to me.  On L304, changes is returned with an \u0027add\u0027 key/value.  Then, we discard that and replace it with this here.  What is the distinction?","commit_id":"6ad0e7453deb4f7e050b8556598733ed2f0e6444"},{"author":{"_account_id":13768,"name":"Pavel Bondar","email":"pbondar@infoblox.com","username":"pavel_bondar"},"change_message_id":"463892400c02de8872ce5050694e93691c93656a","unresolved":false,"context_lines":[{"line_number":315,"context_line":""},{"line_number":316,"context_line":"        if to_add:"},{"line_number":317,"context_line":"            LOG.debug(\"Port update. Adding %s\", to_add)"},{"line_number":318,"context_line":"            changes[\u0027add\u0027] \u003d self._allocate_fixed_ips(context, to_add,"},{"line_number":319,"context_line":"                                                      mac_address)"},{"line_number":320,"context_line":"        else:"},{"line_number":321,"context_line":"            changes[\u0027add\u0027] \u003d []"}],"source_content_type":"text/x-python","patch_set":3,"id":"3afb71cf_d601226c","line":318,"in_reply_to":"3afb71cf_9f7bc429","updated":"2015-06-11 19:25:56.000000000","message":"changes[\u0027add\u0027] is passed into _test_fixed_ips_for_port L307, which applies some filter on values to add, after filtering data got into to_add variable.\nAfter it is used in _allocate_fixed_ips, which returns added ips, so we update changes[\u0027add\u0027] with ips that has been allocated.","commit_id":"6ad0e7453deb4f7e050b8556598733ed2f0e6444"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"53ac5b37ac32185ac0830740f9e4e60f3a07c2c4","unresolved":false,"context_lines":[{"line_number":319,"context_line":"            LOG.debug(\"Port update. Adding %s\", to_add)"},{"line_number":320,"context_line":"            added \u003d self._allocate_fixed_ips(context, to_add, mac_address)"},{"line_number":321,"context_line":"        # Update namedtuple with actually allocated ips"},{"line_number":322,"context_line":"        return changes._replace(add\u003dadded)"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"    def _allocate_ips_for_port(self, context, port):"},{"line_number":325,"context_line":"        \"\"\"Allocate IP addresses for the port."}],"source_content_type":"text/x-python","patch_set":5,"id":"fa32b979_575f4e0e","line":322,"updated":"2015-06-13 03:57:22.000000000","message":"I think I\u0027d rather not use a private method of namedtuple.  We really should construct a new one.","commit_id":"b51cc3d8788b807812676c442847c8c337b29489"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"8f076ea3587b51b47ae9171adb2ce91db3138d43","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import collections"},{"line_number":17,"context_line":"import netaddr"},{"line_number":18,"context_line":"from oslo_config import cfg"},{"line_number":19,"context_line":"from oslo_log import log as logging"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_df24d4b0","line":16,"updated":"2015-06-13 08:05:30.000000000","message":"nit: please a new line between \"import collections\" and \"import netaddr\" according with ipam_backend_mixin.py although I\u0027m not particular about it.","commit_id":"60e5b46f1793886828019e9e6de5c46f0b52712a"},{"author":{"_account_id":13768,"name":"Pavel Bondar","email":"pbondar@infoblox.com","username":"pavel_bondar"},"change_message_id":"d944d073d197d04c76945ba892dd8a864117da97","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import collections"},{"line_number":17,"context_line":"import netaddr"},{"line_number":18,"context_line":"from oslo_config import cfg"},{"line_number":19,"context_line":"from oslo_log import log as logging"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_a7cc4c36","line":16,"in_reply_to":"fa32b979_d8dcea48","updated":"2015-06-15 11:27:15.000000000","message":"Done","commit_id":"60e5b46f1793886828019e9e6de5c46f0b52712a"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"b30501234c8d9c147ebb57e0e010fa0fe2e1589a","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import collections"},{"line_number":17,"context_line":"import netaddr"},{"line_number":18,"context_line":"from oslo_config import cfg"},{"line_number":19,"context_line":"from oslo_log import log as logging"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_d8dcea48","line":16,"in_reply_to":"fa32b979_df24d4b0","updated":"2015-06-13 16:17:52.000000000","message":"+1","commit_id":"60e5b46f1793886828019e9e6de5c46f0b52712a"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"b30501234c8d9c147ebb57e0e010fa0fe2e1589a","unresolved":false,"context_lines":[{"line_number":319,"context_line":"        if to_add:"},{"line_number":320,"context_line":"            LOG.debug(\"Port update. Adding %s\", to_add)"},{"line_number":321,"context_line":"            added \u003d self._allocate_fixed_ips(context, to_add, mac_address)"},{"line_number":322,"context_line":"        Changes \u003d collections.namedtuple(\u0027Changes\u0027, \u0027add original remove\u0027)"},{"line_number":323,"context_line":"        return Changes(add\u003dadded,"},{"line_number":324,"context_line":"                       original\u003dchanges.original,"},{"line_number":325,"context_line":"                       remove\u003dchanges.remove)"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_f8e1aeff","line":322,"updated":"2015-06-13 16:17:52.000000000","message":"this is also declared in https://review.openstack.org/#/c/190162/6/neutron/db/ipam_backend_mixin.py,cm so can we please have this as a global var?","commit_id":"60e5b46f1793886828019e9e6de5c46f0b52712a"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"d96a6f9a4966bc932fcb859a56fd22539762db53","unresolved":false,"context_lines":[{"line_number":319,"context_line":"        if to_add:"},{"line_number":320,"context_line":"            LOG.debug(\"Port update. Adding %s\", to_add)"},{"line_number":321,"context_line":"            added \u003d self._allocate_fixed_ips(context, to_add, mac_address)"},{"line_number":322,"context_line":"        Changes \u003d collections.namedtuple(\u0027Changes\u0027, \u0027add original remove\u0027)"},{"line_number":323,"context_line":"        return Changes(add\u003dadded,"},{"line_number":324,"context_line":"                       original\u003dchanges.original,"},{"line_number":325,"context_line":"                       remove\u003dchanges.remove)"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_1edd3e42","line":322,"in_reply_to":"fa32b979_f8e1aeff","updated":"2015-06-15 11:02:47.000000000","message":"+1","commit_id":"60e5b46f1793886828019e9e6de5c46f0b52712a"},{"author":{"_account_id":13768,"name":"Pavel Bondar","email":"pbondar@infoblox.com","username":"pavel_bondar"},"change_message_id":"d944d073d197d04c76945ba892dd8a864117da97","unresolved":false,"context_lines":[{"line_number":319,"context_line":"        if to_add:"},{"line_number":320,"context_line":"            LOG.debug(\"Port update. Adding %s\", to_add)"},{"line_number":321,"context_line":"            added \u003d self._allocate_fixed_ips(context, to_add, mac_address)"},{"line_number":322,"context_line":"        Changes \u003d collections.namedtuple(\u0027Changes\u0027, \u0027add original remove\u0027)"},{"line_number":323,"context_line":"        return Changes(add\u003dadded,"},{"line_number":324,"context_line":"                       original\u003dchanges.original,"},{"line_number":325,"context_line":"                       remove\u003dchanges.remove)"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_87c7c811","line":322,"in_reply_to":"fa32b979_f8e1aeff","updated":"2015-06-15 11:27:15.000000000","message":"Done","commit_id":"60e5b46f1793886828019e9e6de5c46f0b52712a"}]}
