)]}'
{"quantum/plugins/linuxbridge/agent/linuxbridge_quantum_agent.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":377,"context_line":"                \u0027added\u0027: added,"},{"line_number":378,"context_line":"                \u0027removed\u0027: removed}"},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"    def udev_get_tap_devices(self):"},{"line_number":381,"context_line":"        devices \u003d set()"},{"line_number":382,"context_line":"        for device in self.udev.list_devices(subsystem\u003d\u0027net\u0027):"},{"line_number":383,"context_line":"            name \u003d self.udev_get_name(device)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAN3%2F%2F%2Fb8%3D","side":"PARENT","line":380,"updated":"2013-03-04 13:23:18.000000000","message":"maybe we should just add:\n @lockutils.synchronized(\u0027udev_get_tap\u0027, \u0027lb-\u0027, external\u003dTrue)","commit_id":"cf449ddabde9832694423b2d0688ed1228634312"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"b89d9b75e5c229fa9ac0ae7e0757baebb982e17c","unresolved":false,"context_lines":[{"line_number":396,"context_line":"                pass"},{"line_number":397,"context_line":"            else:"},{"line_number":398,"context_line":"                break"},{"line_number":399,"context_line":"        return devices"},{"line_number":400,"context_line":""},{"line_number":401,"context_line":"    def is_tap_device(self, name):"},{"line_number":402,"context_line":"        return name.startswith(TAP_INTERFACE_PREFIX)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAN3%2F%2F%2Fnk%3D","line":399,"updated":"2013-03-04 09:57:12.000000000","message":"I am not a big fan of a infinite loop.\nIsn\u0027t the following code sufficient? It just skips a deleted device.\n\ndef udev_get_tap_devices(self):\n    devices \u003d set()\n    for device in self.udev.list_devices(subsystem\u003d\u0027net\u0027):\n        try:\n            name \u003d self.udev_get_name(device)\n            if self.is_tap_device(name):\n                devices.add(name)\n        except pyudev.DeviceNotFoundAtPathError:\n            # There is a case where a device is deleted after list_devices\n            pass\n    return devices","commit_id":"e52161d613cfb873dc286f6ffa5ef57629eef040"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":396,"context_line":"                pass"},{"line_number":397,"context_line":"            else:"},{"line_number":398,"context_line":"                break"},{"line_number":399,"context_line":"        return devices"},{"line_number":400,"context_line":""},{"line_number":401,"context_line":"    def is_tap_device(self, name):"},{"line_number":402,"context_line":"        return name.startswith(TAP_INTERFACE_PREFIX)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAN3%2F%2F92Q%3D","line":399,"in_reply_to":"AAAAN3%2F%2F%2FH0%3D","updated":"2013-03-05 02:34:44.000000000","message":"@Alex\nThanks for the clarification and detail investigation. I understand why you use this approach. (although we already have the better solution)","commit_id":"e52161d613cfb873dc286f6ffa5ef57629eef040"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"7d3a52d0d4af220c4ef174139ac8b65404c35089","unresolved":false,"context_lines":[{"line_number":396,"context_line":"                pass"},{"line_number":397,"context_line":"            else:"},{"line_number":398,"context_line":"                break"},{"line_number":399,"context_line":"        return devices"},{"line_number":400,"context_line":""},{"line_number":401,"context_line":"    def is_tap_device(self, name):"},{"line_number":402,"context_line":"        return name.startswith(TAP_INTERFACE_PREFIX)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAN3%2F%2F%2FH0%3D","line":399,"in_reply_to":"AAAAN3%2F%2F%2FOc%3D","updated":"2013-03-04 16:36:19.000000000","message":"Akihiro, the explain for skip non-existing devices wasn\u0027t compete. After iterator object become invalid, the exist devices that after non-exist devices can\u0027t be iterated.\n\nActually I have think about implement iterate devices use libudev interface instead of pyudev. That can skip non-exist devices. But I found pyudev put the libudev wrapper in _libudev.py. I think that means pyudev didn\u0027t want to public libudev interface directly. So I give up this way.","commit_id":"e52161d613cfb873dc286f6ffa5ef57629eef040"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"7d3a52d0d4af220c4ef174139ac8b65404c35089","unresolved":false,"context_lines":[{"line_number":396,"context_line":"                pass"},{"line_number":397,"context_line":"            else:"},{"line_number":398,"context_line":"                break"},{"line_number":399,"context_line":"        return devices"},{"line_number":400,"context_line":""},{"line_number":401,"context_line":"    def is_tap_device(self, name):"},{"line_number":402,"context_line":"        return name.startswith(TAP_INTERFACE_PREFIX)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAN3%2F%2F%2FOc%3D","line":399,"in_reply_to":"AAAAN3%2F%2F%2Fbw%3D","updated":"2013-03-04 15:48:03.000000000","message":"Akihiro, thanks for you explain again. Another reason for we can\u0027t skip an non-existing devices was after the exception raised the iterators object become invalid.\n\nGary, I think there isn\u0027t a race problem.\nHave a looked into libudev and pyudev code. pyudev use libudev\u0027s \u0027udev_enumerate_get_list_entry\u0027 to get a list of device\u0027s sys path. Then pyudev just iterate that list. And that list generated by each invoke of list_devices. So nothing will shared between thread. please reference line 406 of  \u0027https://github.com/lunaryorn/pyudev/blob/develop/pyudev/core.py\u0027  \n\nAnd the exception was raised when invoke iterator\u0027s \u0027next()\u0027. It isn\u0027t raised at \u0027udev_get_name\u0027. Device.sys_name invoke libudev.udev_device_get_sysname. \u0027udev_device_get_sysname\u0027  just return device object\u0027s member \u0027sysname\u0027 So there isn\u0027t race problem between \u0027list_devices\u0027 and \u0027udev_get_name\u0027. please reference line 1166 of \u0027http://cgit.freedesktop.org/systemd/systemd/tree/src/libudev/libudev-device.c\u0027\n\nThanks Alex","commit_id":"e52161d613cfb873dc286f6ffa5ef57629eef040"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":396,"context_line":"                pass"},{"line_number":397,"context_line":"            else:"},{"line_number":398,"context_line":"                break"},{"line_number":399,"context_line":"        return devices"},{"line_number":400,"context_line":""},{"line_number":401,"context_line":"    def is_tap_device(self, name):"},{"line_number":402,"context_line":"        return name.startswith(TAP_INTERFACE_PREFIX)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAN3%2F%2F%2Fbw%3D","line":399,"in_reply_to":"AAAAN3%2F%2F%2FcU%3D","updated":"2013-03-04 13:26:16.000000000","message":"I think racing condition with two different tasks and the original problem are different. The original problem is due to removing a tap device between list_devices and udev_get_name.\n\nRegarding the locking issue Gary pointed, another idea is to keep a list of devices and just calculate the number of device in report_state(). This is the way OVS agent does.","commit_id":"e52161d613cfb873dc286f6ffa5ef57629eef040"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":396,"context_line":"                pass"},{"line_number":397,"context_line":"            else:"},{"line_number":398,"context_line":"                break"},{"line_number":399,"context_line":"        return devices"},{"line_number":400,"context_line":""},{"line_number":401,"context_line":"    def is_tap_device(self, name):"},{"line_number":402,"context_line":"        return name.startswith(TAP_INTERFACE_PREFIX)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAN3%2F%2F%2FcU%3D","line":399,"in_reply_to":"AAAAN3%2F%2F%2FiY%3D","updated":"2013-03-04 13:12:50.000000000","message":"I think that the problem is most probably due to a race condition. The method udev_get_tap_devices is called by two different tasks:\n - reporting\n - port scanning\nI would prefer that we try and make use of some locking mechanism instaed of the loop proposed above.","commit_id":"e52161d613cfb873dc286f6ffa5ef57629eef040"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":396,"context_line":"                pass"},{"line_number":397,"context_line":"            else:"},{"line_number":398,"context_line":"                break"},{"line_number":399,"context_line":"        return devices"},{"line_number":400,"context_line":""},{"line_number":401,"context_line":"    def is_tap_device(self, name):"},{"line_number":402,"context_line":"        return name.startswith(TAP_INTERFACE_PREFIX)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAN3%2F%2F%2FiY%3D","line":399,"in_reply_to":"AAAAN3%2F%2F%2Fmo%3D","updated":"2013-03-04 11:11:53.000000000","message":"I understand it does not leads to an infinite loop as you says. Let me correct my comment.\nMy previous comment is from why we need to retry _get_net_devices_from_udev() instead of just skip an non-existing devices. Both actually do the same thing. If you prefer to retrying listing, I am ok.","commit_id":"e52161d613cfb873dc286f6ffa5ef57629eef040"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"7d3a52d0d4af220c4ef174139ac8b65404c35089","unresolved":false,"context_lines":[{"line_number":396,"context_line":"                pass"},{"line_number":397,"context_line":"            else:"},{"line_number":398,"context_line":"                break"},{"line_number":399,"context_line":"        return devices"},{"line_number":400,"context_line":""},{"line_number":401,"context_line":"    def is_tap_device(self, name):"},{"line_number":402,"context_line":"        return name.startswith(TAP_INTERFACE_PREFIX)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAN3%2F%2F%2Fmo%3D","line":399,"in_reply_to":"AAAAN3%2F%2F%2Fnk%3D","updated":"2013-03-04 10:11:40.000000000","message":"The exceptions raise at \u0027for device in self.udev.list_devices(subsystem\u003d\u0027net\u0027):\u0027. If we really doesn\u0027t like infinite loop, how about use limited loop, just repeat 2 or 3 times when get exception. Any thought?","commit_id":"e52161d613cfb873dc286f6ffa5ef57629eef040"},{"author":{"_account_id":1994,"name":"Zhongyue Luo","email":"zhongyue.luo@gmail.com","username":"zyluo"},"unresolved":false,"context_lines":[{"line_number":612,"context_line":"                    sync \u003d self.process_network_devices(device_info)"},{"line_number":613,"context_line":"                    devices \u003d device_info[\u0027current\u0027]"},{"line_number":614,"context_line":"            except Exception as e:"},{"line_number":615,"context_line":"                LOG.exception(_(\"Error in agent loop %s\"), e)"},{"line_number":616,"context_line":"                sync \u003d True"},{"line_number":617,"context_line":"            # sleep till end of polling interval"},{"line_number":618,"context_line":"            elapsed \u003d (time.time() - start)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAN3%2F%2F90E%3D","line":615,"updated":"2013-03-05 02:44:54.000000000","message":"Wouldn\u0027t it be better logging the device_info instead of the whole exception message?","commit_id":"c8e9b9661486ef26df27c045e5008453b65d0162"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"7d3a52d0d4af220c4ef174139ac8b65404c35089","unresolved":false,"context_lines":[{"line_number":612,"context_line":"                    sync \u003d self.process_network_devices(device_info)"},{"line_number":613,"context_line":"                    devices \u003d device_info[\u0027current\u0027]"},{"line_number":614,"context_line":"            except Exception as e:"},{"line_number":615,"context_line":"                LOG.exception(_(\"Error in agent loop %s\"), e)"},{"line_number":616,"context_line":"                sync \u003d True"},{"line_number":617,"context_line":"            # sleep till end of polling interval"},{"line_number":618,"context_line":"            elapsed \u003d (time.time() - start)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAN3%2F%2F9yQ%3D","line":615,"in_reply_to":"AAAAN3%2F%2F90E%3D","updated":"2013-03-05 03:13:20.000000000","message":"Done","commit_id":"c8e9b9661486ef26df27c045e5008453b65d0162"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":613,"context_line":"                    devices \u003d device_info[\u0027current\u0027]"},{"line_number":614,"context_line":"            except Exception as e:"},{"line_number":615,"context_line":"                LOG.exception(_(\"Error in agent loop %s\"), e)"},{"line_number":616,"context_line":"                sync \u003d True"},{"line_number":617,"context_line":"            # sleep till end of polling interval"},{"line_number":618,"context_line":"            elapsed \u003d (time.time() - start)"},{"line_number":619,"context_line":"            if (elapsed \u003c self.polling_interval):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAN3%2F%2F90o%3D","line":616,"updated":"2013-03-05 02:41:28.000000000","message":"Naming of \u0027sync\u0027 is not so good since it can be interpreted in two ways: \"need to sync\" or \"already synced\" :-(\n\nIt is not a part of this patch and OVS agent has same naming, so I feel we don\u0027t need to fix it now.","commit_id":"c8e9b9661486ef26df27c045e5008453b65d0162"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"7d3a52d0d4af220c4ef174139ac8b65404c35089","unresolved":false,"context_lines":[{"line_number":613,"context_line":"                    devices \u003d device_info[\u0027current\u0027]"},{"line_number":614,"context_line":"            except Exception as e:"},{"line_number":615,"context_line":"                LOG.exception(_(\"Error in agent loop %s\"), e)"},{"line_number":616,"context_line":"                sync \u003d True"},{"line_number":617,"context_line":"            # sleep till end of polling interval"},{"line_number":618,"context_line":"            elapsed \u003d (time.time() - start)"},{"line_number":619,"context_line":"            if (elapsed \u003c self.polling_interval):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAN3%2F%2F9vQ%3D","line":616,"in_reply_to":"AAAAN3%2F%2F90o%3D","updated":"2013-03-05 03:25:33.000000000","message":"yup, we fix it in another patch","commit_id":"c8e9b9661486ef26df27c045e5008453b65d0162"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"unresolved":false,"context_lines":[{"line_number":615,"context_line":"                    # plugin"},{"line_number":616,"context_line":"                    sync \u003d self.process_network_devices(device_info)"},{"line_number":617,"context_line":"                    devices \u003d device_info[\u0027current\u0027]"},{"line_number":618,"context_line":"            except Exception as e:"},{"line_number":619,"context_line":"                LOG.exception(_(\"Error in agent loop. Devices info: \""},{"line_number":620,"context_line":"                                \"%(device_info)s. Exception: %(e)s\"),"},{"line_number":621,"context_line":"                              {\u0027device_info\u0027: device_info,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAN3%2F%2F9sI%3D","line":618,"updated":"2013-03-05 04:13:34.000000000","message":"I don\u0027t think you need to do as e. You should just be able to call LOG.exeception() without passing the e.","commit_id":"30959f64227451036092068b78a8d0e39e65e915"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"7d3a52d0d4af220c4ef174139ac8b65404c35089","unresolved":false,"context_lines":[{"line_number":615,"context_line":"                    # plugin"},{"line_number":616,"context_line":"                    sync \u003d self.process_network_devices(device_info)"},{"line_number":617,"context_line":"                    devices \u003d device_info[\u0027current\u0027]"},{"line_number":618,"context_line":"            except Exception as e:"},{"line_number":619,"context_line":"                LOG.exception(_(\"Error in agent loop. Devices info: \""},{"line_number":620,"context_line":"                                \"%(device_info)s. Exception: %(e)s\"),"},{"line_number":621,"context_line":"                              {\u0027device_info\u0027: device_info,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAN3%2F%2F9lc%3D","line":618,"in_reply_to":"AAAAN3%2F%2F9qY%3D","updated":"2013-03-05 06:21:28.000000000","message":"Aaron, Zhongyue, you are right, my bad. I will update. thanks!","commit_id":"30959f64227451036092068b78a8d0e39e65e915"},{"author":{"_account_id":1994,"name":"Zhongyue Luo","email":"zhongyue.luo@gmail.com","username":"zyluo"},"unresolved":false,"context_lines":[{"line_number":615,"context_line":"                    # plugin"},{"line_number":616,"context_line":"                    sync \u003d self.process_network_devices(device_info)"},{"line_number":617,"context_line":"                    devices \u003d device_info[\u0027current\u0027]"},{"line_number":618,"context_line":"            except Exception as e:"},{"line_number":619,"context_line":"                LOG.exception(_(\"Error in agent loop. Devices info: \""},{"line_number":620,"context_line":"                                \"%(device_info)s. Exception: %(e)s\"),"},{"line_number":621,"context_line":"                              {\u0027device_info\u0027: device_info,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAN3%2F%2F9qY%3D","line":618,"in_reply_to":"AAAAN3%2F%2F9sI%3D","updated":"2013-03-05 04:37:29.000000000","message":"I agree. Not logging the exception message would be better.","commit_id":"30959f64227451036092068b78a8d0e39e65e915"},{"author":{"_account_id":1994,"name":"Zhongyue Luo","email":"zhongyue.luo@gmail.com","username":"zyluo"},"unresolved":false,"context_lines":[{"line_number":616,"context_line":"                    # plugin"},{"line_number":617,"context_line":"                    sync \u003d self.process_network_devices(device_info)"},{"line_number":618,"context_line":"                    devices \u003d device_info[\u0027current\u0027]"},{"line_number":619,"context_line":"            except:"},{"line_number":620,"context_line":"                LOG.exception(_(\"Error in agent loop. Devices info: %s\"),"},{"line_number":621,"context_line":"                              device_info)"},{"line_number":622,"context_line":"                sync \u003d True"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAN3%2F%2F9lI%3D","line":619,"updated":"2013-03-05 06:23:56.000000000","message":"Whoops. Just a except is against HACKING. It should be \"except Exception:\"","commit_id":"8b33461e710852bd30e17e6a7fd2806b4b19b806"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"7d3a52d0d4af220c4ef174139ac8b65404c35089","unresolved":false,"context_lines":[{"line_number":616,"context_line":"                    # plugin"},{"line_number":617,"context_line":"                    sync \u003d self.process_network_devices(device_info)"},{"line_number":618,"context_line":"                    devices \u003d device_info[\u0027current\u0027]"},{"line_number":619,"context_line":"            except:"},{"line_number":620,"context_line":"                LOG.exception(_(\"Error in agent loop. Devices info: %s\"),"},{"line_number":621,"context_line":"                              device_info)"},{"line_number":622,"context_line":"                sync \u003d True"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAN3%2F%2F9kc%3D","line":619,"in_reply_to":"AAAAN3%2F%2F9lI%3D","updated":"2013-03-05 06:30:44.000000000","message":"Done","commit_id":"8b33461e710852bd30e17e6a7fd2806b4b19b806"},{"author":{"_account_id":1994,"name":"Zhongyue Luo","email":"zhongyue.luo@gmail.com","username":"zyluo"},"unresolved":false,"context_lines":[{"line_number":603,"context_line":"                sync \u003d False"},{"line_number":604,"context_line":"            device_info \u003d {}"},{"line_number":605,"context_line":"            try:"},{"line_number":606,"context_line":"                raise Exception"},{"line_number":607,"context_line":"                device_info \u003d self.br_mgr.update_devices(devices)"},{"line_number":608,"context_line":"            except Exception:"},{"line_number":609,"context_line":"                LOG.exception(_(\"Update devices failed\"))"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAN3%2F%2F9kA%3D","line":606,"updated":"2013-03-05 06:33:01.000000000","message":"!!!","commit_id":"e027244bf3da38b475e3989e0dbb8757bca565df"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"7d3a52d0d4af220c4ef174139ac8b65404c35089","unresolved":false,"context_lines":[{"line_number":603,"context_line":"                sync \u003d False"},{"line_number":604,"context_line":"            device_info \u003d {}"},{"line_number":605,"context_line":"            try:"},{"line_number":606,"context_line":"                raise Exception"},{"line_number":607,"context_line":"                device_info \u003d self.br_mgr.update_devices(devices)"},{"line_number":608,"context_line":"            except Exception:"},{"line_number":609,"context_line":"                LOG.exception(_(\"Update devices failed\"))"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAN3%2F%2F9jk%3D","line":606,"in_reply_to":"AAAAN3%2F%2F9js%3D","updated":"2013-03-05 06:38:11.000000000","message":"Oh...my god...sorry","commit_id":"e027244bf3da38b475e3989e0dbb8757bca565df"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"unresolved":false,"context_lines":[{"line_number":603,"context_line":"                sync \u003d False"},{"line_number":604,"context_line":"            device_info \u003d {}"},{"line_number":605,"context_line":"            try:"},{"line_number":606,"context_line":"                raise Exception"},{"line_number":607,"context_line":"                device_info \u003d self.br_mgr.update_devices(devices)"},{"line_number":608,"context_line":"            except Exception:"},{"line_number":609,"context_line":"                LOG.exception(_(\"Update devices failed\"))"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAN3%2F%2F9js%3D","line":606,"in_reply_to":"AAAAN3%2F%2F9kA%3D","updated":"2013-03-05 06:37:29.000000000","message":"Is that possible to add the unit tests for this method?","commit_id":"e027244bf3da38b475e3989e0dbb8757bca565df"},{"author":{"_account_id":1994,"name":"Zhongyue Luo","email":"zhongyue.luo@gmail.com","username":"zyluo"},"unresolved":false,"context_lines":[{"line_number":618,"context_line":"            except Exception:"},{"line_number":619,"context_line":"                LOG.exception(_(\"Error in agent loop. Devices info: %s\"),"},{"line_number":620,"context_line":"                              device_info)"},{"line_number":621,"context_line":"                sync \u003d True"},{"line_number":622,"context_line":"            # sleep till end of polling interval"},{"line_number":623,"context_line":"            elapsed \u003d (time.time() - start)"},{"line_number":624,"context_line":"            if (elapsed \u003c self.polling_interval):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAN3%2F%2F9jM%3D","line":621,"updated":"2013-03-05 06:42:25.000000000","message":"As Nachi suggested, it would be better adding test cases for these two blocks","commit_id":"4ee64182bcf3de9e15a7c5cf5c155e4600ecc44e"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"7d3a52d0d4af220c4ef174139ac8b65404c35089","unresolved":false,"context_lines":[{"line_number":618,"context_line":"            except Exception:"},{"line_number":619,"context_line":"                LOG.exception(_(\"Error in agent loop. Devices info: %s\"),"},{"line_number":620,"context_line":"                              device_info)"},{"line_number":621,"context_line":"                sync \u003d True"},{"line_number":622,"context_line":"            # sleep till end of polling interval"},{"line_number":623,"context_line":"            elapsed \u003d (time.time() - start)"},{"line_number":624,"context_line":"            if (elapsed \u003c self.polling_interval):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAN3%2F%2F9bE%3D","line":621,"in_reply_to":"AAAAN3%2F%2F9jM%3D","updated":"2013-03-05 07:48:56.000000000","message":"I missing that. I will add testcase. Thanks.","commit_id":"4ee64182bcf3de9e15a7c5cf5c155e4600ecc44e"}]}
