)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e02d075fd883dc420b27ddf29878f55251ab0093","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"OVS agent set max number of attempts to sync failed devices"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"If a device fails more than MAX_DEVICE_RETRIES, the agent"},{"line_number":10,"context_line":"won\u0027t try to sync it anymore and will log an error message."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Partially-Implements: blueprint restructure-l2-agent"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"da20952f_5d594f5a","line":9,"updated":"2015-09-10 08:02:00.000000000","message":"I think this is an interesting idea though I\u0027m wondering under what conditions do we expect this to occur.","commit_id":"52fba6bfd9f66e3672c8b0a7d0e246dae9e0bf13"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"9516495eca008384495f42c60cc02cfe61057542","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"OVS agent set max number of attempts to sync failed devices"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"If a device fails more than MAX_DEVICE_RETRIES, the agent"},{"line_number":10,"context_line":"won\u0027t try to sync it anymore and will log an error message."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Partially-Implements: blueprint restructure-l2-agent"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"da20952f_914ca277","line":9,"in_reply_to":"da20952f_5d594f5a","updated":"2015-09-10 15:05:35.000000000","message":"The idea was to avoid infinite resync of the same device. I didn\u0027t have in my mind a list of conditions that could cause that , it was more the fear that this could happen. Just thinking out loud ...something wrong in the DB that keeps throwing errors (DuplicateKey maybe? ). Or under high load, some error is thrown, failed devices are resynced making the load higher, the load grows exponentially and the agent can never recover.","commit_id":"52fba6bfd9f66e3672c8b0a7d0e246dae9e0bf13"}],"neutron/plugins/ml2/drivers/openvswitch/agent/common/constants.py":[{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"ef62f878df0d59224f50d3c9f17c47e0210c9250","unresolved":false,"context_lines":[{"line_number":89,"context_line":"OVS_NORMAL \u003d 1"},{"line_number":90,"context_line":"OVS_DEAD \u003d 2"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"MAX_DEVICE_RETRIAL \u003d 5"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_90611dd6","line":92,"updated":"2015-08-15 00:55:49.000000000","message":"(no change required) it seems neutron uses *_RETRIES","commit_id":"a4386b6b6482e57250f04a03a72f3f9f18a4047c"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"fdd342f271d7fa5bf339a5dbb374db1ffed61afb","unresolved":false,"context_lines":[{"line_number":89,"context_line":"OVS_NORMAL \u003d 1"},{"line_number":90,"context_line":"OVS_DEAD \u003d 2"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"MAX_DEVICE_RETRIAL \u003d 5"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_9f428167","line":92,"in_reply_to":"1a4dcd0f_90611dd6","updated":"2015-08-15 21:54:47.000000000","message":"Done","commit_id":"a4386b6b6482e57250f04a03a72f3f9f18a4047c"}],"neutron/plugins/ml2/drivers/openvswitch/agent/ovs_neutron_agent.py":[{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"e236ca48f9bed5bad07192476910dee99491f53f","unresolved":false,"context_lines":[{"line_number":1632,"context_line":"                devices_set \u003d devices_set - devices_not_to_retry"},{"line_number":1633,"context_line":"            return devices_set"},{"line_number":1634,"context_line":""},{"line_number":1635,"context_line":"        failed_devices[\u0027added\u0027] \u003d _increase_retries(failed_devices[\u0027added\u0027])"},{"line_number":1636,"context_line":"        failed_devices[\u0027removed\u0027] \u003d ("},{"line_number":1637,"context_line":"            _increase_retries(failed_devices[\u0027removed\u0027]))"},{"line_number":1638,"context_line":"        failed_ancillary_devices[\u0027added\u0027] \u003d ("}],"source_content_type":"text/x-python","patch_set":6,"id":"fa1b9901_7a1ac770","line":1635,"updated":"2015-08-26 10:25:04.000000000","message":"nit suggestions for readability:\n\n   for failed_map in [failed_devices, failed_ancillary_devices]:\n        for event in [\u0027added\u0027, \u0027removed\u0027]: \n             failed_map[event] \u003d _increase_retries(failed_map[event])\n       \nAlso why not making _increase_retries work over the failed \nmap itself avoiding to rewrite it out of function?","commit_id":"713a435632128aa5d3fd1e248e2770026b79a1fc"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"98ccce8f011e2498a00f02899433ae3d34bced41","unresolved":false,"context_lines":[{"line_number":1632,"context_line":"                devices_set \u003d devices_set - devices_not_to_retry"},{"line_number":1633,"context_line":"            return devices_set"},{"line_number":1634,"context_line":""},{"line_number":1635,"context_line":"        failed_devices[\u0027added\u0027] \u003d _increase_retries(failed_devices[\u0027added\u0027])"},{"line_number":1636,"context_line":"        failed_devices[\u0027removed\u0027] \u003d ("},{"line_number":1637,"context_line":"            _increase_retries(failed_devices[\u0027removed\u0027]))"},{"line_number":1638,"context_line":"        failed_ancillary_devices[\u0027added\u0027] \u003d ("}],"source_content_type":"text/x-python","patch_set":6,"id":"da20952f_f011b85e","line":1635,"in_reply_to":"fa1b9901_7a1ac770","updated":"2015-08-26 23:27:09.000000000","message":"Thanks Miguel, forgot to address this in next PS, I will do in next next PS :)","commit_id":"713a435632128aa5d3fd1e248e2770026b79a1fc"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"1951a69ac232e1ae4b1cfe27897c8b7cec14f2af","unresolved":false,"context_lines":[{"line_number":1632,"context_line":"                            \u0027dev\u0027: dev, \u0027times\u0027: constants.MAX_DEVICE_RETRIES})"},{"line_number":1633,"context_line":"                else:"},{"line_number":1634,"context_line":"                    new_failed_devices_retries_map[dev] \u003d retries + 1"},{"line_number":1635,"context_line":"            if devices_not_to_retry:"},{"line_number":1636,"context_line":"                devices_set \u003d devices_set - devices_not_to_retry"},{"line_number":1637,"context_line":"            return devices_set"},{"line_number":1638,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_be995d7b","line":1635,"updated":"2015-09-03 21:08:34.000000000","message":"this conditional isn\u0027t necessary.","commit_id":"2873205408eb4da5917912bb6487b42ff07c178f"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"b1e5104a78d6e8435bafbf63bc080464af061ee8","unresolved":false,"context_lines":[{"line_number":1632,"context_line":"                            \u0027dev\u0027: dev, \u0027times\u0027: constants.MAX_DEVICE_RETRIES})"},{"line_number":1633,"context_line":"                else:"},{"line_number":1634,"context_line":"                    new_failed_devices_retries_map[dev] \u003d retries + 1"},{"line_number":1635,"context_line":"            if devices_not_to_retry:"},{"line_number":1636,"context_line":"                devices_set \u003d devices_set - devices_not_to_retry"},{"line_number":1637,"context_line":"            return devices_set"},{"line_number":1638,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_65c79b98","line":1635,"in_reply_to":"da20952f_be995d7b","updated":"2015-09-04 15:32:17.000000000","message":"Done","commit_id":"2873205408eb4da5917912bb6487b42ff07c178f"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"1951a69ac232e1ae4b1cfe27897c8b7cec14f2af","unresolved":false,"context_lines":[{"line_number":1638,"context_line":""},{"line_number":1639,"context_line":"        for failed_map in [failed_devices, failed_ancillary_devices]:"},{"line_number":1640,"context_line":"            for event in [\u0027added\u0027, \u0027removed\u0027]:"},{"line_number":1641,"context_line":"                failed_map[event] \u003d _increase_retries(failed_map[event])"},{"line_number":1642,"context_line":""},{"line_number":1643,"context_line":"        return new_failed_devices_retries_map"},{"line_number":1644,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_9e46d9be","line":1641,"updated":"2015-09-03 21:08:34.000000000","message":"I think this function needs to be broken apart a bit. It\u0027s called \u0027get_failed_device_retries\u0027, but right here we have a side effect where we are editing one of the passed in dictionaries. It\u0027s not obvious to me where this is used so this is recipe for a hidden dependency.\n\nCan you have one function that updates the retry map and then another that mutates the failed_devices and failed_ancillary_devices dictionaries?","commit_id":"2873205408eb4da5917912bb6487b42ff07c178f"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"b1e5104a78d6e8435bafbf63bc080464af061ee8","unresolved":false,"context_lines":[{"line_number":1638,"context_line":""},{"line_number":1639,"context_line":"        for failed_map in [failed_devices, failed_ancillary_devices]:"},{"line_number":1640,"context_line":"            for event in [\u0027added\u0027, \u0027removed\u0027]:"},{"line_number":1641,"context_line":"                failed_map[event] \u003d _increase_retries(failed_map[event])"},{"line_number":1642,"context_line":""},{"line_number":1643,"context_line":"        return new_failed_devices_retries_map"},{"line_number":1644,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_34e232a1","line":1641,"in_reply_to":"da20952f_9e46d9be","updated":"2015-09-04 15:32:17.000000000","message":"Done","commit_id":"2873205408eb4da5917912bb6487b42ff07c178f"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"61767b1ee5c70253dbfc9a97004e078b6b4cd54a","unresolved":false,"context_lines":[{"line_number":1652,"context_line":"            failed_devices[event] \u003d ("},{"line_number":1653,"context_line":"                failed_devices[event] - devices_not_to_retry[event])"},{"line_number":1654,"context_line":""},{"line_number":1655,"context_line":"        for event in [\u0027added\u0027, \u0027removed\u0027]:"},{"line_number":1656,"context_line":"            failed_ancillary_devices[event] \u003d ("},{"line_number":1657,"context_line":"                failed_ancillary_devices[event] -"},{"line_number":1658,"context_line":"                ancillary_devices_not_to_retry[event])"}],"source_content_type":"text/x-python","patch_set":10,"id":"da20952f_a1c26783","line":1655,"updated":"2015-09-05 07:50:53.000000000","message":"you can combine two loop","commit_id":"e76d908db46a32dd10b04aebf344d92e33c3dfbe"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"db267e6f437f97f541d9648f3a9a619eeba6ef35","unresolved":false,"context_lines":[{"line_number":1652,"context_line":"            failed_devices[event] \u003d ("},{"line_number":1653,"context_line":"                failed_devices[event] - devices_not_to_retry[event])"},{"line_number":1654,"context_line":""},{"line_number":1655,"context_line":"        for event in [\u0027added\u0027, \u0027removed\u0027]:"},{"line_number":1656,"context_line":"            failed_ancillary_devices[event] \u003d ("},{"line_number":1657,"context_line":"                failed_ancillary_devices[event] -"},{"line_number":1658,"context_line":"                ancillary_devices_not_to_retry[event])"}],"source_content_type":"text/x-python","patch_set":10,"id":"da20952f_5e38a53d","line":1655,"in_reply_to":"da20952f_16c54d09","updated":"2015-09-08 22:52:13.000000000","message":"Either way, we have some time until the 3 or 4 dependencies of this patch set have merged.","commit_id":"e76d908db46a32dd10b04aebf344d92e33c3dfbe"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"3e884235e0461402492a8ffd9b1f0fb7fe5392c3","unresolved":false,"context_lines":[{"line_number":1652,"context_line":"            failed_devices[event] \u003d ("},{"line_number":1653,"context_line":"                failed_devices[event] - devices_not_to_retry[event])"},{"line_number":1654,"context_line":""},{"line_number":1655,"context_line":"        for event in [\u0027added\u0027, \u0027removed\u0027]:"},{"line_number":1656,"context_line":"            failed_ancillary_devices[event] \u003d ("},{"line_number":1657,"context_line":"                failed_ancillary_devices[event] -"},{"line_number":1658,"context_line":"                ancillary_devices_not_to_retry[event])"}],"source_content_type":"text/x-python","patch_set":10,"id":"da20952f_588e94d1","line":1655,"in_reply_to":"da20952f_38f08091","updated":"2015-09-08 13:15:43.000000000","message":"I\u0027d go with one loop, but I agree with @rosella about this being a bit subjective, I wouldn\u0027t -1 for that at this point :)","commit_id":"e76d908db46a32dd10b04aebf344d92e33c3dfbe"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"67419a837ccd3f7a3fdd5883987418e56a46a541","unresolved":false,"context_lines":[{"line_number":1652,"context_line":"            failed_devices[event] \u003d ("},{"line_number":1653,"context_line":"                failed_devices[event] - devices_not_to_retry[event])"},{"line_number":1654,"context_line":""},{"line_number":1655,"context_line":"        for event in [\u0027added\u0027, \u0027removed\u0027]:"},{"line_number":1656,"context_line":"            failed_ancillary_devices[event] \u003d ("},{"line_number":1657,"context_line":"                failed_ancillary_devices[event] -"},{"line_number":1658,"context_line":"                ancillary_devices_not_to_retry[event])"}],"source_content_type":"text/x-python","patch_set":10,"id":"da20952f_16c54d09","line":1655,"in_reply_to":"da20952f_588e94d1","updated":"2015-09-08 13:55:08.000000000","message":"seems fine this way","commit_id":"e76d908db46a32dd10b04aebf344d92e33c3dfbe"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"07df5bac932d55a41aef14ba89a49508053e0d8f","unresolved":false,"context_lines":[{"line_number":1652,"context_line":"            failed_devices[event] \u003d ("},{"line_number":1653,"context_line":"                failed_devices[event] - devices_not_to_retry[event])"},{"line_number":1654,"context_line":""},{"line_number":1655,"context_line":"        for event in [\u0027added\u0027, \u0027removed\u0027]:"},{"line_number":1656,"context_line":"            failed_ancillary_devices[event] \u003d ("},{"line_number":1657,"context_line":"                failed_ancillary_devices[event] -"},{"line_number":1658,"context_line":"                ancillary_devices_not_to_retry[event])"}],"source_content_type":"text/x-python","patch_set":10,"id":"da20952f_38f08091","line":1655,"in_reply_to":"da20952f_a1c26783","updated":"2015-09-08 13:07:28.000000000","message":"it would be more confusing in my opinion and wouldn\u0027t spare any code.","commit_id":"e76d908db46a32dd10b04aebf344d92e33c3dfbe"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"797917d24125da33e31ee55f6d7122b6320c7aec","unresolved":false,"context_lines":[{"line_number":1781,"context_line":"    def remove_devices_not_to_retry(self, failed_devices,"},{"line_number":1782,"context_line":"                                    failed_ancillary_devices,"},{"line_number":1783,"context_line":"                                    devices_not_to_retry,"},{"line_number":1784,"context_line":"                                    ancillary_devices_not_to_retry):"},{"line_number":1785,"context_line":"        for event in [\u0027added\u0027, \u0027removed\u0027]:"},{"line_number":1786,"context_line":"            failed_devices[event] \u003d ("},{"line_number":1787,"context_line":"                failed_devices[event] - devices_not_to_retry[event])"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a2fa921_971478a0","line":1784,"updated":"2015-10-08 09:57:13.000000000","message":"a comment saying which is input and which is output would increase readablility.","commit_id":"0a81d13d782188970deadc763fcd138f13e1a7bd"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"dab91835344117ef73486d7c3f67df931e980c89","unresolved":false,"context_lines":[{"line_number":1781,"context_line":"    def remove_devices_not_to_retry(self, failed_devices,"},{"line_number":1782,"context_line":"                                    failed_ancillary_devices,"},{"line_number":1783,"context_line":"                                    devices_not_to_retry,"},{"line_number":1784,"context_line":"                                    ancillary_devices_not_to_retry):"},{"line_number":1785,"context_line":"        for event in [\u0027added\u0027, \u0027removed\u0027]:"},{"line_number":1786,"context_line":"            failed_devices[event] \u003d ("},{"line_number":1787,"context_line":"                failed_devices[event] - devices_not_to_retry[event])"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a2fa921_68d0a7c9","line":1784,"in_reply_to":"7a2fa921_971478a0","updated":"2015-10-09 08:59:37.000000000","message":"Done,","commit_id":"0a81d13d782188970deadc763fcd138f13e1a7bd"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"797917d24125da33e31ee55f6d7122b6320c7aec","unresolved":false,"context_lines":[{"line_number":1793,"context_line":""},{"line_number":1794,"context_line":"    def get_failed_device_retries(self, failed_devices,"},{"line_number":1795,"context_line":"                                  failed_ancillary_devices,"},{"line_number":1796,"context_line":"                                  failed_devices_retries_map):"},{"line_number":1797,"context_line":"        new_failed_devices_retries_map \u003d {}"},{"line_number":1798,"context_line":"        devices_not_to_retry \u003d {}"},{"line_number":1799,"context_line":"        ancillary_devices_not_to_retry \u003d {}"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a2fa921_570a607a","line":1796,"updated":"2015-10-08 09:57:13.000000000","message":"ditto.","commit_id":"0a81d13d782188970deadc763fcd138f13e1a7bd"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"dab91835344117ef73486d7c3f67df931e980c89","unresolved":false,"context_lines":[{"line_number":1793,"context_line":""},{"line_number":1794,"context_line":"    def get_failed_device_retries(self, failed_devices,"},{"line_number":1795,"context_line":"                                  failed_ancillary_devices,"},{"line_number":1796,"context_line":"                                  failed_devices_retries_map):"},{"line_number":1797,"context_line":"        new_failed_devices_retries_map \u003d {}"},{"line_number":1798,"context_line":"        devices_not_to_retry \u003d {}"},{"line_number":1799,"context_line":"        ancillary_devices_not_to_retry \u003d {}"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a2fa921_88d3c3d4","line":1796,"in_reply_to":"7a2fa921_570a607a","updated":"2015-10-09 08:59:37.000000000","message":"Done, I also renamed the method to make it more clear","commit_id":"0a81d13d782188970deadc763fcd138f13e1a7bd"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"797917d24125da33e31ee55f6d7122b6320c7aec","unresolved":false,"context_lines":[{"line_number":1814,"context_line":""},{"line_number":1815,"context_line":"        for event in [\u0027added\u0027, \u0027removed\u0027]:"},{"line_number":1816,"context_line":"            devices_not_to_retry[event] \u003d _increase_retries("},{"line_number":1817,"context_line":"                failed_devices[event])"},{"line_number":1818,"context_line":""},{"line_number":1819,"context_line":"        for event in [\u0027added\u0027, \u0027removed\u0027]:"},{"line_number":1820,"context_line":"            ancillary_devices_not_to_retry[event] \u003d _increase_retries("}],"source_content_type":"text/x-python","patch_set":14,"id":"7a2fa921_d77f50a9","line":1817,"updated":"2015-10-08 09:57:13.000000000","message":"does it make much sense to have xxx_not_to_retry per-events\nwhile failed_devices_retries_map is not per-events?","commit_id":"0a81d13d782188970deadc763fcd138f13e1a7bd"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"dab91835344117ef73486d7c3f67df931e980c89","unresolved":false,"context_lines":[{"line_number":1814,"context_line":""},{"line_number":1815,"context_line":"        for event in [\u0027added\u0027, \u0027removed\u0027]:"},{"line_number":1816,"context_line":"            devices_not_to_retry[event] \u003d _increase_retries("},{"line_number":1817,"context_line":"                failed_devices[event])"},{"line_number":1818,"context_line":""},{"line_number":1819,"context_line":"        for event in [\u0027added\u0027, \u0027removed\u0027]:"},{"line_number":1820,"context_line":"            ancillary_devices_not_to_retry[event] \u003d _increase_retries("}],"source_content_type":"text/x-python","patch_set":14,"id":"7a2fa921_790e5f3c","line":1817,"in_reply_to":"7a2fa921_d77f50a9","updated":"2015-10-09 08:59:37.000000000","message":"it makes sense for me because in the failed_devices_retries_map we don\u0027t need to know which event caused the failure, just how many times the device failed. in devices_not_to_retry it\u0027s useful to know the event because it\u0027s used in remove_devices_not_to_retry","commit_id":"0a81d13d782188970deadc763fcd138f13e1a7bd"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"797917d24125da33e31ee55f6d7122b6320c7aec","unresolved":false,"context_lines":[{"line_number":1953,"context_line":"                            failed_devices_retries_map))"},{"line_number":1954,"context_line":"                    self.remove_devices_not_to_retry(failed_devices,"},{"line_number":1955,"context_line":"                        failed_ancillary_devices, devices_not_to_retry,"},{"line_number":1956,"context_line":"                        ancillary_devices_not_to_retry)"},{"line_number":1957,"context_line":"                    # Keep this flag in the last line of \"try\" block,"},{"line_number":1958,"context_line":"                    # so we can sure that no other Exception occurred."},{"line_number":1959,"context_line":"                    if not sync:"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a2fa921_77443c1a","line":1956,"updated":"2015-10-08 09:57:13.000000000","message":"these hurt my eyes. :-)\n\nwhy don\u0027t you make these a single method?","commit_id":"0a81d13d782188970deadc763fcd138f13e1a7bd"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"dab91835344117ef73486d7c3f67df931e980c89","unresolved":false,"context_lines":[{"line_number":1953,"context_line":"                            failed_devices_retries_map))"},{"line_number":1954,"context_line":"                    self.remove_devices_not_to_retry(failed_devices,"},{"line_number":1955,"context_line":"                        failed_ancillary_devices, devices_not_to_retry,"},{"line_number":1956,"context_line":"                        ancillary_devices_not_to_retry)"},{"line_number":1957,"context_line":"                    # Keep this flag in the last line of \"try\" block,"},{"line_number":1958,"context_line":"                    # so we can sure that no other Exception occurred."},{"line_number":1959,"context_line":"                    if not sync:"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a2fa921_1ee4f1de","line":1956,"in_reply_to":"7a2fa921_77443c1a","updated":"2015-10-09 08:59:37.000000000","message":"Kevin suggested to have 2 functions here [1]...anyway I\u0027ll refactor a bit, it\u0027s ugly\n\n[1] https://review.openstack.org/#/c/211586/8/neutron/plugins/ml2/drivers/openvswitch/agent/ovs_neutron_agent.py","commit_id":"0a81d13d782188970deadc763fcd138f13e1a7bd"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"f9a7c36e56a4f1ddaa31d3a751624e466b8d3427","unresolved":false,"context_lines":[{"line_number":1761,"context_line":"                failed_devices[event] - devices_not_to_retry[event])"},{"line_number":1762,"context_line":""},{"line_number":1763,"context_line":"        for event in [\u0027added\u0027, \u0027removed\u0027]:"},{"line_number":1764,"context_line":"            failed_ancillary_devices[event] \u003d ("},{"line_number":1765,"context_line":"                failed_ancillary_devices[event] -"},{"line_number":1766,"context_line":"                ancillary_devices_not_to_retry[event])"},{"line_number":1767,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"7a2fa921_a092139e","line":1764,"updated":"2015-10-12 08:24:33.000000000","message":"Why does this require a separate loop? Can\u0027t this be handled in the loop before? If this already has been answered - I\u0027m sorry.","commit_id":"da539f7cd3b03a4a8c46351a71767cc52e6ef640"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"b708e4ed364219dfbb9331912116a3793a6517c4","unresolved":false,"context_lines":[{"line_number":1761,"context_line":"                failed_devices[event] - devices_not_to_retry[event])"},{"line_number":1762,"context_line":""},{"line_number":1763,"context_line":"        for event in [\u0027added\u0027, \u0027removed\u0027]:"},{"line_number":1764,"context_line":"            failed_ancillary_devices[event] \u003d ("},{"line_number":1765,"context_line":"                failed_ancillary_devices[event] -"},{"line_number":1766,"context_line":"                ancillary_devices_not_to_retry[event])"},{"line_number":1767,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"7a740942_1e852458","line":1764,"in_reply_to":"7a2fa921_a092139e","updated":"2015-12-10 17:16:12.000000000","message":"you are right :)","commit_id":"da539f7cd3b03a4a8c46351a71767cc52e6ef640"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"f9a7c36e56a4f1ddaa31d3a751624e466b8d3427","unresolved":false,"context_lines":[{"line_number":1793,"context_line":""},{"line_number":1794,"context_line":"        for event in [\u0027added\u0027, \u0027removed\u0027]:"},{"line_number":1795,"context_line":"            ancillary_devices_not_to_retry[event] \u003d _increase_retries("},{"line_number":1796,"context_line":"                failed_ancillary_devices[event])"},{"line_number":1797,"context_line":""},{"line_number":1798,"context_line":"        return (new_failed_devices_retries_map, devices_not_to_retry,"},{"line_number":1799,"context_line":"                ancillary_devices_not_to_retry)"}],"source_content_type":"text/x-python","patch_set":15,"id":"7a2fa921_c024ef61","line":1796,"updated":"2015-10-12 08:24:33.000000000","message":"same like above","commit_id":"da539f7cd3b03a4a8c46351a71767cc52e6ef640"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"b708e4ed364219dfbb9331912116a3793a6517c4","unresolved":false,"context_lines":[{"line_number":1793,"context_line":""},{"line_number":1794,"context_line":"        for event in [\u0027added\u0027, \u0027removed\u0027]:"},{"line_number":1795,"context_line":"            ancillary_devices_not_to_retry[event] \u003d _increase_retries("},{"line_number":1796,"context_line":"                failed_ancillary_devices[event])"},{"line_number":1797,"context_line":""},{"line_number":1798,"context_line":"        return (new_failed_devices_retries_map, devices_not_to_retry,"},{"line_number":1799,"context_line":"                ancillary_devices_not_to_retry)"}],"source_content_type":"text/x-python","patch_set":15,"id":"7a740942_be7bb07a","line":1796,"in_reply_to":"7a2fa921_c024ef61","updated":"2015-12-10 17:16:12.000000000","message":"Done","commit_id":"da539f7cd3b03a4a8c46351a71767cc52e6ef640"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"072c7d994a0180e2675ae51ee6349db21b5d5ab0","unresolved":false,"context_lines":[{"line_number":1786,"context_line":"        ancillary_devices_not_to_retry \u003d {}"},{"line_number":1787,"context_line":""},{"line_number":1788,"context_line":"        def _increase_retries(devices_set):"},{"line_number":1789,"context_line":"            devices_not_to_retry \u003d set()"},{"line_number":1790,"context_line":"            for dev in devices_set:"},{"line_number":1791,"context_line":"                retries \u003d failed_devices_retries_map.get(dev, 0)"},{"line_number":1792,"context_line":"                if retries \u003e\u003d constants.MAX_DEVICE_RETRIES:"}],"source_content_type":"text/x-python","patch_set":18,"id":"ba63e191_55a099f4","line":1789,"range":{"start_line":1789,"start_character":12,"end_line":1789,"end_character":32},"updated":"2016-01-19 04:57:33.000000000","message":"can you use a different name from the outer one? (L1785)","commit_id":"a27f017292811bc431625ce49bec5939104c5fa3"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"555702c4fcb8cce6f21beabae63b756e551ca311","unresolved":false,"context_lines":[{"line_number":1786,"context_line":"        ancillary_devices_not_to_retry \u003d {}"},{"line_number":1787,"context_line":""},{"line_number":1788,"context_line":"        def _increase_retries(devices_set):"},{"line_number":1789,"context_line":"            devices_not_to_retry \u003d set()"},{"line_number":1790,"context_line":"            for dev in devices_set:"},{"line_number":1791,"context_line":"                retries \u003d failed_devices_retries_map.get(dev, 0)"},{"line_number":1792,"context_line":"                if retries \u003e\u003d constants.MAX_DEVICE_RETRIES:"}],"source_content_type":"text/x-python","patch_set":18,"id":"9a68dd71_b8ce332c","line":1789,"range":{"start_line":1789,"start_character":12,"end_line":1789,"end_character":32},"in_reply_to":"ba63e191_55a099f4","updated":"2016-01-22 17:35:18.000000000","message":"I think I agree with this feedback.  Although, technically the scope is completely different here it is confusing.  Would you mind following up?","commit_id":"a27f017292811bc431625ce49bec5939104c5fa3"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"072c7d994a0180e2675ae51ee6349db21b5d5ab0","unresolved":false,"context_lines":[{"line_number":1794,"context_line":"                    LOG.warning(_LW("},{"line_number":1795,"context_line":"                        \"Device %(dev)s failed for %(times)s times and won\u0027t \""},{"line_number":1796,"context_line":"                        \"be retried anymore\"), {"},{"line_number":1797,"context_line":"                            \u0027dev\u0027: dev, \u0027times\u0027: constants.MAX_DEVICE_RETRIES})"},{"line_number":1798,"context_line":"                else:"},{"line_number":1799,"context_line":"                    new_failed_devices_retries_map[dev] \u003d retries + 1"},{"line_number":1800,"context_line":"            return devices_not_to_retry"}],"source_content_type":"text/x-python","patch_set":18,"id":"ba63e191_d53ec9b7","line":1797,"range":{"start_line":1797,"start_character":59,"end_line":1797,"end_character":77},"updated":"2016-01-19 04:57:33.000000000","message":"actually it failed MAX_DEVICE_RETRIES+1 times here.","commit_id":"a27f017292811bc431625ce49bec5939104c5fa3"}],"neutron/tests/unit/plugins/ml2/drivers/openvswitch/agent/test_ovs_neutron_agent.py":[{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"ef62f878df0d59224f50d3c9f17c47e0210c9250","unresolved":false,"context_lines":[{"line_number":380,"context_line":"        new_failed_devices_retries_map \u003d self.agent.get_failed_device_retries("},{"line_number":381,"context_line":"            failed_devices, failed_ancillary_devices,"},{"line_number":382,"context_line":"            failed_devices_retries_map)"},{"line_number":383,"context_line":"        self.assertTrue(\u0027device_to_retry\u0027 in failed_devices[\u0027removed\u0027])"},{"line_number":384,"context_line":"        self.assertFalse(\u0027device_not_to_retry\u0027 in failed_devices[\u0027added\u0027])"},{"line_number":385,"context_line":"        self.assertEqual("},{"line_number":386,"context_line":"            expected_failed_devices_retries_map,"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_d58317a8","line":383,"updated":"2015-08-15 00:55:49.000000000","message":"you can use assertIn and assertNotIn","commit_id":"a4386b6b6482e57250f04a03a72f3f9f18a4047c"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"fdd342f271d7fa5bf339a5dbb374db1ffed61afb","unresolved":false,"context_lines":[{"line_number":380,"context_line":"        new_failed_devices_retries_map \u003d self.agent.get_failed_device_retries("},{"line_number":381,"context_line":"            failed_devices, failed_ancillary_devices,"},{"line_number":382,"context_line":"            failed_devices_retries_map)"},{"line_number":383,"context_line":"        self.assertTrue(\u0027device_to_retry\u0027 in failed_devices[\u0027removed\u0027])"},{"line_number":384,"context_line":"        self.assertFalse(\u0027device_not_to_retry\u0027 in failed_devices[\u0027added\u0027])"},{"line_number":385,"context_line":"        self.assertEqual("},{"line_number":386,"context_line":"            expected_failed_devices_retries_map,"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_bf13bd64","line":383,"in_reply_to":"1a4dcd0f_d58317a8","updated":"2015-08-15 21:54:47.000000000","message":"Done","commit_id":"a4386b6b6482e57250f04a03a72f3f9f18a4047c"},{"author":{"_account_id":704,"name":"Edgar Magana","email":"emagana@gmail.com","username":"emagana"},"change_message_id":"db3a6ff1c88da9303eec02d70fddda0821848e5e","unresolved":false,"context_lines":[{"line_number":619,"context_line":"         ancillary_devices_not_t_retry) \u003d self.agent.get_failed_device_retries("},{"line_number":620,"context_line":"            failed_devices, failed_ancillary_devices,"},{"line_number":621,"context_line":"            failed_devices_retries_map)"},{"line_number":622,"context_line":"        self.agent.remove_devices_not_to_retry("},{"line_number":623,"context_line":"            failed_devices, failed_ancillary_devices, devices_not_to_retry,"},{"line_number":624,"context_line":"            ancillary_devices_not_t_retry)"},{"line_number":625,"context_line":"        self.assertIn(\u0027device_to_retry\u0027, failed_devices[\u0027removed\u0027])"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a2fa921_2e745066","line":622,"updated":"2015-10-07 16:12:23.000000000","message":"should we add a specific unit test for this method?:\ndef remove_devices_not_to_retry","commit_id":"0a81d13d782188970deadc763fcd138f13e1a7bd"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"dab91835344117ef73486d7c3f67df931e980c89","unresolved":false,"context_lines":[{"line_number":619,"context_line":"         ancillary_devices_not_t_retry) \u003d self.agent.get_failed_device_retries("},{"line_number":620,"context_line":"            failed_devices, failed_ancillary_devices,"},{"line_number":621,"context_line":"            failed_devices_retries_map)"},{"line_number":622,"context_line":"        self.agent.remove_devices_not_to_retry("},{"line_number":623,"context_line":"            failed_devices, failed_ancillary_devices, devices_not_to_retry,"},{"line_number":624,"context_line":"            ancillary_devices_not_t_retry)"},{"line_number":625,"context_line":"        self.assertIn(\u0027device_to_retry\u0027, failed_devices[\u0027removed\u0027])"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a2fa921_2bc866a5","line":622,"in_reply_to":"7a2fa921_2e745066","updated":"2015-10-09 08:59:37.000000000","message":"it\u0027s just removing elements from a set...is it really worth it?","commit_id":"0a81d13d782188970deadc763fcd138f13e1a7bd"}]}
