)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"5fa8f57dee3cb2713c9be4dff421f1c9362a8ea0","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     whoami-rajat \u003crajatdhasmana@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2019-12-03 09:55:45 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix: Purge volume record when attachment exists"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Due to a leftover attachment record of a deleted volume,"},{"line_number":10,"context_line":"While purging the deleted volume entries, the DB throws"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"3fa7e38b_8fc64415","line":7,"range":{"start_line":7,"start_character":0,"end_line":7,"end_character":47},"updated":"2019-12-03 16:09:57.000000000","message":"This summary doesn\u0027t seem to really describe what this does -- this is about deleting more info from the db at volume delete time and not about the purge operation itself.","commit_id":"d71ae24b0af1da8028201eeb119be0e3943a0fad"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"83c238e0b637ef584a19bfe9508b62f96c8805f1","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     whoami-rajat \u003crajatdhasmana@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2019-12-03 09:55:45 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix: Purge volume record when attachment exists"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Due to a leftover attachment record of a deleted volume,"},{"line_number":10,"context_line":"While purging the deleted volume entries, the DB throws"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"3fa7e38b_96bdf8b2","line":7,"range":{"start_line":7,"start_character":0,"end_line":7,"end_character":47},"in_reply_to":"3fa7e38b_8fc64415","updated":"2019-12-03 19:15:25.000000000","message":"Done","commit_id":"d71ae24b0af1da8028201eeb119be0e3943a0fad"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"b4808bf47d969cd343dd2a6abc6c1ff192daea2e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"3fa7e38b_07e5d106","line":24,"updated":"2020-01-09 16:49:07.000000000","message":"I was still confused by this commit message.  Maybe something like this would be more clear:\n\nMake volume soft delete more thorough\n\nWhen a volume record is soft-deleted in the database, dependent records in other tables (for example, Transfers, VolumeGlanceMetadata, etc.) must be soft deleted as well.  Otherwise, we will get FK dependency errors when the database is purged.\n\nThis patch adds that support for VolumeAttachment table.\n(other tables were already covered, just refactored)","commit_id":"bcd81f2bbfbdf13ec58e659263802a2dd67861e7"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"5b52a94cbe6ee3efbc194c2b8cbb15ad75846355","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"3fa7e38b_35202cf8","line":24,"in_reply_to":"3fa7e38b_07e5d106","updated":"2020-01-10 06:48:51.000000000","message":"Done","commit_id":"bcd81f2bbfbdf13ec58e659263802a2dd67861e7"}],"cinder/db/sqlalchemy/api.py":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"b4808bf47d969cd343dd2a6abc6c1ff192daea2e","unresolved":false,"context_lines":[{"line_number":1673,"context_line":"                      \u0027updated_at\u0027: literal_column(\u0027updated_at\u0027),"},{"line_number":1674,"context_line":"                      \u0027migration_status\u0027: None}"},{"line_number":1675,"context_line":"    with session.begin():"},{"line_number":1676,"context_line":"        for model in models_to_delete:"},{"line_number":1677,"context_line":"            if model \u003d\u003d models.Volume:"},{"line_number":1678,"context_line":"                model_query(context, model, session\u003dsession).\\"},{"line_number":1679,"context_line":"                    filter_by(id\u003dvolume_id).\\"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_a7b5ddd1","line":1676,"updated":"2020-01-09 16:49:07.000000000","message":"This is a matter of taste, so I don\u0027t insist on this change.  I\u0027d rename \u0027models_to_delete \u0027 to \u0027dependent_models\u0027 and remove models.Volume from the list.  Then instead of having the branch inside the loop, I\u0027d handle models.Volume outside the loop, and then loop over dependent_models.  I think that would make it more obvious what\u0027s going on here, but like I said, it\u0027s more a matter of taste than a correctness issue.","commit_id":"bcd81f2bbfbdf13ec58e659263802a2dd67861e7"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"5b52a94cbe6ee3efbc194c2b8cbb15ad75846355","unresolved":false,"context_lines":[{"line_number":1673,"context_line":"                      \u0027updated_at\u0027: literal_column(\u0027updated_at\u0027),"},{"line_number":1674,"context_line":"                      \u0027migration_status\u0027: None}"},{"line_number":1675,"context_line":"    with session.begin():"},{"line_number":1676,"context_line":"        for model in models_to_delete:"},{"line_number":1677,"context_line":"            if model \u003d\u003d models.Volume:"},{"line_number":1678,"context_line":"                model_query(context, model, session\u003dsession).\\"},{"line_number":1679,"context_line":"                    filter_by(id\u003dvolume_id).\\"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_b5797cfb","line":1676,"in_reply_to":"3fa7e38b_a7b5ddd1","updated":"2020-01-10 06:48:51.000000000","message":"Done","commit_id":"bcd81f2bbfbdf13ec58e659263802a2dd67861e7"}],"cinder/tests/unit/db/test_orm_relationships.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a592f3b0d550f913848a7964bdbcd5fca153054e","unresolved":false,"context_lines":[{"line_number":40,"context_line":"            found_dependent_models.append(saf.get_class_by_table("},{"line_number":41,"context_line":"                volume_declarative_base, table))"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        self.assertEqual(len(found_dependent_models),"},{"line_number":44,"context_line":"                         len(db_api.VOLUME_DEPENDENT_MODELS))"},{"line_number":45,"context_line":"        for model in found_dependent_models:"},{"line_number":46,"context_line":"            self.assertIn(model, db_api.VOLUME_DEPENDENT_MODELS)"}],"source_content_type":"text/x-python","patch_set":8,"id":"3fa7e38b_8ae9afe5","line":43,"range":{"start_line":43,"start_character":13,"end_line":43,"end_character":24},"updated":"2020-01-12 08:02:56.000000000","message":"nit: assertEqual arg order should be (EXPECTED, ACTUAL)","commit_id":"a5bb17bdfc8af4df08ccce759bedcfd16bc7fe15"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"e6cf2e2af43076d939f2080770c844bb36e93921","unresolved":false,"context_lines":[{"line_number":40,"context_line":"            found_dependent_models.append(saf.get_class_by_table("},{"line_number":41,"context_line":"                volume_declarative_base, table))"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        self.assertEqual(len(found_dependent_models),"},{"line_number":44,"context_line":"                         len(db_api.VOLUME_DEPENDENT_MODELS))"},{"line_number":45,"context_line":"        for model in found_dependent_models:"},{"line_number":46,"context_line":"            self.assertIn(model, db_api.VOLUME_DEPENDENT_MODELS)"}],"source_content_type":"text/x-python","patch_set":8,"id":"3fa7e38b_8da4694e","line":43,"range":{"start_line":43,"start_character":13,"end_line":43,"end_character":24},"in_reply_to":"3fa7e38b_8ae9afe5","updated":"2020-01-12 17:47:45.000000000","message":"Yeah, I wasn\u0027t sure about this one.  What I want to check is that the db_api.VOLUME_DEPENDENT_MODELS contains the correct value.  So I was thinking that found_dependent_models is telling me what\u0027s expected, and the db_api.VOLUME_DEPENDENT_MODELS is telling me what\u0027s actually configured.","commit_id":"a5bb17bdfc8af4df08ccce759bedcfd16bc7fe15"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"c07a8f3030480ca88e1a8eeb17492229160f3ed4","unresolved":false,"context_lines":[{"line_number":40,"context_line":"            found_dependent_models.append(saf.get_class_by_table("},{"line_number":41,"context_line":"                volume_declarative_base, table))"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        self.assertEqual(len(found_dependent_models),"},{"line_number":44,"context_line":"                         len(db_api.VOLUME_DEPENDENT_MODELS))"},{"line_number":45,"context_line":"        for model in found_dependent_models:"},{"line_number":46,"context_line":"            self.assertIn(model, db_api.VOLUME_DEPENDENT_MODELS)"}],"source_content_type":"text/x-python","patch_set":8,"id":"3fa7e38b_ed55dd20","line":43,"range":{"start_line":43,"start_character":13,"end_line":43,"end_character":24},"in_reply_to":"3fa7e38b_8da4694e","updated":"2020-01-12 18:02:25.000000000","message":"Oh, that makes sense then. Thanks!","commit_id":"a5bb17bdfc8af4df08ccce759bedcfd16bc7fe15"}]}
