)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"4e5ae98ebc49f7d87dfb45ecfed7f1fedcd7c7f1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"486280cb_5d1489de","updated":"2026-09-17 16:09:11.000000000","message":"Are you trying to actually solve something or just making this change because there\u0027s a TODO for it? Database migrations are sort of always expensive (in potential complexity/risk even if likely to be fast, like this one). Even though this is an obvious change to make, it\u0027s still a schema change...","commit_id":"7236aeddabcda093ec114b917d51c17d73cb9a77"},{"author":{"_account_id":38797,"name":"Eduardo Henrique Lima de Morais","display_name":"Eduardo Morais","email":"eduardo.henrique.lima.morais@gmail.com","username":"Eduardo-Morais"},"change_message_id":"48fe7af9d1b266eee6c51d2d48966edaf4e3f5f2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"43f0b944_7a4f373f","updated":"2026-09-17 12:20:54.000000000","message":"recheck","commit_id":"7236aeddabcda093ec114b917d51c17d73cb9a77"},{"author":{"_account_id":38797,"name":"Eduardo Henrique Lima de Morais","display_name":"Eduardo Morais","email":"eduardo.henrique.lima.morais@gmail.com","username":"Eduardo-Morais"},"change_message_id":"314824769be75c1e7c3d003653344308314e5e35","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"b45a27e0_61b1bcc6","updated":"2026-09-17 22:07:46.000000000","message":"recheck","commit_id":"f29e0c2c318105367cd4ad596a48f73293ea733e"}],"nova/db/api/migrations/versions/67907c436a36_require_instance_uuid_in_build_requests.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"4e5ae98ebc49f7d87dfb45ecfed7f1fedcd7c7f1","unresolved":true,"context_lines":[{"line_number":34,"context_line":"            \u0027instance_uuid\u0027,"},{"line_number":35,"context_line":"            existing_type\u003dsa.String(length\u003d36),"},{"line_number":36,"context_line":"            nullable\u003dFalse"},{"line_number":37,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":5,"id":"67ba56f9_e4416f6c","line":37,"updated":"2026-09-17 16:09:11.000000000","message":"This will fail if there are any records with a NULL value, so at a minimum you need to delete any before executing this in the same operation AFAIK. See the original comment here about why mriedem didn\u0027t do it:\n\nhttps://review.opendev.org/c/openstack/nova/+/651001/comment/7faddb67_b9b067df/\n\nI think at this point it\u0027s probably fine to just nuke any such records, especially since these are short-lived anyway. But, it does add complexity here for very little benefit, which is why he didn\u0027t do it.","commit_id":"7236aeddabcda093ec114b917d51c17d73cb9a77"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6fb2beaca19a40fbc1c143d386ef705ae3243437","unresolved":true,"context_lines":[{"line_number":34,"context_line":"            \u0027instance_uuid\u0027,"},{"line_number":35,"context_line":"            existing_type\u003dsa.String(length\u003d36),"},{"line_number":36,"context_line":"            nullable\u003dFalse"},{"line_number":37,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":5,"id":"e9aa5dbe_93fb2bb6","line":37,"in_reply_to":"502f367d_946079e4","updated":"2026-09-17 17:16:52.000000000","message":"I tend to think things like this (especially DB related) are not worth the trouble if they\u0027re not really fixing something. However, this it a very low-impact table since it should kinda be empty by default which makes it much easier to justify.\n\nSo I dunno, I would wait for more opinions from other reviewers who might feel it\u0027s more worthwhile. But for sure you need to make sure it doesn\u0027t break if there are NULL records, and it\u0027ll need a test for that case, so you might as well do that while you wait for other opinions. Good experience with the tests if nothing else :)","commit_id":"7236aeddabcda093ec114b917d51c17d73cb9a77"},{"author":{"_account_id":38797,"name":"Eduardo Henrique Lima de Morais","display_name":"Eduardo Morais","email":"eduardo.henrique.lima.morais@gmail.com","username":"Eduardo-Morais"},"change_message_id":"a6458e6dd79dd0ce3714e8135a9a647028cac0b0","unresolved":true,"context_lines":[{"line_number":34,"context_line":"            \u0027instance_uuid\u0027,"},{"line_number":35,"context_line":"            existing_type\u003dsa.String(length\u003d36),"},{"line_number":36,"context_line":"            nullable\u003dFalse"},{"line_number":37,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":5,"id":"502f367d_946079e4","line":37,"in_reply_to":"67ba56f9_e4416f6c","updated":"2026-09-17 16:28:58.000000000","message":"I\u0027m a new contributor and I was looking for things to work on. I ended up finding this TODO and thought it would be a good opportunity to get familiar with the codebase and learn more. Thanks for the explanation about the original context of this TODO. Do you think I should continue with this, or just drop it?","commit_id":"7236aeddabcda093ec114b917d51c17d73cb9a77"},{"author":{"_account_id":38797,"name":"Eduardo Henrique Lima de Morais","display_name":"Eduardo Morais","email":"eduardo.henrique.lima.morais@gmail.com","username":"Eduardo-Morais"},"change_message_id":"bf22794e4eef1df2d7f5ff58360a108e4e8e2746","unresolved":false,"context_lines":[{"line_number":34,"context_line":"            \u0027instance_uuid\u0027,"},{"line_number":35,"context_line":"            existing_type\u003dsa.String(length\u003d36),"},{"line_number":36,"context_line":"            nullable\u003dFalse"},{"line_number":37,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":5,"id":"0f87d21d_8dbdea2f","line":37,"in_reply_to":"b6849be8_6486cbbb","updated":"2026-09-18 13:44:45.000000000","message":"Done","commit_id":"7236aeddabcda093ec114b917d51c17d73cb9a77"},{"author":{"_account_id":38797,"name":"Eduardo Henrique Lima de Morais","display_name":"Eduardo Morais","email":"eduardo.henrique.lima.morais@gmail.com","username":"Eduardo-Morais"},"change_message_id":"a5ea7af35019f0327c0ee7fdc3252512951dfe5c","unresolved":true,"context_lines":[{"line_number":34,"context_line":"            \u0027instance_uuid\u0027,"},{"line_number":35,"context_line":"            existing_type\u003dsa.String(length\u003d36),"},{"line_number":36,"context_line":"            nullable\u003dFalse"},{"line_number":37,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":5,"id":"b6849be8_6486cbbb","line":37,"in_reply_to":"e9aa5dbe_93fb2bb6","updated":"2026-09-17 22:07:26.000000000","message":"I implemented the deletion as you suggested, and I also added a check in the tests to verify if there are any null values in the table. This was a great learning experience on how things work, thank you!","commit_id":"7236aeddabcda093ec114b917d51c17d73cb9a77"}],"nova/db/api/migrations/versions/d67eeaabee36_initial_version.py":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"c6840c7e89f9a8f27bbe4285ad78fd59840862a7","unresolved":true,"context_lines":[{"line_number":195,"context_line":"        sa.Column("},{"line_number":196,"context_line":"            \u0027locked_by\u0027,"},{"line_number":197,"context_line":"            sa.Enum(\u0027owner\u0027, \u0027admin\u0027, name\u003d\u0027build_requests0locked_by\u0027)),"},{"line_number":198,"context_line":"        sa.Column(\u0027instance_uuid\u0027, sa.String(length\u003d36), nullable\u003dFalse),"},{"line_number":199,"context_line":"        sa.Column(\u0027instance\u0027, types.MediumText()),"},{"line_number":200,"context_line":"        sa.Column(\u0027block_device_mappings\u0027, types.MediumText()),"},{"line_number":201,"context_line":"        sa.Column(\u0027tags\u0027, sa.Text()),"}],"source_content_type":"text/x-python","patch_set":2,"id":"00630fe1_a15d4af1","line":198,"range":{"start_line":198,"start_character":57,"end_line":198,"end_character":71},"updated":"2026-09-16 14:43:06.000000000","message":"No you should not modify the existing file because that\u0027s not applied in existing db. You need to add a new, independent migration script instead.","commit_id":"7a7a7711d0d15f4374c2998221ffaababa049e57"},{"author":{"_account_id":38797,"name":"Eduardo Henrique Lima de Morais","display_name":"Eduardo Morais","email":"eduardo.henrique.lima.morais@gmail.com","username":"Eduardo-Morais"},"change_message_id":"371428a0c9ac0e5058561b0aee5fcc4a6afb5219","unresolved":false,"context_lines":[{"line_number":195,"context_line":"        sa.Column("},{"line_number":196,"context_line":"            \u0027locked_by\u0027,"},{"line_number":197,"context_line":"            sa.Enum(\u0027owner\u0027, \u0027admin\u0027, name\u003d\u0027build_requests0locked_by\u0027)),"},{"line_number":198,"context_line":"        sa.Column(\u0027instance_uuid\u0027, sa.String(length\u003d36), nullable\u003dFalse),"},{"line_number":199,"context_line":"        sa.Column(\u0027instance\u0027, types.MediumText()),"},{"line_number":200,"context_line":"        sa.Column(\u0027block_device_mappings\u0027, types.MediumText()),"},{"line_number":201,"context_line":"        sa.Column(\u0027tags\u0027, sa.Text()),"}],"source_content_type":"text/x-python","patch_set":2,"id":"e8fc0411_dd91c81f","line":198,"range":{"start_line":198,"start_character":57,"end_line":198,"end_character":71},"in_reply_to":"00630fe1_a15d4af1","updated":"2026-09-16 17:21:58.000000000","message":"Sorry about that, I\u0027m a new contributor. I\u0027ve added the new migration file that applies the change to the DB.","commit_id":"7a7a7711d0d15f4374c2998221ffaababa049e57"}],"nova/db/api/models.py":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"f751a500cdbdf312c8c71322f5a20f03a97111ee","unresolved":true,"context_lines":[{"line_number":292,"context_line":"    )"},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"    id \u003d sa.Column(sa.Integer, primary_key\u003dTrue)"},{"line_number":295,"context_line":"    instance_uuid \u003d sa.Column(sa.String(36), nullable\u003dFalse)"},{"line_number":296,"context_line":"    project_id \u003d sa.Column(sa.String(255), nullable\u003dFalse)"},{"line_number":297,"context_line":"    instance \u003d sa.Column(types.MediumText())"},{"line_number":298,"context_line":"    block_device_mappings \u003d sa.Column(types.MediumText())"}],"source_content_type":"text/x-python","patch_set":1,"id":"a5daeecf_98b0cd93","line":295,"range":{"start_line":295,"start_character":4,"end_line":295,"end_character":60},"updated":"2026-09-16 13:49:02.000000000","message":"This isn\u0027t that simple and you should add a migration script to actually make this column non-nullable in db.\n\nSee nova/db/api/migrations/versions/d67eeaabee36_initial_version.py where this column is defined.\n\n```\n    op.create_table(\n        \u0027build_requests\u0027,\n        ...\n        sa.Column(\u0027instance_uuid\u0027, sa.String(length\u003d36)),\n```","commit_id":"6fb1dc30166f57bae97f922c287671702895ef9c"},{"author":{"_account_id":38797,"name":"Eduardo Henrique Lima de Morais","display_name":"Eduardo Morais","email":"eduardo.henrique.lima.morais@gmail.com","username":"Eduardo-Morais"},"change_message_id":"ad292b1cfd9850a9b49769112fea6a28af098ac9","unresolved":false,"context_lines":[{"line_number":292,"context_line":"    )"},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"    id \u003d sa.Column(sa.Integer, primary_key\u003dTrue)"},{"line_number":295,"context_line":"    instance_uuid \u003d sa.Column(sa.String(36), nullable\u003dFalse)"},{"line_number":296,"context_line":"    project_id \u003d sa.Column(sa.String(255), nullable\u003dFalse)"},{"line_number":297,"context_line":"    instance \u003d sa.Column(types.MediumText())"},{"line_number":298,"context_line":"    block_device_mappings \u003d sa.Column(types.MediumText())"}],"source_content_type":"text/x-python","patch_set":1,"id":"f4efb78c_f541ba09","line":295,"range":{"start_line":295,"start_character":4,"end_line":295,"end_character":60},"in_reply_to":"a5daeecf_98b0cd93","updated":"2026-09-16 14:17:24.000000000","message":"Done","commit_id":"6fb1dc30166f57bae97f922c287671702895ef9c"}]}
