)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":688,"name":"Sandy Walsh","email":"sandy.walsh@rackspace.com","username":"sandy-walsh"},"change_message_id":"42d588ad06cf5db65e99a698e1bc3a5099efb7ec","unresolved":false,"context_lines":[{"line_number":15,"context_line":"remove sample according the \u0027database_time_to_live\u0027"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"If the backend support ttl natively (mongodb \u003e\u003d 2.2 or hbase), the cleanup"},{"line_number":18,"context_line":"fonction in the backend is just a dump, and the backend handle the ttl itself."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"If the backend doesn\u0027t support ttl at all, it raise a"},{"line_number":21,"context_line":"NotImplementedException catched by collector to fill the log correctly."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"AAAAPH%2F%2Fgzc%3D","line":18,"updated":"2013-05-31 16:26:01.000000000","message":"\"function\"\n\"handles\"","commit_id":"47baa026b86683a73af407ca403d09ed40a14321"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"e53dba91c7e6a32b1dc624b372e0d6943ec7c4a5","unresolved":false,"context_lines":[{"line_number":15,"context_line":"remove sample according the \u0027database_time_to_live\u0027"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"If the backend support ttl natively (mongodb \u003e\u003d 2.2 or hbase), the cleanup"},{"line_number":18,"context_line":"fonction in the backend is just a dump, and the backend handle the ttl itself."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"If the backend doesn\u0027t support ttl at all, it raise a"},{"line_number":21,"context_line":"NotImplementedException catched by collector to fill the log correctly."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"AAAAPH%2F%2FdtI%3D","line":18,"in_reply_to":"AAAAPH%2F%2Fgzc%3D","updated":"2013-06-03 12:52:33.000000000","message":"Done","commit_id":"47baa026b86683a73af407ca403d09ed40a14321"},{"author":{"_account_id":688,"name":"Sandy Walsh","email":"sandy.walsh@rackspace.com","username":"sandy-walsh"},"change_message_id":"42d588ad06cf5db65e99a698e1bc3a5099efb7ec","unresolved":false,"context_lines":[{"line_number":17,"context_line":"If the backend support ttl natively (mongodb \u003e\u003d 2.2 or hbase), the cleanup"},{"line_number":18,"context_line":"fonction in the backend is just a dump, and the backend handle the ttl itself."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"If the backend doesn\u0027t support ttl at all, it raise a"},{"line_number":21,"context_line":"NotImplementedException catched by collector to fill the log correctly."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Change-Id: I869ce6f50065d0ae8d7095a260efbfcd33165eef"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"AAAAPH%2F%2FgzQ%3D","line":20,"updated":"2013-05-31 16:26:01.000000000","message":"\"it will\"","commit_id":"47baa026b86683a73af407ca403d09ed40a14321"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"e53dba91c7e6a32b1dc624b372e0d6943ec7c4a5","unresolved":false,"context_lines":[{"line_number":17,"context_line":"If the backend support ttl natively (mongodb \u003e\u003d 2.2 or hbase), the cleanup"},{"line_number":18,"context_line":"fonction in the backend is just a dump, and the backend handle the ttl itself."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"If the backend doesn\u0027t support ttl at all, it raise a"},{"line_number":21,"context_line":"NotImplementedException catched by collector to fill the log correctly."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Change-Id: I869ce6f50065d0ae8d7095a260efbfcd33165eef"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"AAAAPH%2F%2FdtE%3D","line":20,"in_reply_to":"AAAAPH%2F%2FgzQ%3D","updated":"2013-06-03 12:52:33.000000000","message":"Done","commit_id":"47baa026b86683a73af407ca403d09ed40a14321"},{"author":{"_account_id":688,"name":"Sandy Walsh","email":"sandy.walsh@rackspace.com","username":"sandy-walsh"},"change_message_id":"42d588ad06cf5db65e99a698e1bc3a5099efb7ec","unresolved":false,"context_lines":[{"line_number":18,"context_line":"fonction in the backend is just a dump, and the backend handle the ttl itself."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"If the backend doesn\u0027t support ttl at all, it raise a"},{"line_number":21,"context_line":"NotImplementedException catched by collector to fill the log correctly."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Change-Id: I869ce6f50065d0ae8d7095a260efbfcd33165eef"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"AAAAPH%2F%2Fgy8%3D","line":21,"updated":"2013-05-31 16:26:01.000000000","message":"\"caught by the\"","commit_id":"47baa026b86683a73af407ca403d09ed40a14321"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"e53dba91c7e6a32b1dc624b372e0d6943ec7c4a5","unresolved":false,"context_lines":[{"line_number":18,"context_line":"fonction in the backend is just a dump, and the backend handle the ttl itself."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"If the backend doesn\u0027t support ttl at all, it raise a"},{"line_number":21,"context_line":"NotImplementedException catched by collector to fill the log correctly."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Change-Id: I869ce6f50065d0ae8d7095a260efbfcd33165eef"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"AAAAPH%2F%2Fds4%3D","line":21,"in_reply_to":"AAAAPH%2F%2Fgy8%3D","updated":"2013-06-03 12:52:33.000000000","message":"Done","commit_id":"47baa026b86683a73af407ca403d09ed40a14321"}],"ceilometer/collector/service.py":[{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"7ce7b613487c414847b90f88f223776dbe83bd77","unresolved":false,"context_lines":[{"line_number":61,"context_line":"in the database (\u003c\u003d 0 means unlimited)\u0027),"},{"line_number":62,"context_line":"    #note(sileht): latest olso have the sexy periodic_task.periodic_task"},{"line_number":63,"context_line":"    # decorator this can allow to use easyly use seconds instead ticks"},{"line_number":64,"context_line":"    # of periodic_interval"},{"line_number":65,"context_line":"    cfg.IntOpt(\u0027database_clear_expired_data_interval\u0027,"},{"line_number":66,"context_line":"               default\u003d1,"},{"line_number":67,"context_line":"               help\u003d\u0027number of ticks of \\\"periodic_interval\\\" to wait before \\"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2Fm5Q%3D","line":64,"updated":"2013-05-29 13:27:28.000000000","message":"We\u0027ve updated to latest oslo.","commit_id":"e94ac6cf29555ac8ed4627534419b5d3571cdec9"},{"author":{"_account_id":4715,"name":"Angus Salkeld","email":"asalkeld@redhat.com","username":"asalkeld"},"change_message_id":"2219e75cf5bddafabb00f0c2462a052ba81e4582","unresolved":false,"context_lines":[{"line_number":240,"context_line":"                    \u0027message signature invalid, discarding message: %r\u0027,"},{"line_number":241,"context_line":"                    meter)"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"    def periodic_tasks(self, context):"},{"line_number":244,"context_line":"        if not hasattr(self, \u0027storage_conn\u0027):"},{"line_number":245,"context_line":"            #note(sileht): not really sexy but rpc service not yet started"},{"line_number":246,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2FlRE%3D","line":243,"updated":"2013-05-30 00:00:31.000000000","message":"You don\u0027t have to use periodic_tasks at all. Just use the add_timer() directly - because that is what you want - an actual timer?\n\n    admin_context \u003d context.RequestContext(\u0027admin\u0027, \u0027admin\u0027, is_admin\u003dTrue)\n    self.tg.add_timer(cfg.CONF.database_time_to_live,\n                             self.manager.sample_reaper,\n                             context\u003dadmin_context)","commit_id":"e94ac6cf29555ac8ed4627534419b5d3571cdec9"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"f07e5366dd6174b1412df97e7404f57c47db67e9","unresolved":false,"context_lines":[{"line_number":240,"context_line":"                    \u0027message signature invalid, discarding message: %r\u0027,"},{"line_number":241,"context_line":"                    meter)"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"    def periodic_tasks(self, context):"},{"line_number":244,"context_line":"        if not hasattr(self, \u0027storage_conn\u0027):"},{"line_number":245,"context_line":"            #note(sileht): not really sexy but rpc service not yet started"},{"line_number":246,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2FkoU%3D","line":243,"in_reply_to":"AAAAPH%2F%2FlRE%3D","updated":"2013-05-30 10:03:07.000000000","message":"Done","commit_id":"e94ac6cf29555ac8ed4627534419b5d3571cdec9"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"7ce7b613487c414847b90f88f223776dbe83bd77","unresolved":false,"context_lines":[{"line_number":243,"context_line":"    def periodic_tasks(self, context):"},{"line_number":244,"context_line":"        if not hasattr(self, \u0027storage_conn\u0027):"},{"line_number":245,"context_line":"            #note(sileht): not really sexy but rpc service not yet started"},{"line_number":246,"context_line":"            return"},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"        if cfg.CONF.collector.database_time_to_live \u003c\u003d 0:"},{"line_number":249,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2Fm4c%3D","line":246,"updated":"2013-05-29 13:27:28.000000000","message":"What if you move self.storage_conn in __init__ before super() ?","commit_id":"e94ac6cf29555ac8ed4627534419b5d3571cdec9"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"f07e5366dd6174b1412df97e7404f57c47db67e9","unresolved":false,"context_lines":[{"line_number":243,"context_line":"    def periodic_tasks(self, context):"},{"line_number":244,"context_line":"        if not hasattr(self, \u0027storage_conn\u0027):"},{"line_number":245,"context_line":"            #note(sileht): not really sexy but rpc service not yet started"},{"line_number":246,"context_line":"            return"},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"        if cfg.CONF.collector.database_time_to_live \u003c\u003d 0:"},{"line_number":249,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2FkoQ%3D","line":246,"in_reply_to":"AAAAPH%2F%2Fm4c%3D","updated":"2013-05-30 10:03:07.000000000","message":"New code no more needs this","commit_id":"e94ac6cf29555ac8ed4627534419b5d3571cdec9"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"ec7d7b771d1b34282b266ec8775698608bcefac6","unresolved":false,"context_lines":[{"line_number":61,"context_line":"in the database (\u003c\u003d 0 means unlimited)\u0027),"},{"line_number":62,"context_line":"    cfg.IntOpt(\u0027database_clear_expired_data_interval\u0027,"},{"line_number":63,"context_line":"               default\u003d600,"},{"line_number":64,"context_line":"               help\u003d\u0027number of seconds to wait before \\"},{"line_number":65,"context_line":"clear expired data (if the database backend support ttl \\"},{"line_number":66,"context_line":"natively this is not used\u0027),"},{"line_number":67,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2FhSo%3D","line":64,"updated":"2013-05-31 11:54:07.000000000","message":"There\u0027s a database group created by Oslo, that should go in there.","commit_id":"47baa026b86683a73af407ca403d09ed40a14321"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"e53dba91c7e6a32b1dc624b372e0d6943ec7c4a5","unresolved":false,"context_lines":[{"line_number":61,"context_line":"in the database (\u003c\u003d 0 means unlimited)\u0027),"},{"line_number":62,"context_line":"    cfg.IntOpt(\u0027database_clear_expired_data_interval\u0027,"},{"line_number":63,"context_line":"               default\u003d600,"},{"line_number":64,"context_line":"               help\u003d\u0027number of seconds to wait before \\"},{"line_number":65,"context_line":"clear expired data (if the database backend support ttl \\"},{"line_number":66,"context_line":"natively this is not used\u0027),"},{"line_number":67,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2Fdsw%3D","line":64,"in_reply_to":"AAAAPH%2F%2FhSo%3D","updated":"2013-06-03 12:52:33.000000000","message":"Done","commit_id":"47baa026b86683a73af407ca403d09ed40a14321"},{"author":{"_account_id":688,"name":"Sandy Walsh","email":"sandy.walsh@rackspace.com","username":"sandy-walsh"},"change_message_id":"42d588ad06cf5db65e99a698e1bc3a5099efb7ec","unresolved":false,"context_lines":[{"line_number":62,"context_line":"    cfg.IntOpt(\u0027database_clear_expired_data_interval\u0027,"},{"line_number":63,"context_line":"               default\u003d600,"},{"line_number":64,"context_line":"               help\u003d\u0027number of seconds to wait before \\"},{"line_number":65,"context_line":"clear expired data (if the database backend support ttl \\"},{"line_number":66,"context_line":"natively this is not used\u0027),"},{"line_number":67,"context_line":"]"},{"line_number":68,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2Fgyk%3D","line":65,"updated":"2013-05-31 16:26:01.000000000","message":"\"supports\"","commit_id":"47baa026b86683a73af407ca403d09ed40a14321"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"e53dba91c7e6a32b1dc624b372e0d6943ec7c4a5","unresolved":false,"context_lines":[{"line_number":62,"context_line":"    cfg.IntOpt(\u0027database_clear_expired_data_interval\u0027,"},{"line_number":63,"context_line":"               default\u003d600,"},{"line_number":64,"context_line":"               help\u003d\u0027number of seconds to wait before \\"},{"line_number":65,"context_line":"clear expired data (if the database backend support ttl \\"},{"line_number":66,"context_line":"natively this is not used\u0027),"},{"line_number":67,"context_line":"]"},{"line_number":68,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2Fds0%3D","line":65,"in_reply_to":"AAAAPH%2F%2Fgyk%3D","updated":"2013-06-03 12:52:33.000000000","message":"Done","commit_id":"47baa026b86683a73af407ca403d09ed40a14321"},{"author":{"_account_id":688,"name":"Sandy Walsh","email":"sandy.walsh@rackspace.com","username":"sandy-walsh"},"change_message_id":"42d588ad06cf5db65e99a698e1bc3a5099efb7ec","unresolved":false,"context_lines":[{"line_number":141,"context_line":"            self.tg.add_timer("},{"line_number":142,"context_line":"                cfg.CONF.collector.database_clear_expired_data_interval,"},{"line_number":143,"context_line":"                self.clear_expired_metering_data,"},{"line_number":144,"context_line":"                context\u003dadmin_context)"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    def initialize_service_hook(self, service):"},{"line_number":147,"context_line":"        \u0027\u0027\u0027Consumers must be declared before consume_thread start.\u0027\u0027\u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2Fgdo%3D","line":144,"updated":"2013-05-31 16:26:01.000000000","message":"Should be a test for this to ensure the timer was added.","commit_id":"47baa026b86683a73af407ca403d09ed40a14321"},{"author":{"_account_id":688,"name":"Sandy Walsh","email":"sandy.walsh@rackspace.com","username":"sandy-walsh"},"change_message_id":"42d588ad06cf5db65e99a698e1bc3a5099efb7ec","unresolved":false,"context_lines":[{"line_number":251,"context_line":"            LOG.debug(\"clearing expired metering data\")"},{"line_number":252,"context_line":"            self.storage_conn.clear_expired_metering_data("},{"line_number":253,"context_line":"                cfg.CONF.collector.database_time_to_live)"},{"line_number":254,"context_line":"        except NotImplementedError:"},{"line_number":255,"context_line":"            LOG.exception(\"database_time_to_live \u003e 0 but database \" +"},{"line_number":256,"context_line":"                          \"backend doesn\u0027t support it\")"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2FgyU%3D","line":254,"updated":"2013-05-31 16:26:01.000000000","message":"Why even catch it? Let it bubble up to caller.","commit_id":"47baa026b86683a73af407ca403d09ed40a14321"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"e53dba91c7e6a32b1dc624b372e0d6943ec7c4a5","unresolved":false,"context_lines":[{"line_number":251,"context_line":"            LOG.debug(\"clearing expired metering data\")"},{"line_number":252,"context_line":"            self.storage_conn.clear_expired_metering_data("},{"line_number":253,"context_line":"                cfg.CONF.collector.database_time_to_live)"},{"line_number":254,"context_line":"        except NotImplementedError:"},{"line_number":255,"context_line":"            LOG.exception(\"database_time_to_live \u003e 0 but database \" +"},{"line_number":256,"context_line":"                          \"backend doesn\u0027t support it\")"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2Fdss%3D","line":254,"in_reply_to":"AAAAPH%2F%2FgyU%3D","updated":"2013-06-03 12:52:33.000000000","message":"Done","commit_id":"47baa026b86683a73af407ca403d09ed40a14321"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"ec7d7b771d1b34282b266ec8775698608bcefac6","unresolved":false,"context_lines":[{"line_number":252,"context_line":"            self.storage_conn.clear_expired_metering_data("},{"line_number":253,"context_line":"                cfg.CONF.collector.database_time_to_live)"},{"line_number":254,"context_line":"        except NotImplementedError:"},{"line_number":255,"context_line":"            LOG.exception(\"database_time_to_live \u003e 0 but database \" +"},{"line_number":256,"context_line":"                          \"backend doesn\u0027t support it\")"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2FhSU%3D","line":255,"updated":"2013-05-31 11:54:07.000000000","message":"Not sure exception is the right level here, I\u0027d rather use LOG.error\n\nand use _()","commit_id":"47baa026b86683a73af407ca403d09ed40a14321"}],"ceilometer/storage/__init__.py":[{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"1382bef4be8bed45f9264c7caeeeb0ac581615f2","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"STORAGE_OPTS \u003d ["},{"line_number":48,"context_line":"    cfg.IntOpt(\u0027time_to_live\u0027,"},{"line_number":49,"context_line":"               default\u003d-1,"},{"line_number":50,"context_line":"               help\u003d\"\"\"number of seconds that the sample are kept"},{"line_number":51,"context_line":"in the database (\u003c\u003d 0 means unlimited)\"\"\"),"},{"line_number":52,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAP3%2F%2FyMc%3D","line":49,"updated":"2013-07-11 14:34:31.000000000","message":"Using None as a \"do nothing\" may be cleaner. If that\u0027s possible for a IntOpt, dunnow.","commit_id":"863cc2d14ee3bcbbeed58e7d746445fd1a1d2dec"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"9635da20902694ee8e17b9daba24ac99e6e2858c","unresolved":false,"context_lines":[{"line_number":47,"context_line":"STORAGE_OPTS \u003d ["},{"line_number":48,"context_line":"    cfg.IntOpt(\u0027time_to_live\u0027,"},{"line_number":49,"context_line":"               default\u003d-1,"},{"line_number":50,"context_line":"               help\u003d\"\"\"number of seconds that the sample are kept"},{"line_number":51,"context_line":"in the database (\u003c\u003d 0 means unlimited)\"\"\"),"},{"line_number":52,"context_line":"]"},{"line_number":53,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAP3%2F%2FlQM%3D","line":50,"updated":"2013-07-16 09:50:32.000000000","message":"s/the sample are kept in the database/samples are kept in the database for/","commit_id":"00aa000e4b8bce6cb402361d320158b30218a7e9"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"5ea395c6c2874b7012b5eb219b8b85e9748bf903","unresolved":false,"context_lines":[{"line_number":47,"context_line":"STORAGE_OPTS \u003d ["},{"line_number":48,"context_line":"    cfg.IntOpt(\u0027time_to_live\u0027,"},{"line_number":49,"context_line":"               default\u003d-1,"},{"line_number":50,"context_line":"               help\u003d\"\"\"number of seconds that the sample are kept"},{"line_number":51,"context_line":"in the database (\u003c\u003d 0 means unlimited)\"\"\"),"},{"line_number":52,"context_line":"]"},{"line_number":53,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAP3%2F%2Fkxk%3D","line":50,"in_reply_to":"AAAAP3%2F%2FlQM%3D","updated":"2013-07-16 12:52:17.000000000","message":"Done","commit_id":"00aa000e4b8bce6cb402361d320158b30218a7e9"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"9635da20902694ee8e17b9daba24ac99e6e2858c","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    cfg.IntOpt(\u0027time_to_live\u0027,"},{"line_number":49,"context_line":"               default\u003d-1,"},{"line_number":50,"context_line":"               help\u003d\"\"\"number of seconds that the sample are kept"},{"line_number":51,"context_line":"in the database (\u003c\u003d 0 means unlimited)\"\"\"),"},{"line_number":52,"context_line":"]"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"cfg.CONF.register_opts(STORAGE_OPTS, group\u003d\u0027database\u0027)"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAP3%2F%2FlQQ%3D","line":51,"updated":"2013-07-16 09:50:32.000000000","message":"s/unlimited/forever/","commit_id":"00aa000e4b8bce6cb402361d320158b30218a7e9"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"5ea395c6c2874b7012b5eb219b8b85e9748bf903","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    cfg.IntOpt(\u0027time_to_live\u0027,"},{"line_number":49,"context_line":"               default\u003d-1,"},{"line_number":50,"context_line":"               help\u003d\"\"\"number of seconds that the sample are kept"},{"line_number":51,"context_line":"in the database (\u003c\u003d 0 means unlimited)\"\"\"),"},{"line_number":52,"context_line":"]"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"cfg.CONF.register_opts(STORAGE_OPTS, group\u003d\u0027database\u0027)"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAP3%2F%2Fkxo%3D","line":51,"in_reply_to":"AAAAP3%2F%2FlQQ%3D","updated":"2013-07-16 12:52:17.000000000","message":"Done","commit_id":"00aa000e4b8bce6cb402361d320158b30218a7e9"}],"ceilometer/storage/base.py":[{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"7ce7b613487c414847b90f88f223776dbe83bd77","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        \"\"\""},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    @abc.abstractmethod"},{"line_number":86,"context_line":"    def clear_expired_metering_data(self):"},{"line_number":87,"context_line":"        \"\"\"Clear expired data from the backend storage system"},{"line_number":88,"context_line":"        according cfg.CONF.collector.database_time_to_live."},{"line_number":89,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2Fm4M%3D","line":86,"updated":"2013-05-29 13:27:28.000000000","message":"Maybe addin the ttl as argument would be a good idea, rather than always using CFG.conf.","commit_id":"e94ac6cf29555ac8ed4627534419b5d3571cdec9"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"f07e5366dd6174b1412df97e7404f57c47db67e9","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        \"\"\""},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    @abc.abstractmethod"},{"line_number":86,"context_line":"    def clear_expired_metering_data(self):"},{"line_number":87,"context_line":"        \"\"\"Clear expired data from the backend storage system"},{"line_number":88,"context_line":"        according cfg.CONF.collector.database_time_to_live."},{"line_number":89,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2Fkog%3D","line":86,"in_reply_to":"AAAAPH%2F%2Fm4M%3D","updated":"2013-05-30 10:03:07.000000000","message":"Done","commit_id":"e94ac6cf29555ac8ed4627534419b5d3571cdec9"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"ec7d7b771d1b34282b266ec8775698608bcefac6","unresolved":false,"context_lines":[{"line_number":85,"context_line":"    @abc.abstractmethod"},{"line_number":86,"context_line":"    def clear_expired_metering_data(self, ttl):"},{"line_number":87,"context_line":"        \"\"\"Clear expired data from the backend storage system"},{"line_number":88,"context_line":"        according ttl in seconds"},{"line_number":89,"context_line":"        \"\"\""},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    @abc.abstractmethod"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2FhSQ%3D","line":88,"updated":"2013-05-31 11:54:07.000000000","message":":param ttl:","commit_id":"47baa026b86683a73af407ca403d09ed40a14321"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"e53dba91c7e6a32b1dc624b372e0d6943ec7c4a5","unresolved":false,"context_lines":[{"line_number":85,"context_line":"    @abc.abstractmethod"},{"line_number":86,"context_line":"    def clear_expired_metering_data(self, ttl):"},{"line_number":87,"context_line":"        \"\"\"Clear expired data from the backend storage system"},{"line_number":88,"context_line":"        according ttl in seconds"},{"line_number":89,"context_line":"        \"\"\""},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    @abc.abstractmethod"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2Fdqw%3D","line":88,"in_reply_to":"AAAAPH%2F%2FhSQ%3D","updated":"2013-06-03 12:52:33.000000000","message":"Done","commit_id":"47baa026b86683a73af407ca403d09ed40a14321"}],"ceilometer/storage/impl_hbase.py":[{"author":{"_account_id":688,"name":"Sandy Walsh","email":"sandy.walsh@rackspace.com","username":"sandy-walsh"},"change_message_id":"42d588ad06cf5db65e99a698e1bc3a5099efb7ec","unresolved":false,"context_lines":[{"line_number":127,"context_line":"        self.conn.create_table(self.PROJECT_TABLE, {\u0027f\u0027: dict()})"},{"line_number":128,"context_line":"        self.conn.create_table(self.USER_TABLE, {\u0027f\u0027: dict()})"},{"line_number":129,"context_line":"        self.conn.create_table(self.RESOURCE_TABLE, {\u0027f\u0027: dict()})"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"        if cfg.CONF.collector.database_time_to_live \u003e 0:"},{"line_number":132,"context_line":"            families \u003d {\u0027time_to_live\u0027:"},{"line_number":133,"context_line":"                        cfg.CONF.collector.database_time_to_live}"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2Fges%3D","line":130,"updated":"2013-05-31 16:26:01.000000000","message":"This should be done all the time. What if I turn on TTL later?","commit_id":"47baa026b86683a73af407ca403d09ed40a14321"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"e53dba91c7e6a32b1dc624b372e0d6943ec7c4a5","unresolved":false,"context_lines":[{"line_number":127,"context_line":"        self.conn.create_table(self.PROJECT_TABLE, {\u0027f\u0027: dict()})"},{"line_number":128,"context_line":"        self.conn.create_table(self.USER_TABLE, {\u0027f\u0027: dict()})"},{"line_number":129,"context_line":"        self.conn.create_table(self.RESOURCE_TABLE, {\u0027f\u0027: dict()})"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"        if cfg.CONF.collector.database_time_to_live \u003e 0:"},{"line_number":132,"context_line":"            families \u003d {\u0027time_to_live\u0027:"},{"line_number":133,"context_line":"                        cfg.CONF.collector.database_time_to_live}"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2Fdqo%3D","line":130,"in_reply_to":"AAAAPH%2F%2Fges%3D","updated":"2013-06-03 12:52:33.000000000","message":"Yeah, but I imagine Mehdi has no clue on how to do that later, and neither do I. So if someone cares about HBase, it should work on improving this at some point.","commit_id":"47baa026b86683a73af407ca403d09ed40a14321"},{"author":{"_account_id":688,"name":"Sandy Walsh","email":"sandy.walsh@rackspace.com","username":"sandy-walsh"},"change_message_id":"42d588ad06cf5db65e99a698e1bc3a5099efb7ec","unresolved":false,"context_lines":[{"line_number":268,"context_line":""},{"line_number":269,"context_line":"    def clear_expired_metering_data(self, ttl):"},{"line_number":270,"context_line":"        \"\"\"Clear expired data from the backend storage system"},{"line_number":271,"context_line":"        according the ttl in seconds"},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"        This do nothing because db-ttl is implemented natively by hbase."},{"line_number":274,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2Fgeo%3D","line":271,"updated":"2013-05-31 16:26:01.000000000","message":"Perhaps we shouldn\u0027t say \"in seconds\" everywhere ... what if it changes?\n\nAlso, proper punctuation on all doc strings please :)","commit_id":"47baa026b86683a73af407ca403d09ed40a14321"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"e53dba91c7e6a32b1dc624b372e0d6943ec7c4a5","unresolved":false,"context_lines":[{"line_number":268,"context_line":""},{"line_number":269,"context_line":"    def clear_expired_metering_data(self, ttl):"},{"line_number":270,"context_line":"        \"\"\"Clear expired data from the backend storage system"},{"line_number":271,"context_line":"        according the ttl in seconds"},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"        This do nothing because db-ttl is implemented natively by hbase."},{"line_number":274,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2Fdqc%3D","line":271,"in_reply_to":"AAAAPH%2F%2Fgeo%3D","updated":"2013-06-03 12:52:33.000000000","message":"Done","commit_id":"47baa026b86683a73af407ca403d09ed40a14321"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"ec7d7b771d1b34282b266ec8775698608bcefac6","unresolved":false,"context_lines":[{"line_number":270,"context_line":"        \"\"\"Clear expired data from the backend storage system"},{"line_number":271,"context_line":"        according the ttl in seconds"},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"        This do nothing because db-ttl is implemented natively by hbase."},{"line_number":274,"context_line":"        \"\"\""},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    def get_users(self, source\u003dNone):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2FhSI%3D","line":273,"updated":"2013-05-31 11:54:07.000000000","message":"s/do/does/\n:param ttl:","commit_id":"47baa026b86683a73af407ca403d09ed40a14321"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"e53dba91c7e6a32b1dc624b372e0d6943ec7c4a5","unresolved":false,"context_lines":[{"line_number":270,"context_line":"        \"\"\"Clear expired data from the backend storage system"},{"line_number":271,"context_line":"        according the ttl in seconds"},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"        This do nothing because db-ttl is implemented natively by hbase."},{"line_number":274,"context_line":"        \"\"\""},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    def get_users(self, source\u003dNone):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2FdqY%3D","line":273,"in_reply_to":"AAAAPH%2F%2FhSI%3D","updated":"2013-06-03 12:52:33.000000000","message":"Done","commit_id":"47baa026b86683a73af407ca403d09ed40a14321"},{"author":{"_account_id":688,"name":"Sandy Walsh","email":"sandy.walsh@rackspace.com","username":"sandy-walsh"},"change_message_id":"feda0350b87434a38f7bd75e65cc00d3bd2d442d","unresolved":false,"context_lines":[{"line_number":133,"context_line":"            families \u003d {\u0027time_to_live\u0027:"},{"line_number":134,"context_line":"                        cfg.CONF.database.time_to_live}"},{"line_number":135,"context_line":"        else:"},{"line_number":136,"context_line":"            families \u003d {}"},{"line_number":137,"context_line":"        self.conn.create_table(self.METER_TABLE, {\u0027f\u0027: families})"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    def clear(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAPH%2F%2Fdf0%3D","line":136,"updated":"2013-06-03 14:02:55.000000000","message":"Side note, but this construct always bothers me. \n\nI find it reads better as:\n\nfamilies \u003d {}\nif cfg.CONF.database.time_to_live \u003e 0:\n    families[\u0027time_to_live\u0027] \u003d cfg.CONF.database.time_to_live","commit_id":"685c622ae4a497710cdf1fa1d0250e72e3991464"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"e89d9c1cea192b2fa2368c2a64dde602e0c0f874","unresolved":false,"context_lines":[{"line_number":274,"context_line":""},{"line_number":275,"context_line":"        :param ttl: Number of seconds to keep records for."},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"        \"\"\""},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"    def get_users(self, source\u003dNone):"},{"line_number":280,"context_line":"        \"\"\"Return an iterable of user id strings."}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPX%2F%2FyYE%3D","line":277,"updated":"2013-06-10 17:45:29.000000000","message":"This should raise a NotImplementedError exception since it isn\u0027t actually doing the work.","commit_id":"2afa4166d148e92c6ca95747f956f0eefe3888af"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"c8f472cc302dc11625ef68179a42031e40f52ddc","unresolved":false,"context_lines":[{"line_number":274,"context_line":""},{"line_number":275,"context_line":"        :param ttl: Number of seconds to keep records for."},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"        \"\"\""},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"    def get_users(self, source\u003dNone):"},{"line_number":280,"context_line":"        \"\"\"Return an iterable of user id strings."}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPX%2F%2FqXg%3D","line":277,"in_reply_to":"AAAAPX%2F%2FyYE%3D","updated":"2013-06-13 09:18:37.000000000","message":"Done","commit_id":"2afa4166d148e92c6ca95747f956f0eefe3888af"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"01535dd107d747bad6b633ef90ed2af11611fd74","unresolved":false,"context_lines":[{"line_number":272,"context_line":"        :param ttl: Number of seconds to keep records for."},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"        \"\"\""},{"line_number":275,"context_line":"        raise NotImplementedError"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"    def get_users(self, source\u003dNone):"},{"line_number":278,"context_line":"        \"\"\"Return an iterable of user id strings."}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAPn%2F%2Fwx4%3D","line":275,"updated":"2013-06-21 20:26:02.000000000","message":"The feature is technically implemented, it\u0027s just not done by the driver. Perhaps we need a different exception here, so we can say that in the error message, and tell the difference between something that isn\u0027t supported by the storage backend at all and something that is done automatically so the user should not schedule the cleaner job.","commit_id":"f9c39a0b3c4ef524080ca2bd55d123d127d06f61"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"e79a6d401fcc8dbe671a893ada74318b776fd408","unresolved":false,"context_lines":[{"line_number":272,"context_line":"        :param ttl: Number of seconds to keep records for."},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"        \"\"\""},{"line_number":275,"context_line":"        raise NotImplementedError"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"    def get_users(self, source\u003dNone):"},{"line_number":278,"context_line":"        \"\"\"Return an iterable of user id strings."}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAPn%2F%2FhR0%3D","line":275,"in_reply_to":"AAAAPn%2F%2Fwx4%3D","updated":"2013-06-28 16:29:17.000000000","message":"I have removed the implementation because it doesn\u0027t work like other implementation.\nThe builtin hbase ttl use the row insertion timestamp, and not the ceilometer meter timestamp.","commit_id":"f9c39a0b3c4ef524080ca2bd55d123d127d06f61"}],"ceilometer/storage/impl_log.py":[{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"ec7d7b771d1b34282b266ec8775698608bcefac6","unresolved":false,"context_lines":[{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def clear_expired_metering_data(self, ttl):"},{"line_number":66,"context_line":"        \"\"\"Clear expired data from the backend storage system"},{"line_number":67,"context_line":"        according the ttl in seconds"},{"line_number":68,"context_line":"        \"\"\""},{"line_number":69,"context_line":"        raise NotImplementedError("},{"line_number":70,"context_line":"            \u0027clearing expired metering data not implemented.\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2FhSE%3D","line":67,"updated":"2013-05-31 11:54:07.000000000","message":":param ttl:","commit_id":"47baa026b86683a73af407ca403d09ed40a14321"},{"author":{"_account_id":688,"name":"Sandy Walsh","email":"sandy.walsh@rackspace.com","username":"sandy-walsh"},"change_message_id":"42d588ad06cf5db65e99a698e1bc3a5099efb7ec","unresolved":false,"context_lines":[{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def clear_expired_metering_data(self, ttl):"},{"line_number":66,"context_line":"        \"\"\"Clear expired data from the backend storage system"},{"line_number":67,"context_line":"        according the ttl in seconds"},{"line_number":68,"context_line":"        \"\"\""},{"line_number":69,"context_line":"        raise NotImplementedError("},{"line_number":70,"context_line":"            \u0027clearing expired metering data not implemented.\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2Fgec%3D","line":67,"updated":"2013-05-31 16:26:01.000000000","message":"Similar to other comments. In seconds and punct.","commit_id":"47baa026b86683a73af407ca403d09ed40a14321"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"e53dba91c7e6a32b1dc624b372e0d6943ec7c4a5","unresolved":false,"context_lines":[{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def clear_expired_metering_data(self, ttl):"},{"line_number":66,"context_line":"        \"\"\"Clear expired data from the backend storage system"},{"line_number":67,"context_line":"        according the ttl in seconds"},{"line_number":68,"context_line":"        \"\"\""},{"line_number":69,"context_line":"        raise NotImplementedError("},{"line_number":70,"context_line":"            \u0027clearing expired metering data not implemented.\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2FdqI%3D","line":67,"in_reply_to":"AAAAPH%2F%2Fgec%3D","updated":"2013-06-03 12:52:33.000000000","message":"Done","commit_id":"47baa026b86683a73af407ca403d09ed40a14321"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"ec7d7b771d1b34282b266ec8775698608bcefac6","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        according the ttl in seconds"},{"line_number":68,"context_line":"        \"\"\""},{"line_number":69,"context_line":"        raise NotImplementedError("},{"line_number":70,"context_line":"            \u0027clearing expired metering data not implemented.\u0027)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def get_users(self, source\u003dNone):"},{"line_number":73,"context_line":"        \"\"\"Return an iterable of user id strings."}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2FhSA%3D","line":70,"updated":"2013-05-31 11:54:07.000000000","message":"use _()","commit_id":"47baa026b86683a73af407ca403d09ed40a14321"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"e53dba91c7e6a32b1dc624b372e0d6943ec7c4a5","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        according the ttl in seconds"},{"line_number":68,"context_line":"        \"\"\""},{"line_number":69,"context_line":"        raise NotImplementedError("},{"line_number":70,"context_line":"            \u0027clearing expired metering data not implemented.\u0027)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def get_users(self, source\u003dNone):"},{"line_number":73,"context_line":"        \"\"\"Return an iterable of user id strings."}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2FdqM%3D","line":70,"in_reply_to":"AAAAPH%2F%2FhSA%3D","updated":"2013-06-03 12:52:33.000000000","message":"Done","commit_id":"47baa026b86683a73af407ca403d09ed40a14321"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"e89d9c1cea192b2fa2368c2a64dde602e0c0f874","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        :param ttl: Number of seconds to keep records for."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        \"\"\""},{"line_number":72,"context_line":"        raise NotImplementedError("},{"line_number":73,"context_line":"            _(\u0027clearing expired metering data not implemented.\u0027))"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def get_users(self, source\u003dNone):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPX%2F%2FyYA%3D","line":72,"updated":"2013-06-10 17:45:29.000000000","message":"This should log the request, and not report an error (the logging driver is just for testing).","commit_id":"2afa4166d148e92c6ca95747f956f0eefe3888af"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"c8f472cc302dc11625ef68179a42031e40f52ddc","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        :param ttl: Number of seconds to keep records for."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        \"\"\""},{"line_number":72,"context_line":"        raise NotImplementedError("},{"line_number":73,"context_line":"            _(\u0027clearing expired metering data not implemented.\u0027))"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def get_users(self, source\u003dNone):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPX%2F%2FqXY%3D","line":72,"in_reply_to":"AAAAPX%2F%2FyYA%3D","updated":"2013-06-13 09:18:37.000000000","message":"Done","commit_id":"2afa4166d148e92c6ca95747f956f0eefe3888af"}],"ceilometer/storage/impl_mongodb.py":[{"author":{"_account_id":688,"name":"Sandy Walsh","email":"sandy.walsh@rackspace.com","username":"sandy-walsh"},"change_message_id":"42d588ad06cf5db65e99a698e1bc3a5099efb7ec","unresolved":false,"context_lines":[{"line_number":258,"context_line":"        if self._is_natively_ttl_supported():"},{"line_number":259,"context_line":"            self._ensure_meter_ttl_index()"},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"    def _ensure_meter_ttl_index(self):"},{"line_number":262,"context_line":"        indexes \u003d self.db.meter.index_information()"},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"        if cfg.CONF.collector.database_time_to_live \u003c\u003d 0:"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2FgdQ%3D","line":261,"updated":"2013-05-31 16:26:01.000000000","message":"Is there a test for this?","commit_id":"47baa026b86683a73af407ca403d09ed40a14321"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"f97063ffa16f6397884e99ff74b60a194c3c2d20","unresolved":false,"context_lines":[{"line_number":258,"context_line":"        if self._is_natively_ttl_supported():"},{"line_number":259,"context_line":"            self._ensure_meter_ttl_index()"},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"    def _ensure_meter_ttl_index(self):"},{"line_number":262,"context_line":"        indexes \u003d self.db.meter.index_information()"},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"        if cfg.CONF.collector.database_time_to_live \u003c\u003d 0:"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2FdkQ%3D","line":261,"in_reply_to":"AAAAPH%2F%2Fdng%3D","updated":"2013-06-03 13:29:49.000000000","message":"No, I guess you\u0027re right. I\u0027ve added a few call so it should create and/or drop.","commit_id":"47baa026b86683a73af407ca403d09ed40a14321"},{"author":{"_account_id":688,"name":"Sandy Walsh","email":"sandy.walsh@rackspace.com","username":"sandy-walsh"},"change_message_id":"cabc5fea3360c025119ca693168bf4f4061f20d3","unresolved":false,"context_lines":[{"line_number":258,"context_line":"        if self._is_natively_ttl_supported():"},{"line_number":259,"context_line":"            self._ensure_meter_ttl_index()"},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"    def _ensure_meter_ttl_index(self):"},{"line_number":262,"context_line":"        indexes \u003d self.db.meter.index_information()"},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"        if cfg.CONF.collector.database_time_to_live \u003c\u003d 0:"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2Fdng%3D","line":261,"in_reply_to":"AAAAPH%2F%2Fdp8%3D","updated":"2013-06-03 12:59:21.000000000","message":"I couldn\u0027t find a test for an existing index getting turned off (and dropped here). The method itself should have a clearly defined test, not embedded in another test. Each IF should have an explicit test. Perhaps I\u0027m just looking in the wrong place?","commit_id":"47baa026b86683a73af407ca403d09ed40a14321"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"e53dba91c7e6a32b1dc624b372e0d6943ec7c4a5","unresolved":false,"context_lines":[{"line_number":258,"context_line":"        if self._is_natively_ttl_supported():"},{"line_number":259,"context_line":"            self._ensure_meter_ttl_index()"},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"    def _ensure_meter_ttl_index(self):"},{"line_number":262,"context_line":"        indexes \u003d self.db.meter.index_information()"},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"        if cfg.CONF.collector.database_time_to_live \u003c\u003d 0:"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2Fdp8%3D","line":261,"in_reply_to":"AAAAPH%2F%2FgdQ%3D","updated":"2013-06-03 12:52:33.000000000","message":"Yes, it\u0027s tested twice","commit_id":"47baa026b86683a73af407ca403d09ed40a14321"},{"author":{"_account_id":688,"name":"Sandy Walsh","email":"sandy.walsh@rackspace.com","username":"sandy-walsh"},"change_message_id":"42d588ad06cf5db65e99a698e1bc3a5099efb7ec","unresolved":false,"context_lines":[{"line_number":267,"context_line":"            return"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"        if \u0027meter_ttl\u0027 in indexes:"},{"line_number":270,"context_line":"            #note(sileht): manually check expireAfterSeconds because"},{"line_number":271,"context_line":"            #ensure_index doesn\u0027t update index options if already index exists"},{"line_number":272,"context_line":"            if indexes[\u0027meter_ttl\u0027].get(\u0027expireAfterSeconds\u0027, -1) \u003d\u003d \\"},{"line_number":273,"context_line":"                    cfg.CONF.collector.database_time_to_live:"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2FgeQ%3D","line":270,"updated":"2013-05-31 16:26:01.000000000","message":"Space after # and proper punctuation.","commit_id":"47baa026b86683a73af407ca403d09ed40a14321"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"e53dba91c7e6a32b1dc624b372e0d6943ec7c4a5","unresolved":false,"context_lines":[{"line_number":267,"context_line":"            return"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"        if \u0027meter_ttl\u0027 in indexes:"},{"line_number":270,"context_line":"            #note(sileht): manually check expireAfterSeconds because"},{"line_number":271,"context_line":"            #ensure_index doesn\u0027t update index options if already index exists"},{"line_number":272,"context_line":"            if indexes[\u0027meter_ttl\u0027].get(\u0027expireAfterSeconds\u0027, -1) \u003d\u003d \\"},{"line_number":273,"context_line":"                    cfg.CONF.collector.database_time_to_live:"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2FdqA%3D","line":270,"in_reply_to":"AAAAPH%2F%2FgeQ%3D","updated":"2013-06-03 12:52:33.000000000","message":"Done","commit_id":"47baa026b86683a73af407ca403d09ed40a14321"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"2ca6fbe9b9c092440636e8facafe7ebccb5c33c5","unresolved":false,"context_lines":[{"line_number":371,"context_line":"        \"\"\""},{"line_number":372,"context_line":"        # Before mongodb 2.2 we need to clear expired data manually"},{"line_number":373,"context_line":"        if not self._is_natively_ttl_supported():"},{"line_number":374,"context_line":"            end \u003d timeutils.utcnow() - datetime.timedelta(seconds\u003dttl)"},{"line_number":375,"context_line":"            f \u003d storage.SampleFilter(end\u003dend)"},{"line_number":376,"context_line":"            q \u003d make_query_from_filter(f, require_meter\u003dFalse)"},{"line_number":377,"context_line":"            self.db.meter.remove(q)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2FkMo%3D","line":374,"updated":"2013-05-30 12:55:45.000000000","message":"I\u0027d like to note there\u0027s a tiny difference between the two implementations, with and without expireAfterSeconds.\n\nIn the case of expireAfterSeconds, you drop the records N seconds after their *insertion* into the database.\n\nIn the case of doing it manually, you drop the records N seconds after their *date of emission*, which can be totally different.","commit_id":"47baa026b86683a73af407ca403d09ed40a14321"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"ac5af36b9d0e296b9e8d6f17a0a7b08b560004fb","unresolved":false,"context_lines":[{"line_number":371,"context_line":"        \"\"\""},{"line_number":372,"context_line":"        # Before mongodb 2.2 we need to clear expired data manually"},{"line_number":373,"context_line":"        if not self._is_natively_ttl_supported():"},{"line_number":374,"context_line":"            end \u003d timeutils.utcnow() - datetime.timedelta(seconds\u003dttl)"},{"line_number":375,"context_line":"            f \u003d storage.SampleFilter(end\u003dend)"},{"line_number":376,"context_line":"            q \u003d make_query_from_filter(f, require_meter\u003dFalse)"},{"line_number":377,"context_line":"            self.db.meter.remove(q)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2Fj8w%3D","line":374,"in_reply_to":"AAAAPH%2F%2FkMo%3D","updated":"2013-05-30 14:31:26.000000000","message":"Actually it\u0027s ok, thanks for Mehdi for the explanation; both use the internal timestamp field we store.","commit_id":"47baa026b86683a73af407ca403d09ed40a14321"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"3632b35a30a39e4ad6a8ab488f9327959eb8fe07","unresolved":false,"context_lines":[{"line_number":371,"context_line":"        \"\"\""},{"line_number":372,"context_line":"        # Before mongodb 2.2 we need to clear expired data manually"},{"line_number":373,"context_line":"        if not self._is_natively_ttl_supported():"},{"line_number":374,"context_line":"            end \u003d timeutils.utcnow() - datetime.timedelta(seconds\u003dttl)"},{"line_number":375,"context_line":"            f \u003d storage.SampleFilter(end\u003dend)"},{"line_number":376,"context_line":"            q \u003d make_query_from_filter(f, require_meter\u003dFalse)"},{"line_number":377,"context_line":"            self.db.meter.remove(q)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2Fj80%3D","line":374,"in_reply_to":"AAAAPH%2F%2FkMo%3D","updated":"2013-05-30 14:31:53.000000000","message":"It does the same things according the mongo db documentation:\nhttp://docs.mongodb.org/manual/tutorial/expire-data/","commit_id":"47baa026b86683a73af407ca403d09ed40a14321"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"01535dd107d747bad6b633ef90ed2af11611fd74","unresolved":false,"context_lines":[{"line_number":278,"context_line":""},{"line_number":279,"context_line":"        self.db.meter.create_index("},{"line_number":280,"context_line":"            [(\u0027timestamp\u0027, pymongo.ASCENDING)],"},{"line_number":281,"context_line":"            expireAfterSeconds\u003d"},{"line_number":282,"context_line":"            cfg.CONF.database.time_to_live,"},{"line_number":283,"context_line":"            name\u003d\u0027meter_ttl\u0027"},{"line_number":284,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAPn%2F%2Fwxk%3D","line":281,"updated":"2013-06-21 20:26:02.000000000","message":"The way this line is forced to wrap looks odd. How about copying CONF.time_to_live to a local variable with a shorter name? That would fix line 273 as well.","commit_id":"f9c39a0b3c4ef524080ca2bd55d123d127d06f61"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"e79a6d401fcc8dbe671a893ada74318b776fd408","unresolved":false,"context_lines":[{"line_number":278,"context_line":""},{"line_number":279,"context_line":"        self.db.meter.create_index("},{"line_number":280,"context_line":"            [(\u0027timestamp\u0027, pymongo.ASCENDING)],"},{"line_number":281,"context_line":"            expireAfterSeconds\u003d"},{"line_number":282,"context_line":"            cfg.CONF.database.time_to_live,"},{"line_number":283,"context_line":"            name\u003d\u0027meter_ttl\u0027"},{"line_number":284,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAPn%2F%2FucI%3D","line":281,"in_reply_to":"AAAAPn%2F%2Fwxk%3D","updated":"2013-06-28 16:29:17.000000000","message":"Done","commit_id":"f9c39a0b3c4ef524080ca2bd55d123d127d06f61"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"01535dd107d747bad6b633ef90ed2af11611fd74","unresolved":false,"context_lines":[{"line_number":379,"context_line":"            end \u003d timeutils.utcnow() - datetime.timedelta(seconds\u003dttl)"},{"line_number":380,"context_line":"            f \u003d storage.SampleFilter(end\u003dend)"},{"line_number":381,"context_line":"            q \u003d make_query_from_filter(f, require_meter\u003dFalse)"},{"line_number":382,"context_line":"            self.db.meter.remove(q)"},{"line_number":383,"context_line":""},{"line_number":384,"context_line":"    def get_users(self, source\u003dNone):"},{"line_number":385,"context_line":"        \"\"\"Return an iterable of user id strings."}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAPn%2F%2FwxY%3D","line":382,"updated":"2013-06-21 20:26:02.000000000","message":"This will only remove old meters. The associated resources, users, and projects should also be cleaned up when there are no more samples associated with them.","commit_id":"f9c39a0b3c4ef524080ca2bd55d123d127d06f61"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"e79a6d401fcc8dbe671a893ada74318b776fd408","unresolved":false,"context_lines":[{"line_number":379,"context_line":"            end \u003d timeutils.utcnow() - datetime.timedelta(seconds\u003dttl)"},{"line_number":380,"context_line":"            f \u003d storage.SampleFilter(end\u003dend)"},{"line_number":381,"context_line":"            q \u003d make_query_from_filter(f, require_meter\u003dFalse)"},{"line_number":382,"context_line":"            self.db.meter.remove(q)"},{"line_number":383,"context_line":""},{"line_number":384,"context_line":"    def get_users(self, source\u003dNone):"},{"line_number":385,"context_line":"        \"\"\"Return an iterable of user id strings."}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAPn%2F%2FhRo%3D","line":382,"in_reply_to":"AAAAPn%2F%2FwxY%3D","updated":"2013-06-28 16:29:17.000000000","message":"Done","commit_id":"f9c39a0b3c4ef524080ca2bd55d123d127d06f61"},{"author":{"_account_id":688,"name":"Sandy Walsh","email":"sandy.walsh@rackspace.com","username":"sandy-walsh"},"change_message_id":"c79fc43512a7e010a55ddcb2b44eb67840a439fc","unresolved":false,"context_lines":[{"line_number":303,"context_line":"            name\u003d\u0027meter_ttl\u0027"},{"line_number":304,"context_line":"        )"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"    def _is_natively_ttl_supported(self):"},{"line_number":307,"context_line":"        # MIM doesn\u0027t support server_info()"},{"line_number":308,"context_line":"        if Connection._mim_instance is not None:"},{"line_number":309,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAPn%2F%2Fabk%3D","line":306,"updated":"2013-07-02 14:01:53.000000000","message":"needs explicit test","commit_id":"78f0fb648898109c41711557ad61c979533b9595"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"cec8c94012495e479346d1762df2a80dc884d03f","unresolved":false,"context_lines":[{"line_number":303,"context_line":"            name\u003d\u0027meter_ttl\u0027"},{"line_number":304,"context_line":"        )"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"    def _is_natively_ttl_supported(self):"},{"line_number":307,"context_line":"        # MIM doesn\u0027t support server_info()"},{"line_number":308,"context_line":"        if Connection._mim_instance is not None:"},{"line_number":309,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAP3%2F%2F5dw%3D","line":306,"in_reply_to":"AAAAPn%2F%2Fabk%3D","updated":"2013-07-09 15:49:48.000000000","message":"Done","commit_id":"78f0fb648898109c41711557ad61c979533b9595"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"9635da20902694ee8e17b9daba24ac99e6e2858c","unresolved":false,"context_lines":[{"line_number":190,"context_line":"    REDUCE_GROUP_CLEAN \u003d bson.code.Code(\"\"\""},{"line_number":191,"context_line":"    function ( curr, result ) {"},{"line_number":192,"context_line":"        if (result.resources.indexOf(curr.resource_id) \u003c 0)"},{"line_number":193,"context_line":"            result.resources.push(curr.resource_id)"},{"line_number":194,"context_line":"        if (result.users.indexOf(curr.user_id) \u003c 0)"},{"line_number":195,"context_line":"            result.users.push(curr.user_id)"},{"line_number":196,"context_line":"        if (result.projects.indexOf(curr.project_id) \u003c 0)"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAP3%2F%2FlNA%3D","line":193,"updated":"2013-07-16 09:50:32.000000000","message":"Shouldn\u0027t each of the push lines be semi-colon terminated in the normal javascript style?","commit_id":"00aa000e4b8bce6cb402361d320158b30218a7e9"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"5ea395c6c2874b7012b5eb219b8b85e9748bf903","unresolved":false,"context_lines":[{"line_number":190,"context_line":"    REDUCE_GROUP_CLEAN \u003d bson.code.Code(\"\"\""},{"line_number":191,"context_line":"    function ( curr, result ) {"},{"line_number":192,"context_line":"        if (result.resources.indexOf(curr.resource_id) \u003c 0)"},{"line_number":193,"context_line":"            result.resources.push(curr.resource_id)"},{"line_number":194,"context_line":"        if (result.users.indexOf(curr.user_id) \u003c 0)"},{"line_number":195,"context_line":"            result.users.push(curr.user_id)"},{"line_number":196,"context_line":"        if (result.projects.indexOf(curr.project_id) \u003c 0)"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAP3%2F%2FkvU%3D","line":193,"in_reply_to":"AAAAP3%2F%2FlNA%3D","updated":"2013-07-16 12:52:17.000000000","message":"mongo don\u0027t care about this, but I have updated the code to follow JS style","commit_id":"00aa000e4b8bce6cb402361d320158b30218a7e9"}],"ceilometer/storage/impl_sqlalchemy.py":[{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"01535dd107d747bad6b633ef90ed2af11611fd74","unresolved":false,"context_lines":[{"line_number":216,"context_line":"            session.flush()"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"    @staticmethod"},{"line_number":219,"context_line":"    def clear_expired_metering_data(ttl):"},{"line_number":220,"context_line":"        \"\"\"Clear expired data from the backend storage system according to the"},{"line_number":221,"context_line":"        time-to-live."},{"line_number":222,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAPn%2F%2FwxM%3D","line":219,"updated":"2013-06-21 20:26:02.000000000","message":"This implementation has the same issue with users, projects, and resources.","commit_id":"f9c39a0b3c4ef524080ca2bd55d123d127d06f61"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"e79a6d401fcc8dbe671a893ada74318b776fd408","unresolved":false,"context_lines":[{"line_number":216,"context_line":"            session.flush()"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"    @staticmethod"},{"line_number":219,"context_line":"    def clear_expired_metering_data(ttl):"},{"line_number":220,"context_line":"        \"\"\"Clear expired data from the backend storage system according to the"},{"line_number":221,"context_line":"        time-to-live."},{"line_number":222,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAPn%2F%2FhRg%3D","line":219,"in_reply_to":"AAAAPn%2F%2FwxM%3D","updated":"2013-06-28 16:29:17.000000000","message":"Done","commit_id":"f9c39a0b3c4ef524080ca2bd55d123d127d06f61"}],"tests/storage/base.py":[{"author":{"_account_id":688,"name":"Sandy Walsh","email":"sandy.walsh@rackspace.com","username":"sandy-walsh"},"change_message_id":"42d588ad06cf5db65e99a698e1bc3a5099efb7ec","unresolved":false,"context_lines":[{"line_number":363,"context_line":""},{"line_number":364,"context_line":"        f \u003d storage.SampleFilter(meter\u003d\u0027instance\u0027)"},{"line_number":365,"context_line":"        results \u003d list(self.conn.get_samples(f))"},{"line_number":366,"context_line":"        assert results"},{"line_number":367,"context_line":"        assert len(results) \u003d\u003d 2"},{"line_number":368,"context_line":""},{"line_number":369,"context_line":"    def test_clear_metering_data_no_data_to_remove(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2Fgdw%3D","line":366,"updated":"2013-05-31 16:26:01.000000000","message":"This should be self.assertTrue(), assertEquals(), etc","commit_id":"47baa026b86683a73af407ca403d09ed40a14321"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"e53dba91c7e6a32b1dc624b372e0d6943ec7c4a5","unresolved":false,"context_lines":[{"line_number":363,"context_line":""},{"line_number":364,"context_line":"        f \u003d storage.SampleFilter(meter\u003d\u0027instance\u0027)"},{"line_number":365,"context_line":"        results \u003d list(self.conn.get_samples(f))"},{"line_number":366,"context_line":"        assert results"},{"line_number":367,"context_line":"        assert len(results) \u003d\u003d 2"},{"line_number":368,"context_line":""},{"line_number":369,"context_line":"    def test_clear_metering_data_no_data_to_remove(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2Fdps%3D","line":366,"in_reply_to":"AAAAPH%2F%2Fgdw%3D","updated":"2013-06-03 12:52:33.000000000","message":"Done","commit_id":"47baa026b86683a73af407ca403d09ed40a14321"}],"tests/storage/test_impl_hbase.py":[{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"9635da20902694ee8e17b9daba24ac99e6e2858c","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"class RawSampleTest(base.RawSampleTest, HBaseEngineTestBase):"},{"line_number":76,"context_line":"    def test_clear_metering_data(self):"},{"line_number":77,"context_line":"        # NOTE(sileht): db-ttl is supported natively by hbase"},{"line_number":78,"context_line":"        pass"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def test_clear_metering_data_no_data_to_remove(self):"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAP3%2F%2FlMA%3D","line":77,"updated":"2013-07-16 09:50:32.000000000","message":"If TTL is implemented natively, I\u0027m confused about the NotImplementedError in:\n\n  https://review.openstack.org/#/c/30635/21/ceilometer/storage/impl_hbase.py\n\nshould that just be a pass?\n\nAnd even with native support for TTL, wouldn\u0027t the cleanup of the dangling resources, users, projects etc. still need to be implemented explicitly?","commit_id":"00aa000e4b8bce6cb402361d320158b30218a7e9"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"5ea395c6c2874b7012b5eb219b8b85e9748bf903","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"class RawSampleTest(base.RawSampleTest, HBaseEngineTestBase):"},{"line_number":76,"context_line":"    def test_clear_metering_data(self):"},{"line_number":77,"context_line":"        # NOTE(sileht): db-ttl is supported natively by hbase"},{"line_number":78,"context_line":"        pass"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def test_clear_metering_data_no_data_to_remove(self):"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAP3%2F%2FkyI%3D","line":77,"in_reply_to":"AAAAP3%2F%2FlMA%3D","updated":"2013-07-16 12:52:17.000000000","message":"I have removed the hbase native support because it can\u0027t use the ceilometer meter timestamp but only a internal timestamp.\n\nAnd I have missed to removed this tests.","commit_id":"00aa000e4b8bce6cb402361d320158b30218a7e9"}],"tests/storage/test_impl_mongodb.py":[{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"554c7b9ce788be83365e833092dc4253e7b7e2f0","unresolved":false,"context_lines":[{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    def test_clear_metering_data(self):"},{"line_number":117,"context_line":"        # fake the mongodb version"},{"line_number":118,"context_line":"        self.conn._is_natively_ttl_supported \u003d \\"},{"line_number":119,"context_line":"            self._fake_is_natively_ttl_supported"},{"line_number":120,"context_line":"        super(RawSampleTest, self).test_clear_metering_data()"},{"line_number":121,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2Fm2Q%3D","line":118,"updated":"2013-05-29 13:35:37.000000000","message":"Use a context patching that is removed when the test is done, otherwise that might cause some troubles if some tests are run in parrallel.\n\nAnd maybe do it a setUp() time and not for each test?","commit_id":"e94ac6cf29555ac8ed4627534419b5d3571cdec9"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"f07e5366dd6174b1412df97e7404f57c47db67e9","unresolved":false,"context_lines":[{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    def test_clear_metering_data(self):"},{"line_number":117,"context_line":"        # fake the mongodb version"},{"line_number":118,"context_line":"        self.conn._is_natively_ttl_supported \u003d \\"},{"line_number":119,"context_line":"            self._fake_is_natively_ttl_supported"},{"line_number":120,"context_line":"        super(RawSampleTest, self).test_clear_metering_data()"},{"line_number":121,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2Fkok%3D","line":118,"in_reply_to":"AAAAPH%2F%2Fm2Q%3D","updated":"2013-05-30 10:03:07.000000000","message":"Done","commit_id":"e94ac6cf29555ac8ed4627534419b5d3571cdec9"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"554c7b9ce788be83365e833092dc4253e7b7e2f0","unresolved":false,"context_lines":[{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    def test_clear_metering_data_no_data_to_remove(self):"},{"line_number":123,"context_line":"        # fake the mongodb version"},{"line_number":124,"context_line":"        self.conn._is_natively_ttl_supported \u003d \\"},{"line_number":125,"context_line":"            self._fake_is_natively_ttl_supported"},{"line_number":126,"context_line":"        super(RawSampleTest, self).test_clear_metering_data_no_data_to_remove()"},{"line_number":127,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2Fm2M%3D","line":124,"updated":"2013-05-29 13:35:37.000000000","message":"Same here.","commit_id":"e94ac6cf29555ac8ed4627534419b5d3571cdec9"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"f07e5366dd6174b1412df97e7404f57c47db67e9","unresolved":false,"context_lines":[{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    def test_clear_metering_data_no_data_to_remove(self):"},{"line_number":123,"context_line":"        # fake the mongodb version"},{"line_number":124,"context_line":"        self.conn._is_natively_ttl_supported \u003d \\"},{"line_number":125,"context_line":"            self._fake_is_natively_ttl_supported"},{"line_number":126,"context_line":"        super(RawSampleTest, self).test_clear_metering_data_no_data_to_remove()"},{"line_number":127,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPH%2F%2Fkoo%3D","line":124,"in_reply_to":"AAAAPH%2F%2Fm2M%3D","updated":"2013-05-30 10:03:07.000000000","message":"Done","commit_id":"e94ac6cf29555ac8ed4627534419b5d3571cdec9"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"ec7d7b771d1b34282b266ec8775698608bcefac6","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        cfg.CONF.collector.database_time_to_live \u003d -1"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        self.conn._ensure_meter_ttl_index()"},{"line_number":82,"context_line":"        assert self.conn.db.meter.ensure_index(\u0027foo\u0027,"},{"line_number":83,"context_line":"                                               name\u003d\u0027meter_ttl\u0027)"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    # disable because ming implementation doesn\u0027t support"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2FhRw%3D","line":82,"updated":"2013-05-31 11:54:07.000000000","message":"use self.assertTrue()","commit_id":"47baa026b86683a73af407ca403d09ed40a14321"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"e53dba91c7e6a32b1dc624b372e0d6943ec7c4a5","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        cfg.CONF.collector.database_time_to_live \u003d -1"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        self.conn._ensure_meter_ttl_index()"},{"line_number":82,"context_line":"        assert self.conn.db.meter.ensure_index(\u0027foo\u0027,"},{"line_number":83,"context_line":"                                               name\u003d\u0027meter_ttl\u0027)"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    # disable because ming implementation doesn\u0027t support"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2FdpI%3D","line":82,"in_reply_to":"AAAAPH%2F%2FhRw%3D","updated":"2013-06-03 12:52:33.000000000","message":"Done","commit_id":"47baa026b86683a73af407ca403d09ed40a14321"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"ec7d7b771d1b34282b266ec8775698608bcefac6","unresolved":false,"context_lines":[{"line_number":87,"context_line":"    def _test_meter_ttl_index_present(self):"},{"line_number":88,"context_line":"        cfg.CONF.collector.database_time_to_live \u003d 456789"},{"line_number":89,"context_line":"        self.conn._ensure_meter_ttl_index()"},{"line_number":90,"context_line":"        assert not self.conn.db.meter.ensure_index(\u0027foo\u0027,"},{"line_number":91,"context_line":"                                                   name\u003d\u0027meter_ttl\u0027)"},{"line_number":92,"context_line":"        assert self.conn.db.meter.index_information()["},{"line_number":93,"context_line":"            \u0027meter_ttl\u0027][\u0027expireAfterSeconds\u0027] \u003d\u003d 456789"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2FhRs%3D","line":90,"updated":"2013-05-31 11:54:07.000000000","message":"self.assertFalse()","commit_id":"47baa026b86683a73af407ca403d09ed40a14321"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"e53dba91c7e6a32b1dc624b372e0d6943ec7c4a5","unresolved":false,"context_lines":[{"line_number":87,"context_line":"    def _test_meter_ttl_index_present(self):"},{"line_number":88,"context_line":"        cfg.CONF.collector.database_time_to_live \u003d 456789"},{"line_number":89,"context_line":"        self.conn._ensure_meter_ttl_index()"},{"line_number":90,"context_line":"        assert not self.conn.db.meter.ensure_index(\u0027foo\u0027,"},{"line_number":91,"context_line":"                                                   name\u003d\u0027meter_ttl\u0027)"},{"line_number":92,"context_line":"        assert self.conn.db.meter.index_information()["},{"line_number":93,"context_line":"            \u0027meter_ttl\u0027][\u0027expireAfterSeconds\u0027] \u003d\u003d 456789"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2FdpE%3D","line":90,"in_reply_to":"AAAAPH%2F%2FhRs%3D","updated":"2013-06-03 12:52:33.000000000","message":"Done","commit_id":"47baa026b86683a73af407ca403d09ed40a14321"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"ec7d7b771d1b34282b266ec8775698608bcefac6","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        self.conn._ensure_meter_ttl_index()"},{"line_number":90,"context_line":"        assert not self.conn.db.meter.ensure_index(\u0027foo\u0027,"},{"line_number":91,"context_line":"                                                   name\u003d\u0027meter_ttl\u0027)"},{"line_number":92,"context_line":"        assert self.conn.db.meter.index_information()["},{"line_number":93,"context_line":"            \u0027meter_ttl\u0027][\u0027expireAfterSeconds\u0027] \u003d\u003d 456789"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2FhRo%3D","line":92,"updated":"2013-05-31 11:54:07.000000000","message":"self.assertTrue()","commit_id":"47baa026b86683a73af407ca403d09ed40a14321"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"e53dba91c7e6a32b1dc624b372e0d6943ec7c4a5","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        self.conn._ensure_meter_ttl_index()"},{"line_number":90,"context_line":"        assert not self.conn.db.meter.ensure_index(\u0027foo\u0027,"},{"line_number":91,"context_line":"                                                   name\u003d\u0027meter_ttl\u0027)"},{"line_number":92,"context_line":"        assert self.conn.db.meter.index_information()["},{"line_number":93,"context_line":"            \u0027meter_ttl\u0027][\u0027expireAfterSeconds\u0027] \u003d\u003d 456789"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPH%2F%2FdpA%3D","line":92,"in_reply_to":"AAAAPH%2F%2FhRo%3D","updated":"2013-06-03 12:52:33.000000000","message":"Done","commit_id":"47baa026b86683a73af407ca403d09ed40a14321"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"ae9e096b77f08db251a2bacc0252fcf60f17f212","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        cfg.CONF.set_override(\u0027time_to_live\u0027, 456789, group\u003d\u0027database\u0027)"},{"line_number":86,"context_line":"        self.conn._ensure_meter_ttl_index()"},{"line_number":87,"context_line":"        self.assertTrue(self.conn.db.meter.ensure_index(\u0027foo\u0027,"},{"line_number":88,"context_line":"                                                        name\u003d\u0027meter_ttl\u0027))"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    # disable because ming implementation doesn\u0027t support"},{"line_number":91,"context_line":"    # expireAfterSeconds for ensure_index"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPX%2F%2Fxnw%3D","line":88,"updated":"2013-06-10 22:24:00.000000000","message":"i think this should be assertFalse since _ensure_meter_ttyl_index() should create an index","commit_id":"2afa4166d148e92c6ca95747f956f0eefe3888af"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"c8f472cc302dc11625ef68179a42031e40f52ddc","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        cfg.CONF.set_override(\u0027time_to_live\u0027, 456789, group\u003d\u0027database\u0027)"},{"line_number":86,"context_line":"        self.conn._ensure_meter_ttl_index()"},{"line_number":87,"context_line":"        self.assertTrue(self.conn.db.meter.ensure_index(\u0027foo\u0027,"},{"line_number":88,"context_line":"                                                        name\u003d\u0027meter_ttl\u0027))"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    # disable because ming implementation doesn\u0027t support"},{"line_number":91,"context_line":"    # expireAfterSeconds for ensure_index"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPX%2F%2FqTA%3D","line":88,"in_reply_to":"AAAAPX%2F%2Fxnw%3D","updated":"2013-06-13 09:18:37.000000000","message":"Done","commit_id":"2afa4166d148e92c6ca95747f956f0eefe3888af"}]}
