)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"59b5bf55e85d088e7d89385d1e486a3a19d748a7","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Ilya Tyaptin \u003cityaptin@mirantis.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2014-08-20 16:15:49 +0400"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"[HBase] Add migration script for new row separate design"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add migration for HBase data for compatibility with"},{"line_number":10,"context_line":"new row format which presented in CR"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"1abeadc6_a21adb7a","line":7,"updated":"2014-08-20 20:15:52.000000000","message":"s/Add/Adds","commit_id":"dd87bce9ca15af9b835f1ca30338db9f83d0283e"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"c848c7687aac11bab5466ea6d8b27f8992734fa4","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Ilya Tyaptin \u003cityaptin@mirantis.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2014-08-20 16:15:49 +0400"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"[HBase] Add migration script for new row separate design"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add migration for HBase data for compatibility with"},{"line_number":10,"context_line":"new row format which presented in CR"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"1abeadc6_e64847b5","line":7,"in_reply_to":"1abeadc6_a21adb7a","updated":"2014-08-21 12:08:04.000000000","message":"Done","commit_id":"dd87bce9ca15af9b835f1ca30338db9f83d0283e"},{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"59b5bf55e85d088e7d89385d1e486a3a19d748a7","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"[HBase] Add migration script for new row separate design"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add migration for HBase data for compatibility with"},{"line_number":10,"context_line":"new row format which presented in CR"},{"line_number":11,"context_line":"https://review.openstack.org/#/c/106376/"},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"1abeadc6_e5077d16","line":9,"updated":"2014-08-20 20:15:52.000000000","message":"ditto","commit_id":"dd87bce9ca15af9b835f1ca30338db9f83d0283e"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"c848c7687aac11bab5466ea6d8b27f8992734fa4","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"[HBase] Add migration script for new row separate design"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add migration for HBase data for compatibility with"},{"line_number":10,"context_line":"new row format which presented in CR"},{"line_number":11,"context_line":"https://review.openstack.org/#/c/106376/"},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"1abeadc6_06c9c325","line":9,"in_reply_to":"1abeadc6_e5077d16","updated":"2014-08-21 12:08:04.000000000","message":"Done","commit_id":"dd87bce9ca15af9b835f1ca30338db9f83d0283e"}],"ceilometer/storage/hbase/inmemory.py":[{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"00bdedb6151618f246952225c7dad616cfe8b9d2","unresolved":false,"context_lines":[{"line_number":218,"context_line":"        if value.startswith(\u0027binaryprefix:\u0027):"},{"line_number":219,"context_line":"            value \u003d value[len(\u0027binaryprefix:\u0027):]"},{"line_number":220,"context_line":"        if value.startswith(\u0027regexstring:\u0027):"},{"line_number":221,"context_line":"            value \u003d value[len(\u0027regexstring:\u0027)]"},{"line_number":222,"context_line":"            is_regex \u003d True"},{"line_number":223,"context_line":"        column \u003d \u0027f:\u0027 + value"},{"line_number":224,"context_line":"        r \u003d {}"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa98f980_53c91d24","line":221,"updated":"2014-09-19 04:12:39.000000000","message":"-1: I think value should be a string rather than a character","commit_id":"83c62b430a75d4a6c7666c45e5dd26e07d51fbf5"}],"ceilometer/storage/hbase/migration.py":[{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"85a6eec66def0164430fde3dfdda01fb0243d20e","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"def migrate_resource_table(conn, table):"},{"line_number":22,"context_line":"    \"\"\"Migrate table \u0027resource\u0027 in HBase"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    Change qualifiers format from \"%s+%s+%s!%s!%s\" %"},{"line_number":25,"context_line":"    (rts, source, counter_name, counter_type,counter_unit)"}],"source_content_type":"text/x-python","patch_set":4,"id":"da9df570_18ffd268","line":22,"updated":"2014-09-23 09:19:35.000000000","message":"First sentence in doc string should be ended with the dot.","commit_id":"cb6a395d52cc4805e7c5bc01b133e92d098c233f"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"c5b35a34c7ee00b7c42300d678c9bc545cc252ce","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"def migrate_resource_table(conn, table):"},{"line_number":22,"context_line":"    \"\"\"Migrate table \u0027resource\u0027 in HBase"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    Change qualifiers format from \"%s+%s+%s!%s!%s\" %"},{"line_number":25,"context_line":"    (rts, source, counter_name, counter_type,counter_unit)"}],"source_content_type":"text/x-python","patch_set":4,"id":"da9df570_138415d3","line":22,"in_reply_to":"da9df570_18ffd268","updated":"2014-09-23 09:54:32.000000000","message":"Done","commit_id":"cb6a395d52cc4805e7c5bc01b133e92d098c233f"},{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"85a6eec66def0164430fde3dfdda01fb0243d20e","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"def migrate_meter_table(conn, table):"},{"line_number":51,"context_line":"    \"\"\"Migrate table \u0027meter\u0027 in HBase"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    Change row format from \"%s_%d_%s\" % (counter_name, rts, message_signature)"},{"line_number":54,"context_line":"    to new separator format \"%s:%s:%s\" % (counter_name, rts, message_signature)"}],"source_content_type":"text/x-python","patch_set":4,"id":"da9df570_f8304e58","line":51,"updated":"2014-09-23 09:19:35.000000000","message":"ditto here and further","commit_id":"cb6a395d52cc4805e7c5bc01b133e92d098c233f"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"c5b35a34c7ee00b7c42300d678c9bc545cc252ce","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"def migrate_meter_table(conn, table):"},{"line_number":51,"context_line":"    \"\"\"Migrate table \u0027meter\u0027 in HBase"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    Change row format from \"%s_%d_%s\" % (counter_name, rts, message_signature)"},{"line_number":54,"context_line":"    to new separator format \"%s:%s:%s\" % (counter_name, rts, message_signature)"}],"source_content_type":"text/x-python","patch_set":4,"id":"da9df570_338919ec","line":51,"in_reply_to":"da9df570_f8304e58","updated":"2014-09-23 09:54:32.000000000","message":"Done","commit_id":"cb6a395d52cc4805e7c5bc01b133e92d098c233f"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"437d0e70f43bf9e4b92053772c47f9aac242cb4b","unresolved":false,"context_lines":[{"line_number":9,"context_line":"# distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT"},{"line_number":10,"context_line":"# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":11,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":12,"context_line":"# under the License."},{"line_number":13,"context_line":"\"\"\"HBase storage backend"},{"line_number":14,"context_line":"\"\"\""},{"line_number":15,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"baa201ad_d0de986c","line":12,"updated":"2014-10-06 13:26:56.000000000","message":"Fix the line beyond please","commit_id":"6dd7cbbe63c9e23c4f96fd3464a7202b15f82ce8"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"db69fd029c4578365a435693d4d2070b751cf63e","unresolved":false,"context_lines":[{"line_number":9,"context_line":"# distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT"},{"line_number":10,"context_line":"# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":11,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":12,"context_line":"# under the License."},{"line_number":13,"context_line":"\"\"\"HBase storage backend"},{"line_number":14,"context_line":"\"\"\""},{"line_number":15,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"baa201ad_18c91459","line":12,"in_reply_to":"baa201ad_d0de986c","updated":"2014-10-07 08:32:45.000000000","message":"Done","commit_id":"6dd7cbbe63c9e23c4f96fd3464a7202b15f82ce8"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"437d0e70f43bf9e4b92053772c47f9aac242cb4b","unresolved":false,"context_lines":[{"line_number":42,"context_line":"                parts \u003d column[2:].split(\"+\", 2)"},{"line_number":43,"context_line":"                parts.extend(parts.pop(2).split(\"!\"))"},{"line_number":44,"context_line":"                column \u003d hbase_utils.prepare_key(*parts)"},{"line_number":45,"context_line":"                updated_columns[column_prefix + column] \u003d value"},{"line_number":46,"context_line":"        resource_table.delete(row, columns)"},{"line_number":47,"context_line":"        resource_table.put(row, updated_columns)"},{"line_number":48,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"baa201ad_7065ecb3","line":45,"updated":"2014-10-06 13:26:56.000000000","message":"Maybe it\u0027s better to change an order: put then delete?\nIf smth goes wrong we may lost data","commit_id":"6dd7cbbe63c9e23c4f96fd3464a7202b15f82ce8"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"db69fd029c4578365a435693d4d2070b751cf63e","unresolved":false,"context_lines":[{"line_number":42,"context_line":"                parts \u003d column[2:].split(\"+\", 2)"},{"line_number":43,"context_line":"                parts.extend(parts.pop(2).split(\"!\"))"},{"line_number":44,"context_line":"                column \u003d hbase_utils.prepare_key(*parts)"},{"line_number":45,"context_line":"                updated_columns[column_prefix + column] \u003d value"},{"line_number":46,"context_line":"        resource_table.delete(row, columns)"},{"line_number":47,"context_line":"        resource_table.put(row, updated_columns)"},{"line_number":48,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"baa201ad_d8b30ce7","line":45,"in_reply_to":"baa201ad_7065ecb3","updated":"2014-10-07 08:32:45.000000000","message":"Done","commit_id":"6dd7cbbe63c9e23c4f96fd3464a7202b15f82ce8"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"437d0e70f43bf9e4b92053772c47f9aac242cb4b","unresolved":false,"context_lines":[{"line_number":58,"context_line":"                    \"\u0027regexstring:[\\\\w\\\\._-]*_\\\\d{19}_\\\\w*\u0027)\")"},{"line_number":59,"context_line":"    gen \u003d meter_table.scan(filter\u003dmeter_filter)"},{"line_number":60,"context_line":"    for row, data in gen:"},{"line_number":61,"context_line":"        parts \u003d row.rsplit(\u0027_\u0027, 2)"},{"line_number":62,"context_line":"        meter_table.delete(row)"},{"line_number":63,"context_line":"        row \u003d hbase_utils.prepare_key(*parts)"},{"line_number":64,"context_line":"        meter_table.put(row, data)"}],"source_content_type":"text/x-python","patch_set":7,"id":"baa201ad_106ae080","line":61,"updated":"2014-10-06 13:26:56.000000000","message":"the same here and forth","commit_id":"6dd7cbbe63c9e23c4f96fd3464a7202b15f82ce8"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"db69fd029c4578365a435693d4d2070b751cf63e","unresolved":false,"context_lines":[{"line_number":58,"context_line":"                    \"\u0027regexstring:[\\\\w\\\\._-]*_\\\\d{19}_\\\\w*\u0027)\")"},{"line_number":59,"context_line":"    gen \u003d meter_table.scan(filter\u003dmeter_filter)"},{"line_number":60,"context_line":"    for row, data in gen:"},{"line_number":61,"context_line":"        parts \u003d row.rsplit(\u0027_\u0027, 2)"},{"line_number":62,"context_line":"        meter_table.delete(row)"},{"line_number":63,"context_line":"        row \u003d hbase_utils.prepare_key(*parts)"},{"line_number":64,"context_line":"        meter_table.put(row, data)"}],"source_content_type":"text/x-python","patch_set":7,"id":"baa201ad_f8cb7050","line":61,"in_reply_to":"baa201ad_106ae080","updated":"2014-10-07 08:32:45.000000000","message":"Done","commit_id":"6dd7cbbe63c9e23c4f96fd3464a7202b15f82ce8"}],"ceilometer/storage/impl_hbase.py":[{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"0f131d3f4ddbf467a73f40d0ecfd6fd9dd8e077c","unresolved":false,"context_lines":[{"line_number":179,"context_line":"                    LOG.warn(_(\"Cannot create table %(table_name)\""},{"line_number":180,"context_line":"                               \"it have already exists. Ignoring error\")"},{"line_number":181,"context_line":"                             % {\u0027table_name\u0027: table})"},{"line_number":182,"context_line":"        self.migrate_resource_table()"},{"line_number":183,"context_line":"        self.migrate_meter_table()"},{"line_number":184,"context_line":"        self.migrate_event_table()"},{"line_number":185,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1abeadc6_179834bf","line":182,"updated":"2014-08-20 15:49:38.000000000","message":"Ilya, I think it\u0027s better to create a separate file with migrations. Besides, we really need detailed comments like \"There were entries with format bla-bla-bla but this format was changed to abacaba and this method finds entries in previous format using regular expression...\" and so on.","commit_id":"dd87bce9ca15af9b835f1ca30338db9f83d0283e"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"f31c7b3a600ae6cf03cd8826b11db4eda5764460","unresolved":false,"context_lines":[{"line_number":179,"context_line":"                    LOG.warn(_(\"Cannot create table %(table_name)\""},{"line_number":180,"context_line":"                               \"it have already exists. Ignoring error\")"},{"line_number":181,"context_line":"                             % {\u0027table_name\u0027: table})"},{"line_number":182,"context_line":"        self.migrate_resource_table()"},{"line_number":183,"context_line":"        self.migrate_meter_table()"},{"line_number":184,"context_line":"        self.migrate_event_table()"},{"line_number":185,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1abeadc6_bc03c140","line":182,"in_reply_to":"1abeadc6_179834bf","updated":"2014-08-21 12:07:45.000000000","message":"Done","commit_id":"dd87bce9ca15af9b835f1ca30338db9f83d0283e"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"0f131d3f4ddbf467a73f40d0ecfd6fd9dd8e077c","unresolved":false,"context_lines":[{"line_number":183,"context_line":"        self.migrate_meter_table()"},{"line_number":184,"context_line":"        self.migrate_event_table()"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    def migrate_resource_table(self):"},{"line_number":187,"context_line":"        with self.conn_pool.connection() as conn:"},{"line_number":188,"context_line":"            resource_table \u003d conn.table(self.RESOURCE_TABLE)"},{"line_number":189,"context_line":"            resource_filter \u003d (\"QualifierFilter(\u003d, \""}],"source_content_type":"text/x-python","patch_set":1,"id":"1abeadc6_1dccd369","line":186,"updated":"2014-08-20 15:49:38.000000000","message":"Ilya, AFAIU migration may be very slow. And I\u0027d like to sum up the questions that I\u0027m interested in:\n\n\n1. Does conn object have expiration timeout?\n\n\n2. Let\u0027s imagine that there is one vm that is being monitored for a half of the year with polling interval\u003d1min. So we have 13(amount of meters)*24*60*60*180\u003d202176000 entries with m_ prefix. I understand that it\u0027s a corner case but anyway, will it work?\nI used the following script\n\n  table\u003dconn.table(\u0027resource\u0027)\n  gen \u003d table.scan()\n  for row, data in gen:\n    for column, value in data.items():\n      if column.startswith(\u0027f:m_\u0027):\n        sys.getsizeof(column)\n        sys.getsizeof(value) \n\nSo each column is about 90 byte and value is about 60 byte. So in the situation described above updated_columns should contain about 30GB (if my calculations are correct, please check)","commit_id":"dd87bce9ca15af9b835f1ca30338db9f83d0283e"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"f31c7b3a600ae6cf03cd8826b11db4eda5764460","unresolved":false,"context_lines":[{"line_number":183,"context_line":"        self.migrate_meter_table()"},{"line_number":184,"context_line":"        self.migrate_event_table()"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    def migrate_resource_table(self):"},{"line_number":187,"context_line":"        with self.conn_pool.connection() as conn:"},{"line_number":188,"context_line":"            resource_table \u003d conn.table(self.RESOURCE_TABLE)"},{"line_number":189,"context_line":"            resource_filter \u003d (\"QualifierFilter(\u003d, \""}],"source_content_type":"text/x-python","patch_set":1,"id":"1abeadc6_3096f53f","line":186,"in_reply_to":"1abeadc6_1dccd369","updated":"2014-08-21 12:07:45.000000000","message":"1) We can set \u0027timeout\u0027 when getting connection. This arg by default is None and connection don\u0027t expire.","commit_id":"dd87bce9ca15af9b835f1ca30338db9f83d0283e"}]}
