)]}'
{"nova/db/sqlalchemy/api_migrations/migrate_repo/versions/014_keypairs.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"365b760f8a999d97d2d9164a21617c07face837d","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        Column(\u0027updated_at\u0027, DateTime),"},{"line_number":36,"context_line":"        Column(\u0027id\u0027, Integer, primary_key\u003dTrue, nullable\u003dFalse),"},{"line_number":37,"context_line":"        Column(\u0027name\u0027, String(255), nullable\u003dFalse),"},{"line_number":38,"context_line":"        Column(\u0027user_id\u0027, String(255)),"},{"line_number":39,"context_line":"        Column(\u0027fingerprint\u0027, String(255)),"},{"line_number":40,"context_line":"        Column(\u0027public_key\u0027, Text()),"},{"line_number":41,"context_line":"        Column(\u0027type\u0027, enum, nullable\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":8,"id":"dab17558_10aeb980","line":38,"range":{"start_line":38,"start_character":8,"end_line":38,"end_character":39},"updated":"2016-05-10 18:16:09.000000000","message":"This is in a unique constraint, why not make it nullable\u003dFalse?","commit_id":"e992cc4503b4a11fbbbbc4b65b7ebc452c048ebf"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"586c58c3f9d8609ae14044d927c7f04e632e1e8e","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        Column(\u0027updated_at\u0027, DateTime),"},{"line_number":36,"context_line":"        Column(\u0027id\u0027, Integer, primary_key\u003dTrue, nullable\u003dFalse),"},{"line_number":37,"context_line":"        Column(\u0027name\u0027, String(255), nullable\u003dFalse),"},{"line_number":38,"context_line":"        Column(\u0027user_id\u0027, String(255)),"},{"line_number":39,"context_line":"        Column(\u0027fingerprint\u0027, String(255)),"},{"line_number":40,"context_line":"        Column(\u0027public_key\u0027, Text()),"},{"line_number":41,"context_line":"        Column(\u0027type\u0027, enum, nullable\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":8,"id":"dab17558_b00a4d88","line":38,"range":{"start_line":38,"start_character":8,"end_line":38,"end_character":39},"in_reply_to":"dab17558_10aeb980","updated":"2016-05-10 18:17:48.000000000","message":"Dunno, it wasn\u0027t in the original model.","commit_id":"e992cc4503b4a11fbbbbc4b65b7ebc452c048ebf"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"74c5f1eb4f541beef0e5338315beb2b504319f57","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        Column(\u0027updated_at\u0027, DateTime),"},{"line_number":36,"context_line":"        Column(\u0027id\u0027, Integer, primary_key\u003dTrue, nullable\u003dFalse),"},{"line_number":37,"context_line":"        Column(\u0027name\u0027, String(255), nullable\u003dFalse),"},{"line_number":38,"context_line":"        Column(\u0027user_id\u0027, String(255)),"},{"line_number":39,"context_line":"        Column(\u0027fingerprint\u0027, String(255)),"},{"line_number":40,"context_line":"        Column(\u0027public_key\u0027, Text()),"},{"line_number":41,"context_line":"        Column(\u0027type\u0027, enum, nullable\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":8,"id":"dab17558_4b236fa7","line":38,"range":{"start_line":38,"start_character":8,"end_line":38,"end_character":39},"in_reply_to":"dab17558_b00a4d88","updated":"2016-05-10 18:43:54.000000000","message":"Looks like the REST API always sets it:\n\nhttps://github.com/openstack/nova/blob/master/nova/api/openstack/compute/keypairs.py#L118\n\nAnd we rely on it here in the base patch in this series:\n\nhttps://review.openstack.org/#/c/312750/3/nova/objects/instance.py@872\n\nFor calling this:\n\nhttps://github.com/openstack/nova/blob/master/nova/objects/keypair.py#L61\n\nPlus the unique constraint, so it seems user_id should be nullable\u003dFalse.","commit_id":"e992cc4503b4a11fbbbbc4b65b7ebc452c048ebf"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7f96c9e22c644efe0ff7b487c107177a99b3d7fb","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    meta \u003d MetaData()"},{"line_number":28,"context_line":"    meta.bind \u003d migrate_engine"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    enum \u003d Enum(\u0027ssh\u0027, \u0027x509\u0027, metadata\u003dmeta, name\u003d\u0027keypair_types\u0027)"},{"line_number":31,"context_line":"    enum.create(checkfirst\u003dTrue)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    keypairs \u003d Table(\u0027key_pairs\u0027, meta,"},{"line_number":34,"context_line":"        Column(\u0027created_at\u0027, DateTime),"}],"source_content_type":"text/x-python","patch_set":11,"id":"dab17558_ed3d0e90","line":31,"range":{"start_line":30,"start_character":4,"end_line":31,"end_character":32},"updated":"2016-05-11 00:07:45.000000000","message":"Matches https://github.com/openstack/nova/blob/51a60d3084d0f736fef6dc3b42e4001c62dfdbd1/nova/db/sqlalchemy/migrate_repo/versions/275_add_keypair_type.py so that looks good.","commit_id":"8109d9af6f29bbd583eff1b801ce21fdc528efd5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7f96c9e22c644efe0ff7b487c107177a99b3d7fb","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    enum \u003d Enum(\u0027ssh\u0027, \u0027x509\u0027, metadata\u003dmeta, name\u003d\u0027keypair_types\u0027)"},{"line_number":31,"context_line":"    enum.create(checkfirst\u003dTrue)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    keypairs \u003d Table(\u0027key_pairs\u0027, meta,"},{"line_number":34,"context_line":"        Column(\u0027created_at\u0027, DateTime),"},{"line_number":35,"context_line":"        Column(\u0027updated_at\u0027, DateTime),"},{"line_number":36,"context_line":"        Column(\u0027id\u0027, Integer, primary_key\u003dTrue, nullable\u003dFalse),"}],"source_content_type":"text/x-python","patch_set":11,"id":"dab17558_adeca6f3","line":33,"updated":"2016-05-11 00:07:45.000000000","message":"The rest looks good compared to https://github.com/openstack/nova/blob/51a60d3084d0f736fef6dc3b42e4001c62dfdbd1/nova/db/sqlalchemy/migrate_repo/versions/216_havana.py#L647","commit_id":"8109d9af6f29bbd583eff1b801ce21fdc528efd5"}],"nova/db/sqlalchemy/api_models.py":[{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"a3761f61cd9817e7f8818fbaf8271e1b564eaba1","unresolved":false,"context_lines":[{"line_number":218,"context_line":"    fingerprint \u003d Column(String(255))"},{"line_number":219,"context_line":"    public_key \u003d Column(Text())"},{"line_number":220,"context_line":"    type \u003d Column(Enum(\u0027ssh\u0027, \u0027x509\u0027, name\u003d\u0027keypair_types\u0027),"},{"line_number":221,"context_line":"                  nullable\u003dFalse, server_default\u003d\u0027ssh\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"dab17558_67450416","line":221,"range":{"start_line":221,"start_character":49,"end_line":221,"end_character":54},"updated":"2016-05-09 21:27:48.000000000","message":"It\u0027s odd that this isn\u0027t using keypair.KEYPAIR_TYPE_SSH like the migration does. Though this matches the original migration/model.","commit_id":"b795379eaa31210a46f6d1fd6ece3a2241ba9296"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7f96c9e22c644efe0ff7b487c107177a99b3d7fb","unresolved":false,"context_lines":[{"line_number":213,"context_line":""},{"line_number":214,"context_line":"    name \u003d Column(String(255), nullable\u003dFalse)"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"    user_id \u003d Column(String(255), nullable\u003dFalse)"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"    fingerprint \u003d Column(String(255))"},{"line_number":219,"context_line":"    public_key \u003d Column(Text())"}],"source_content_type":"text/x-python","patch_set":11,"id":"dab17558_0d3972a4","line":216,"range":{"start_line":216,"start_character":34,"end_line":216,"end_character":48},"updated":"2016-05-11 00:07:45.000000000","message":"At some point we should probably also do this in the keypair object too, but it will require cleaning up unit tests that aren\u0027t setting user_id when creating fake keypair objects, so we can save that for a separate change.","commit_id":"8109d9af6f29bbd583eff1b801ce21fdc528efd5"}]}
