)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"09c194b6839fc44dcf192db4e2fa77949008273e","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add the object and db table for storing the data needed to hydrate an"},{"line_number":10,"context_line":"object for list/show."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I8755e57c0ea9afd1c83751dea75cca640e304ab0"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"fa69d971_41401b07","line":11,"updated":"2016-01-06 17:36:18.000000000","message":"Link to bp cells-scheduling-interaction.","commit_id":"32bceb48020b128a2955d947e8875518daac38a3"}],"nova/db/sqlalchemy/api_migrations/migrate_repo/versions/006_build_request.py":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"84ef1df220861c348f64da61cc3e041cd4f0cb2a","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        Column(\u0027updated_at\u0027, DateTime),"},{"line_number":41,"context_line":"        Column(\u0027id\u0027, Integer, primary_key\u003dTrue, nullable\u003dFalse),"},{"line_number":42,"context_line":"        Column(\u0027request_spec_id\u0027, Integer, nullable\u003dFalse),"},{"line_number":43,"context_line":"        Column(\u0027instance_uuid\u0027, String(36), nullable\u003dFalse),"},{"line_number":44,"context_line":"        Column(\u0027project_id\u0027, String(length\u003d255), nullable\u003dFalse),"},{"line_number":45,"context_line":"        Column(\u0027user_id\u0027, String(length\u003d255), nullable\u003dFalse),"},{"line_number":46,"context_line":"        Column(\u0027display_name\u0027, String(length\u003d255), nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":12,"id":"bae84128_2112ec09","line":43,"updated":"2016-02-25 16:19:19.000000000","message":"we already store the instance uuid in the request_spec table directly, so I wonder why you need here too ?","commit_id":"b4aea40521746caeef9a84c9fe452f73a6962ed4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"56c89db260683cad4589b5f9a42fb9ca0673b541","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        Column(\u0027updated_at\u0027, DateTime),"},{"line_number":41,"context_line":"        Column(\u0027id\u0027, Integer, primary_key\u003dTrue, nullable\u003dFalse),"},{"line_number":42,"context_line":"        Column(\u0027request_spec_id\u0027, Integer, nullable\u003dFalse),"},{"line_number":43,"context_line":"        Column(\u0027instance_uuid\u0027, String(36), nullable\u003dFalse),"},{"line_number":44,"context_line":"        Column(\u0027project_id\u0027, String(length\u003d255), nullable\u003dFalse),"},{"line_number":45,"context_line":"        Column(\u0027user_id\u0027, String(length\u003d255), nullable\u003dFalse),"},{"line_number":46,"context_line":"        Column(\u0027display_name\u0027, String(length\u003d255), nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":12,"id":"bae84128_c7beb0fe","line":43,"in_reply_to":"bae84128_2112ec09","updated":"2016-02-25 16:47:01.000000000","message":"I tend to agree here, if this table has a foreign key on request_specs and request_spec_id is nullable\u003dFalse and request_specs has a unique constraint on a non-nullable instance_uuid, then we should just lookup that information from the request_specs table.","commit_id":"b4aea40521746caeef9a84c9fe452f73a6962ed4"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"84ef1df220861c348f64da61cc3e041cd4f0cb2a","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        Column(\u0027request_spec_id\u0027, Integer, nullable\u003dFalse),"},{"line_number":43,"context_line":"        Column(\u0027instance_uuid\u0027, String(36), nullable\u003dFalse),"},{"line_number":44,"context_line":"        Column(\u0027project_id\u0027, String(length\u003d255), nullable\u003dFalse),"},{"line_number":45,"context_line":"        Column(\u0027user_id\u0027, String(length\u003d255), nullable\u003dFalse),"},{"line_number":46,"context_line":"        Column(\u0027display_name\u0027, String(length\u003d255), nullable\u003dTrue),"},{"line_number":47,"context_line":"        Column(\u0027instance_metadata\u0027, Text, nullable\u003dTrue),"},{"line_number":48,"context_line":"        Column(\u0027progress\u0027, Integer),"}],"source_content_type":"text/x-python","patch_set":12,"id":"bae84128_e1bc84dd","line":45,"range":{"start_line":45,"start_character":46,"end_line":45,"end_character":61},"updated":"2016-02-25 16:19:19.000000000","message":"nit: this is not necessary since it\u0027s the default value","commit_id":"b4aea40521746caeef9a84c9fe452f73a6962ed4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8133fb91cc063fddddb007fa5d3293fffcd62699","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        Column(\u0027request_spec_id\u0027, Integer, nullable\u003dFalse),"},{"line_number":43,"context_line":"        Column(\u0027instance_uuid\u0027, String(36), nullable\u003dFalse),"},{"line_number":44,"context_line":"        Column(\u0027project_id\u0027, String(length\u003d255), nullable\u003dFalse),"},{"line_number":45,"context_line":"        Column(\u0027user_id\u0027, String(length\u003d255), nullable\u003dFalse),"},{"line_number":46,"context_line":"        Column(\u0027display_name\u0027, String(length\u003d255), nullable\u003dTrue),"},{"line_number":47,"context_line":"        Column(\u0027instance_metadata\u0027, Text, nullable\u003dTrue),"},{"line_number":48,"context_line":"        Column(\u0027progress\u0027, Integer),"}],"source_content_type":"text/x-python","patch_set":12,"id":"9aed3d3a_ff43bf6a","line":45,"range":{"start_line":45,"start_character":46,"end_line":45,"end_character":61},"in_reply_to":"bae84128_e1bc84dd","updated":"2016-02-25 17:03:51.000000000","message":"Actually nullable\u003dTrue is the default:\n\nhttp://docs.sqlalchemy.org/en/rel_1_0/core/metadata.html?highlight\u003dnullable#sqlalchemy.schema.Column.params.nullable","commit_id":"b4aea40521746caeef9a84c9fe452f73a6962ed4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"56c89db260683cad4589b5f9a42fb9ca0673b541","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        Column(\u0027instance_uuid\u0027, String(36), nullable\u003dFalse),"},{"line_number":44,"context_line":"        Column(\u0027project_id\u0027, String(length\u003d255), nullable\u003dFalse),"},{"line_number":45,"context_line":"        Column(\u0027user_id\u0027, String(length\u003d255), nullable\u003dFalse),"},{"line_number":46,"context_line":"        Column(\u0027display_name\u0027, String(length\u003d255), nullable\u003dTrue),"},{"line_number":47,"context_line":"        Column(\u0027instance_metadata\u0027, Text, nullable\u003dTrue),"},{"line_number":48,"context_line":"        Column(\u0027progress\u0027, Integer),"},{"line_number":49,"context_line":"        Column(\u0027vm_state\u0027, String(length\u003d255), nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":12,"id":"bae84128_6c906b4f","line":46,"range":{"start_line":46,"start_character":51,"end_line":46,"end_character":64},"updated":"2016-02-25 16:47:01.000000000","message":"nullable\u003dTrue is the default so we usually omit it.","commit_id":"b4aea40521746caeef9a84c9fe452f73a6962ed4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"56c89db260683cad4589b5f9a42fb9ca0673b541","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        Column(\u0027project_id\u0027, String(length\u003d255), nullable\u003dFalse),"},{"line_number":45,"context_line":"        Column(\u0027user_id\u0027, String(length\u003d255), nullable\u003dFalse),"},{"line_number":46,"context_line":"        Column(\u0027display_name\u0027, String(length\u003d255), nullable\u003dTrue),"},{"line_number":47,"context_line":"        Column(\u0027instance_metadata\u0027, Text, nullable\u003dTrue),"},{"line_number":48,"context_line":"        Column(\u0027progress\u0027, Integer),"},{"line_number":49,"context_line":"        Column(\u0027vm_state\u0027, String(length\u003d255), nullable\u003dTrue),"},{"line_number":50,"context_line":"        Column(\u0027task_state\u0027, String(length\u003d255), nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":12,"id":"bae84128_0cd39f39","line":47,"updated":"2016-02-25 16:47:01.000000000","message":"So this is just the serialized user data passed in on the build request? I realize this table\u0027s definition is basically copying the instances table from the nova db, but in that case instance_metadata is a separate table with key/value pairs. I suppose we serialize here to avoid that (sort of like the stuff that\u0027s stored in the instance_extra table in the nova db).","commit_id":"b4aea40521746caeef9a84c9fe452f73a6962ed4"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"4e0037c875ee6dba81204d5176974f7a6c81eda1","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        Column(\u0027project_id\u0027, String(length\u003d255), nullable\u003dFalse),"},{"line_number":45,"context_line":"        Column(\u0027user_id\u0027, String(length\u003d255), nullable\u003dFalse),"},{"line_number":46,"context_line":"        Column(\u0027display_name\u0027, String(length\u003d255), nullable\u003dTrue),"},{"line_number":47,"context_line":"        Column(\u0027instance_metadata\u0027, Text, nullable\u003dTrue),"},{"line_number":48,"context_line":"        Column(\u0027progress\u0027, Integer),"},{"line_number":49,"context_line":"        Column(\u0027vm_state\u0027, String(length\u003d255), nullable\u003dTrue),"},{"line_number":50,"context_line":"        Column(\u0027task_state\u0027, String(length\u003d255), nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":12,"id":"9aed3d3a_530c6442","line":47,"in_reply_to":"bae84128_0cd39f39","updated":"2016-02-25 18:07:40.000000000","message":"Right. This is just temporary storage for request data until the instance has been scheduled and can be written fully to the myriad tables involved. There\u0027s no need for the complexity of multiple tables here since this is purely for display in the API.","commit_id":"b4aea40521746caeef9a84c9fe452f73a6962ed4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"56c89db260683cad4589b5f9a42fb9ca0673b541","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        Column(\u0027user_id\u0027, String(length\u003d255), nullable\u003dFalse),"},{"line_number":46,"context_line":"        Column(\u0027display_name\u0027, String(length\u003d255), nullable\u003dTrue),"},{"line_number":47,"context_line":"        Column(\u0027instance_metadata\u0027, Text, nullable\u003dTrue),"},{"line_number":48,"context_line":"        Column(\u0027progress\u0027, Integer),"},{"line_number":49,"context_line":"        Column(\u0027vm_state\u0027, String(length\u003d255), nullable\u003dTrue),"},{"line_number":50,"context_line":"        Column(\u0027task_state\u0027, String(length\u003d255), nullable\u003dTrue),"},{"line_number":51,"context_line":"        Column(\u0027image_ref\u0027, String(length\u003d255), nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":12,"id":"bae84128_6cc98b79","line":48,"range":{"start_line":48,"start_character":8,"end_line":48,"end_character":35},"updated":"2016-02-25 16:47:01.000000000","message":"Huh, never seen this before, I guess it\u0027s used to track migration progress.","commit_id":"b4aea40521746caeef9a84c9fe452f73a6962ed4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"56c89db260683cad4589b5f9a42fb9ca0673b541","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        Column(\u0027vm_state\u0027, String(length\u003d255), nullable\u003dTrue),"},{"line_number":50,"context_line":"        Column(\u0027task_state\u0027, String(length\u003d255), nullable\u003dTrue),"},{"line_number":51,"context_line":"        Column(\u0027image_ref\u0027, String(length\u003d255), nullable\u003dTrue),"},{"line_number":52,"context_line":"        Column(\u0027access_ip_v4\u0027, InetSmall(), nullable\u003dTrue),"},{"line_number":53,"context_line":"        Column(\u0027access_ip_v6\u0027, InetSmall(), nullable\u003dTrue),"},{"line_number":54,"context_line":"        Column(\u0027info_cache\u0027, Text, nullable\u003dTrue),"},{"line_number":55,"context_line":"        Column(\u0027security_groups\u0027, Text, nullable\u003dFalse),"}],"source_content_type":"text/x-python","patch_set":12,"id":"bae84128_2c44a319","line":52,"updated":"2016-02-25 16:47:01.000000000","message":"I didn\u0027t really get why InetSmall is used here, but it\u0027s just copied from the instances table in the nova db 216 migration:\n\nhttps://github.com/openstack/nova/blob/9a84211729ef30c1b568856a91b82d581b02688b/nova/db/sqlalchemy/migrate_repo/versions/216_havana.py#L606\n\nSo I\u0027ll quietly bury my head in the sand.","commit_id":"b4aea40521746caeef9a84c9fe452f73a6962ed4"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"4e0037c875ee6dba81204d5176974f7a6c81eda1","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        Column(\u0027vm_state\u0027, String(length\u003d255), nullable\u003dTrue),"},{"line_number":50,"context_line":"        Column(\u0027task_state\u0027, String(length\u003d255), nullable\u003dTrue),"},{"line_number":51,"context_line":"        Column(\u0027image_ref\u0027, String(length\u003d255), nullable\u003dTrue),"},{"line_number":52,"context_line":"        Column(\u0027access_ip_v4\u0027, InetSmall(), nullable\u003dTrue),"},{"line_number":53,"context_line":"        Column(\u0027access_ip_v6\u0027, InetSmall(), nullable\u003dTrue),"},{"line_number":54,"context_line":"        Column(\u0027info_cache\u0027, Text, nullable\u003dTrue),"},{"line_number":55,"context_line":"        Column(\u0027security_groups\u0027, Text, nullable\u003dFalse),"}],"source_content_type":"text/x-python","patch_set":12,"id":"9aed3d3a_4e131b5d","line":52,"in_reply_to":"bae84128_2c44a319","updated":"2016-02-25 18:07:40.000000000","message":"I don\u0027t either but I\u0027m not rocking the boat on it.","commit_id":"b4aea40521746caeef9a84c9fe452f73a6962ed4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"56c89db260683cad4589b5f9a42fb9ca0673b541","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        Column(\u0027image_ref\u0027, String(length\u003d255), nullable\u003dTrue),"},{"line_number":52,"context_line":"        Column(\u0027access_ip_v4\u0027, InetSmall(), nullable\u003dTrue),"},{"line_number":53,"context_line":"        Column(\u0027access_ip_v6\u0027, InetSmall(), nullable\u003dTrue),"},{"line_number":54,"context_line":"        Column(\u0027info_cache\u0027, Text, nullable\u003dTrue),"},{"line_number":55,"context_line":"        Column(\u0027security_groups\u0027, Text, nullable\u003dFalse),"},{"line_number":56,"context_line":"        Column(\u0027config_drive\u0027, Boolean, default\u003dFalse, nullable\u003dFalse),"},{"line_number":57,"context_line":"        Column(\u0027key_name\u0027, String(length\u003d255), nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":12,"id":"bae84128_6c77cb3b","line":54,"range":{"start_line":54,"start_character":8,"end_line":54,"end_character":50},"updated":"2016-02-25 16:47:01.000000000","message":"Similar question/concern like with instance_metadata.","commit_id":"b4aea40521746caeef9a84c9fe452f73a6962ed4"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"4e0037c875ee6dba81204d5176974f7a6c81eda1","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        Column(\u0027image_ref\u0027, String(length\u003d255), nullable\u003dTrue),"},{"line_number":52,"context_line":"        Column(\u0027access_ip_v4\u0027, InetSmall(), nullable\u003dTrue),"},{"line_number":53,"context_line":"        Column(\u0027access_ip_v6\u0027, InetSmall(), nullable\u003dTrue),"},{"line_number":54,"context_line":"        Column(\u0027info_cache\u0027, Text, nullable\u003dTrue),"},{"line_number":55,"context_line":"        Column(\u0027security_groups\u0027, Text, nullable\u003dFalse),"},{"line_number":56,"context_line":"        Column(\u0027config_drive\u0027, Boolean, default\u003dFalse, nullable\u003dFalse),"},{"line_number":57,"context_line":"        Column(\u0027key_name\u0027, String(length\u003d255), nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":12,"id":"9aed3d3a_6e1a5f70","line":54,"range":{"start_line":54,"start_character":8,"end_line":54,"end_character":50},"in_reply_to":"bae84128_6c77cb3b","updated":"2016-02-25 18:07:40.000000000","message":"Same reason.","commit_id":"b4aea40521746caeef9a84c9fe452f73a6962ed4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"56c89db260683cad4589b5f9a42fb9ca0673b541","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        Column(\u0027access_ip_v6\u0027, InetSmall(), nullable\u003dTrue),"},{"line_number":54,"context_line":"        Column(\u0027info_cache\u0027, Text, nullable\u003dTrue),"},{"line_number":55,"context_line":"        Column(\u0027security_groups\u0027, Text, nullable\u003dFalse),"},{"line_number":56,"context_line":"        Column(\u0027config_drive\u0027, Boolean, default\u003dFalse, nullable\u003dFalse),"},{"line_number":57,"context_line":"        Column(\u0027key_name\u0027, String(length\u003d255), nullable\u003dTrue),"},{"line_number":58,"context_line":"        Column(\u0027locked_by\u0027, Enum(\u0027owner\u0027, \u0027admin\u0027,"},{"line_number":59,"context_line":"            name\u003d\u0027build_requests0locked_by\u0027), nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":12,"id":"bae84128_8c54cf54","line":56,"range":{"start_line":56,"start_character":8,"end_line":56,"end_character":71},"updated":"2016-02-25 16:47:01.000000000","message":"I guess this matches:\n\n    cfg.BoolOpt(\u0027force_config_drive\u0027,\n                help\u003d\u0027Force injection to take place on a config drive\u0027,\n                default\u003dFalse),","commit_id":"b4aea40521746caeef9a84c9fe452f73a6962ed4"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"4e0037c875ee6dba81204d5176974f7a6c81eda1","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        Column(\u0027access_ip_v6\u0027, InetSmall(), nullable\u003dTrue),"},{"line_number":54,"context_line":"        Column(\u0027info_cache\u0027, Text, nullable\u003dTrue),"},{"line_number":55,"context_line":"        Column(\u0027security_groups\u0027, Text, nullable\u003dFalse),"},{"line_number":56,"context_line":"        Column(\u0027config_drive\u0027, Boolean, default\u003dFalse, nullable\u003dFalse),"},{"line_number":57,"context_line":"        Column(\u0027key_name\u0027, String(length\u003d255), nullable\u003dTrue),"},{"line_number":58,"context_line":"        Column(\u0027locked_by\u0027, Enum(\u0027owner\u0027, \u0027admin\u0027,"},{"line_number":59,"context_line":"            name\u003d\u0027build_requests0locked_by\u0027), nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":12,"id":"9aed3d3a_ce9a8bc5","line":56,"range":{"start_line":56,"start_character":8,"end_line":56,"end_character":71},"in_reply_to":"bae84128_8c54cf54","updated":"2016-02-25 18:07:40.000000000","message":"The user can specify whether or not the instance uses a config drive. On the instance model this is a string where \u0027\u0027 is false and \u0027True\u0027 is true. John asked for this to be a boolean because that makes more sense. The conversion between this field and what the API passes in or expects out happens in later patches.","commit_id":"b4aea40521746caeef9a84c9fe452f73a6962ed4"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"84ef1df220861c348f64da61cc3e041cd4f0cb2a","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        Column(\u0027security_groups\u0027, Text, nullable\u003dFalse),"},{"line_number":56,"context_line":"        Column(\u0027config_drive\u0027, Boolean, default\u003dFalse, nullable\u003dFalse),"},{"line_number":57,"context_line":"        Column(\u0027key_name\u0027, String(length\u003d255), nullable\u003dTrue),"},{"line_number":58,"context_line":"        Column(\u0027locked_by\u0027, Enum(\u0027owner\u0027, \u0027admin\u0027,"},{"line_number":59,"context_line":"            name\u003d\u0027build_requests0locked_by\u0027), nullable\u003dTrue),"},{"line_number":60,"context_line":"        UniqueConstraint(\u0027instance_uuid\u0027,"},{"line_number":61,"context_line":"            name\u003d\u0027uniq_build_requests0instance_uuid\u0027),"}],"source_content_type":"text/x-python","patch_set":12,"id":"bae84128_e1064484","line":58,"range":{"start_line":58,"start_character":34,"end_line":58,"end_character":50},"updated":"2016-02-25 16:19:19.000000000","message":"well, I\u0027m not really liking to have owner/admin since we have some RBAC policies that can be better and not just that.\nWhy not providing the user_id rather ?","commit_id":"b4aea40521746caeef9a84c9fe452f73a6962ed4"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"2c36b28dd8ad1994f3679b2f62959be5317ca23c","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        Column(\u0027security_groups\u0027, Text, nullable\u003dFalse),"},{"line_number":56,"context_line":"        Column(\u0027config_drive\u0027, Boolean, default\u003dFalse, nullable\u003dFalse),"},{"line_number":57,"context_line":"        Column(\u0027key_name\u0027, String(length\u003d255), nullable\u003dTrue),"},{"line_number":58,"context_line":"        Column(\u0027locked_by\u0027, Enum(\u0027owner\u0027, \u0027admin\u0027,"},{"line_number":59,"context_line":"            name\u003d\u0027build_requests0locked_by\u0027), nullable\u003dTrue),"},{"line_number":60,"context_line":"        UniqueConstraint(\u0027instance_uuid\u0027,"},{"line_number":61,"context_line":"            name\u003d\u0027uniq_build_requests0instance_uuid\u0027),"}],"source_content_type":"text/x-python","patch_set":12,"id":"bae84128_07fff801","line":58,"range":{"start_line":58,"start_character":34,"end_line":58,"end_character":50},"in_reply_to":"bae84128_e1064484","updated":"2016-02-25 16:39:03.000000000","message":"So, I missed the point that https://github.com/openstack/nova/blob/8f1201676b93b4b8a97a37d58525f8594bdf034a/nova/db/sqlalchemy/models.py#L305\n\nSnap, I don\u0027t like Enums for that, but fair enough since it\u0027s already the case...","commit_id":"b4aea40521746caeef9a84c9fe452f73a6962ed4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"56c89db260683cad4589b5f9a42fb9ca0673b541","unresolved":false,"context_lines":[{"line_number":59,"context_line":"            name\u003d\u0027build_requests0locked_by\u0027), nullable\u003dTrue),"},{"line_number":60,"context_line":"        UniqueConstraint(\u0027instance_uuid\u0027,"},{"line_number":61,"context_line":"            name\u003d\u0027uniq_build_requests0instance_uuid\u0027),"},{"line_number":62,"context_line":"        Index(\u0027build_request_project_id_idx\u0027, \u0027project_id\u0027),"},{"line_number":63,"context_line":"        ForeignKeyConstraint(columns\u003d[\u0027request_spec_id\u0027],"},{"line_number":64,"context_line":"            refcolumns\u003d[request_specs.c.id]),"},{"line_number":65,"context_line":"        mysql_engine\u003d\u0027InnoDB\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"bae84128_2744bc19","line":62,"range":{"start_line":62,"start_character":15,"end_line":62,"end_character":28},"updated":"2016-02-25 16:47:01.000000000","message":"build_requests","commit_id":"b4aea40521746caeef9a84c9fe452f73a6962ed4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"56c89db260683cad4589b5f9a42fb9ca0673b541","unresolved":false,"context_lines":[{"line_number":67,"context_line":"    )"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    # NOTE(mriedem): DB2 creates an index when a unique constraint is created"},{"line_number":70,"context_line":"    # so trying to add a second index on the host column will fail with error"},{"line_number":71,"context_line":"    # SQL0605W, so omit the index in the case of DB2."},{"line_number":72,"context_line":"    if migrate_engine.name !\u003d \u0027ibm_db_sa\u0027:"},{"line_number":73,"context_line":"        Index(\u0027build_request_instance_uuid_idx\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"bae84128_ac2f1387","line":70,"range":{"start_line":70,"start_character":45,"end_line":70,"end_character":49},"updated":"2016-02-25 16:47:01.000000000","message":"instance_uuid","commit_id":"b4aea40521746caeef9a84c9fe452f73a6962ed4"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"924485667d822215aeaa6e1b0169e753825f5099","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        ForeignKeyConstraint(columns\u003d[\u0027request_spec_id\u0027],"},{"line_number":63,"context_line":"            refcolumns\u003d[request_specs.c.id]),"},{"line_number":64,"context_line":"        mysql_engine\u003d\u0027InnoDB\u0027,"},{"line_number":65,"context_line":"        mysql_charset\u003d\u0027utf8\u0027"},{"line_number":66,"context_line":"    )"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    build_requests.create(checkfirst\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":13,"id":"9aed3d3a_de94f4e9","line":65,"updated":"2016-02-25 19:38:35.000000000","message":"So I wonder if we should remove the FK and just denormalize the relationship (since we already have an UC for the RequestSpec)","commit_id":"08148ccd09ce6ff3e622240ecb28ff655f6e8bcd"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"e449bcfe352ba1236be64a0720d02dcda7fb83ac","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        ForeignKeyConstraint(columns\u003d[\u0027request_spec_id\u0027],"},{"line_number":63,"context_line":"            refcolumns\u003d[request_specs.c.id]),"},{"line_number":64,"context_line":"        mysql_engine\u003d\u0027InnoDB\u0027,"},{"line_number":65,"context_line":"        mysql_charset\u003d\u0027utf8\u0027"},{"line_number":66,"context_line":"    )"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    build_requests.create(checkfirst\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":13,"id":"9aed3d3a_bcb93831","line":65,"in_reply_to":"9aed3d3a_9e06ec1e","updated":"2016-02-25 20:04:20.000000000","message":"Given the IRC discussion, I feel it\u0027s OK to leave that FK, since the entries are short-lived.","commit_id":"08148ccd09ce6ff3e622240ecb28ff655f6e8bcd"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7be4e5b3912c57e5a6bc51c864d64db8113ad069","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        ForeignKeyConstraint(columns\u003d[\u0027request_spec_id\u0027],"},{"line_number":63,"context_line":"            refcolumns\u003d[request_specs.c.id]),"},{"line_number":64,"context_line":"        mysql_engine\u003d\u0027InnoDB\u0027,"},{"line_number":65,"context_line":"        mysql_charset\u003d\u0027utf8\u0027"},{"line_number":66,"context_line":"    )"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    build_requests.create(checkfirst\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":13,"id":"9aed3d3a_9e06ec1e","line":65,"in_reply_to":"9aed3d3a_de94f4e9","updated":"2016-02-25 19:42:18.000000000","message":"Having foreign keys like this seems par for the course. We don\u0027t do cascading deletes so FKeys matter less....but I\u0027d be OK with leaving this in here. At least there is a UC for the FKey (which DB2 cares about).","commit_id":"08148ccd09ce6ff3e622240ecb28ff655f6e8bcd"}],"nova/db/sqlalchemy/api_models.py":[{"author":{"_account_id":18247,"name":"Mark Doffman","email":"mdoffman@linux.vnet.ibm.com","username":"doffm"},"change_message_id":"81010526b1a3548360760d04437494f01fc594a5","unresolved":false,"context_lines":[{"line_number":106,"context_line":"            nullable\u003dFalse)"},{"line_number":107,"context_line":"    request_spec \u003d orm.relationship(RequestSpec,"},{"line_number":108,"context_line":"            foreign_keys\u003drequest_spec_id,"},{"line_number":109,"context_line":"            primaryjoin\u003drequest_spec_id \u003d\u003d RequestSpec.id)"},{"line_number":110,"context_line":"    instance_uuid \u003d Column(String(36), nullable\u003dFalse)"},{"line_number":111,"context_line":"    project_id \u003d Column(String(255), nullable\u003dFalse)"},{"line_number":112,"context_line":"    user_id \u003d Column(String(255), nullable\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a57f1b5_96735115","line":109,"updated":"2016-02-10 20:44:16.000000000","message":"From reading the versioned object patch I believe that it is neccessary to eagerly load this attribute.\n\ntry adding the keyword argument \u0027lazy\u003dFalse\u0027 to the orm.relationship arguments.","commit_id":"684eafda30507b5d0b43789110e4de71ee360de6"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"866a75cfd71720c90ee4516604534596c2edaa34","unresolved":false,"context_lines":[{"line_number":106,"context_line":"            nullable\u003dFalse)"},{"line_number":107,"context_line":"    request_spec \u003d orm.relationship(RequestSpec,"},{"line_number":108,"context_line":"            foreign_keys\u003drequest_spec_id,"},{"line_number":109,"context_line":"            primaryjoin\u003drequest_spec_id \u003d\u003d RequestSpec.id)"},{"line_number":110,"context_line":"    instance_uuid \u003d Column(String(36), nullable\u003dFalse)"},{"line_number":111,"context_line":"    project_id \u003d Column(String(255), nullable\u003dFalse)"},{"line_number":112,"context_line":"    user_id \u003d Column(String(255), nullable\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a57f1b5_00d11323","line":109,"in_reply_to":"3a57f1b5_96735115","updated":"2016-02-11 22:11:50.000000000","message":"I tried this and it did not work. After speaking with zzzeek I learned that the lazy parameter only affects loads, not saves.","commit_id":"684eafda30507b5d0b43789110e4de71ee360de6"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"ca358f45c508f52e2230e49140b155dbadac4720","unresolved":false,"context_lines":[{"line_number":119,"context_line":"    access_ip_v6 \u003d Column(types.IPAddress(), nullable\u003dTrue)"},{"line_number":120,"context_line":"    info_cache \u003d Column(Text, nullable\u003dTrue)"},{"line_number":121,"context_line":"    security_groups \u003d Column(Text, nullable\u003dFalse)"},{"line_number":122,"context_line":"    config_drive \u003d Column(String(255))"},{"line_number":123,"context_line":"    key_name \u003d Column(String(255), nullable\u003dTrue)"},{"line_number":124,"context_line":"    locked_by \u003d Column(Enum(\u0027owner\u0027, \u0027admin\u0027), nullable\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":9,"id":"bae84128_c509ac33","line":122,"updated":"2016-02-19 18:51:41.000000000","message":"I was just wondering, could this just be a boolean?","commit_id":"bfcba4845a9a6e4bca56628c038c74e3642cbeee"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"d5912db4fc5597fc1013a2e66f859037240aeaef","unresolved":false,"context_lines":[{"line_number":119,"context_line":"    access_ip_v6 \u003d Column(types.IPAddress(), nullable\u003dTrue)"},{"line_number":120,"context_line":"    info_cache \u003d Column(Text, nullable\u003dTrue)"},{"line_number":121,"context_line":"    security_groups \u003d Column(Text, nullable\u003dFalse)"},{"line_number":122,"context_line":"    config_drive \u003d Column(String(255))"},{"line_number":123,"context_line":"    key_name \u003d Column(String(255), nullable\u003dTrue)"},{"line_number":124,"context_line":"    locked_by \u003d Column(Enum(\u0027owner\u0027, \u0027admin\u0027), nullable\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":9,"id":"bae84128_5b67f824","line":122,"in_reply_to":"bae84128_90bb6072","updated":"2016-02-22 11:29:14.000000000","message":"I actually like us fixing this bit, as it will kinda be where the API -\u003e DB first happens, and this fixes up the mess a little. Sorry if thats a PITA.","commit_id":"bfcba4845a9a6e4bca56628c038c74e3642cbeee"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"9ba553aa20aacf0b97a93eb7f96b49aea65998a3","unresolved":false,"context_lines":[{"line_number":119,"context_line":"    access_ip_v6 \u003d Column(types.IPAddress(), nullable\u003dTrue)"},{"line_number":120,"context_line":"    info_cache \u003d Column(Text, nullable\u003dTrue)"},{"line_number":121,"context_line":"    security_groups \u003d Column(Text, nullable\u003dFalse)"},{"line_number":122,"context_line":"    config_drive \u003d Column(String(255))"},{"line_number":123,"context_line":"    key_name \u003d Column(String(255), nullable\u003dTrue)"},{"line_number":124,"context_line":"    locked_by \u003d Column(Enum(\u0027owner\u0027, \u0027admin\u0027), nullable\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":9,"id":"bae84128_90bb6072","line":122,"in_reply_to":"bae84128_c509ac33","updated":"2016-02-19 19:07:36.000000000","message":"It could be, it just diverges from Instance which this is emulating. I\u0027ll need to write a compatibility layer in the object.","commit_id":"bfcba4845a9a6e4bca56628c038c74e3642cbeee"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"56c89db260683cad4589b5f9a42fb9ca0673b541","unresolved":false,"context_lines":[{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    __tablename__ \u003d \u0027build_requests\u0027"},{"line_number":147,"context_line":"    __table_args__ \u003d ("},{"line_number":148,"context_line":"        Index(\u0027build_request_instance_uuid_idx\u0027, \u0027instance_uuid\u0027),"},{"line_number":149,"context_line":"        Index(\u0027build_request_project_id_idx\u0027, \u0027project_id\u0027),"},{"line_number":150,"context_line":"        schema.UniqueConstraint(\u0027instance_uuid\u0027,"},{"line_number":151,"context_line":"            name\u003d\u0027uniq_build_requests0instance_uuid\u0027)"}],"source_content_type":"text/x-python","patch_set":12,"id":"bae84128_a750ccd5","line":148,"range":{"start_line":148,"start_character":15,"end_line":148,"end_character":28},"updated":"2016-02-25 16:47:01.000000000","message":"build_requests","commit_id":"b4aea40521746caeef9a84c9fe452f73a6962ed4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"56c89db260683cad4589b5f9a42fb9ca0673b541","unresolved":false,"context_lines":[{"line_number":160,"context_line":"    instance_uuid \u003d Column(String(36), nullable\u003dFalse)"},{"line_number":161,"context_line":"    project_id \u003d Column(String(255), nullable\u003dFalse)"},{"line_number":162,"context_line":"    user_id \u003d Column(String(255), nullable\u003dFalse)"},{"line_number":163,"context_line":"    display_name \u003d Column(String(255), nullable\u003dTrue)"},{"line_number":164,"context_line":"    instance_metadata \u003d Column(Text, nullable\u003dTrue)"},{"line_number":165,"context_line":"    progress \u003d Column(Integer)"},{"line_number":166,"context_line":"    vm_state \u003d Column(String(255), nullable\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":12,"id":"bae84128_27295c38","line":163,"range":{"start_line":163,"start_character":39,"end_line":163,"end_character":52},"updated":"2016-02-25 16:47:01.000000000","message":"nullabe\u003dTrue is the default so you don\u0027t need to list it throughout here.","commit_id":"b4aea40521746caeef9a84c9fe452f73a6962ed4"}]}
