)]}'
{"nova/db/sqlalchemy/migrate_repo/versions/213_sync_quota_usages.py":[{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"919b7d74135532cc19ebc3b0a14ca3ce0f7ba28d","unresolved":false,"context_lines":[{"line_number":171,"context_line":"                quota_usages.c.resource \u003d\u003d resource)).execute().fetchall()"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"    if not quota:"},{"line_number":174,"context_line":"        quota_usages.insert().values(created_at\u003dnow, updated_at\u003dnow,"},{"line_number":175,"context_line":"                project_id\u003dproject_id, resource\u003dresource, in_use\u003din_use,"},{"line_number":176,"context_line":"                reserved\u003d0, deleted\u003d0, user_id\u003duser_id).execute()"},{"line_number":177,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAASn%2F%2F5gg%3D","line":174,"updated":"2013-08-28 08:47:38.000000000","message":"Why we modify updated_at column in insert?","commit_id":"9b48c238f151c12b1228951472bff8f07fa78d15"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"d726162f4ee4335a7aa6d4bda116a619d420e128","unresolved":false,"context_lines":[{"line_number":171,"context_line":"                quota_usages.c.resource \u003d\u003d resource)).execute().fetchall()"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"    if not quota:"},{"line_number":174,"context_line":"        quota_usages.insert().values(created_at\u003dnow, updated_at\u003dnow,"},{"line_number":175,"context_line":"                project_id\u003dproject_id, resource\u003dresource, in_use\u003din_use,"},{"line_number":176,"context_line":"                reserved\u003d0, deleted\u003d0, user_id\u003duser_id).execute()"},{"line_number":177,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAASn%2F%2F3wQ%3D","line":174,"in_reply_to":"AAAASn%2F%2F4Y8%3D","updated":"2013-08-28 16:04:55.000000000","message":"Yes, you are right. But was possible to use something like\n\n(user_usages[resource].updated_at or user_usages[resource].created_at)\n\nfor example in line 3019  sqlalchemy api.","commit_id":"9b48c238f151c12b1228951472bff8f07fa78d15"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"ecca5074df0d6b2a59992325c451844696e6b8f8","unresolved":false,"context_lines":[{"line_number":171,"context_line":"                quota_usages.c.resource \u003d\u003d resource)).execute().fetchall()"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"    if not quota:"},{"line_number":174,"context_line":"        quota_usages.insert().values(created_at\u003dnow, updated_at\u003dnow,"},{"line_number":175,"context_line":"                project_id\u003dproject_id, resource\u003dresource, in_use\u003din_use,"},{"line_number":176,"context_line":"                reserved\u003d0, deleted\u003d0, user_id\u003duser_id).execute()"},{"line_number":177,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAASn%2F%2F4Y8%3D","line":174,"in_reply_to":"AAAASn%2F%2F5gg%3D","updated":"2013-08-28 13:38:35.000000000","message":"This matches what happens on a create.  And because there\u0027s some logic for updated_at on quota_usages it should be set during creation.  See _quota_usage_create in the sqlalchemy api.","commit_id":"9b48c238f151c12b1228951472bff8f07fa78d15"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"919b7d74135532cc19ebc3b0a14ca3ce0f7ba28d","unresolved":false,"context_lines":[{"line_number":184,"context_line":"def downgrade(migrate_engine):"},{"line_number":185,"context_line":"    # This is syncing quotas with up to date information, there\u0027s no action"},{"line_number":186,"context_line":"    # to revert this."},{"line_number":187,"context_line":"    pass"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAASn%2F%2F5g4%3D","line":187,"updated":"2013-08-28 08:47:38.000000000","message":"Please use:\n\nraise NotImplementedError(\u0027Downgrade from version 213 not supported\u0027)","commit_id":"9b48c238f151c12b1228951472bff8f07fa78d15"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"ecca5074df0d6b2a59992325c451844696e6b8f8","unresolved":false,"context_lines":[{"line_number":184,"context_line":"def downgrade(migrate_engine):"},{"line_number":185,"context_line":"    # This is syncing quotas with up to date information, there\u0027s no action"},{"line_number":186,"context_line":"    # to revert this."},{"line_number":187,"context_line":"    pass"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAASn%2F%2F4Y0%3D","line":187,"in_reply_to":"AAAASn%2F%2F5g4%3D","updated":"2013-08-28 13:38:35.000000000","message":"Will do.","commit_id":"9b48c238f151c12b1228951472bff8f07fa78d15"}],"nova/db/sqlalchemy/migrate_repo/versions/214_sync_quota_usages.py":[{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"658fb2da1595259e07956c6a39f617b132b5ba34","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    res_tuples \u003d select(columns\u003d[reservations.c.uuid],"},{"line_number":58,"context_line":"            from_obj\u003d[reservations.join(quota_usages,"},{"line_number":59,"context_line":"                reservations.c.usage_id \u003d\u003d quota_usages.c.id)],"},{"line_number":60,"context_line":"            whereclause\u003dquota_usages.c.user_id \u003d\u003d None).execute().fetchall()"},{"line_number":61,"context_line":"    res_uuids \u003d [uuid[0] for uuid in res_tuples]"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    delete(reservations,"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAASn%2F%2Fy2E%3D","line":60,"updated":"2013-08-29 14:25:13.000000000","message":"It would be cleaner to build up res_uuids with an iterator rather than calling fetchall() to create a list of tuples that you then throw away.\n\nBut this only *really* matters if there\u0027s a ton of data in these tables.","commit_id":"3a54315a541753452e3669ca76bc33fc3e3b7921"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"9be171d084e7cdc3feade30ac5099bde3de098e3","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    res_tuples \u003d select(columns\u003d[reservations.c.uuid],"},{"line_number":58,"context_line":"            from_obj\u003d[reservations.join(quota_usages,"},{"line_number":59,"context_line":"                reservations.c.usage_id \u003d\u003d quota_usages.c.id)],"},{"line_number":60,"context_line":"            whereclause\u003dquota_usages.c.user_id \u003d\u003d None).execute().fetchall()"},{"line_number":61,"context_line":"    res_uuids \u003d [uuid[0] for uuid in res_tuples]"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    delete(reservations,"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAASn%2F%2Fw7U%3D","line":60,"in_reply_to":"AAAASn%2F%2Fy2E%3D","updated":"2013-08-29 21:12:30.000000000","message":"Good call, will update.","commit_id":"3a54315a541753452e3669ca76bc33fc3e3b7921"},{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"658fb2da1595259e07956c6a39f617b132b5ba34","unresolved":false,"context_lines":[{"line_number":71,"context_line":"    res_tuples \u003d select(columns\u003d[reservations.c.uuid],"},{"line_number":72,"context_line":"            from_obj\u003d[reservations.join(quota_usages,"},{"line_number":73,"context_line":"                reservations.c.usage_id \u003d\u003d quota_usages.c.id)],"},{"line_number":74,"context_line":"            whereclause\u003dquota_usages.c.user_id !\u003d None).execute().fetchall()"},{"line_number":75,"context_line":"    res_uuids \u003d [uuid[0] for uuid in res_tuples]"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    delete(reservations,"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAASn%2F%2Fy18%3D","line":74,"updated":"2013-08-29 14:25:13.000000000","message":"See above comment.","commit_id":"3a54315a541753452e3669ca76bc33fc3e3b7921"},{"author":{"_account_id":7069,"name":"Joshua Hesketh","email":"josh@nitrotech.org","username":"jhesketh"},"change_message_id":"31eaf52417618119c56aa0828e67a13dc626ef09","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        res_uuids.append(uuid)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    delete(reservations,"},{"line_number":67,"context_line":"            whereclause\u003dreservations.c.uuid.in_(res_uuids)).execute()"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    delete(quota_usages, whereclause\u003dand_(quota_usages.c.user_id \u003d\u003d None,"},{"line_number":70,"context_line":"        quota_usages.c.resource \u003d\u003d resource)).execute()"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAASn%2F%2FvSo%3D","line":67,"updated":"2013-08-30 06:50:20.000000000","message":"SAWarning: The IN-predicate on \"reservations.uuid\" was invoked with an empty sequence. This results in a contradiction, which nonetheless can be expensive to evaluate.  Consider alternative strategies for improved performance.\n\nMake sure res_uuids aren\u0027t empty.","commit_id":"08a4079b14b0dac7a210b12454fed6c86dff6e4e"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"25c6f24b00fd17a13380c6de2fa50af309f2148c","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        res_uuids.append(uuid)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    delete(reservations,"},{"line_number":67,"context_line":"            whereclause\u003dreservations.c.uuid.in_(res_uuids)).execute()"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    delete(quota_usages, whereclause\u003dand_(quota_usages.c.user_id \u003d\u003d None,"},{"line_number":70,"context_line":"        quota_usages.c.resource \u003d\u003d resource)).execute()"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAASn%2F%2FhsA%3D","line":67,"in_reply_to":"AAAASn%2F%2FvSo%3D","updated":"2013-09-03 20:11:31.000000000","message":"Good catch, thanks.","commit_id":"08a4079b14b0dac7a210b12454fed6c86dff6e4e"},{"author":{"_account_id":7069,"name":"Joshua Hesketh","email":"josh@nitrotech.org","username":"jhesketh"},"change_message_id":"31eaf52417618119c56aa0828e67a13dc626ef09","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        res_uuids.append(uuid)"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    delete(reservations,"},{"line_number":84,"context_line":"            whereclause\u003dreservations.c.uuid.in_(res_uuids)).execute()"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    delete(quota_usages, whereclause\u003dand_(quota_usages.c.user_id !\u003d None,"},{"line_number":87,"context_line":"        quota_usages.c.resource \u003d\u003d resource)).execute()"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAASn%2F%2FvSk%3D","line":84,"updated":"2013-08-30 06:50:20.000000000","message":"Ditto","commit_id":"08a4079b14b0dac7a210b12454fed6c86dff6e4e"},{"author":{"_account_id":7069,"name":"Joshua Hesketh","email":"josh@nitrotech.org","username":"jhesketh"},"change_message_id":"31eaf52417618119c56aa0828e67a13dc626ef09","unresolved":false,"context_lines":[{"line_number":174,"context_line":"    quota \u003d select(columns\u003d[quota_usages.c.user_id],"},{"line_number":175,"context_line":"            whereclause\u003dand_(quota_usages.c.user_id \u003d\u003d user_id,"},{"line_number":176,"context_line":"                quota_usages.c.project_id \u003d\u003d project_id,"},{"line_number":177,"context_line":"                quota_usages.c.resource \u003d\u003d resource)).execute().fetchall()"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"    if not quota:"},{"line_number":180,"context_line":"        quota_usages.insert().values(created_at\u003dnow, updated_at\u003dnow,"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAASn%2F%2FvPM%3D","line":177,"updated":"2013-08-30 06:50:20.000000000","message":"Consider using fetchone() incase there is a large amount of rows to update we don\u0027t need to fetch them all.","commit_id":"08a4079b14b0dac7a210b12454fed6c86dff6e4e"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"25c6f24b00fd17a13380c6de2fa50af309f2148c","unresolved":false,"context_lines":[{"line_number":174,"context_line":"    quota \u003d select(columns\u003d[quota_usages.c.user_id],"},{"line_number":175,"context_line":"            whereclause\u003dand_(quota_usages.c.user_id \u003d\u003d user_id,"},{"line_number":176,"context_line":"                quota_usages.c.project_id \u003d\u003d project_id,"},{"line_number":177,"context_line":"                quota_usages.c.resource \u003d\u003d resource)).execute().fetchall()"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"    if not quota:"},{"line_number":180,"context_line":"        quota_usages.insert().values(created_at\u003dnow, updated_at\u003dnow,"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAASn%2F%2Fhrk%3D","line":177,"in_reply_to":"AAAASn%2F%2FvPM%3D","updated":"2013-09-03 20:11:31.000000000","message":"There should only be one or zero rows here, but fetchone makes more sense conceptually since that\u0027s the case.","commit_id":"08a4079b14b0dac7a210b12454fed6c86dff6e4e"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"eb666b865e93a26bbe62b58b6dfa7e16a7bbcaec","unresolved":false,"context_lines":[{"line_number":190,"context_line":"def downgrade(migrate_engine):"},{"line_number":191,"context_line":"    # This is syncing quotas with up to date information, there\u0027s no action"},{"line_number":192,"context_line":"    # to revert this."},{"line_number":193,"context_line":"    raise NotImplementedError(\u0027Downgrade from version 213 not supported\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAASn%2F%2FvRs%3D","line":193,"updated":"2013-08-30 06:36:38.000000000","message":"I\u0027m not super keen on this. Another migration in review now keeps deleted data in a backup table. Could we either do that or recalculate current quota usage in the old format here?","commit_id":"08a4079b14b0dac7a210b12454fed6c86dff6e4e"},{"author":{"_account_id":7069,"name":"Joshua Hesketh","email":"josh@nitrotech.org","username":"jhesketh"},"change_message_id":"31eaf52417618119c56aa0828e67a13dc626ef09","unresolved":false,"context_lines":[{"line_number":190,"context_line":"def downgrade(migrate_engine):"},{"line_number":191,"context_line":"    # This is syncing quotas with up to date information, there\u0027s no action"},{"line_number":192,"context_line":"    # to revert this."},{"line_number":193,"context_line":"    raise NotImplementedError(\u0027Downgrade from version 213 not supported\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAASn%2F%2FvTA%3D","line":193,"updated":"2013-08-30 06:50:20.000000000","message":"This also stops the downgrade from working at all. It\u0027ll pass tests because of line #402 in test_migrations.py.\n\nThis method should just pass. I don\u0027t believe there is any harm in going back a version and then upgrading again in terms of the sync.","commit_id":"08a4079b14b0dac7a210b12454fed6c86dff6e4e"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"25c6f24b00fd17a13380c6de2fa50af309f2148c","unresolved":false,"context_lines":[{"line_number":190,"context_line":"def downgrade(migrate_engine):"},{"line_number":191,"context_line":"    # This is syncing quotas with up to date information, there\u0027s no action"},{"line_number":192,"context_line":"    # to revert this."},{"line_number":193,"context_line":"    raise NotImplementedError(\u0027Downgrade from version 213 not supported\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAASn%2F%2FhoA%3D","line":193,"in_reply_to":"AAAASn%2F%2FvRs%3D","updated":"2013-09-03 20:11:31.000000000","message":"I could setup a backup table, though the small discussion on the devlist about this so far seems to be against it.  I\u0027m going to push up again without that and then see what it would take to set that up.\n\nRecalculating the data before the migration won\u0027t be possible because it doesn\u0027t line up with any reality.  But quota_usages are recalculated in the sqlalchemy api in quota_reserve() so I don\u0027t think a recalculation here is too scary.","commit_id":"08a4079b14b0dac7a210b12454fed6c86dff6e4e"},{"author":{"_account_id":7069,"name":"Joshua Hesketh","email":"josh@nitrotech.org","username":"jhesketh"},"change_message_id":"c1fac7851a4b9a7bdcfc99d9f0bafc502e3ed85d","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    res_query \u003d select(columns\u003d[reservations.c.uuid],"},{"line_number":58,"context_line":"            from_obj\u003d[reservations.join(quota_usages,"},{"line_number":59,"context_line":"                reservations.c.usage_id \u003d\u003d quota_usages.c.id)],"},{"line_number":60,"context_line":"            whereclause\u003dquota_usages.c.user_id \u003d\u003d None)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    res_uuids \u003d []"},{"line_number":63,"context_line":"    for (uuid,) in res_query.execute():"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAASn%2F%2FJso%3D","line":60,"updated":"2013-09-11 01:52:31.000000000","message":"Will this delete project level usages that have user_id set as None?\n\nSee https://review.openstack.org/#/c/42966/6/nova/db/sqlalchemy/api.py\n\nAs raised by Yingjun Li in the list you started on -dev.","commit_id":"91527e1b0648ec32a6f1e92c0f7bf0fa085ac349"},{"author":{"_account_id":7069,"name":"Joshua Hesketh","email":"josh@nitrotech.org","username":"jhesketh"},"change_message_id":"c1fac7851a4b9a7bdcfc99d9f0bafc502e3ed85d","unresolved":false,"context_lines":[{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    if len(res_uuids) \u003e 0:"},{"line_number":67,"context_line":"        delete(reservations,"},{"line_number":68,"context_line":"                whereclause\u003dreservations.c.uuid.in_(res_uuids)).execute()"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    delete(quota_usages, whereclause\u003dand_(quota_usages.c.user_id \u003d\u003d None,"},{"line_number":71,"context_line":"        quota_usages.c.resource \u003d\u003d resource)).execute()"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAASn%2F%2FNEI%3D","line":68,"updated":"2013-09-11 01:52:31.000000000","message":"If you use a model_query you might be able select and delete the rows in one command (http://docs.sqlalchemy.org/ru/latest/orm/query.html#sqlalchemy.orm.query.Query.delete)\n\nNot a blocker imo","commit_id":"91527e1b0648ec32a6f1e92c0f7bf0fa085ac349"},{"author":{"_account_id":7069,"name":"Joshua Hesketh","email":"josh@nitrotech.org","username":"jhesketh"},"change_message_id":"c1fac7851a4b9a7bdcfc99d9f0bafc502e3ed85d","unresolved":false,"context_lines":[{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    if len(res_uuids) \u003e 0:"},{"line_number":85,"context_line":"        delete(reservations,"},{"line_number":86,"context_line":"                whereclause\u003dreservations.c.uuid.in_(res_uuids)).execute()"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    delete(quota_usages, whereclause\u003dand_(quota_usages.c.user_id !\u003d None,"},{"line_number":89,"context_line":"        quota_usages.c.resource \u003d\u003d resource)).execute()"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAASn%2F%2FNEE%3D","line":86,"updated":"2013-09-11 01:52:31.000000000","message":"ditto","commit_id":"91527e1b0648ec32a6f1e92c0f7bf0fa085ac349"},{"author":{"_account_id":7069,"name":"Joshua Hesketh","email":"josh@nitrotech.org","username":"jhesketh"},"change_message_id":"c1fac7851a4b9a7bdcfc99d9f0bafc502e3ed85d","unresolved":false,"context_lines":[{"line_number":192,"context_line":"def downgrade(migrate_engine):"},{"line_number":193,"context_line":"    # This is syncing quotas with up to date information, there\u0027s no action"},{"line_number":194,"context_line":"    # to revert this."},{"line_number":195,"context_line":"    pass"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAASn%2F%2FJsI%3D","line":195,"updated":"2013-09-11 01:52:31.000000000","message":"I actually would like to see a downgrade for this. I\u0027ve raised the question on how we should handle downgrades on the mailing list and we haven\u0027t made much progress on the discussion. As such this is a matter of personal opinion but I quite like the approach taken here: https://review.openstack.org/#/c/39685/33/nova/db/sqlalchemy/migrate_repo/versions/214_convert_some_text_to_varchar.py","commit_id":"91527e1b0648ec32a6f1e92c0f7bf0fa085ac349"}],"nova/tests/db/test_migrations.py":[{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"ac943ebe5758e400863861c66bbd0c8bcea56b9a","unresolved":false,"context_lines":[{"line_number":2794,"context_line":"        return ret"},{"line_number":2795,"context_line":""},{"line_number":2796,"context_line":"    def _pre_upgrade_212(self, engine):"},{"line_number":2797,"context_line":"        tables \u003d [\u0027instance_system_metadata\u0027, \u0027instances\u0027, \u0027security_groups\u0027,"},{"line_number":2798,"context_line":"                \u0027floating_ips\u0027, \u0027fixed_ips\u0027, \u0027networks\u0027, \u0027quota_usages\u0027]"},{"line_number":2799,"context_line":"        change_tables \u003d dict((table, db_utils.get_table(engine, table))"},{"line_number":2800,"context_line":"                             for table in tables)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAASX%2F%2F%2Bhc%3D","line":2797,"updated":"2013-08-23 00:23:28.000000000","message":"Don\u0027t think \u0027instance_system_metadata\u0027 table is required here..","commit_id":"f257dc23709970c965bee1f0dfd784b90455a48e"},{"author":{"_account_id":7069,"name":"Joshua Hesketh","email":"josh@nitrotech.org","username":"jhesketh"},"change_message_id":"c1fac7851a4b9a7bdcfc99d9f0bafc502e3ed85d","unresolved":false,"context_lines":[{"line_number":2954,"context_line":"        delete_tables \u003d dict((table, db_utils.get_table(engine, table))"},{"line_number":2955,"context_line":"                             for table in tables)"},{"line_number":2956,"context_line":"        for table in tables:"},{"line_number":2957,"context_line":"            delete_tables[table].delete().execute()"},{"line_number":2958,"context_line":""},{"line_number":2959,"context_line":"        tables \u003d [\u0027instances\u0027, \u0027security_groups\u0027, \u0027floating_ips\u0027, \u0027fixed_ips\u0027,"},{"line_number":2960,"context_line":"                \u0027networks\u0027, \u0027quota_usages\u0027]"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAASn%2F%2FJuE%3D","line":2957,"updated":"2013-09-11 01:52:31.000000000","message":"Could you please explain why you are deleting these tables?","commit_id":"91527e1b0648ec32a6f1e92c0f7bf0fa085ac349"},{"author":{"_account_id":7069,"name":"Joshua Hesketh","email":"josh@nitrotech.org","username":"jhesketh"},"change_message_id":"c1fac7851a4b9a7bdcfc99d9f0bafc502e3ed85d","unresolved":false,"context_lines":[{"line_number":2957,"context_line":"            delete_tables[table].delete().execute()"},{"line_number":2958,"context_line":""},{"line_number":2959,"context_line":"        tables \u003d [\u0027instances\u0027, \u0027security_groups\u0027, \u0027floating_ips\u0027, \u0027fixed_ips\u0027,"},{"line_number":2960,"context_line":"                \u0027networks\u0027, \u0027quota_usages\u0027]"},{"line_number":2961,"context_line":"        change_tables \u003d dict((table, db_utils.get_table(engine, table))"},{"line_number":2962,"context_line":"                             for table in tables)"},{"line_number":2963,"context_line":"        data \u003d self._data_214()"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAASn%2F%2FJuI%3D","line":2960,"updated":"2013-09-11 01:52:31.000000000","message":"Why not use data.keys()?","commit_id":"91527e1b0648ec32a6f1e92c0f7bf0fa085ac349"}]}
