)]}'
{"gnocchi/carbonara.py":[{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"5e7334b70c7771c2fc45356c601b4459008bf52a","unresolved":false,"context_lines":[{"line_number":343,"context_line":"        for group, ts in groupby:"},{"line_number":344,"context_line":"            yield (self._split_key_to_string(group),"},{"line_number":345,"context_line":"                   AggregatedTimeSerie(self.sampling, self.aggregation_method,"},{"line_number":346,"context_line":"                                       ts))"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"    @classmethod"},{"line_number":349,"context_line":"    def from_timeseries(cls, timeseries, sampling, aggregation_method,"}],"source_content_type":"text/x-python","patch_set":14,"id":"dada55a8_e65549fa","line":346,"updated":"2016-07-20 15:23:05.000000000","message":"should we add max_size\u003dself.POINTS_PER_SPLIT?","commit_id":"519efa8bb21051f715bdd59c19f4703ac739c8c5"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"867c5c5902210e1ec74a071ce76df5b3dfbac29b","unresolved":false,"context_lines":[{"line_number":343,"context_line":"        for group, ts in groupby:"},{"line_number":344,"context_line":"            yield (self._split_key_to_string(group),"},{"line_number":345,"context_line":"                   AggregatedTimeSerie(self.sampling, self.aggregation_method,"},{"line_number":346,"context_line":"                                       ts))"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"    @classmethod"},{"line_number":349,"context_line":"    def from_timeseries(cls, timeseries, sampling, aggregation_method,"}],"source_content_type":"text/x-python","patch_set":14,"id":"dada55a8_32714d77","line":346,"in_reply_to":"dada55a8_e65549fa","updated":"2016-07-20 18:41:25.000000000","message":"i left it off since the result is only use for serialization... i could put in the max_size but it\u0027s not entirely accurate since it\u0027s max size of entire series and not split.","commit_id":"519efa8bb21051f715bdd59c19f4703ac739c8c5"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"5e7334b70c7771c2fc45356c601b4459008bf52a","unresolved":false,"context_lines":[{"line_number":380,"context_line":"        :param d: The dict."},{"line_number":381,"context_line":"        :returns: A TimeSerie object"},{"line_number":382,"context_line":"        \"\"\""},{"line_number":383,"context_line":"        # FIXME(gordc): this is never really used except in TimeSerieArchive"},{"line_number":384,"context_line":"        timestamps, values \u003d cls._timestamps_and_values_from_dict(d[\u0027values\u0027])"},{"line_number":385,"context_line":"        return cls.from_data("},{"line_number":386,"context_line":"            sampling\u003dd.get(\u0027sampling\u0027),"}],"source_content_type":"text/x-python","patch_set":14,"id":"dada55a8_465ed512","line":383,"updated":"2016-07-20 15:23:05.000000000","message":"Not sure how this is relevant :)\n\nMaybe you meant in the upgrade path or something?","commit_id":"519efa8bb21051f715bdd59c19f4703ac739c8c5"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"867c5c5902210e1ec74a071ce76df5b3dfbac29b","unresolved":false,"context_lines":[{"line_number":380,"context_line":"        :param d: The dict."},{"line_number":381,"context_line":"        :returns: A TimeSerie object"},{"line_number":382,"context_line":"        \"\"\""},{"line_number":383,"context_line":"        # FIXME(gordc): this is never really used except in TimeSerieArchive"},{"line_number":384,"context_line":"        timestamps, values \u003d cls._timestamps_and_values_from_dict(d[\u0027values\u0027])"},{"line_number":385,"context_line":"        return cls.from_data("},{"line_number":386,"context_line":"            sampling\u003dd.get(\u0027sampling\u0027),"}],"source_content_type":"text/x-python","patch_set":14,"id":"dada55a8_74bc5506","line":383,"in_reply_to":"dada55a8_465ed512","updated":"2016-07-20 18:41:25.000000000","message":"i actually remove this later on when i remove timeseriearchive completely","commit_id":"519efa8bb21051f715bdd59c19f4703ac739c8c5"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"5e7334b70c7771c2fc45356c601b4459008bf52a","unresolved":false,"context_lines":[{"line_number":417,"context_line":"    def serialize(self):"},{"line_number":418,"context_line":"        if not self.ts.index.is_monotonic:"},{"line_number":419,"context_line":"            self.ts \u003d self.ts.sort_index()"},{"line_number":420,"context_line":"        offset_div \u003d self.sampling * 10e8"},{"line_number":421,"context_line":"        start \u003d float(self.get_split_key(self.first, self.sampling)) * 10e8"},{"line_number":422,"context_line":"        e_offset \u003d int((self.last.value - start) // (self.sampling * 10e8)) + 1"},{"line_number":423,"context_line":"        serial \u003d [False] * e_offset * 2"},{"line_number":424,"context_line":"        for i, v in self.ts.iteritems():"},{"line_number":425,"context_line":"            loc \u003d int((i.value - start) // offset_div)"},{"line_number":426,"context_line":"            serial[loc * 2] \u003d True"},{"line_number":427,"context_line":"            serial[loc * 2 + 1] \u003d float(v)"},{"line_number":428,"context_line":"        return lz4.dumps(struct.pack(\u0027\u003c\u0027 + \u0027?d\u0027 * e_offset, *serial))"},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"    def _truncate(self, quick\u003dFalse):"},{"line_number":431,"context_line":"        \"\"\"Truncate the timeserie.\"\"\""}],"source_content_type":"text/x-python","patch_set":14,"id":"dada55a8_26c76197","line":428,"range":{"start_line":420,"start_character":8,"end_line":428,"end_character":69},"updated":"2016-07-20 15:23:05.000000000","message":"I know you wrote some explanation in the commit message, but would you mind explaining the final format that you build here? It\u0027ll help future hackers.","commit_id":"519efa8bb21051f715bdd59c19f4703ac739c8c5"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"867c5c5902210e1ec74a071ce76df5b3dfbac29b","unresolved":false,"context_lines":[{"line_number":417,"context_line":"    def serialize(self):"},{"line_number":418,"context_line":"        if not self.ts.index.is_monotonic:"},{"line_number":419,"context_line":"            self.ts \u003d self.ts.sort_index()"},{"line_number":420,"context_line":"        offset_div \u003d self.sampling * 10e8"},{"line_number":421,"context_line":"        start \u003d float(self.get_split_key(self.first, self.sampling)) * 10e8"},{"line_number":422,"context_line":"        e_offset \u003d int((self.last.value - start) // (self.sampling * 10e8)) + 1"},{"line_number":423,"context_line":"        serial \u003d [False] * e_offset * 2"},{"line_number":424,"context_line":"        for i, v in self.ts.iteritems():"},{"line_number":425,"context_line":"            loc \u003d int((i.value - start) // offset_div)"},{"line_number":426,"context_line":"            serial[loc * 2] \u003d True"},{"line_number":427,"context_line":"            serial[loc * 2 + 1] \u003d float(v)"},{"line_number":428,"context_line":"        return lz4.dumps(struct.pack(\u0027\u003c\u0027 + \u0027?d\u0027 * e_offset, *serial))"},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"    def _truncate(self, quick\u003dFalse):"},{"line_number":431,"context_line":"        \"\"\"Truncate the timeserie.\"\"\""}],"source_content_type":"text/x-python","patch_set":14,"id":"dada55a8_120d29e8","line":428,"range":{"start_line":420,"start_character":8,"end_line":428,"end_character":69},"in_reply_to":"dada55a8_26c76197","updated":"2016-07-20 18:41:25.000000000","message":"sure.","commit_id":"519efa8bb21051f715bdd59c19f4703ac739c8c5"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"d7a420d926f1438521f37e71c997be82e1409702","unresolved":false,"context_lines":[{"line_number":378,"context_line":"        x, y \u003d [], []"},{"line_number":379,"context_line":"        start \u003d float(start)"},{"line_number":380,"context_line":"        decompress \u003d lz4.loads(data)"},{"line_number":381,"context_line":"        v_len \u003d len(decompress) // 9"},{"line_number":382,"context_line":"        # NOTE(gordc): use \u0027\u003c\u0027 for standardized, little-endian byte order."},{"line_number":383,"context_line":"        deserial \u003d struct.unpack(\u0027\u003c\u0027 + \u0027?d\u0027 * v_len, decompress)"},{"line_number":384,"context_line":"        # alternating split into 2 list and drop items with False flag"}],"source_content_type":"text/x-python","patch_set":21,"id":"bacf61ea_8205877b","line":381,"range":{"start_line":381,"start_character":35,"end_line":381,"end_character":36},"updated":"2016-07-29 09:19:24.000000000","message":"hint: I think in the next patch you\u0027ll move that to a class variable, so maybe do it now ;)","commit_id":"ddd6439943b9d28d75c0ce19014e19ba31985e36"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"fd5f026e4a96730ca8ad9f8aabbd1e7a7f4ec0c2","unresolved":false,"context_lines":[{"line_number":390,"context_line":"        y \u003d pandas.to_datetime(y, unit\u003d\u0027s\u0027)"},{"line_number":391,"context_line":"        return cls.from_data(sampling, agg_method, y, x)"},{"line_number":392,"context_line":""},{"line_number":393,"context_line":"    def serialize(self, start\u003dNone):"},{"line_number":394,"context_line":"        # NOTE(gordc): this binary serializes series based on the split time."},{"line_number":395,"context_line":"        # the format is 1B True/False flag which denotes whether subsequent 8B"},{"line_number":396,"context_line":"        # is a real float or zero padding. every 9B represents one second from"}],"source_content_type":"text/x-python","patch_set":21,"id":"bacf61ea_bcd98024","line":393,"updated":"2016-08-01 10:06:15.000000000","message":"We\u0027re gonna need two different paths here.\n\nI understand that this serialization format is the way to go for Ceph as you want to append [True/False, float]. But for better compression schema like Gorilla encoding, we\u0027re gonna need something more like [[True/False…], [floats…]] or [[offsets from start…], [floats…]] like I originally wrote.\n\nSo we need to take that into account if we want to have the best for 2 worlds.","commit_id":"ddd6439943b9d28d75c0ce19014e19ba31985e36"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"cda5601ab7c0fe0e8d6d21fa687a864b00e41f76","unresolved":false,"context_lines":[{"line_number":390,"context_line":"        y \u003d pandas.to_datetime(y, unit\u003d\u0027s\u0027)"},{"line_number":391,"context_line":"        return cls.from_data(sampling, agg_method, y, x)"},{"line_number":392,"context_line":""},{"line_number":393,"context_line":"    def serialize(self, start\u003dNone):"},{"line_number":394,"context_line":"        # NOTE(gordc): this binary serializes series based on the split time."},{"line_number":395,"context_line":"        # the format is 1B True/False flag which denotes whether subsequent 8B"},{"line_number":396,"context_line":"        # is a real float or zero padding. every 9B represents one second from"}],"source_content_type":"text/x-python","patch_set":21,"id":"bacf61ea_9cb620f7","line":393,"in_reply_to":"bacf61ea_bcd98024","updated":"2016-08-01 18:14:01.000000000","message":"I (partially?) remove what I said here. It does matter for Gorilla, but after spending a while trying to improve it, it\u0027ll never be as fast as LZ4 (at least in Python/Cython) so let\u0027s not worry too much.\n\nI also checked: compressing [[True/False…], [timestamps…]] compress down 5% better than [[True/False, timestamp], [True/False, timestamp]] with LZ4.\nBut I don\u0027t think it\u0027s worth it in our case to special case this.","commit_id":"ddd6439943b9d28d75c0ce19014e19ba31985e36"}],"gnocchi/storage/file.py":[{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"5e7334b70c7771c2fc45356c601b4459008bf52a","unresolved":false,"context_lines":[{"line_number":218,"context_line":"            raise"},{"line_number":219,"context_line":"        keys \u003d []"},{"line_number":220,"context_line":"        for f in files:"},{"line_number":221,"context_line":"            meta \u003d f.split(\"_\")"},{"line_number":222,"context_line":"            if meta[1] \u003d\u003d str(granularity):"},{"line_number":223,"context_line":"                keys.append(meta[0])"},{"line_number":224,"context_line":"        return keys"}],"source_content_type":"text/x-python","patch_set":14,"id":"dada55a8_759a9c6f","line":221,"range":{"start_line":221,"start_character":27,"end_line":221,"end_character":30},"updated":"2016-07-20 15:23:05.000000000","message":"would be cool to call that self.VERSION_SEPARATOR so it\u0027s clearer (and use it everywhere)","commit_id":"519efa8bb21051f715bdd59c19f4703ac739c8c5"}],"gnocchi/tests/storage/test_carbonara.py":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"c99e815152032b6e5cd63e1e2a70a0aff7cf0c34","unresolved":false,"context_lines":[{"line_number":73,"context_line":"            f.return_value \u003d [self.metric]"},{"line_number":74,"context_line":"            self.storage.upgrade(self.index)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    def test_get_measures(self):"},{"line_number":77,"context_line":"        with mock.patch.object("},{"line_number":78,"context_line":"                self.storage, \u0027_get_measures_and_unserialize\u0027,"},{"line_number":79,"context_line":"                side_effect\u003dself.storage._get_measures_and_unserialize_v2):"}],"source_content_type":"text/x-python","patch_set":22,"id":"bacf61ea_37a8098c","line":76,"updated":"2016-08-05 13:19:20.000000000","message":"the migration test is here. it\u0027s the same as previous test but it\u0027s been modified to handle v2 to v3 rather than v1.3 to v2.\n\nwe can also wait for grenade stuff but i don\u0027t know status on that.","commit_id":"970aa60ef903ddfc26edd3ac5761357ed7277380"}]}
