)]}'
{"gnocchi/storage/incoming/_carbonara.py":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"2277879f364604824f788d1ce1bbf22df0b00134","unresolved":false,"context_lines":[{"line_number":52,"context_line":"            *list(itertools.chain.from_iterable(measures)))"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def add_measures_batch(self, metrics_and_measures):"},{"line_number":55,"context_line":"        for metric, measures in six.iteritems(metrics_and_measures):"},{"line_number":56,"context_line":"            self._store_new_measures("},{"line_number":57,"context_line":"                metric, self._encode_measures(measures))"},{"line_number":58,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"5ff73747_8a69aebf","line":55,"updated":"2017-04-24 18:09:30.000000000","message":"i think we should still leverage threads for other drivers.","commit_id":"cf341aea0103e17054a500195284bc6ae183d1b7"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"7216d5c880d0f3ad22e1819b6ea0fc47241cd105","unresolved":false,"context_lines":[{"line_number":52,"context_line":"            *list(itertools.chain.from_iterable(measures)))"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def add_measures_batch(self, metrics_and_measures):"},{"line_number":55,"context_line":"        for metric, measures in six.iteritems(metrics_and_measures):"},{"line_number":56,"context_line":"            self._store_new_measures("},{"line_number":57,"context_line":"                metric, self._encode_measures(measures))"},{"line_number":58,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"5ff73747_9bab341c","line":55,"in_reply_to":"5ff73747_8a69aebf","updated":"2017-04-25 07:55:08.000000000","message":"Done","commit_id":"cf341aea0103e17054a500195284bc6ae183d1b7"}],"gnocchi/storage/incoming/ceph.py":[{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"5e2c63100e334219453377d6c0e25a76945a76a4","unresolved":false,"context_lines":[{"line_number":71,"context_line":"                # So we create an object MEASURE_PREFIX, that have as"},{"line_number":72,"context_line":"                # omap the list of objects to process (not xattr because"},{"line_number":73,"context_line":"                # it doesn\u0027t # allow to configure the locking behavior)"},{"line_number":74,"context_line":"                self.ioctx.set_omap(op, (name,), (b\"\",))"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"            self.ioctx.operate_write_op(op, self.MEASURE_PREFIX,"},{"line_number":77,"context_line":"                                        flags\u003dself.OMAP_WRITE_FLAGS)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5ff73747_04511c37","line":74,"range":{"start_line":74,"start_character":16,"end_line":74,"end_character":48},"updated":"2017-04-24 15:01:02.000000000","message":"I think librados is really dump, if you prepare a tuple with all names and only call set_omap once it performs better.","commit_id":"5726cc4e2b5d8f4c9e833b840a93b3f871b48fe0"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"2277879f364604824f788d1ce1bbf22df0b00134","unresolved":false,"context_lines":[{"line_number":65,"context_line":"                datetime.datetime.utcnow().strftime(\"%Y%m%d_%H:%M:%S\")))"},{"line_number":66,"context_line":"            names.append(name)"},{"line_number":67,"context_line":"            data \u003d self._encode_measures(measures)"},{"line_number":68,"context_line":"            self.ioctx.write_full(name, data)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        with rados.WriteOpCtx() as op:"},{"line_number":71,"context_line":"            # NOTE(sileht): list all objects in a pool is too slow with"}],"source_content_type":"text/x-python","patch_set":2,"id":"5ff73747_eaedd225","line":68,"updated":"2017-04-24 18:09:30.000000000","message":"do you have benchmarks for this? we seem to be making the exact same number of object writes except now sequentially rather than in \u0027parallel\u0027\n\nis omap writes that slow?\n\nalso, i do have a concern that we can effectively write a metric but it can be lost if a subsequent metric fails.","commit_id":"cf341aea0103e17054a500195284bc6ae183d1b7"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"7216d5c880d0f3ad22e1819b6ea0fc47241cd105","unresolved":false,"context_lines":[{"line_number":65,"context_line":"                datetime.datetime.utcnow().strftime(\"%Y%m%d_%H:%M:%S\")))"},{"line_number":66,"context_line":"            names.append(name)"},{"line_number":67,"context_line":"            data \u003d self._encode_measures(measures)"},{"line_number":68,"context_line":"            self.ioctx.write_full(name, data)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        with rados.WriteOpCtx() as op:"},{"line_number":71,"context_line":"            # NOTE(sileht): list all objects in a pool is too slow with"}],"source_content_type":"text/x-python","patch_set":2,"id":"5ff73747_3b366005","line":68,"in_reply_to":"5ff73747_eaedd225","updated":"2017-04-25 07:55:08.000000000","message":"The idea comes from Alex Krzos who did perf tests, you can read his analysis here https://bugzilla.redhat.com/show_bug.cgi?id\u003d1444541\n\nAbout your concern, the only bad thing that can happen is stalled objects. This is already the case because object writing cannot be in a \"session\" contrary to OMAP updates. So no new problem here, and just a stall object issue, potentially.","commit_id":"cf341aea0103e17054a500195284bc6ae183d1b7"}]}
