)]}'
{"gnocchi/rest/__init__.py":[{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"4c1b5349d6431f4a82a146ee50ae7b56cb22c54d","unresolved":false,"context_lines":[{"line_number":122,"context_line":"    @property"},{"line_number":123,"context_line":"    def granularity(self):"},{"line_number":124,"context_line":"        if self._granularity is None:"},{"line_number":125,"context_line":"            self._granularity \u003d self._timespan / float(self._points)"},{"line_number":126,"context_line":"        return self._granularity"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":5,"id":"baa201ad_92567b5a","line":125,"updated":"2014-10-09 10:05:20.000000000","message":"I\u0027m confused by the cast to float here, as I expected granularity always to be a whole number of seconds.\n\nMaybe the validation logic in ArchivePolicyItem.__init__() should also ensure that the timespan is an exact multiple of the points value if both are set? (similarly that the timespan is an exact multiple of the granularity if both are set)","commit_id":"9a968d8ec56949fec1be6b3762af2184c4df2c44"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"5c5cf27e2f0e950b0da1befc622d857fcf8560c8","unresolved":false,"context_lines":[{"line_number":122,"context_line":"    @property"},{"line_number":123,"context_line":"    def granularity(self):"},{"line_number":124,"context_line":"        if self._granularity is None:"},{"line_number":125,"context_line":"            self._granularity \u003d self._timespan / float(self._points)"},{"line_number":126,"context_line":"        return self._granularity"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":5,"id":"baa201ad_93a017a7","line":125,"in_reply_to":"baa201ad_92567b5a","updated":"2014-10-10 16:20:12.000000000","message":"Yes, you\u0027re right. I\u0027m now rounding the granularity.","commit_id":"9a968d8ec56949fec1be6b3762af2184c4df2c44"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"1fdc2f54a83bad3c27d8ff51927f71964a3fcfac","unresolved":false,"context_lines":[{"line_number":126,"context_line":""},{"line_number":127,"context_line":"        self.points \u003d points"},{"line_number":128,"context_line":"        self.granularity \u003d granularity"},{"line_number":129,"context_line":"        self.timespan \u003d granularity * points"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    def to_dict(self):"},{"line_number":132,"context_line":"        return {"}],"source_content_type":"text/x-python","patch_set":6,"id":"baa201ad_c8a80cde","line":129,"updated":"2014-10-13 11:14:09.000000000","message":"A-ha, so we now ensure the (points, granularity, timespan) are always internally consistent by adjusting the timespan?","commit_id":"271edd5e2bff23bb04f773e10149206e64b3e9b5"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"40aa80c62fce1e84f8f2fa2d75c1ee09d14328cb","unresolved":false,"context_lines":[{"line_number":126,"context_line":""},{"line_number":127,"context_line":"        self.points \u003d points"},{"line_number":128,"context_line":"        self.granularity \u003d granularity"},{"line_number":129,"context_line":"        self.timespan \u003d granularity * points"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    def to_dict(self):"},{"line_number":132,"context_line":"        return {"}],"source_content_type":"text/x-python","patch_set":6,"id":"baa201ad_34c80d74","line":129,"in_reply_to":"baa201ad_c8a80cde","updated":"2014-10-13 14:09:09.000000000","message":"Yes, this is actually what happens in reality, at least with the current Swift/Carbonara driver. The only things used by the driver is how many points every how many seconds, which determines the timespan.\n\nSo since neither of these (points/granularity) can be floating numbers, we compute them and then reset the timespan to what we rounded to.","commit_id":"271edd5e2bff23bb04f773e10149206e64b3e9b5"}]}
