)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b62d5b1933a5fc7690c2691bce6e3074075eaf0a","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2016-05-13 12:39:10 -0700"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add resource provider tables to the api database"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Depends-On: I5f6d88fee47dd87de2867d3947d65b04f0b21e8f"},{"line_number":10,"context_line":"Change-Id: I8324a8b9c5ba640e48b6d6e426f7d8073a1b962b"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"dab17558_0b3207a7","line":8,"updated":"2016-05-16 17:46:05.000000000","message":"We should probably mark this as working against the generic-resource-pools blueprint.","commit_id":"1f6594baa537cc60816305bbe44d94c43b1e6961"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b62d5b1933a5fc7690c2691bce6e3074075eaf0a","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add resource provider tables to the api database"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Depends-On: I5f6d88fee47dd87de2867d3947d65b04f0b21e8f"},{"line_number":10,"context_line":"Change-Id: I8324a8b9c5ba640e48b6d6e426f7d8073a1b962b"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"dab17558_6bdab34c","line":9,"updated":"2016-05-16 17:46:05.000000000","message":"This is merged so you could remove it if you want.","commit_id":"1f6594baa537cc60816305bbe44d94c43b1e6961"}],"nova/db/sqlalchemy/api_migrations/migrate_repo/versions/015_resource_providers.py":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"ed6a0873a67ad126012514ec00a28f323d55f3eb","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        Column(\u0027can_host\u0027, Integer, default\u003d0),"},{"line_number":39,"context_line":"        UniqueConstraint(\u0027uuid\u0027, name\u003d\u0027uniq_resource_providers0uuid\u0027),"},{"line_number":40,"context_line":"        UniqueConstraint(\u0027name\u0027, name\u003d\u0027uniq_resource_providers0name\u0027),"},{"line_number":41,"context_line":"        Index(\u0027resource_providers_name_idx\u0027, \u0027name\u0027),"},{"line_number":42,"context_line":"        mysql_engine\u003d\u0027InnoDB\u0027,"},{"line_number":43,"context_line":"        mysql_charset\u003d\u0027latin1\u0027"},{"line_number":44,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":7,"id":"bab6814e_dd3e65d9","line":41,"updated":"2016-05-19 09:40:47.000000000","message":"Shouldn\u0027t this index be down in the if migrate_engine.name block below?","commit_id":"62232a0926d7e76f557aeb0b9a8394e88c0a951b"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"e10ec1a331db007eea54d197dc045b6b8ff50eb1","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        Column(\u0027can_host\u0027, Integer, default\u003d0),"},{"line_number":39,"context_line":"        UniqueConstraint(\u0027uuid\u0027, name\u003d\u0027uniq_resource_providers0uuid\u0027),"},{"line_number":40,"context_line":"        UniqueConstraint(\u0027name\u0027, name\u003d\u0027uniq_resource_providers0name\u0027),"},{"line_number":41,"context_line":"        Index(\u0027resource_providers_name_idx\u0027, \u0027name\u0027),"},{"line_number":42,"context_line":"        mysql_engine\u003d\u0027InnoDB\u0027,"},{"line_number":43,"context_line":"        mysql_charset\u003d\u0027latin1\u0027"},{"line_number":44,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":7,"id":"bab6814e_9875f999","line":41,"in_reply_to":"bab6814e_dd3e65d9","updated":"2016-05-19 14:02:23.000000000","message":"Yeah, I guess so.","commit_id":"62232a0926d7e76f557aeb0b9a8394e88c0a951b"}],"nova/db/sqlalchemy/api_migrations/migrate_repo/versions/016_resource_providers.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"56ea5bc22b08f19fb01c93ae431df8b26f3f7980","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        Column(\u0027updated_at\u0027, DateTime),"},{"line_number":34,"context_line":"        Column(\u0027id\u0027, Integer, primary_key\u003dTrue, nullable\u003dFalse),"},{"line_number":35,"context_line":"        Column(\u0027uuid\u0027, String(36), nullable\u003dFalse),"},{"line_number":36,"context_line":"        Column(\u0027name\u0027, Unicode(200), nullable\u003dTrue),"},{"line_number":37,"context_line":"        Column(\u0027generation\u0027, Integer, default\u003d0),"},{"line_number":38,"context_line":"        Column(\u0027can_host\u0027, Integer, default\u003d0),"},{"line_number":39,"context_line":"        UniqueConstraint(\u0027uuid\u0027, name\u003d\u0027uniq_resource_providers0uuid\u0027),"}],"source_content_type":"text/x-python","patch_set":9,"id":"bab6814e_0550725c","line":36,"updated":"2016-05-19 19:10:00.000000000","message":"Hrm, this is nullable but it\u0027s in a unique constraint? Seems odd. I guess the point being you can either have no name, or a unique name, but no duplicates regardless of uuid being unique.","commit_id":"e60e734c4fd704ea2bcc145539b7cb63c757b2dd"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"be23634367c55b5a30e4340c5a5315908f565c48","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        Column(\u0027updated_at\u0027, DateTime),"},{"line_number":34,"context_line":"        Column(\u0027id\u0027, Integer, primary_key\u003dTrue, nullable\u003dFalse),"},{"line_number":35,"context_line":"        Column(\u0027uuid\u0027, String(36), nullable\u003dFalse),"},{"line_number":36,"context_line":"        Column(\u0027name\u0027, Unicode(200), nullable\u003dTrue),"},{"line_number":37,"context_line":"        Column(\u0027generation\u0027, Integer, default\u003d0),"},{"line_number":38,"context_line":"        Column(\u0027can_host\u0027, Integer, default\u003d0),"},{"line_number":39,"context_line":"        UniqueConstraint(\u0027uuid\u0027, name\u003d\u0027uniq_resource_providers0uuid\u0027),"}],"source_content_type":"text/x-python","patch_set":9,"id":"bab6814e_10c6ee47","line":36,"in_reply_to":"bab6814e_0550725c","updated":"2016-05-19 19:18:11.000000000","message":"To be clear, for DB2 this is fine. It won\u0027t create a unique constraint because name is nullable, it will create a unique index. The difference only matters if you plan on havinga foreign key on that column, which for name we won\u0027t. So meh.","commit_id":"e60e734c4fd704ea2bcc145539b7cb63c757b2dd"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"56ea5bc22b08f19fb01c93ae431df8b26f3f7980","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        Column(\u0027allocation_ratio\u0027, Float, nullable\u003dFalse),"},{"line_number":64,"context_line":"        Index(\u0027inventories_resource_provider_id_idx\u0027,"},{"line_number":65,"context_line":"              \u0027resource_provider_id\u0027),"},{"line_number":66,"context_line":"        Index(\u0027inventories_resource_provider_resource_class_idx\u0027,"},{"line_number":67,"context_line":"              \u0027resource_provider_id\u0027, \u0027resource_class_id\u0027),"},{"line_number":68,"context_line":"        UniqueConstraint(\u0027resource_provider_id\u0027, \u0027resource_class_id\u0027,"},{"line_number":69,"context_line":"            name\u003d\u0027uniq_inventories0resource_provider_resource_class\u0027),"}],"source_content_type":"text/x-python","patch_set":9,"id":"bab6814e_e5028e0a","line":66,"updated":"2016-05-19 19:10:00.000000000","message":"This is the problem index for DB2 because the UniqueConstraint already has these columns, so this would be a duplicate index in that case.\n\nDoesn\u0027t MySQL also create an index for a unique constraint, but allows duplicate indices?","commit_id":"e60e734c4fd704ea2bcc145539b7cb63c757b2dd"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"a206377e032c4824a5165a9b5086bbbf558600e2","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        Index(\u0027inventories_resource_provider_resource_class_idx\u0027,"},{"line_number":67,"context_line":"              \u0027resource_provider_id\u0027, \u0027resource_class_id\u0027),"},{"line_number":68,"context_line":"        UniqueConstraint(\u0027resource_provider_id\u0027, \u0027resource_class_id\u0027,"},{"line_number":69,"context_line":"            name\u003d\u0027uniq_inventories0resource_provider_resource_class\u0027),"},{"line_number":70,"context_line":"        mysql_engine\u003d\u0027InnoDB\u0027,"},{"line_number":71,"context_line":"        mysql_charset\u003d\u0027latin1\u0027"},{"line_number":72,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":9,"id":"bab6814e_c5e82ae5","line":69,"updated":"2016-05-19 18:54:38.000000000","message":"Here\u0027s the UC right?","commit_id":"e60e734c4fd704ea2bcc145539b7cb63c757b2dd"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"5860c3ddd7eb2b98b424f94f1a4376880c27a937","unresolved":false,"context_lines":[{"line_number":75,"context_line":"    # so trying to add a second index on the name column will fail with error"},{"line_number":76,"context_line":"    # SQL0605W, so omit the index in the case of DB2."},{"line_number":77,"context_line":"    if migrate_engine.name !\u003d \u0027ibm_db_sa\u0027:"},{"line_number":78,"context_line":"        Index(\u0027inventories_resource_class_id_idx\u0027,"},{"line_number":79,"context_line":"              inventories.c.resource_class_id),"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    allocations \u003d Table("}],"source_content_type":"text/x-python","patch_set":9,"id":"bab6814e_4ac8c922","line":78,"updated":"2016-05-19 18:48:41.000000000","message":"since we don\u0027t have a unique constraint on this column, we don\u0027t need to special case this and it can be back up in the main Table call. I think. Only mriedem knows the real truth.","commit_id":"e60e734c4fd704ea2bcc145539b7cb63c757b2dd"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"56ea5bc22b08f19fb01c93ae431df8b26f3f7980","unresolved":false,"context_lines":[{"line_number":75,"context_line":"    # so trying to add a second index on the name column will fail with error"},{"line_number":76,"context_line":"    # SQL0605W, so omit the index in the case of DB2."},{"line_number":77,"context_line":"    if migrate_engine.name !\u003d \u0027ibm_db_sa\u0027:"},{"line_number":78,"context_line":"        Index(\u0027inventories_resource_class_id_idx\u0027,"},{"line_number":79,"context_line":"              inventories.c.resource_class_id),"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    allocations \u003d Table("}],"source_content_type":"text/x-python","patch_set":9,"id":"bab6814e_7072daae","line":78,"in_reply_to":"bab6814e_4ac8c922","updated":"2016-05-19 19:10:00.000000000","message":"I think Chris is right in this case.","commit_id":"e60e734c4fd704ea2bcc145539b7cb63c757b2dd"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"40c5db815152d7cc7cf487f2a60173b185c937c9","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        Column(\u0027updated_at\u0027, DateTime),"},{"line_number":34,"context_line":"        Column(\u0027id\u0027, Integer, primary_key\u003dTrue, nullable\u003dFalse),"},{"line_number":35,"context_line":"        Column(\u0027uuid\u0027, String(36), nullable\u003dFalse),"},{"line_number":36,"context_line":"        Column(\u0027name\u0027, Unicode(200), nullable\u003dTrue),"},{"line_number":37,"context_line":"        Column(\u0027generation\u0027, Integer, default\u003d0),"},{"line_number":38,"context_line":"        Column(\u0027can_host\u0027, Integer, default\u003d0),"},{"line_number":39,"context_line":"        UniqueConstraint(\u0027uuid\u0027, name\u003d\u0027uniq_resource_providers0uuid\u0027),"}],"source_content_type":"text/x-python","patch_set":11,"id":"bab6814e_2c13dab9","line":36,"updated":"2016-05-19 21:37:34.000000000","message":"So, the #318 DB migration was creating a name field using the UTF8 encoding, not the default table encoding, which is latin-1 for performance reasons.\n\nhttps://github.com/openstack/nova/blob/3b2adde944a06a421e7b54595cd2d02698608878/nova/db/sqlalchemy/migrate_repo/versions/318_resource_provider_name_aggregates.py#L40-L45\n\nhttps://review.openstack.org/#/c/281837/7/nova/db/sqlalchemy/migrate_repo/versions/317_resource_provider_name_aggregates.py@29\n\nI think we should keep the same DDL.","commit_id":"8d75a71cdcadc8622270669d75e680bd5afdae72"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"40c5db815152d7cc7cf487f2a60173b185c937c9","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        Index(\u0027inventories_resource_class_id_idx\u0027,"},{"line_number":69,"context_line":"              \u0027resource_class_id\u0027),"},{"line_number":70,"context_line":"        UniqueConstraint(\u0027resource_provider_id\u0027, \u0027resource_class_id\u0027,"},{"line_number":71,"context_line":"            name\u003d\u0027uniq_inventories0resource_provider_resource_class\u0027),"},{"line_number":72,"context_line":"        mysql_engine\u003d\u0027InnoDB\u0027,"},{"line_number":73,"context_line":"        mysql_charset\u003d\u0027latin1\u0027"},{"line_number":74,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":11,"id":"bab6814e_cc516eda","line":71,"range":{"start_line":71,"start_character":18,"end_line":71,"end_character":67},"updated":"2016-05-19 21:37:34.000000000","message":"nit: the usual pattern I see for naming UCs is :\n\n  uniq_inventories0resource_provider_id0resource_class_id \n\nbut I\u0027m guessing the above should still work fine because that\u0027s something we already merged.","commit_id":"8d75a71cdcadc8622270669d75e680bd5afdae72"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"39c78d524f62226b403eca6ea85709b20ae06d3a","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        Column(\u0027updated_at\u0027, DateTime),"},{"line_number":42,"context_line":"        Column(\u0027id\u0027, Integer, primary_key\u003dTrue, nullable\u003dFalse),"},{"line_number":43,"context_line":"        Column(\u0027uuid\u0027, String(36), nullable\u003dFalse),"},{"line_number":44,"context_line":"        Column(\u0027name\u0027, nametype(200), nullable\u003dTrue, **nameargs),"},{"line_number":45,"context_line":"        Column(\u0027generation\u0027, Integer, default\u003d0),"},{"line_number":46,"context_line":"        Column(\u0027can_host\u0027, Integer, default\u003d0),"},{"line_number":47,"context_line":"        UniqueConstraint(\u0027uuid\u0027, name\u003d\u0027uniq_resource_providers0uuid\u0027),"}],"source_content_type":"text/x-python","patch_set":12,"id":"bab6814e_cc24bcc6","line":44,"updated":"2016-05-20 08:16:23.000000000","message":"That doesn\u0027t seem to work that way...\n\nhttp://stackoverflow.com/questions/18561190/enforce-column-encoding-with-sqlalchemy","commit_id":"efdf559c541f77f1fba7003dbbe487ef8e6aa467"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"8c4a4dcb0dad670fb94ce281cf9a3e1ddb08fa08","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        Column(\u0027updated_at\u0027, DateTime),"},{"line_number":34,"context_line":"        Column(\u0027id\u0027, Integer, primary_key\u003dTrue, nullable\u003dFalse),"},{"line_number":35,"context_line":"        Column(\u0027uuid\u0027, String(36), nullable\u003dFalse),"},{"line_number":36,"context_line":"        Column(\u0027name\u0027, Unicode(200, collation\u003d\u0027utf8_bin\u0027), nullable\u003dTrue),"},{"line_number":37,"context_line":"        Column(\u0027generation\u0027, Integer, default\u003d0),"},{"line_number":38,"context_line":"        Column(\u0027can_host\u0027, Integer, default\u003d0),"},{"line_number":39,"context_line":"        UniqueConstraint(\u0027uuid\u0027, name\u003d\u0027uniq_resource_providers0uuid\u0027),"}],"source_content_type":"text/x-python","patch_set":13,"id":"bab6814e_5505ec11","line":36,"range":{"start_line":36,"start_character":23,"end_line":36,"end_character":57},"updated":"2016-05-20 08:52:23.000000000","message":"that looks doing what we want :\nhttp://paste.openstack.org/show/497865/\n\nJust a side note, the collation attributes works with SQLA\u003e\u003d0.8 so it\u0027s fine given our requirements.","commit_id":"e809469d3d55aed239f34d4759dca7e9b9b45076"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"b1a6fbd6ae7a7e6b11a2e9b1e4b2e2c52e38dad0","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        Column(\u0027updated_at\u0027, DateTime),"},{"line_number":34,"context_line":"        Column(\u0027id\u0027, Integer, primary_key\u003dTrue, nullable\u003dFalse),"},{"line_number":35,"context_line":"        Column(\u0027uuid\u0027, String(36), nullable\u003dFalse),"},{"line_number":36,"context_line":"        Column(\u0027name\u0027, Unicode(200, collation\u003d\u0027utf8_bin\u0027), nullable\u003dTrue),"},{"line_number":37,"context_line":"        Column(\u0027generation\u0027, Integer, default\u003d0),"},{"line_number":38,"context_line":"        Column(\u0027can_host\u0027, Integer, default\u003d0),"},{"line_number":39,"context_line":"        UniqueConstraint(\u0027uuid\u0027, name\u003d\u0027uniq_resource_providers0uuid\u0027),"}],"source_content_type":"text/x-python","patch_set":13,"id":"bab6814e_bcb87cc9","line":36,"range":{"start_line":36,"start_character":23,"end_line":36,"end_character":57},"in_reply_to":"bab6814e_5505ec11","updated":"2016-05-20 11:06:16.000000000","message":"Graaaah, SQLite3 doesn\u0027t like it...\n\n2016-05-20 08:57:48.762 |         context)\n2016-05-20 08:57:48.762 |       File \"/home/jenkins/workspace/gate-nova-python27-db/.tox/py27/local/lib/python2.7/site-packages/sqlalchemy/engine/default.py\", line 450, in do_execute\n2016-05-20 08:57:48.762 |         cursor.execute(statement, parameters)\n2016-05-20 08:57:48.762 |     sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such collation sequence: utf8_bin [SQL: u\u0027\\nCREATE TABLE resource_providers (\\n\\tcreated_at DATETIME, \\n\\tupdated_at DATETIME, \\n\\tid INTEGER NOT NULL, \\n\\tuuid VARCHAR(36) NOT NULL, \\n\\tname VARCHAR(200) COLLATE \"utf8_bin\", \\n\\tgeneration INTEGER, \\n\\tcan_host INTEGER, \\n\\tPRIMARY KEY (id), \\n\\tCONSTRAINT uniq_resource_providers0uuid UNIQUE (uuid), \\n\\tCONSTRAINT uniq_resource_providers0name UNIQUE (name)\\n)\\n\\n\u0027]","commit_id":"e809469d3d55aed239f34d4759dca7e9b9b45076"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"3dca9a5216fb8a231275f5b382d4bc2637679f13","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    # NOTE(mriedem): DB2 creates an index when a unique constraint is created"},{"line_number":49,"context_line":"    # so trying to add a second index on the name column will fail with error"},{"line_number":50,"context_line":"    # SQL0605W, so omit the index in the case of DB2."},{"line_number":51,"context_line":"    if migrate_engine.name !\u003d \u0027ibm_db_sa\u0027:"},{"line_number":52,"context_line":"        Index(\u0027resource_providers_name_idx\u0027, resource_providers.c.name)"},{"line_number":53,"context_line":"        Index(\u0027resource_providers_uuid_idx\u0027, resource_providers.c.uuid)"},{"line_number":54,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"bab6814e_082de994","line":51,"updated":"2016-05-20 21:04:37.000000000","message":"This should be removed now right?","commit_id":"d96bd21ab78190f4d657e3b1e427b53784f232c7"}],"nova/db/sqlalchemy/api_models.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"56ea5bc22b08f19fb01c93ae431df8b26f3f7980","unresolved":false,"context_lines":[{"line_number":251,"context_line":"        Index(\u0027inventories_resource_provider_resource_class_idx\u0027,"},{"line_number":252,"context_line":"              \u0027resource_provider_id\u0027, \u0027resource_class_id\u0027),"},{"line_number":253,"context_line":"        schema.UniqueConstraint(\u0027resource_provider_id\u0027, \u0027resource_class_id\u0027,"},{"line_number":254,"context_line":"            name\u003d\u0027uniq_inventories0resource_provider_resource_class\u0027)"},{"line_number":255,"context_line":"    )"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"    id \u003d Column(Integer, primary_key\u003dTrue, nullable\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":9,"id":"bab6814e_309fb2b5","line":254,"range":{"start_line":254,"start_character":53,"end_line":254,"end_character":67},"updated":"2016-05-19 19:10:00.000000000","message":"resource_class_id","commit_id":"e60e734c4fd704ea2bcc145539b7cb63c757b2dd"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"56ea5bc22b08f19fb01c93ae431df8b26f3f7980","unresolved":false,"context_lines":[{"line_number":251,"context_line":"        Index(\u0027inventories_resource_provider_resource_class_idx\u0027,"},{"line_number":252,"context_line":"              \u0027resource_provider_id\u0027, \u0027resource_class_id\u0027),"},{"line_number":253,"context_line":"        schema.UniqueConstraint(\u0027resource_provider_id\u0027, \u0027resource_class_id\u0027,"},{"line_number":254,"context_line":"            name\u003d\u0027uniq_inventories0resource_provider_resource_class\u0027)"},{"line_number":255,"context_line":"    )"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"    id \u003d Column(Integer, primary_key\u003dTrue, nullable\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":9,"id":"bab6814e_705bfa2e","line":254,"range":{"start_line":254,"start_character":35,"end_line":254,"end_character":52},"updated":"2016-05-19 19:10:00.000000000","message":"resource_provider_id - that\u0027s the column in the constraint.","commit_id":"e60e734c4fd704ea2bcc145539b7cb63c757b2dd"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"5860c3ddd7eb2b98b424f94f1a4376880c27a937","unresolved":false,"context_lines":[{"line_number":287,"context_line":"    resource_provider_id \u003d Column(Integer, nullable\u003dFalse)"},{"line_number":288,"context_line":"    consumer_id \u003d Column(String(36), nullable\u003dFalse)"},{"line_number":289,"context_line":"    resource_class_id \u003d Column(Integer, nullable\u003dFalse)"},{"line_number":290,"context_line":"    used \u003d Column(Integer, nullable\u003dFalse)"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"class ResourceProviderAggregate(API_BASE):"}],"source_content_type":"text/x-python","patch_set":9,"id":"bab6814e_850aa21f","line":290,"updated":"2016-05-19 18:48:41.000000000","message":"We can wait until the real code calls for it (since it doesn\u0027t affect the table\u0027s actual structure) but in the stack of code related to g-r-p I\u0027ve ended up doing a:\n\n    resource_provider \u003d orm.relationship(\n        \"ResourceProvider\",\n        primaryjoin\u003d(\u0027and_(Allocation.resource_provider_id \u003d\u003d \u0027\n                     \u0027ResourceProvider.id)\u0027),\n        foreign_keys\u003dresource_provider_id)\n\n(similar to what Inventory has). Without it constituting the Allocation object doesn\u0027t quite work. Of course, as we\u0027ve discussed, nothing but test code is currently using the Allocation object, so it might all be moot.\n\nJust mentioning it here in case we want to go ahead and be concerned with it now.","commit_id":"e60e734c4fd704ea2bcc145539b7cb63c757b2dd"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"a206377e032c4824a5165a9b5086bbbf558600e2","unresolved":false,"context_lines":[{"line_number":287,"context_line":"    resource_provider_id \u003d Column(Integer, nullable\u003dFalse)"},{"line_number":288,"context_line":"    consumer_id \u003d Column(String(36), nullable\u003dFalse)"},{"line_number":289,"context_line":"    resource_class_id \u003d Column(Integer, nullable\u003dFalse)"},{"line_number":290,"context_line":"    used \u003d Column(Integer, nullable\u003dFalse)"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"class ResourceProviderAggregate(API_BASE):"}],"source_content_type":"text/x-python","patch_set":9,"id":"bab6814e_c5cf8a7d","line":290,"in_reply_to":"bab6814e_850aa21f","updated":"2016-05-19 18:54:38.000000000","message":"Since it doesn\u0027t affect the schema I propose we punt yeah.","commit_id":"e60e734c4fd704ea2bcc145539b7cb63c757b2dd"}],"nova/tests/functional/db/api/test_migrations.py":[{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"03852b7bc84e9a48184f90be507ef32d24246608","unresolved":false,"context_lines":[{"line_number":334,"context_line":"        self.assertNotIn([\u0027request_spec_id\u0027], constr_columns)"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"    def _check_016(self, engine, data):"},{"line_number":337,"context_line":"        self.assertColumnExists(engine, \u0027resource_providers\u0027, \u0027id\u0027)"},{"line_number":338,"context_line":""},{"line_number":339,"context_line":""},{"line_number":340,"context_line":"class TestNovaAPIMigrationsWalkSQLite(NovaAPIMigrationsWalk,"}],"source_content_type":"text/x-python","patch_set":8,"id":"bab6814e_5f2d2945","line":337,"updated":"2016-05-19 18:14:58.000000000","message":"This seems a bit lacking. I would expect to see a check for each of the 4 new tables, and even better would be a check for the indexes since they\u0027re conditionally added.","commit_id":"fce64d4903805f01f1a0448642b14738a8c87166"}]}
