)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"8ceb67a7642626539fecd4ded7399c54a8ef99d8","unresolved":false,"context_lines":[{"line_number":9,"context_line":"This patch drops the foreign key constraints of alarms to user_id and"},{"line_number":10,"context_line":"project_id in sqlalchemy."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Closes-Bug: 1260716"},{"line_number":13,"context_line":"Change-Id: I7336ee1e3f885421db5aae3a30af0e918b79450b"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"AAAAUH%2F%2F8Qw%3D","line":12,"updated":"2014-01-06 13:47:03.000000000","message":"wrong bug number: 1260176","commit_id":"49124d8e5e9e2d107ddc1df6d1587319bea6fc72"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"652dd1d732bcaa003ad7fd3667273a401efbd5e4","unresolved":false,"context_lines":[{"line_number":9,"context_line":"This patch drops the foreign key constraints of alarms to user_id and"},{"line_number":10,"context_line":"project_id in sqlalchemy."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Closes-Bug: 1260716"},{"line_number":13,"context_line":"Change-Id: I7336ee1e3f885421db5aae3a30af0e918b79450b"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"AAAAUH%2F%2F5c4%3D","line":12,"in_reply_to":"AAAAUH%2F%2F8Qw%3D","updated":"2014-01-07 03:45:22.000000000","message":"Done","commit_id":"49124d8e5e9e2d107ddc1df6d1587319bea6fc72"}],"ceilometer/storage/impl_sqlalchemy.py":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"8ceb67a7642626539fecd4ded7399c54a8ef99d8","unresolved":false,"context_lines":[{"line_number":310,"context_line":"            query \u003d session.query(models.User).filter("},{"line_number":311,"context_line":"                ~models.User.id.in_(session.query(models.Meter.user_id)"},{"line_number":312,"context_line":"                                    .group_by(models.Meter.user_id)),"},{"line_number":313,"context_line":"                ~models.User.id.in_(session.query(models.Alarm.user_id)"},{"line_number":314,"context_line":"                                    .group_by(models.Alarm.user_id)),"},{"line_number":315,"context_line":"                ~models.User.id.in_(session.query(models.AlarmChange.user_id)"},{"line_number":316,"context_line":"                                    .group_by(models.AlarmChange.user_id))"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F%2F8Q4%3D","line":313,"updated":"2014-01-06 13:47:03.000000000","message":"i added a check here to ensure we don\u0027t delete User associated with Alarm. do we still need the check here?\n\nsame for Project below","commit_id":"49124d8e5e9e2d107ddc1df6d1587319bea6fc72"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"652dd1d732bcaa003ad7fd3667273a401efbd5e4","unresolved":false,"context_lines":[{"line_number":310,"context_line":"            query \u003d session.query(models.User).filter("},{"line_number":311,"context_line":"                ~models.User.id.in_(session.query(models.Meter.user_id)"},{"line_number":312,"context_line":"                                    .group_by(models.Meter.user_id)),"},{"line_number":313,"context_line":"                ~models.User.id.in_(session.query(models.Alarm.user_id)"},{"line_number":314,"context_line":"                                    .group_by(models.Alarm.user_id)),"},{"line_number":315,"context_line":"                ~models.User.id.in_(session.query(models.AlarmChange.user_id)"},{"line_number":316,"context_line":"                                    .group_by(models.AlarmChange.user_id))"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F%2F5dA%3D","line":313,"in_reply_to":"AAAAUH%2F%2F8Q4%3D","updated":"2014-01-07 03:45:22.000000000","message":"I\u0027ll remove it.","commit_id":"49124d8e5e9e2d107ddc1df6d1587319bea6fc72"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"0a120643f407f55809c378c598a4bab931b74b4a","unresolved":false,"context_lines":[{"line_number":738,"context_line":"            Connection._create_or_update(session, models.User,"},{"line_number":739,"context_line":"                                         alarm.user_id)"},{"line_number":740,"context_line":"            Connection._create_or_update(session, models.Project,"},{"line_number":741,"context_line":"                                         alarm.project_id)"},{"line_number":742,"context_line":"            alarm_row \u003d models.Alarm(id\u003dalarm.alarm_id)"},{"line_number":743,"context_line":"            alarm_row.update(alarm.as_dict())"},{"line_number":744,"context_line":"            session.add(alarm_row)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2FKwM%3D","side":"PARENT","line":741,"updated":"2014-01-16 19:50:14.000000000","message":"is the point of this fix to say user/project attributes are more like metadata for alarm rather than required attributes?","commit_id":"dfed6ac2a38461458a3161635c1886fe68bf3154"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"b3a1f55151a47e08732fe75e2f1e235f7b6cbd96","unresolved":false,"context_lines":[{"line_number":738,"context_line":"            Connection._create_or_update(session, models.User,"},{"line_number":739,"context_line":"                                         alarm.user_id)"},{"line_number":740,"context_line":"            Connection._create_or_update(session, models.Project,"},{"line_number":741,"context_line":"                                         alarm.project_id)"},{"line_number":742,"context_line":"            alarm_row \u003d models.Alarm(id\u003dalarm.alarm_id)"},{"line_number":743,"context_line":"            alarm_row.update(alarm.as_dict())"},{"line_number":744,"context_line":"            session.add(alarm_row)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2FIc4%3D","side":"PARENT","line":741,"in_reply_to":"AAAAUH%2F%2FKwM%3D","updated":"2014-01-17 05:31:40.000000000","message":"To some extent, yes.","commit_id":"dfed6ac2a38461458a3161635c1886fe68bf3154"}],"ceilometer/storage/sqlalchemy/migrate_repo/versions/025_remove_alarm_fk_constraints.py":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"0a120643f407f55809c378c598a4bab931b74b4a","unresolved":false,"context_lines":[{"line_number":44,"context_line":"                      \u0027refcolumns\u0027: [ref_table.c[ref_column_name]]}"},{"line_number":45,"context_line":"            if migrate_engine.name \u003d\u003d \u0027mysql\u0027:"},{"line_number":46,"context_line":"                params[\u0027name\u0027] \u003d \"_\".join((\u0027fk\u0027, table_name, column))"},{"line_number":47,"context_line":"            with migrate_engine.begin():"},{"line_number":48,"context_line":"                fkey \u003d ForeignKeyConstraint(**params)"},{"line_number":49,"context_line":"                fkey.drop()"},{"line_number":50,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2FKvI%3D","line":47,"updated":"2014-01-16 19:50:14.000000000","message":"is this session necessary? i\u0027ve no idea since it\u0027s not used in downgrade. if it is necessary we need to open a bug to fix other scripts as well.","commit_id":"62bc665a170991673df91af5927fe4147180def9"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"b3a1f55151a47e08732fe75e2f1e235f7b6cbd96","unresolved":false,"context_lines":[{"line_number":44,"context_line":"                      \u0027refcolumns\u0027: [ref_table.c[ref_column_name]]}"},{"line_number":45,"context_line":"            if migrate_engine.name \u003d\u003d \u0027mysql\u0027:"},{"line_number":46,"context_line":"                params[\u0027name\u0027] \u003d \"_\".join((\u0027fk\u0027, table_name, column))"},{"line_number":47,"context_line":"            with migrate_engine.begin():"},{"line_number":48,"context_line":"                fkey \u003d ForeignKeyConstraint(**params)"},{"line_number":49,"context_line":"                fkey.drop()"},{"line_number":50,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2FIzc%3D","line":47,"in_reply_to":"AAAAUH%2F%2FKvI%3D","updated":"2014-01-17 05:31:40.000000000","message":"it\u0027s not necessary, thanks for the findings.","commit_id":"62bc665a170991673df91af5927fe4147180def9"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"0a120643f407f55809c378c598a4bab931b74b4a","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        # Save data that conflicted with FK."},{"line_number":61,"context_line":"        columns \u003d [column.copy() for column in table.columns]"},{"line_number":62,"context_line":"        table_dump \u003d Table(\u0027dump025_\u0027 + table_name, meta, *columns)"},{"line_number":63,"context_line":"        table_dump.create()"},{"line_number":64,"context_line":"        for column, ref_table_name, ref_column_name in indexes:"},{"line_number":65,"context_line":"            ref_table \u003d load_tables[ref_table_name]"},{"line_number":66,"context_line":"            subq \u003d select([getattr(ref_table.c, ref_column_name)])"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2FKsE%3D","line":63,"updated":"2014-01-16 19:50:14.000000000","message":"this goes back to 012 migration. do we need to keep dump table around after migration? if the data is bad (doesn\u0027t fit current constraint), do we need to keep it?","commit_id":"62bc665a170991673df91af5927fe4147180def9"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"b3a1f55151a47e08732fe75e2f1e235f7b6cbd96","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        # Save data that conflicted with FK."},{"line_number":61,"context_line":"        columns \u003d [column.copy() for column in table.columns]"},{"line_number":62,"context_line":"        table_dump \u003d Table(\u0027dump025_\u0027 + table_name, meta, *columns)"},{"line_number":63,"context_line":"        table_dump.create()"},{"line_number":64,"context_line":"        for column, ref_table_name, ref_column_name in indexes:"},{"line_number":65,"context_line":"            ref_table \u003d load_tables[ref_table_name]"},{"line_number":66,"context_line":"            subq \u003d select([getattr(ref_table.c, ref_column_name)])"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2FIus%3D","line":63,"in_reply_to":"AAAAUH%2F%2FKsE%3D","updated":"2014-01-17 05:31:40.000000000","message":"Though I don\u0027t see anyone is using the downgrade, I think it\u0027d better to be conservative in deleting data from DB.","commit_id":"62bc665a170991673df91af5927fe4147180def9"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"0a120643f407f55809c378c598a4bab931b74b4a","unresolved":false,"context_lines":[{"line_number":67,"context_line":"            sql \u003d utils.InsertFromSelect(table_dump, table.select().where("},{"line_number":68,"context_line":"                ~ getattr(table.c, column).in_(subq)))"},{"line_number":69,"context_line":"            sql_del \u003d table.delete().where("},{"line_number":70,"context_line":"                ~ getattr(table.c, column).in_(subq))"},{"line_number":71,"context_line":"            migrate_engine.execute(sql)"},{"line_number":72,"context_line":"            migrate_engine.execute(sql_del)"},{"line_number":73,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2FKs0%3D","line":70,"updated":"2014-01-16 19:50:14.000000000","message":"i\u0027m not sure i understand downgrade... it seems to:\n1. create a dump table with same columns...\n2. for each column, insert into dump table all values if they exists in user/project table?\n3. for each column, delete from alarm table all values that exists in user/project table?","commit_id":"62bc665a170991673df91af5927fe4147180def9"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"b3a1f55151a47e08732fe75e2f1e235f7b6cbd96","unresolved":false,"context_lines":[{"line_number":67,"context_line":"            sql \u003d utils.InsertFromSelect(table_dump, table.select().where("},{"line_number":68,"context_line":"                ~ getattr(table.c, column).in_(subq)))"},{"line_number":69,"context_line":"            sql_del \u003d table.delete().where("},{"line_number":70,"context_line":"                ~ getattr(table.c, column).in_(subq))"},{"line_number":71,"context_line":"            migrate_engine.execute(sql)"},{"line_number":72,"context_line":"            migrate_engine.execute(sql_del)"},{"line_number":73,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2FIuI%3D","line":70,"in_reply_to":"AAAAUH%2F%2FKs0%3D","updated":"2014-01-17 05:31:40.000000000","message":"2 should be \u0027for each column, insert into dump table all values if they does NOT matching the id field in user/project table\u0027.\n\n3 should be \u0027for each column, delete from alarm table all values that does NOT matching the id filed  in user/project table\u0027.","commit_id":"62bc665a170991673df91af5927fe4147180def9"}]}
