)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"cd12128ea7456a4209dc55eb686e7b07fe940c6f","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Rename unique constraints due to new convention."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"We found that current constraint name convention allows us create"},{"line_number":10,"context_line":"constraints with duplicate names. It happens if we will add constraints"},{"line_number":11,"context_line":"in different tables with same column names (for example, `name`,"},{"line_number":12,"context_line":"`deleted`). In this case we can not create new constraint in mysql due to"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"AAAAPH%2F%2FuyY%3D","line":9,"updated":"2013-05-24 09:19:04.000000000","message":"nit: s/us/us to/\n     s/name/naming/","commit_id":"d0361725ac3d649460c7a5d89197cd72a2dbee1d"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"cd12128ea7456a4209dc55eb686e7b07fe940c6f","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Rename unique constraints due to new convention."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"We found that current constraint name convention allows us create"},{"line_number":10,"context_line":"constraints with duplicate names. It happens if we will add constraints"},{"line_number":11,"context_line":"in different tables with same column names (for example, `name`,"},{"line_number":12,"context_line":"`deleted`). In this case we can not create new constraint in mysql due to"},{"line_number":13,"context_line":"database limitation (it requires unique constraint name for database)"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"AAAAPH%2F%2Fuy4%3D","line":10,"updated":"2013-05-24 09:19:04.000000000","message":"nit: s/will//","commit_id":"d0361725ac3d649460c7a5d89197cd72a2dbee1d"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"cd12128ea7456a4209dc55eb686e7b07fe940c6f","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"We found that current constraint name convention allows us create"},{"line_number":10,"context_line":"constraints with duplicate names. It happens if we will add constraints"},{"line_number":11,"context_line":"in different tables with same column names (for example, `name`,"},{"line_number":12,"context_line":"`deleted`). In this case we can not create new constraint in mysql due to"},{"line_number":13,"context_line":"database limitation (it requires unique constraint name for database)"},{"line_number":14,"context_line":"To solve this issue unique constraint name convention was changed"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"AAAAPH%2F%2FuyU%3D","line":11,"updated":"2013-05-24 09:19:04.000000000","message":"nit: s/same/the same/","commit_id":"d0361725ac3d649460c7a5d89197cd72a2dbee1d"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"cd12128ea7456a4209dc55eb686e7b07fe940c6f","unresolved":false,"context_lines":[{"line_number":10,"context_line":"constraints with duplicate names. It happens if we will add constraints"},{"line_number":11,"context_line":"in different tables with same column names (for example, `name`,"},{"line_number":12,"context_line":"`deleted`). In this case we can not create new constraint in mysql due to"},{"line_number":13,"context_line":"database limitation (it requires unique constraint name for database)"},{"line_number":14,"context_line":"To solve this issue unique constraint name convention was changed"},{"line_number":15,"context_line":"from \"uniq_c1_x_c2_x_c3\" to \"uniq_t$c1$c2$c3\" where `t` it is table name"},{"line_number":16,"context_line":"and columns `c1`, `c2`, `c3` are in UniqueConstraint."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"AAAAPH%2F%2FuwI%3D","line":13,"updated":"2013-05-24 09:19:04.000000000","message":"nit: s/unique constraint name for database/constraint name to be unique within a database/","commit_id":"d0361725ac3d649460c7a5d89197cd72a2dbee1d"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"cd12128ea7456a4209dc55eb686e7b07fe940c6f","unresolved":false,"context_lines":[{"line_number":19,"context_line":"blueprint db-enforce-unique-keys"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Change-Id: I4122dfb910a07a1a423781ebc22e9ce50596a05d"},{"line_number":22,"context_line":"Fixes: bug 1182054"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"AAAAPH%2F%2FuyI%3D","line":22,"updated":"2013-05-24 09:19:04.000000000","message":"nit: put this before change-id","commit_id":"d0361725ac3d649460c7a5d89197cd72a2dbee1d"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"d7b47014452c8113e4f189d38a75a6d5376e1055","unresolved":false,"context_lines":[{"line_number":15,"context_line":"been changed from \"uniq_c1_x_c2_x_c3\" to \"uniq_t$c1$c2$c3\" where `t` is"},{"line_number":16,"context_line":"a table name and columns `c1`, `c2`, `c3` are in UniqueConstraint."},{"line_number":17,"context_line":"Fixed unique constraints in models description."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"blueprint db-enforce-unique-keys"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Change-Id: I4122dfb910a07a1a423781ebc22e9ce50596a05d"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"AAAAPH%2F%2FedA%3D","line":18,"updated":"2013-06-02 18:16:20.000000000","message":"Pls specify in commit message that we are sync db code from oslo.","commit_id":"39efcc167a501b90cb05d4bc0dfa0e2a95869bae"},{"author":{"_account_id":7491,"name":"Viktor Serhieiev","email":"viktor.sergeyev@gmail.com","username":"vsergeyev"},"change_message_id":"8b2e6ba7d1c1fe12e00297bc6d9c11d3bacf5c96","unresolved":false,"context_lines":[{"line_number":15,"context_line":"been changed from \"uniq_c1_x_c2_x_c3\" to \"uniq_t$c1$c2$c3\" where `t` is"},{"line_number":16,"context_line":"a table name and columns `c1`, `c2`, `c3` are in UniqueConstraint."},{"line_number":17,"context_line":"Fixed unique constraints in models description."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"blueprint db-enforce-unique-keys"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Change-Id: I4122dfb910a07a1a423781ebc22e9ce50596a05d"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"AAAAPH%2F%2Fd8k%3D","line":18,"in_reply_to":"AAAAPH%2F%2FedA%3D","updated":"2013-06-03 08:16:04.000000000","message":"Done","commit_id":"39efcc167a501b90cb05d4bc0dfa0e2a95869bae"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"d7b47014452c8113e4f189d38a75a6d5376e1055","unresolved":false,"context_lines":[{"line_number":19,"context_line":"blueprint db-enforce-unique-keys"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Change-Id: I4122dfb910a07a1a423781ebc22e9ce50596a05d"},{"line_number":22,"context_line":"Fixes: bug 1182054"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"AAAAPH%2F%2FedE%3D","line":22,"updated":"2013-06-02 18:16:20.000000000","message":"Change-Id should be on last line","commit_id":"39efcc167a501b90cb05d4bc0dfa0e2a95869bae"},{"author":{"_account_id":7491,"name":"Viktor Serhieiev","email":"viktor.sergeyev@gmail.com","username":"vsergeyev"},"change_message_id":"8b2e6ba7d1c1fe12e00297bc6d9c11d3bacf5c96","unresolved":false,"context_lines":[{"line_number":19,"context_line":"blueprint db-enforce-unique-keys"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Change-Id: I4122dfb910a07a1a423781ebc22e9ce50596a05d"},{"line_number":22,"context_line":"Fixes: bug 1182054"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"AAAAPH%2F%2Fd8g%3D","line":22,"in_reply_to":"AAAAPH%2F%2FedE%3D","updated":"2013-06-03 08:16:04.000000000","message":"Done","commit_id":"39efcc167a501b90cb05d4bc0dfa0e2a95869bae"}],"nova/db/sqlalchemy/migrate_repo/versions/180_rename_unique_constraints.py":[{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"1c02a09225eb5baae38cf50052f84e6bc089a698","unresolved":false,"context_lines":[{"line_number":71,"context_line":""},{"line_number":72,"context_line":"def upgrade(migrate_engine):"},{"line_number":73,"context_line":"    if migrate_engine.name \u003d\u003d \u0027sqlite\u0027:"},{"line_number":74,"context_line":"        return"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    DATA \u003d UC_DATA + UC_SPEC_DB_DATA[migrate_engine.name]"},{"line_number":77,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPH%2F%2FwTQ%3D","line":74,"updated":"2013-05-23 19:47:17.000000000","message":"Maybe add a comment here explaining why we skip this constraint change on SQLite.","commit_id":"73a2c5f265f1babc1278c65cd975992830fb42b4"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"cd12128ea7456a4209dc55eb686e7b07fe940c6f","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from sqlalchemy import MetaData, Table"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"UC_DATA \u003d ("},{"line_number":26,"context_line":"    # (table_name, (columns,), old_uc_name, new_uc_name)"},{"line_number":27,"context_line":"    (\"floating_ips\", (\u0027address\u0027, \u0027deleted\u0027,), \u0027uniq_address_x_deleted\u0027,"},{"line_number":28,"context_line":"     \u0027uniq_floating_ips$address$deleted\u0027),"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2Fuzk%3D","line":25,"updated":"2013-05-24 09:19:04.000000000","message":"Consider keeping UC_SPEC_DB_DATA the same, but specify only table names and tuples of columns that must be unique in UC_DATA. Then names of unique constraints can be generated as follows: \u0027_x_\u0027.join((\u0027uniq_\u0027 + table_name,) + columns) for the old naming convention and \u0027$\u0027.join((\u0027uniq_\u0027 + table_name,) + columns) for the new naming convention.","commit_id":"d0361725ac3d649460c7a5d89197cd72a2dbee1d"}],"nova/db/sqlalchemy/migrate_repo/versions/185_rename_unique_constraints.py":[{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"f8427b3a1295bc3cd1129e8e1d46f531e14f5a25","unresolved":false,"context_lines":[{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    meta \u003d MetaData(bind\u003dmigrate_engine)"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    for TABLE in UC_DATA.keys():"},{"line_number":92,"context_line":"        t \u003d Table(TABLE, meta, autoload\u003dTrue)"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        for COLUMNS, OLD_UC_NAME in UC_DATA[TABLE]:"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPX%2F%2F%2BQI%3D","line":91,"updated":"2013-06-04 20:46:58.000000000","message":"Why use uppercase names for ephemeral variables in a function?  It makes sense to me that UC_DATA should be all-caps, but I don\u0027t understand why TABLE needs to be all-caps.","commit_id":"1bbdf8a967dd94ebf4a643d7f92422f91390f3b0"},{"author":{"_account_id":7491,"name":"Viktor Serhieiev","email":"viktor.sergeyev@gmail.com","username":"vsergeyev"},"change_message_id":"51fc40a71566f4f32287c13e6149b63c25adff8f","unresolved":false,"context_lines":[{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    meta \u003d MetaData(bind\u003dmigrate_engine)"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    for TABLE in UC_DATA.keys():"},{"line_number":92,"context_line":"        t \u003d Table(TABLE, meta, autoload\u003dTrue)"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        for COLUMNS, OLD_UC_NAME in UC_DATA[TABLE]:"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPX%2F%2F864%3D","line":91,"in_reply_to":"AAAAPX%2F%2F%2BQI%3D","updated":"2013-06-05 12:30:28.000000000","message":"Removed uppercase names.","commit_id":"1bbdf8a967dd94ebf4a643d7f92422f91390f3b0"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"f8427b3a1295bc3cd1129e8e1d46f531e14f5a25","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        for COLUMNS, OLD_UC_NAME in UC_DATA[TABLE]:"},{"line_number":95,"context_line":"            NEW_UC_NAME \u003d \"uniq_{0}${1}\".format(TABLE, \"$\".join(COLUMNS))"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"            if TABLE in (\"instance_info_caches\", \"virtual_interfaces\") \\"},{"line_number":98,"context_line":"               and migrate_engine.name \u003d\u003d \"mysql\":"},{"line_number":99,"context_line":"                instances \u003d Table(\"instances\", meta, autoload\u003dTrue)"},{"line_number":100,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPX%2F%2F%2BQw%3D","line":97,"updated":"2013-06-04 20:46:58.000000000","message":"These values exist in the dictionary constraint_names; why not use a membership test against that dictionary?  Also, please enclose the condition in parentheses to eliminate the backslash. Finally, the second line will need to be indented deeper to distinguish it from the code that follows.","commit_id":"1bbdf8a967dd94ebf4a643d7f92422f91390f3b0"},{"author":{"_account_id":7491,"name":"Viktor Serhieiev","email":"viktor.sergeyev@gmail.com","username":"vsergeyev"},"change_message_id":"51fc40a71566f4f32287c13e6149b63c25adff8f","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        for COLUMNS, OLD_UC_NAME in UC_DATA[TABLE]:"},{"line_number":95,"context_line":"            NEW_UC_NAME \u003d \"uniq_{0}${1}\".format(TABLE, \"$\".join(COLUMNS))"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"            if TABLE in (\"instance_info_caches\", \"virtual_interfaces\") \\"},{"line_number":98,"context_line":"               and migrate_engine.name \u003d\u003d \"mysql\":"},{"line_number":99,"context_line":"                instances \u003d Table(\"instances\", meta, autoload\u003dTrue)"},{"line_number":100,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPX%2F%2F86s%3D","line":97,"in_reply_to":"AAAAPX%2F%2F%2BQw%3D","updated":"2013-06-05 12:30:28.000000000","message":"Done","commit_id":"1bbdf8a967dd94ebf4a643d7f92422f91390f3b0"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"f8427b3a1295bc3cd1129e8e1d46f531e14f5a25","unresolved":false,"context_lines":[{"line_number":121,"context_line":"                if upgrade:"},{"line_number":122,"context_line":"                    OLD_NAME, NEW_NAME \u003d OLD_UC_NAME, NEW_UC_NAME"},{"line_number":123,"context_line":"                else:"},{"line_number":124,"context_line":"                    OLD_NAME, NEW_NAME \u003d NEW_UC_NAME, OLD_UC_NAME"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"                utils.drop_unique_constraint(migrate_engine, TABLE,"},{"line_number":127,"context_line":"                                             OLD_NAME, *(COLUMNS))"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPX%2F%2F%2BP0%3D","line":124,"updated":"2013-06-04 20:46:58.000000000","message":"This if is duplicated in both branches of \"if TABLE in […]\"; since the values don\u0027t depend on anything in either branch, I recommend pulling it out of the outer \u0027if\u0027 to reduce your code duplication.","commit_id":"1bbdf8a967dd94ebf4a643d7f92422f91390f3b0"},{"author":{"_account_id":7491,"name":"Viktor Serhieiev","email":"viktor.sergeyev@gmail.com","username":"vsergeyev"},"change_message_id":"51fc40a71566f4f32287c13e6149b63c25adff8f","unresolved":false,"context_lines":[{"line_number":121,"context_line":"                if upgrade:"},{"line_number":122,"context_line":"                    OLD_NAME, NEW_NAME \u003d OLD_UC_NAME, NEW_UC_NAME"},{"line_number":123,"context_line":"                else:"},{"line_number":124,"context_line":"                    OLD_NAME, NEW_NAME \u003d NEW_UC_NAME, OLD_UC_NAME"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"                utils.drop_unique_constraint(migrate_engine, TABLE,"},{"line_number":127,"context_line":"                                             OLD_NAME, *(COLUMNS))"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPX%2F%2F86g%3D","line":124,"in_reply_to":"AAAAPX%2F%2F%2BP0%3D","updated":"2013-06-05 12:30:28.000000000","message":"Done","commit_id":"1bbdf8a967dd94ebf4a643d7f92422f91390f3b0"},{"author":{"_account_id":2835,"name":"Brian Elliott","email":"bdelliott@gmail.com","username":"belliott"},"change_message_id":"f612cc079600a7444713ab0d5dfe2f3f151ceae9","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    \"task_log\": ("},{"line_number":46,"context_line":"        ((\"task_name\", \"host\", \"period_beginning\", \"period_ending\"),"},{"line_number":47,"context_line":"         \"uniq_task_name_x_host_x_period_beginning_x_period_ending\"),"},{"line_number":48,"context_line":"    ),"},{"line_number":49,"context_line":"}"},{"line_number":50,"context_line":"# some UC names are different for mysql and postgresql"},{"line_number":51,"context_line":"UC_SPEC_DB_DATA \u003d {"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAPX%2F%2F8q4%3D","line":48,"updated":"2013-06-05 14:11:12.000000000","message":"I see a couple a extra constraint in a clean Nova DB:\n\ninstances              | UNIQUE          | uuid","commit_id":"72e08a48e42fdf4cdcceee21a22dfce7c3625dcd"},{"author":{"_account_id":2835,"name":"Brian Elliott","email":"bdelliott@gmail.com","username":"belliott"},"change_message_id":"c7f5c63b966e3bcadd26a9e2954ffffb3215ada5","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    \"task_log\": ("},{"line_number":46,"context_line":"        ((\"task_name\", \"host\", \"period_beginning\", \"period_ending\"),"},{"line_number":47,"context_line":"         \"uniq_task_name_x_host_x_period_beginning_x_period_ending\"),"},{"line_number":48,"context_line":"    ),"},{"line_number":49,"context_line":"}"},{"line_number":50,"context_line":"# some UC names are different for mysql and postgresql"},{"line_number":51,"context_line":"UC_SPEC_DB_DATA \u003d {"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAPX%2F%2F5R0%3D","line":48,"in_reply_to":"AAAAPX%2F%2F6Hc%3D","updated":"2013-06-06 15:37:51.000000000","message":"That was the only one I saw missing.  You could do it in a separate patch, but you already have this migration written that does the renaming. :)","commit_id":"72e08a48e42fdf4cdcceee21a22dfce7c3625dcd"},{"author":{"_account_id":7491,"name":"Viktor Serhieiev","email":"viktor.sergeyev@gmail.com","username":"vsergeyev"},"change_message_id":"e69eeda0759bc96c92e4c89372c2c88e440bc48b","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    \"task_log\": ("},{"line_number":46,"context_line":"        ((\"task_name\", \"host\", \"period_beginning\", \"period_ending\"),"},{"line_number":47,"context_line":"         \"uniq_task_name_x_host_x_period_beginning_x_period_ending\"),"},{"line_number":48,"context_line":"    ),"},{"line_number":49,"context_line":"}"},{"line_number":50,"context_line":"# some UC names are different for mysql and postgresql"},{"line_number":51,"context_line":"UC_SPEC_DB_DATA \u003d {"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAPX%2F%2F6Hc%3D","line":48,"in_reply_to":"AAAAPX%2F%2F6Ks%3D","updated":"2013-06-06 08:57:32.000000000","message":"So we need check all indexes in database. Also we can got some issues in different databases...\nMaybe it will be better to rename indexes in next patches?","commit_id":"72e08a48e42fdf4cdcceee21a22dfce7c3625dcd"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"cfb99bda81b840ad4320405564a4024bb3949068","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    \"task_log\": ("},{"line_number":46,"context_line":"        ((\"task_name\", \"host\", \"period_beginning\", \"period_ending\"),"},{"line_number":47,"context_line":"         \"uniq_task_name_x_host_x_period_beginning_x_period_ending\"),"},{"line_number":48,"context_line":"    ),"},{"line_number":49,"context_line":"}"},{"line_number":50,"context_line":"# some UC names are different for mysql and postgresql"},{"line_number":51,"context_line":"UC_SPEC_DB_DATA \u003d {"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAPX%2F%2F6Ks%3D","line":48,"in_reply_to":"AAAAPX%2F%2F8jk%3D","updated":"2013-06-06 08:30:28.000000000","message":"Hm it will be processed in the same way as unique constraint.. So probably Brian Elliott is right.","commit_id":"72e08a48e42fdf4cdcceee21a22dfce7c3625dcd"},{"author":{"_account_id":7491,"name":"Viktor Serhieiev","email":"viktor.sergeyev@gmail.com","username":"vsergeyev"},"change_message_id":"5800a2e7f0399840a84a0b2d0fc94544fd1e46e2","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    \"task_log\": ("},{"line_number":46,"context_line":"        ((\"task_name\", \"host\", \"period_beginning\", \"period_ending\"),"},{"line_number":47,"context_line":"         \"uniq_task_name_x_host_x_period_beginning_x_period_ending\"),"},{"line_number":48,"context_line":"    ),"},{"line_number":49,"context_line":"}"},{"line_number":50,"context_line":"# some UC names are different for mysql and postgresql"},{"line_number":51,"context_line":"UC_SPEC_DB_DATA \u003d {"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAPX%2F%2F8jk%3D","line":48,"in_reply_to":"AAAAPX%2F%2F8q4%3D","updated":"2013-06-06 08:13:24.000000000","message":"it\u0027s really a unique index rather than a unique constraint (though the internal implementation of both is almost the same). I\u0027m not sure that we actually need to rename these too. Naming convention for indexes should be probably addressed by another patch.","commit_id":"72e08a48e42fdf4cdcceee21a22dfce7c3625dcd"}],"nova/db/sqlalchemy/models.py":[{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"cd12128ea7456a4209dc55eb686e7b07fe940c6f","unresolved":false,"context_lines":[{"line_number":246,"context_line":"    Represents a cache of information about an instance"},{"line_number":247,"context_line":"    \"\"\""},{"line_number":248,"context_line":"    __tablename__ \u003d \u0027instance_info_caches\u0027"},{"line_number":249,"context_line":"    __table_args__ \u003d (schema.UniqueConstraint(\"instance_uuid\",),)"},{"line_number":250,"context_line":"    id \u003d Column(Integer, primary_key\u003dTrue, autoincrement\u003dTrue)"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"    # text column used for storing a json object of network data for api"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2Fu1U%3D","line":249,"updated":"2013-05-24 09:19:04.000000000","message":"Please specify the \"name\" keyword argument for all unique constraints below and pass the same names you use in migrations.\n\nI know, we actually don\u0027t rely on SQLAlchemy MetaData.create_all() to create initial DB schema, but keeping migrations and models definitions synchronized would actually: 1) make code more explicit and clear; 2) allow us to use create_all() someday :)","commit_id":"d0361725ac3d649460c7a5d89197cd72a2dbee1d"}],"nova/tests/test_migrations.py":[{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"1c02a09225eb5baae38cf50052f84e6bc089a698","unresolved":false,"context_lines":[{"line_number":1369,"context_line":"        for table_name, data in data_list:"},{"line_number":1370,"context_line":"            table \u003d db_utils.get_table(engine, table_name)"},{"line_number":1371,"context_line":"            table.insert().values(data).execute()"},{"line_number":1372,"context_line":"            # we replace values for some columns because they are not"},{"line_number":1373,"context_line":"            # belong to unique constraint"},{"line_number":1374,"context_line":"            if table_name \u003d\u003d \"instance_types\":"},{"line_number":1375,"context_line":"                for key in (\"memory_mb\", \"vcpus\", \"swap\"):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPH%2F%2FwUY%3D","line":1372,"updated":"2013-05-23 19:47:17.000000000","message":"s/are/do/","commit_id":"73a2c5f265f1babc1278c65cd975992830fb42b4"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"cd12128ea7456a4209dc55eb686e7b07fe940c6f","unresolved":false,"context_lines":[{"line_number":46,"context_line":"import ConfigParser"},{"line_number":47,"context_line":"import datetime"},{"line_number":48,"context_line":"import os"},{"line_number":49,"context_line":"import random"},{"line_number":50,"context_line":"import urlparse"},{"line_number":51,"context_line":"import uuid"},{"line_number":52,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2Fu2A%3D","line":49,"updated":"2013-05-24 09:19:04.000000000","message":"Consider removing this and using of predefined data fixture. We are not going to test anything except unique constraints violation here and predefined table rows is enough for this.","commit_id":"d0361725ac3d649460c7a5d89197cd72a2dbee1d"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"cd12128ea7456a4209dc55eb686e7b07fe940c6f","unresolved":false,"context_lines":[{"line_number":1333,"context_line":"        \"\"\" Test check unique constraint behavior. It should be the same before"},{"line_number":1334,"context_line":"        and after migration because we changed their names only."},{"line_number":1335,"context_line":"        We do not check sqlite because unique constraint in sqlite have no"},{"line_number":1336,"context_line":"        names and we don\u0027t procced sqlite in migration\"\"\""},{"line_number":1337,"context_line":""},{"line_number":1338,"context_line":"        if engine.name \u003d\u003d \"sqlite\":"},{"line_number":1339,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2Fu3M%3D","line":1336,"updated":"2013-05-24 09:19:04.000000000","message":"nit: s/procced/process?","commit_id":"d0361725ac3d649460c7a5d89197cd72a2dbee1d"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"cd12128ea7456a4209dc55eb686e7b07fe940c6f","unresolved":false,"context_lines":[{"line_number":1364,"context_line":"            (\u0027virtual_interfaces\u0027, {\u0027address\u0027: \u0027192.168.0.0\u0027})"},{"line_number":1365,"context_line":"        ]"},{"line_number":1366,"context_line":""},{"line_number":1367,"context_line":"        print engine.name"},{"line_number":1368,"context_line":""},{"line_number":1369,"context_line":"        for table_name, data in data_list:"},{"line_number":1370,"context_line":"            table \u003d db_utils.get_table(engine, table_name)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2Fu3c%3D","line":1367,"updated":"2013-05-24 09:19:04.000000000","message":"nit: don\u0027t use print in tests","commit_id":"d0361725ac3d649460c7a5d89197cd72a2dbee1d"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"cd12128ea7456a4209dc55eb686e7b07fe940c6f","unresolved":false,"context_lines":[{"line_number":1369,"context_line":"        for table_name, data in data_list:"},{"line_number":1370,"context_line":"            table \u003d db_utils.get_table(engine, table_name)"},{"line_number":1371,"context_line":"            table.insert().values(data).execute()"},{"line_number":1372,"context_line":"            # we replace values for some columns because they don\u0027t"},{"line_number":1373,"context_line":"            # belong to unique constraint"},{"line_number":1374,"context_line":"            if table_name \u003d\u003d \"instance_types\":"},{"line_number":1375,"context_line":"                for key in (\"memory_mb\", \"vcpus\", \"swap\"):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2Fu2Q%3D","line":1372,"updated":"2013-05-24 09:19:04.000000000","message":"I think we don\u0027t actually need to test this here. I\u0027d rather you kept only self.assertRaises() call at line 1381.","commit_id":"d0361725ac3d649460c7a5d89197cd72a2dbee1d"}],"nova/tests/utils.py":[{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"f8427b3a1295bc3cd1129e8e1d46f531e14f5a25","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        context \u003d get_test_admin_context()"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    test_instance_type \u003d {\u0027name\u0027: \u0027kinda.big\u0027,"},{"line_number":53,"context_line":"                          \u0027flavorid\u0027: uuidutils.generate_uuid(),"},{"line_number":54,"context_line":"                          \u0027memory_mb\u0027: 2048,"},{"line_number":55,"context_line":"                          \u0027vcpus\u0027: 4,"},{"line_number":56,"context_line":"                          \u0027root_gb\u0027: 40,"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPX%2F%2F%2BPc%3D","line":53,"updated":"2013-06-04 20:46:58.000000000","message":"I don\u0027t understand; this seems unrelated.  Why is this in here?  Do we trip the uniqueness constraint without this?","commit_id":"1bbdf8a967dd94ebf4a643d7f92422f91390f3b0"},{"author":{"_account_id":7491,"name":"Viktor Serhieiev","email":"viktor.sergeyev@gmail.com","username":"vsergeyev"},"change_message_id":"51fc40a71566f4f32287c13e6149b63c25adff8f","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        context \u003d get_test_admin_context()"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    test_instance_type \u003d {\u0027name\u0027: \u0027kinda.big\u0027,"},{"line_number":53,"context_line":"                          \u0027flavorid\u0027: uuidutils.generate_uuid(),"},{"line_number":54,"context_line":"                          \u0027memory_mb\u0027: 2048,"},{"line_number":55,"context_line":"                          \u0027vcpus\u0027: 4,"},{"line_number":56,"context_line":"                          \u0027root_gb\u0027: 40,"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAPX%2F%2F82U%3D","line":53,"in_reply_to":"AAAAPX%2F%2F%2BPc%3D","updated":"2013-06-05 12:30:28.000000000","message":"Add new exception to except statement.","commit_id":"1bbdf8a967dd94ebf4a643d7f92422f91390f3b0"}]}
