)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"be3bf428cedfe6bad9defb7d6d150f29efe719e9","unresolved":false,"context_lines":[{"line_number":17,"context_line":"triggers a whole lot of logs itself, so it becomes very unclear how to"},{"line_number":18,"context_line":"establish any causality."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"What I propose is to keep track of what triggered the resync with some"},{"line_number":21,"context_line":"helpful information.  We add a schedule_resync() function to to"},{"line_number":22,"context_line":"replace a explicit set of needs_resync which tracks why it was called."},{"line_number":23,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"AAAAXX%2F%2Fwao%3D","line":20,"updated":"2014-04-28 07:58:13.000000000","message":"I\u0027m sorry for being rather pedant.\nHowever, commit message are better expressed in 3rd person, in my opinion:\n\n\"This patch allows for keeping track of what triggered the resync...\"","commit_id":"84c88245ea8b9a060f79fb1d396919ab8e309593"},{"author":{"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"},"change_message_id":"7a093bcec2860c7ab430825160b2d97580b8e085","unresolved":false,"context_lines":[{"line_number":17,"context_line":"triggers a whole lot of logs itself, so it becomes very unclear how to"},{"line_number":18,"context_line":"establish any causality."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"What I propose is to keep track of what triggered the resync with some"},{"line_number":21,"context_line":"helpful information.  We add a schedule_resync() function to to"},{"line_number":22,"context_line":"replace a explicit set of needs_resync which tracks why it was called."},{"line_number":23,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"bad4c104_80ec76c9","line":20,"in_reply_to":"AAAAXX%2F%2Fwao%3D","updated":"2014-04-29 00:43:49.000000000","message":"Done","commit_id":"84c88245ea8b9a060f79fb1d396919ab8e309593"}],"neutron/agent/dhcp_agent.py":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"0b3b150ee787cd52331e6c347197c93f622a6435","unresolved":false,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def __init__(self, host\u003dNone):"},{"line_number":70,"context_line":"        super(DhcpAgent, self).__init__(host\u003dhost)"},{"line_number":71,"context_line":"        self.needs_resync \u003d False"},{"line_number":72,"context_line":"        self.needs_resync_reasons \u003d []"},{"line_number":73,"context_line":"        self.conf \u003d cfg.CONF"},{"line_number":74,"context_line":"        self.cache \u003d NetworkCache()"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F%2FPbU%3D","line":71,"updated":"2014-03-19 06:57:50.000000000","message":"Seems the need for resync can be judged now by checking if self.needs_resync_reasons is not empty. Given that I guess self.needs_resync is redundant.","commit_id":"c0f2f4c1202c5e9c841c4042864baf2e081c0f75"},{"author":{"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"},"change_message_id":"f348f00da4849c56f2d92570f9cbf80d92038e1d","unresolved":false,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def __init__(self, host\u003dNone):"},{"line_number":70,"context_line":"        super(DhcpAgent, self).__init__(host\u003dhost)"},{"line_number":71,"context_line":"        self.needs_resync \u003d False"},{"line_number":72,"context_line":"        self.needs_resync_reasons \u003d []"},{"line_number":73,"context_line":"        self.conf \u003d cfg.CONF"},{"line_number":74,"context_line":"        self.cache \u003d NetworkCache()"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F%2FJSw%3D","line":71,"in_reply_to":"AAAAWH%2F%2FPbU%3D","updated":"2014-03-19 22:46:55.000000000","message":"Done","commit_id":"c0f2f4c1202c5e9c841c4042864baf2e081c0f75"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"0b3b150ee787cd52331e6c347197c93f622a6435","unresolved":false,"context_lines":[{"line_number":144,"context_line":"                LOG.exception(_(\u0027Unable to %(action)s dhcp for %(net_id)s.\u0027)"},{"line_number":145,"context_line":"                              % {\u0027net_id\u0027: network.id, \u0027action\u0027: action})"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    def schedule_resync(self, reason):"},{"line_number":148,"context_line":"        \"\"\"Schedule a resync for a given reason.\"\"\""},{"line_number":149,"context_line":"        self.needs_resync \u003d True"},{"line_number":150,"context_line":"        self.needs_resync_reasons.append(reason)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F%2FPbE%3D","line":147,"updated":"2014-03-19 06:57:50.000000000","message":"If remove self.needs_resync this func will not be needed.","commit_id":"c0f2f4c1202c5e9c841c4042864baf2e081c0f75"},{"author":{"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"},"change_message_id":"f348f00da4849c56f2d92570f9cbf80d92038e1d","unresolved":false,"context_lines":[{"line_number":144,"context_line":"                LOG.exception(_(\u0027Unable to %(action)s dhcp for %(net_id)s.\u0027)"},{"line_number":145,"context_line":"                              % {\u0027net_id\u0027: network.id, \u0027action\u0027: action})"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    def schedule_resync(self, reason):"},{"line_number":148,"context_line":"        \"\"\"Schedule a resync for a given reason.\"\"\""},{"line_number":149,"context_line":"        self.needs_resync \u003d True"},{"line_number":150,"context_line":"        self.needs_resync_reasons.append(reason)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F%2FJSg%3D","line":147,"in_reply_to":"AAAAWH%2F%2FPbE%3D","updated":"2014-03-19 22:46:55.000000000","message":"I feel it\u0027s better to abstract the mechanism of the array behind this fn","commit_id":"c0f2f4c1202c5e9c841c4042864baf2e081c0f75"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"03ccc5a47830e27dca91638f019789742ee52be9","unresolved":false,"context_lines":[{"line_number":179,"context_line":"        while True:"},{"line_number":180,"context_line":"            eventlet.sleep(self.conf.resync_interval)"},{"line_number":181,"context_line":"            if self.needs_resync_reasons:"},{"line_number":182,"context_line":"                LOG.debug(_(\"Synchronize state : %(reasons)s\"),"},{"line_number":183,"context_line":"                          {\"reasons\": self.needs_resync_reasons})"},{"line_number":184,"context_line":"                self.needs_resync_reasons \u003d []"},{"line_number":185,"context_line":"                self.sync_state()"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAWH%2F%2BgoU%3D","line":182,"updated":"2014-03-26 09:54:21.000000000","message":"Is it possible that in this particular moment, we get thread switch? I think LOG can trigger that. If so, we end up loosing some resync reasons. As follows:\n\n- we get a resync request:\n- we start logging the reason;\n- we switch to another thread;\n- we get another resync request;\n- we switch back to _periodic_resync_helper thread;\n- we unconditionally remove all the reasons -\u003e new reason lost.\n\nNot that this is THAT major issue, but I think we may fix it by cleaning up the list via .pop() for each request and logging it separately.\n\nif self.needs_resync_reasons:\n    while self.needs_resync_reasons:\n        LOG.debug(\u0027...\u0027 % self.needs_resync_reasons.pop())\n    self.sync_state()","commit_id":"adcd79daa2ce126dc80cdda1b415214f5ed302a2"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"a6101b4646bac5c31336a37c97dae8d79dc2b1c1","unresolved":false,"context_lines":[{"line_number":179,"context_line":"        while True:"},{"line_number":180,"context_line":"            eventlet.sleep(self.conf.resync_interval)"},{"line_number":181,"context_line":"            if self.needs_resync_reasons:"},{"line_number":182,"context_line":"                LOG.debug(_(\"Synchronize state : %(reasons)s\"),"},{"line_number":183,"context_line":"                          {\"reasons\": self.needs_resync_reasons})"},{"line_number":184,"context_line":"                self.needs_resync_reasons \u003d []"},{"line_number":185,"context_line":"                self.sync_state()"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAWH%2F%2BYn8%3D","line":182,"in_reply_to":"AAAAWH%2F%2BZlA%3D","updated":"2014-03-27 06:48:43.000000000","message":"Jakub, eventlet patches write(), I think logging module should use it.","commit_id":"adcd79daa2ce126dc80cdda1b415214f5ed302a2"},{"author":{"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"},"change_message_id":"d99447a50d5aca09f41717aef396cff3b5777d49","unresolved":false,"context_lines":[{"line_number":179,"context_line":"        while True:"},{"line_number":180,"context_line":"            eventlet.sleep(self.conf.resync_interval)"},{"line_number":181,"context_line":"            if self.needs_resync_reasons:"},{"line_number":182,"context_line":"                LOG.debug(_(\"Synchronize state : %(reasons)s\"),"},{"line_number":183,"context_line":"                          {\"reasons\": self.needs_resync_reasons})"},{"line_number":184,"context_line":"                self.needs_resync_reasons \u003d []"},{"line_number":185,"context_line":"                self.sync_state()"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAWH%2F%2BZlA%3D","line":182,"in_reply_to":"AAAAWH%2F%2BfjE%3D","updated":"2014-03-27 03:29:02.000000000","message":"@Ihar ok, I can do the pop implementation, but I don\u0027t like having side-effects in a debug statement so I\u0027ll move that out","commit_id":"adcd79daa2ce126dc80cdda1b415214f5ed302a2"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"1d55d7e0f8c841304029914eb0c41d1ad9cde52d","unresolved":false,"context_lines":[{"line_number":179,"context_line":"        while True:"},{"line_number":180,"context_line":"            eventlet.sleep(self.conf.resync_interval)"},{"line_number":181,"context_line":"            if self.needs_resync_reasons:"},{"line_number":182,"context_line":"                LOG.debug(_(\"Synchronize state : %(reasons)s\"),"},{"line_number":183,"context_line":"                          {\"reasons\": self.needs_resync_reasons})"},{"line_number":184,"context_line":"                self.needs_resync_reasons \u003d []"},{"line_number":185,"context_line":"                self.sync_state()"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAWH%2F%2BfjE%3D","line":182,"in_reply_to":"AAAAWH%2F%2Bgg0%3D","updated":"2014-03-26 12:43:08.000000000","message":"Eventlet doesn\u0027t monkey patch logging module.","commit_id":"adcd79daa2ce126dc80cdda1b415214f5ed302a2"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"aba158404fb70689e392508aa9277a6e65058263","unresolved":false,"context_lines":[{"line_number":179,"context_line":"        while True:"},{"line_number":180,"context_line":"            eventlet.sleep(self.conf.resync_interval)"},{"line_number":181,"context_line":"            if self.needs_resync_reasons:"},{"line_number":182,"context_line":"                LOG.debug(_(\"Synchronize state : %(reasons)s\"),"},{"line_number":183,"context_line":"                          {\"reasons\": self.needs_resync_reasons})"},{"line_number":184,"context_line":"                self.needs_resync_reasons \u003d []"},{"line_number":185,"context_line":"                self.sync_state()"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAWH%2F%2Bgg0%3D","line":182,"in_reply_to":"AAAAWH%2F%2Bgig%3D","updated":"2014-03-26 10:08:56.000000000","message":"Well, not totally sure if eventlet patches the logging functions or IO access, but the pop implementation won\u0027t harm anyone.","commit_id":"adcd79daa2ce126dc80cdda1b415214f5ed302a2"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"e921fdfbc6eb7c44b6a60fb1ef5871fcd273e297","unresolved":false,"context_lines":[{"line_number":179,"context_line":"        while True:"},{"line_number":180,"context_line":"            eventlet.sleep(self.conf.resync_interval)"},{"line_number":181,"context_line":"            if self.needs_resync_reasons:"},{"line_number":182,"context_line":"                LOG.debug(_(\"Synchronize state : %(reasons)s\"),"},{"line_number":183,"context_line":"                          {\"reasons\": self.needs_resync_reasons})"},{"line_number":184,"context_line":"                self.needs_resync_reasons \u003d []"},{"line_number":185,"context_line":"                self.sync_state()"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAWH%2F%2Bgig%3D","line":182,"in_reply_to":"AAAAWH%2F%2BgoU%3D","updated":"2014-03-26 10:02:42.000000000","message":"good catch!, \n\nyou\u0027re right.","commit_id":"adcd79daa2ce126dc80cdda1b415214f5ed302a2"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"235dc60d65b2a2416abe3dffe6298d91e15849b5","unresolved":false,"context_lines":[{"line_number":179,"context_line":"        while True:"},{"line_number":180,"context_line":"            eventlet.sleep(self.conf.resync_interval)"},{"line_number":181,"context_line":"            if self.needs_resync_reasons:"},{"line_number":182,"context_line":"                LOG.debug(_(\"resync required due to: \"))"},{"line_number":183,"context_line":"                while self.needs_resync_reasons:"},{"line_number":184,"context_line":"                    reason \u003d self.needs_resync_reasons.pop()"},{"line_number":185,"context_line":"                    LOG.debug(str(reason))"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAWH%2F%2BX8g%3D","line":182,"updated":"2014-03-27 09:20:36.000000000","message":"Your output may be interleaved with other log messages from other modules running. Instead, I would add a common \u0027resync required due to: \u0027 prefix to each reason reported. This will also facilitate searching for specific failures via logstash.","commit_id":"5b2ea07168083a917c9e2621fb4c32a15cef6ef4"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"78ac7bb39ba05144b9998c6ba40ec1002f8f5106","unresolved":false,"context_lines":[{"line_number":178,"context_line":"        while True:"},{"line_number":179,"context_line":"            eventlet.sleep(self.conf.resync_interval)"},{"line_number":180,"context_line":"            if self.needs_resync_reasons:"},{"line_number":181,"context_line":"                while self.needs_resync_reasons:"},{"line_number":182,"context_line":"                    reason \u003d self.needs_resync_reasons.pop()"},{"line_number":183,"context_line":"                    LOG.debug(_(\"resync: %(reason)s\"),"},{"line_number":184,"context_line":"                              {\"reason\": str(reason)})"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAXH%2F%2FSHY%3D","line":181,"updated":"2014-04-22 19:01:55.000000000","message":"It is very possible that loop will never exit if another thread adds items concurrently.\n\nreasons \u003d self.needs_resync_reasons\nself.needs_resync_reasons \u003d []\nfor r in reasons:\n    LOG.debug(_(\"resync triggered by: %s\", r))","commit_id":"969e05014139bb8b5e00af8af0ffd4f7e2583aa0"},{"author":{"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"},"change_message_id":"0c663db894a17b3cefd0888616cc3f812151c0f6","unresolved":false,"context_lines":[{"line_number":178,"context_line":"        while True:"},{"line_number":179,"context_line":"            eventlet.sleep(self.conf.resync_interval)"},{"line_number":180,"context_line":"            if self.needs_resync_reasons:"},{"line_number":181,"context_line":"                while self.needs_resync_reasons:"},{"line_number":182,"context_line":"                    reason \u003d self.needs_resync_reasons.pop()"},{"line_number":183,"context_line":"                    LOG.debug(_(\"resync: %(reason)s\"),"},{"line_number":184,"context_line":"                              {\"reason\": str(reason)})"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAXX%2F%2FxCQ%3D","line":181,"in_reply_to":"AAAAXH%2F%2FOYM%3D","updated":"2014-04-28 06:23:32.000000000","message":"@Oleg; assigning self.needs_resync_reasons to a new list should be sufficient?","commit_id":"969e05014139bb8b5e00af8af0ffd4f7e2583aa0"},{"author":{"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"},"change_message_id":"0c663db894a17b3cefd0888616cc3f812151c0f6","unresolved":false,"context_lines":[{"line_number":178,"context_line":"        while True:"},{"line_number":179,"context_line":"            eventlet.sleep(self.conf.resync_interval)"},{"line_number":180,"context_line":"            if self.needs_resync_reasons:"},{"line_number":181,"context_line":"                while self.needs_resync_reasons:"},{"line_number":182,"context_line":"                    reason \u003d self.needs_resync_reasons.pop()"},{"line_number":183,"context_line":"                    LOG.debug(_(\"resync: %(reason)s\"),"},{"line_number":184,"context_line":"                              {\"reason\": str(reason)})"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAXX%2F%2FxCU%3D","line":181,"in_reply_to":"AAAAXH%2F%2FSHY%3D","updated":"2014-04-28 06:23:32.000000000","message":"Done","commit_id":"969e05014139bb8b5e00af8af0ffd4f7e2583aa0"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"cefdf2a89151269b5824043fe2955e38dc06bb26","unresolved":false,"context_lines":[{"line_number":178,"context_line":"        while True:"},{"line_number":179,"context_line":"            eventlet.sleep(self.conf.resync_interval)"},{"line_number":180,"context_line":"            if self.needs_resync_reasons:"},{"line_number":181,"context_line":"                while self.needs_resync_reasons:"},{"line_number":182,"context_line":"                    reason \u003d self.needs_resync_reasons.pop()"},{"line_number":183,"context_line":"                    LOG.debug(_(\"resync: %(reason)s\"),"},{"line_number":184,"context_line":"                              {\"reason\": str(reason)})"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAXH%2F%2FOYM%3D","line":181,"in_reply_to":"AAAAXH%2F%2FSHY%3D","updated":"2014-04-23 08:06:59.000000000","message":"reasons \u003d self.needs_resync_reasons.copy() or both vars will be pointing to the same dict","commit_id":"969e05014139bb8b5e00af8af0ffd4f7e2583aa0"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"7a7b0b202ff66c6d72a8eee8f81d279f1fa7e747","unresolved":false,"context_lines":[{"line_number":181,"context_line":"                while self.needs_resync_reasons:"},{"line_number":182,"context_line":"                    reason \u003d self.needs_resync_reasons.pop()"},{"line_number":183,"context_line":"                    LOG.debug(_(\"resync: %(reason)s\"),"},{"line_number":184,"context_line":"                              {\"reason\": str(reason)})"},{"line_number":185,"context_line":"                self.sync_state()"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    def periodic_resync(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAXX%2F%2F59w%3D","line":184,"updated":"2014-04-25 12:02:52.000000000","message":"How about writing to log just once:\n\n if self.needs_resync_reasons:\n     LOG.debug(_(\"resync: \\n\\t%s\"), \u0027\\n\\t\u0027.join(self.needs_resync_reasons)\n     self.needs_resync_reasons \u003d list()","commit_id":"969e05014139bb8b5e00af8af0ffd4f7e2583aa0"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"78ac7bb39ba05144b9998c6ba40ec1002f8f5106","unresolved":false,"context_lines":[{"line_number":181,"context_line":"                while self.needs_resync_reasons:"},{"line_number":182,"context_line":"                    reason \u003d self.needs_resync_reasons.pop()"},{"line_number":183,"context_line":"                    LOG.debug(_(\"resync: %(reason)s\"),"},{"line_number":184,"context_line":"                              {\"reason\": str(reason)})"},{"line_number":185,"context_line":"                self.sync_state()"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    def periodic_resync(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAXH%2F%2FSHU%3D","line":184,"updated":"2014-04-22 19:01:55.000000000","message":"Why the string here? That is what the %s in the format string does.","commit_id":"969e05014139bb8b5e00af8af0ffd4f7e2583aa0"},{"author":{"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"},"change_message_id":"0c663db894a17b3cefd0888616cc3f812151c0f6","unresolved":false,"context_lines":[{"line_number":181,"context_line":"                while self.needs_resync_reasons:"},{"line_number":182,"context_line":"                    reason \u003d self.needs_resync_reasons.pop()"},{"line_number":183,"context_line":"                    LOG.debug(_(\"resync: %(reason)s\"),"},{"line_number":184,"context_line":"                              {\"reason\": str(reason)})"},{"line_number":185,"context_line":"                self.sync_state()"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    def periodic_resync(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAXX%2F%2FxCA%3D","line":184,"in_reply_to":"AAAAXH%2F%2FSHU%3D","updated":"2014-04-28 06:23:32.000000000","message":"sorry, was originally a bit different.  fixed","commit_id":"969e05014139bb8b5e00af8af0ffd4f7e2583aa0"},{"author":{"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"},"change_message_id":"0c663db894a17b3cefd0888616cc3f812151c0f6","unresolved":false,"context_lines":[{"line_number":181,"context_line":"                while self.needs_resync_reasons:"},{"line_number":182,"context_line":"                    reason \u003d self.needs_resync_reasons.pop()"},{"line_number":183,"context_line":"                    LOG.debug(_(\"resync: %(reason)s\"),"},{"line_number":184,"context_line":"                              {\"reason\": str(reason)})"},{"line_number":185,"context_line":"                self.sync_state()"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    def periodic_resync(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAXX%2F%2FxCE%3D","line":184,"in_reply_to":"AAAAXX%2F%2F59w%3D","updated":"2014-04-28 06:23:32.000000000","message":"I think newlines and tabs are not a good idea in log messages","commit_id":"969e05014139bb8b5e00af8af0ffd4f7e2583aa0"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"78ac7bb39ba05144b9998c6ba40ec1002f8f5106","unresolved":false,"context_lines":[{"line_number":584,"context_line":""},{"line_number":585,"context_line":"    def agent_updated(self, context, payload):"},{"line_number":586,"context_line":"        \"\"\"Handle the agent_updated notification event.\"\"\""},{"line_number":587,"context_line":"        self.schedule_resync(_(\"Agent updated %(payload)s\"),"},{"line_number":588,"context_line":"                             {\"payload\": payload})"},{"line_number":589,"context_line":"        LOG.info(_(\"agent_updated by server side %s!\"), payload)"},{"line_number":590,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAXH%2F%2FSHI%3D","line":587,"updated":"2014-04-22 19:01:55.000000000","message":"schedule_resync does not take multiple args","commit_id":"969e05014139bb8b5e00af8af0ffd4f7e2583aa0"},{"author":{"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"},"change_message_id":"0c663db894a17b3cefd0888616cc3f812151c0f6","unresolved":false,"context_lines":[{"line_number":584,"context_line":""},{"line_number":585,"context_line":"    def agent_updated(self, context, payload):"},{"line_number":586,"context_line":"        \"\"\"Handle the agent_updated notification event.\"\"\""},{"line_number":587,"context_line":"        self.schedule_resync(_(\"Agent updated %(payload)s\"),"},{"line_number":588,"context_line":"                             {\"payload\": payload})"},{"line_number":589,"context_line":"        LOG.info(_(\"agent_updated by server side %s!\"), payload)"},{"line_number":590,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAXX%2F%2Fw9A%3D","line":587,"in_reply_to":"AAAAXH%2F%2FSHI%3D","updated":"2014-04-28 06:23:32.000000000","message":"Done\n\nSomething I have not found documented is why it is considered better to use multiple arguments to LOG but to use normal % substitution in other places","commit_id":"969e05014139bb8b5e00af8af0ffd4f7e2583aa0"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"be3bf428cedfe6bad9defb7d6d150f29efe719e9","unresolved":false,"context_lines":[{"line_number":144,"context_line":"                LOG.exception(_(\u0027Unable to %(action)s dhcp for %(net_id)s.\u0027)"},{"line_number":145,"context_line":"                              % {\u0027net_id\u0027: network.id, \u0027action\u0027: action})"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    def schedule_resync(self, reason):"},{"line_number":148,"context_line":"        \"\"\"Schedule a resync for a given reason.\"\"\""},{"line_number":149,"context_line":"        self.needs_resync_reasons.append(reason)"},{"line_number":150,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAXX%2F%2FwbY%3D","line":147,"updated":"2014-04-28 07:58:13.000000000","message":"pedantry: this method is not really scheduling a resync. It\u0027s merely adding a reason for which a resync is needed.\nHowever, I am unable to find a better name. If you or any other review can find one, that will be good.","commit_id":"84c88245ea8b9a060f79fb1d396919ab8e309593"},{"author":{"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"},"change_message_id":"7a093bcec2860c7ab430825160b2d97580b8e085","unresolved":false,"context_lines":[{"line_number":144,"context_line":"                LOG.exception(_(\u0027Unable to %(action)s dhcp for %(net_id)s.\u0027)"},{"line_number":145,"context_line":"                              % {\u0027net_id\u0027: network.id, \u0027action\u0027: action})"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    def schedule_resync(self, reason):"},{"line_number":148,"context_line":"        \"\"\"Schedule a resync for a given reason.\"\"\""},{"line_number":149,"context_line":"        self.needs_resync_reasons.append(reason)"},{"line_number":150,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"bad4c104_e0c38236","line":147,"in_reply_to":"AAAAXX%2F%2FwbY%3D","updated":"2014-04-29 00:43:49.000000000","message":"I\u0027d ague the name is apt -- after doing something that requires resyncing you call schedule_resync() but it has a required argument that describes why","commit_id":"84c88245ea8b9a060f79fb1d396919ab8e309593"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"be3bf428cedfe6bad9defb7d6d150f29efe719e9","unresolved":false,"context_lines":[{"line_number":185,"context_line":"                reasons \u003d self.needs_resync_reasons"},{"line_number":186,"context_line":"                self.needs_resync_reasons \u003d []"},{"line_number":187,"context_line":"                for r in reasons:"},{"line_number":188,"context_line":"                    LOG.debug(_(\"resync: %(reason)s\"),"},{"line_number":189,"context_line":"                              {\"reason\": r})"},{"line_number":190,"context_line":"                self.sync_state()"},{"line_number":191,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAXX%2F%2Fwac%3D","line":188,"updated":"2014-04-28 07:58:13.000000000","message":"consider INFO severity.\nThis way it will be easier to find out the error reason - and it will be visible also when running neutron\u0027s dhcp agent not in debug mode.","commit_id":"84c88245ea8b9a060f79fb1d396919ab8e309593"},{"author":{"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"},"change_message_id":"7a093bcec2860c7ab430825160b2d97580b8e085","unresolved":false,"context_lines":[{"line_number":185,"context_line":"                reasons \u003d self.needs_resync_reasons"},{"line_number":186,"context_line":"                self.needs_resync_reasons \u003d []"},{"line_number":187,"context_line":"                for r in reasons:"},{"line_number":188,"context_line":"                    LOG.debug(_(\"resync: %(reason)s\"),"},{"line_number":189,"context_line":"                              {\"reason\": r})"},{"line_number":190,"context_line":"                self.sync_state()"},{"line_number":191,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"bad4c104_0073064e","line":188,"in_reply_to":"AAAAXX%2F%2Fwac%3D","updated":"2014-04-29 00:43:49.000000000","message":"I think it is too frequent to warrant a INFO message.  The original problem was that neutron was exhibiting high load -- a non-specific issue an admin would notice -- but setting debug didn\u0027t help to reveal what was going on","commit_id":"84c88245ea8b9a060f79fb1d396919ab8e309593"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"9f3ebbe0f4511d07432f960b241b3b3329c86d0e","unresolved":false,"context_lines":[{"line_number":185,"context_line":"                reasons \u003d self.needs_resync_reasons"},{"line_number":186,"context_line":"                self.needs_resync_reasons \u003d []"},{"line_number":187,"context_line":"                for r in reasons:"},{"line_number":188,"context_line":"                    LOG.debug(_(\"resync: %(reason)s\"),"},{"line_number":189,"context_line":"                              {\"reason\": r})"},{"line_number":190,"context_line":"                self.sync_state()"},{"line_number":191,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"9ad9bd40_f278a92d","line":188,"in_reply_to":"bad4c104_0073064e","updated":"2014-04-30 10:35:05.000000000","message":"ouch frequent resyncs are a very bad thing","commit_id":"84c88245ea8b9a060f79fb1d396919ab8e309593"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"be3bf428cedfe6bad9defb7d6d150f29efe719e9","unresolved":false,"context_lines":[{"line_number":186,"context_line":"                self.needs_resync_reasons \u003d []"},{"line_number":187,"context_line":"                for r in reasons:"},{"line_number":188,"context_line":"                    LOG.debug(_(\"resync: %(reason)s\"),"},{"line_number":189,"context_line":"                              {\"reason\": r})"},{"line_number":190,"context_line":"                self.sync_state()"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"    def periodic_resync(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAXX%2F%2Fwcw%3D","line":189,"updated":"2014-04-28 07:58:13.000000000","message":"Technically your thread might yield here as well.\nThis is a very minor point, but in order to avoid a potentially unnecessary 2nd resync, it might be worth resetting needs_resync_reasons immediately before calling sync_state","commit_id":"84c88245ea8b9a060f79fb1d396919ab8e309593"},{"author":{"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"},"change_message_id":"7a093bcec2860c7ab430825160b2d97580b8e085","unresolved":false,"context_lines":[{"line_number":186,"context_line":"                self.needs_resync_reasons \u003d []"},{"line_number":187,"context_line":"                for r in reasons:"},{"line_number":188,"context_line":"                    LOG.debug(_(\"resync: %(reason)s\"),"},{"line_number":189,"context_line":"                              {\"reason\": r})"},{"line_number":190,"context_line":"                self.sync_state()"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"    def periodic_resync(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"bad4c104_40942e37","line":189,"in_reply_to":"AAAAXX%2F%2Fwcw%3D","updated":"2014-04-29 00:43:49.000000000","message":"\u003e resetting needs_resync_reasons immediately before calling sync_state\n\nIf I\u0027m understanding, wouldn\u0027t that potentially drop anything inserted into the list in that time?","commit_id":"84c88245ea8b9a060f79fb1d396919ab8e309593"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"9f3ebbe0f4511d07432f960b241b3b3329c86d0e","unresolved":false,"context_lines":[{"line_number":186,"context_line":"                self.needs_resync_reasons \u003d []"},{"line_number":187,"context_line":"                for r in reasons:"},{"line_number":188,"context_line":"                    LOG.debug(_(\"resync: %(reason)s\"),"},{"line_number":189,"context_line":"                              {\"reason\": r})"},{"line_number":190,"context_line":"                self.sync_state()"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"    def periodic_resync(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"9ad9bd40_12db4d1c","line":189,"in_reply_to":"bad4c104_40942e37","updated":"2014-04-30 10:35:05.000000000","message":"I was merely suggesting inverting lines a bit.\nthe only downside is that you might not log a \"resync reason\" if the log statement yields and another resync reason is added before control returns to this thread.\n\nreasons \u003d self.needs_resync_reasons\nfor r in reasons:\n       LOG.debug(_(\"resync: %(reason)s\"),\n                           {\"reason\": r})\nself.needs_resync_reasons \u003d []\nself.sync_state()\n\nHowever, bear in mind that we\u0027re really splitting hairs here. And very thin hairs too.","commit_id":"84c88245ea8b9a060f79fb1d396919ab8e309593"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"87b48b704f27022170cf4f18a3af9263087b3031","unresolved":false,"context_lines":[{"line_number":183,"context_line":"                # be careful to avoid a race with additions to list"},{"line_number":184,"context_line":"                # from other threads"},{"line_number":185,"context_line":"                reasons \u003d self.needs_resync_reasons"},{"line_number":186,"context_line":"                self.needs_resync_reasons \u003d []"},{"line_number":187,"context_line":"                for r in reasons:"},{"line_number":188,"context_line":"                    LOG.debug(_(\"resync: %(reason)s\"),"},{"line_number":189,"context_line":"                              {\"reason\": r})"}],"source_content_type":"text/x-python","patch_set":10,"id":"9ad9bd40_5b972948","line":186,"updated":"2014-05-06 08:40:16.000000000","message":"I\u0027d follow Salvatore\u0027s suggestions on patchset 8 and move line 186 after just before line 190","commit_id":"77ddd463bd2e96041c0b6ecea1c46c4ac4d55851"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"8aa3d932082fc2b87bdc273e4f7bf511ddfd96e5","unresolved":false,"context_lines":[{"line_number":183,"context_line":"                # be careful to avoid a race with additions to list"},{"line_number":184,"context_line":"                # from other threads"},{"line_number":185,"context_line":"                reasons \u003d self.needs_resync_reasons"},{"line_number":186,"context_line":"                self.needs_resync_reasons \u003d []"},{"line_number":187,"context_line":"                for r in reasons:"},{"line_number":188,"context_line":"                    LOG.debug(_(\"resync: %(reason)s\"),"},{"line_number":189,"context_line":"                              {\"reason\": r})"}],"source_content_type":"text/x-python","patch_set":10,"id":"1ae5cdf2_77c0952a","line":186,"updated":"2014-06-03 11:29:26.000000000","message":"The behavior of a list being modified during iteration isn\u0027t exact, so this approach ensures a consistent log","commit_id":"77ddd463bd2e96041c0b6ecea1c46c4ac4d55851"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"1de31e456f318cb84f678b9034e91831611589ff","unresolved":false,"context_lines":[{"line_number":185,"context_line":"                reasons \u003d self.needs_resync_reasons"},{"line_number":186,"context_line":"                self.needs_resync_reasons \u003d []"},{"line_number":187,"context_line":"                for r in reasons:"},{"line_number":188,"context_line":"                    LOG.debug(_(\"resync: %(reason)s\"),"},{"line_number":189,"context_line":"                              {\"reason\": r})"},{"line_number":190,"context_line":"                self.sync_state()"},{"line_number":191,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"7adec928_d5450516","line":188,"updated":"2014-05-23 07:57:05.000000000","message":"debug messages shouldn\u0027t be translated anymore","commit_id":"77ddd463bd2e96041c0b6ecea1c46c4ac4d55851"}],"neutron/tests/unit/test_dhcp_agent.py":[{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"9f79b9933eab1326fa5c34d5f51f763ea584bb98","unresolved":false,"context_lines":[{"line_number":325,"context_line":"                    dhcp._periodic_resync_helper()"},{"line_number":326,"context_line":"                sync_state.assert_called_once_with()"},{"line_number":327,"context_line":"                sleep.assert_called_once_with(dhcp.conf.resync_interval)"},{"line_number":328,"context_line":"                self.assertEqual(len(dhcp.needs_resync_reasons), 0)"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"    def test_populate_cache_on_start_without_active_networks_support(self):"},{"line_number":331,"context_line":"        # emul dhcp driver that doesn\u0027t support retrieving of active networks"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAWH%2F%2BfYc%3D","line":328,"updated":"2014-03-26 13:04:11.000000000","message":"wouldn\u0027t be enough this?\n\n self.assertFalse(dhcp.needs_resync_reasons)","commit_id":"adcd79daa2ce126dc80cdda1b415214f5ed302a2"},{"author":{"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"},"change_message_id":"d99447a50d5aca09f41717aef396cff3b5777d49","unresolved":false,"context_lines":[{"line_number":325,"context_line":"                    dhcp._periodic_resync_helper()"},{"line_number":326,"context_line":"                sync_state.assert_called_once_with()"},{"line_number":327,"context_line":"                sleep.assert_called_once_with(dhcp.conf.resync_interval)"},{"line_number":328,"context_line":"                self.assertEqual(len(dhcp.needs_resync_reasons), 0)"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"    def test_populate_cache_on_start_without_active_networks_support(self):"},{"line_number":331,"context_line":"        # emul dhcp driver that doesn\u0027t support retrieving of active networks"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAWH%2F%2BZj0%3D","line":328,"in_reply_to":"AAAAWH%2F%2BfYc%3D","updated":"2014-03-27 03:29:02.000000000","message":"i chose this for the intrinsic documentation that it\u0027s a list that should be empty","commit_id":"adcd79daa2ce126dc80cdda1b415214f5ed302a2"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"12550f2f1ce0d603dfdca618d532cef75115be1d","unresolved":false,"context_lines":[{"line_number":487,"context_line":"        self.call_driver \u003d self.call_driver_p.start()"},{"line_number":488,"context_line":"        self.schedule_resync_p \u003d mock.patch.object(self.dhcp,"},{"line_number":489,"context_line":"                                                   \u0027schedule_resync\u0027)"},{"line_number":490,"context_line":"        self.schedule_resync \u003d self.schedule_resync_p.start()"},{"line_number":491,"context_line":"        self.external_process_p \u003d mock.patch("},{"line_number":492,"context_line":"            \u0027neutron.agent.linux.external_process.ProcessManager\u0027"},{"line_number":493,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAWH%2F9urc%3D","line":490,"updated":"2014-04-02 14:37:43.000000000","message":"you should add\nself.schedule_resync_p.stop() in the tearDown","commit_id":"dfa855ab31a383b58a2d7aee73a0a8040eca5b5e"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"4372c829434d138cf2ef1107551ffdac3f96105b","unresolved":false,"context_lines":[{"line_number":487,"context_line":"        self.call_driver \u003d self.call_driver_p.start()"},{"line_number":488,"context_line":"        self.schedule_resync_p \u003d mock.patch.object(self.dhcp,"},{"line_number":489,"context_line":"                                                   \u0027schedule_resync\u0027)"},{"line_number":490,"context_line":"        self.schedule_resync \u003d self.schedule_resync_p.start()"},{"line_number":491,"context_line":"        self.external_process_p \u003d mock.patch("},{"line_number":492,"context_line":"            \u0027neutron.agent.linux.external_process.ProcessManager\u0027"},{"line_number":493,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAWH%2F9oB4%3D","line":490,"in_reply_to":"AAAAWH%2F9o8A%3D","updated":"2014-04-03 09:17:57.000000000","message":"thanks Oleg, didn\u0027t know that actually","commit_id":"dfa855ab31a383b58a2d7aee73a0a8040eca5b5e"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"3a24e53e2a182c0975891ab807e09f00e3784e26","unresolved":false,"context_lines":[{"line_number":487,"context_line":"        self.call_driver \u003d self.call_driver_p.start()"},{"line_number":488,"context_line":"        self.schedule_resync_p \u003d mock.patch.object(self.dhcp,"},{"line_number":489,"context_line":"                                                   \u0027schedule_resync\u0027)"},{"line_number":490,"context_line":"        self.schedule_resync \u003d self.schedule_resync_p.start()"},{"line_number":491,"context_line":"        self.external_process_p \u003d mock.patch("},{"line_number":492,"context_line":"            \u0027neutron.agent.linux.external_process.ProcessManager\u0027"},{"line_number":493,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAWH%2F9mes%3D","line":490,"in_reply_to":"AAAAWH%2F9oB4%3D","updated":"2014-04-03 12:40:53.000000000","message":"Good to know, I didn\u0027t know either.","commit_id":"dfa855ab31a383b58a2d7aee73a0a8040eca5b5e"},{"author":{"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"},"change_message_id":"8ddaaea88c4951a75759e55f745bd045b6c0f0c7","unresolved":false,"context_lines":[{"line_number":487,"context_line":"        self.call_driver \u003d self.call_driver_p.start()"},{"line_number":488,"context_line":"        self.schedule_resync_p \u003d mock.patch.object(self.dhcp,"},{"line_number":489,"context_line":"                                                   \u0027schedule_resync\u0027)"},{"line_number":490,"context_line":"        self.schedule_resync \u003d self.schedule_resync_p.start()"},{"line_number":491,"context_line":"        self.external_process_p \u003d mock.patch("},{"line_number":492,"context_line":"            \u0027neutron.agent.linux.external_process.ProcessManager\u0027"},{"line_number":493,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAWH%2F9pWs%3D","line":490,"in_reply_to":"AAAAWH%2F9urc%3D","updated":"2014-04-03 04:50:55.000000000","message":"Done","commit_id":"dfa855ab31a383b58a2d7aee73a0a8040eca5b5e"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"393c718079fad9c9bfa7b21cdd71fe1deb3b14cd","unresolved":false,"context_lines":[{"line_number":487,"context_line":"        self.call_driver \u003d self.call_driver_p.start()"},{"line_number":488,"context_line":"        self.schedule_resync_p \u003d mock.patch.object(self.dhcp,"},{"line_number":489,"context_line":"                                                   \u0027schedule_resync\u0027)"},{"line_number":490,"context_line":"        self.schedule_resync \u003d self.schedule_resync_p.start()"},{"line_number":491,"context_line":"        self.external_process_p \u003d mock.patch("},{"line_number":492,"context_line":"            \u0027neutron.agent.linux.external_process.ProcessManager\u0027"},{"line_number":493,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAWH%2F9o8A%3D","line":490,"in_reply_to":"AAAAWH%2F9urc%3D","updated":"2014-04-03 06:22:34.000000000","message":"FYI: BaseTestCase now has self.addCleanup(mock.patch.stopall) in its setUp()","commit_id":"dfa855ab31a383b58a2d7aee73a0a8040eca5b5e"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"7a7b0b202ff66c6d72a8eee8f81d279f1fa7e747","unresolved":false,"context_lines":[{"line_number":227,"context_line":"                                                    mock.ANY,"},{"line_number":228,"context_line":"                                                    mock.ANY)"},{"line_number":229,"context_line":"                self.assertEqual(log.call_count, 1)"},{"line_number":230,"context_line":"                self.assertEqual(expected_sync, schedule_resync.called)"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"    def test_call_driver_failure(self):"},{"line_number":233,"context_line":"        self._test_call_driver_failure()"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAXX%2F%2F578%3D","line":230,"updated":"2014-04-25 12:02:52.000000000","message":"Maybe checking that needs_resync_reasons contains expected reasons would be more precise than checking the function was actually called.","commit_id":"969e05014139bb8b5e00af8af0ffd4f7e2583aa0"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"7a7b0b202ff66c6d72a8eee8f81d279f1fa7e747","unresolved":false,"context_lines":[{"line_number":330,"context_line":"                    dhcp._periodic_resync_helper()"},{"line_number":331,"context_line":"                sync_state.assert_called_once_with()"},{"line_number":332,"context_line":"                sleep.assert_called_once_with(dhcp.conf.resync_interval)"},{"line_number":333,"context_line":"                self.assertEqual(len(dhcp.needs_resync_reasons), 0)"},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"    def test_populate_cache_on_start_without_active_networks_support(self):"},{"line_number":336,"context_line":"        # emul dhcp driver that doesn\u0027t support retrieving of active networks"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAXX%2F%2F57g%3D","line":333,"updated":"2014-04-25 12:02:52.000000000","message":"There could be mocked LOG and checked debug() got expected message.","commit_id":"969e05014139bb8b5e00af8af0ffd4f7e2583aa0"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"1de31e456f318cb84f678b9034e91831611589ff","unresolved":false,"context_lines":[{"line_number":323,"context_line":"                    dhcp._periodic_resync_helper()"},{"line_number":324,"context_line":"                sync_state.assert_called_once_with()"},{"line_number":325,"context_line":"                sleep.assert_called_once_with(dhcp.conf.resync_interval)"},{"line_number":326,"context_line":"                self.assertEqual(len(dhcp.needs_resync_reasons), 0)"},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"    def test_populate_cache_on_start_without_active_networks_support(self):"},{"line_number":329,"context_line":"        # emul dhcp driver that doesn\u0027t support retrieving of active networks"}],"source_content_type":"text/x-python","patch_set":10,"id":"7adec928_f50201b3","line":326,"updated":"2014-05-23 07:57:05.000000000","message":"self.assertFalse(dhcp.needs_resync_reasons)","commit_id":"77ddd463bd2e96041c0b6ecea1c46c4ac4d55851"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"67fb07a2e77baf01091e897829b2438df100ffce","unresolved":false,"context_lines":[{"line_number":471,"context_line":"        self.mock_makedirs \u003d self.mock_makedirs_p.start()"},{"line_number":472,"context_line":"        self.mock_init_p \u003d mock.patch(\u0027neutron.agent.dhcp_agent.\u0027"},{"line_number":473,"context_line":"                                      \u0027DhcpAgent._populate_networks_cache\u0027)"},{"line_number":474,"context_line":"        self.mock_init \u003d self.mock_init_p.start()"},{"line_number":475,"context_line":"        with mock.patch.object(dhcp.Dnsmasq,"},{"line_number":476,"context_line":"                               \u0027check_version\u0027) as check_v:"},{"line_number":477,"context_line":"            check_v.return_value \u003d dhcp.Dnsmasq.MINIMUM_VERSION"}],"source_content_type":"text/x-python","patch_set":10,"id":"1ae5cdf2_4ac1abe3","line":474,"updated":"2014-05-29 23:32:04.000000000","message":"Try not to make gratuitous changes unrelated to the patch.","commit_id":"77ddd463bd2e96041c0b6ecea1c46c4ac4d55851"}]}
