)]}'
{"gnocchi/storage/ceph.py":[{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"fa9c40b137ebd7b16451041297c750d871cff710","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        name \u003d self._get_object_name(metric, timestamp_key,"},{"line_number":90,"context_line":"                                     aggregation, granularity, version)"},{"line_number":91,"context_line":"        with rados.WriteOpCtx() as op:"},{"line_number":92,"context_line":"            self.ioctx.remove_omap_keys(op, (name,))"},{"line_number":93,"context_line":"            self.ioctx.operate_write_op("},{"line_number":94,"context_line":"                op, self._build_unaggregated_timeserie_path(metric, 3))"},{"line_number":95,"context_line":"        self.ioctx.remove_object(name)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7ffa3b31_a770fda6","line":92,"range":{"start_line":92,"start_character":12,"end_line":92,"end_character":52},"updated":"2017-04-18 08:47:10.000000000","message":"If omap key have been removed, but not yet the measure object , and then gnocchi crash. On restart, gnocchi will try to remove it again and backtrace on this call.","commit_id":"2706e95c15bbf4019acb3a6c7cf93911768c5352"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"562101d4f237755c74994aa8e05373a3f46706a6","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        name \u003d self._get_object_name(metric, timestamp_key,"},{"line_number":90,"context_line":"                                     aggregation, granularity, version)"},{"line_number":91,"context_line":"        with rados.WriteOpCtx() as op:"},{"line_number":92,"context_line":"            self.ioctx.remove_omap_keys(op, (name,))"},{"line_number":93,"context_line":"            self.ioctx.operate_write_op("},{"line_number":94,"context_line":"                op, self._build_unaggregated_timeserie_path(metric, 3))"},{"line_number":95,"context_line":"        self.ioctx.remove_object(name)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7ffa3b31_87ed018d","line":92,"range":{"start_line":92,"start_character":12,"end_line":92,"end_character":52},"in_reply_to":"7ffa3b31_a770fda6","updated":"2017-04-18 08:57:22.000000000","message":"good catch, fixed I hope","commit_id":"2706e95c15bbf4019acb3a6c7cf93911768c5352"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"54bf61da4ea2d414e9865104f0df0e3edb65077b","unresolved":false,"context_lines":[{"line_number":115,"context_line":""},{"line_number":116,"context_line":"        ops \u003d [self.ioctx.aio_remove(name) for name, _ in omaps]"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"        ops.append(self.ioctx.aio_remove("},{"line_number":119,"context_line":"            self._build_unaggregated_timeserie_path(metric, 3)))"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"        for op in ops:"},{"line_number":122,"context_line":"            op.wait_for_complete_and_cb()"}],"source_content_type":"text/x-python","patch_set":5,"id":"7ffa3b31_d9d7694f","line":119,"range":{"start_line":118,"start_character":1,"end_line":119,"end_character":64},"updated":"2017-04-18 12:55:35.000000000","message":"We should delete that one only when other are complete.","commit_id":"a67dd6422fa83d967b52aedef813ba779a824a3e"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"93b2ed801b5df2d4030acd0f1aba9edfc6639da6","unresolved":false,"context_lines":[{"line_number":115,"context_line":""},{"line_number":116,"context_line":"        ops \u003d [self.ioctx.aio_remove(name) for name, _ in omaps]"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"        ops.append(self.ioctx.aio_remove("},{"line_number":119,"context_line":"            self._build_unaggregated_timeserie_path(metric, 3)))"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"        for op in ops:"},{"line_number":122,"context_line":"            op.wait_for_complete_and_cb()"}],"source_content_type":"text/x-python","patch_set":5,"id":"7ffa3b31_a77ae4ed","line":119,"range":{"start_line":118,"start_character":1,"end_line":119,"end_character":64},"in_reply_to":"7ffa3b31_d9d7694f","updated":"2017-04-20 14:42:17.000000000","message":"Done","commit_id":"a67dd6422fa83d967b52aedef813ba779a824a3e"}],"gnocchi/storage/incoming/ceph.py":[{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"54bf61da4ea2d414e9865104f0df0e3edb65077b","unresolved":false,"context_lines":[{"line_number":158,"context_line":"            self.ioctx.remove_omap_keys(op, tuple(object_names))"},{"line_number":159,"context_line":"            self.ioctx.operate_write_op(op, self.MEASURE_PREFIX,"},{"line_number":160,"context_line":"                                        flags\u003dself.OMAP_WRITE_FLAGS)"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"        for op in list(map(self.ioctx.aio_remove, object_names)):"},{"line_number":163,"context_line":"            op.wait_for_complete_and_cb()"},{"line_number":164,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"7ffa3b31_5e4fbf91","line":161,"updated":"2017-04-18 12:55:35.000000000","message":"We should do the object removal first.","commit_id":"a67dd6422fa83d967b52aedef813ba779a824a3e"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"f8c85e4eecb2b2c4b37687526f18be7cbb503bce","unresolved":false,"context_lines":[{"line_number":158,"context_line":"            self.ioctx.remove_omap_keys(op, tuple(object_names))"},{"line_number":159,"context_line":"            self.ioctx.operate_write_op(op, self.MEASURE_PREFIX,"},{"line_number":160,"context_line":"                                        flags\u003dself.OMAP_WRITE_FLAGS)"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"        for op in list(map(self.ioctx.aio_remove, object_names)):"},{"line_number":163,"context_line":"            op.wait_for_complete_and_cb()"},{"line_number":164,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"7ffa3b31_e7fa2c41","line":161,"in_reply_to":"7ffa3b31_5e4fbf91","updated":"2017-04-20 14:42:41.000000000","message":"Done","commit_id":"a67dd6422fa83d967b52aedef813ba779a824a3e"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"54bf61da4ea2d414e9865104f0df0e3edb65077b","unresolved":false,"context_lines":[{"line_number":207,"context_line":"            self.ioctx.remove_omap_keys(op, tuple(object_names))"},{"line_number":208,"context_line":"            self.ioctx.operate_write_op(op, self.MEASURE_PREFIX,"},{"line_number":209,"context_line":"                                        flags\u003dself.OMAP_WRITE_FLAGS)"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"        for op in list(map(self.ioctx.aio_remove, object_names)):"},{"line_number":212,"context_line":"            op.wait_for_complete_and_cb()"}],"source_content_type":"text/x-python","patch_set":5,"id":"7ffa3b31_9ea66753","line":210,"updated":"2017-04-18 12:55:35.000000000","message":"Here we have potential stall objects. \n\nWe could also remove the objects before the omap keys too. That will lead to duplicate datapoint in case of metricd crash, but that less serious issue.","commit_id":"a67dd6422fa83d967b52aedef813ba779a824a3e"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"93b2ed801b5df2d4030acd0f1aba9edfc6639da6","unresolved":false,"context_lines":[{"line_number":207,"context_line":"            self.ioctx.remove_omap_keys(op, tuple(object_names))"},{"line_number":208,"context_line":"            self.ioctx.operate_write_op(op, self.MEASURE_PREFIX,"},{"line_number":209,"context_line":"                                        flags\u003dself.OMAP_WRITE_FLAGS)"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"        for op in list(map(self.ioctx.aio_remove, object_names)):"},{"line_number":212,"context_line":"            op.wait_for_complete_and_cb()"}],"source_content_type":"text/x-python","patch_set":5,"id":"7ffa3b31_47ec408e","line":210,"in_reply_to":"7ffa3b31_9ea66753","updated":"2017-04-20 14:42:17.000000000","message":"if we remove the object first, we might have aio_read be called on non-existing object. What will happen in that case?","commit_id":"a67dd6422fa83d967b52aedef813ba779a824a3e"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"2c340fd7c214525d8b4e6fabc7bf94180a4efc97","unresolved":false,"context_lines":[{"line_number":174,"context_line":""},{"line_number":175,"context_line":"        tmp_measures \u003d {}"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"        def add_to_measures(name, comp, data):"},{"line_number":178,"context_line":"            if name in tmp_measures:"},{"line_number":179,"context_line":"                tmp_measures[name] +\u003d data"},{"line_number":180,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":7,"id":"7ffa3b31_16a1b794","line":177,"updated":"2017-04-21 06:04:10.000000000","message":"If we move the object deletion before omap.\n\nHere, we should check at comp.get_return_value() or check at \"data is None\" \n\nFor comp.get_return_value(), if negative, it\u0027s the errno, if positive the length of data. \n\nTo get the exception:\n\n    if rados.errno_to_exception[comp.get_return_value()] \u003d\u003d rados.ObjectNotFound:","commit_id":"0df19297a39378f718771e01266192957a20dde1"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"1e2e285a5b36d0137ddbc36c70ee261dba873c02","unresolved":false,"context_lines":[{"line_number":174,"context_line":""},{"line_number":175,"context_line":"        tmp_measures \u003d {}"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"        def add_to_measures(name, comp, data):"},{"line_number":178,"context_line":"            if name in tmp_measures:"},{"line_number":179,"context_line":"                tmp_measures[name] +\u003d data"},{"line_number":180,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":7,"id":"7ffa3b31_ec18ba1e","line":177,"in_reply_to":"7ffa3b31_16a1b794","updated":"2017-04-21 07:38:28.000000000","message":"Thanks!","commit_id":"0df19297a39378f718771e01266192957a20dde1"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"91f18e36ed0a4b60d75ef265799774e606a38e8b","unresolved":false,"context_lines":[{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    def delete_unprocessed_measures_for_metric_id(self, metric_id):"},{"line_number":135,"context_line":"        object_prefix \u003d self.MEASURE_PREFIX + \"_\" + str(metric_id)"},{"line_number":136,"context_line":"        object_names \u003d self._list_object_names_to_process(object_prefix)"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        if not object_names:"},{"line_number":139,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":11,"id":"5ff73747_06f5bbcb","line":136,"range":{"start_line":136,"start_character":28,"end_line":136,"end_character":57},"updated":"2017-04-22 17:14:26.000000000","message":"This returns a generator, so first iteration empties the list and then tuple(object_names) returns an empty tuple.","commit_id":"8ae2413d04b4158490b6d84d9ed345bae24b4d5f"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"f16fe6e40c011b2ad8f836c574f92902115ceed9","unresolved":false,"context_lines":[{"line_number":152,"context_line":"    @contextlib.contextmanager"},{"line_number":153,"context_line":"    def process_measure_for_metric(self, metric):"},{"line_number":154,"context_line":"        object_prefix \u003d self.MEASURE_PREFIX + \"_\" + str(metric.id)"},{"line_number":155,"context_line":"        object_names \u003d list(self._list_object_names_to_process(object_prefix))"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        measures \u003d []"},{"line_number":158,"context_line":"        ops \u003d []"}],"source_content_type":"text/x-python","patch_set":12,"id":"5ff73747_d1d2e634","line":155,"range":{"start_line":155,"start_character":23,"end_line":155,"end_character":27},"updated":"2017-04-24 07:11:38.000000000","message":"We could use tuple here too, to avoid gen-\u003elist-\u003etuple conversion.","commit_id":"e616dfc42a5972040608a38020d38b2cd330defc"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"52376a0a51059d34b8ca82b5a009be7fb0603605","unresolved":false,"context_lines":[{"line_number":167,"context_line":"            if ret \u003c 0:"},{"line_number":168,"context_line":"                exc \u003d rados.errno_to_exception[abs(ret)]"},{"line_number":169,"context_line":"                if exc \u003d\u003d rados.ObjectNotFound:"},{"line_number":170,"context_line":"                    # Object has been deleted, so this is just a stalled entry"},{"line_number":171,"context_line":"                    # in the OMAP listing, ignore"},{"line_number":172,"context_line":"                    return"},{"line_number":173,"context_line":"                # This is not an \"expected\" error, raise it back"}],"source_content_type":"text/x-python","patch_set":13,"id":"5ff73747_74f525cb","line":170,"range":{"start_line":170,"start_character":65,"end_line":170,"end_character":72},"updated":"2017-04-24 21:51:33.000000000","message":"stale","commit_id":"a9b4e485eb2b64b6b787809d236cb815941c9ab7"}]}
