)]}'
{"ceilometer/publisher/kafka_broker.py":[{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"5e8d61251991dda54540649b77177ed25bd7dea3","unresolved":false,"context_lines":[{"line_number":115,"context_line":""},{"line_number":116,"context_line":"        self.flush()"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def flush(self):"},{"line_number":119,"context_line":"        queue \u003d self.local_queue"},{"line_number":120,"context_line":"        self.local_queue \u003d self._process_queue(queue)"},{"line_number":121,"context_line":"        if self.policy \u003d\u003d \u0027queue\u0027:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a50d1a3_da24ad61","line":118,"updated":"2015-07-31 06:40:54.000000000","message":"The bug is here, this is missing:\n\n  self.local_queue \u003d []\n\nto have the code concurrency safe (thk to the GIL).\n\nTo be honest self.local_queue should protected by a lock.","commit_id":"0062555efac44abe210bf3fae20c95c6fbe1d6c7"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"58d7b81885f130c2f6893bfb206ea6e947c9c36b","unresolved":false,"context_lines":[{"line_number":115,"context_line":""},{"line_number":116,"context_line":"        self.flush()"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def flush(self):"},{"line_number":119,"context_line":"        queue \u003d self.local_queue"},{"line_number":120,"context_line":"        self.local_queue \u003d self._process_queue(queue)"},{"line_number":121,"context_line":"        if self.policy \u003d\u003d \u0027queue\u0027:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a50d1a3_1aa0d5a4","line":118,"in_reply_to":"3a50d1a3_da24ad61","updated":"2015-07-31 06:42:11.000000000","message":"See: \nhttps://github.com/openstack/ceilometer/blob/master/ceilometer/publisher/messaging.py#L132","commit_id":"0062555efac44abe210bf3fae20c95c6fbe1d6c7"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"75eeb7237eb0a192aab2fbf1a5d142dc4765165d","unresolved":false,"context_lines":[{"line_number":154,"context_line":"                    return []"},{"line_number":155,"context_line":"                current_retry +\u003d 1"},{"line_number":156,"context_line":"                if current_retry \u003e\u003d self.max_retry:"},{"line_number":157,"context_line":"                    self.local_queue \u003d []"},{"line_number":158,"context_line":"                    LOG.exception(_LE(\"Failed to retry to send sample data \""},{"line_number":159,"context_line":"                                      \"with max_retry times\"))"},{"line_number":160,"context_line":"                    raise"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a50d1a3_bdc8bb76","line":157,"updated":"2015-07-31 07:11:40.000000000","message":"Changing self.local_queue here is not concurrency safe too. You can loose messaging.","commit_id":"0062555efac44abe210bf3fae20c95c6fbe1d6c7"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"5e8d61251991dda54540649b77177ed25bd7dea3","unresolved":false,"context_lines":[{"line_number":159,"context_line":"                                      \"with max_retry times\"))"},{"line_number":160,"context_line":"                    raise"},{"line_number":161,"context_line":"            else:"},{"line_number":162,"context_line":"                if queue:"},{"line_number":163,"context_line":"                  queue.pop(0)"},{"line_number":164,"context_line":"        return []"},{"line_number":165,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3a50d1a3_5a6bbd85","line":162,"updated":"2015-07-31 06:40:54.000000000","message":"I wonder how that can arrive, this cannot be reach if the queue is empty (the \u0027while queue\u0027 above):","commit_id":"0062555efac44abe210bf3fae20c95c6fbe1d6c7"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"75eeb7237eb0a192aab2fbf1a5d142dc4765165d","unresolved":false,"context_lines":[{"line_number":179,"context_line":""},{"line_number":180,"context_line":"            if self.policy \u003d\u003d \u0027queue\u0027:"},{"line_number":181,"context_line":"                self._check_queue_length()"},{"line_number":182,"context_line":"            else:"},{"line_number":183,"context_line":"                self.local_queue \u003d []"},{"line_number":184,"context_line":"            raise Exception(\u0027Kafka Client is not available, \u0027"},{"line_number":185,"context_line":"                            \u0027please restart Kafka client\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a50d1a3_fdac03a1","line":182,"updated":"2015-07-31 07:11:40.000000000","message":"Changing self.local_queue here is not concurrency safe too. You will drop more messages that the code have before creating the client.","commit_id":"0062555efac44abe210bf3fae20c95c6fbe1d6c7"}]}
