)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"cf13ecae4c4c899e72856b39e88ffd411587aaf3","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Anindita Das \u003canindita.das@intel.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-12-28 23:06:28 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"[LM] Extending ml2_port_binding table PK"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Extending the Primary Key of ml2_port_binding table to include \"hosts\""},{"line_number":10,"context_line":"similar to the ml2_distributed_port_binding table"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":23,"id":"7a3c09a3_2066a4ed","line":7,"range":{"start_line":7,"start_character":0,"end_line":7,"end_character":4},"updated":"2017-01-13 17:56:50.000000000","message":"What is LM? Live migration? That\u0027s not clear.","commit_id":"7f3329a8febbfe1e33363328c91764e3bdd3840f"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"61bdefcc0c7fff0f3e03e0568761ec285883e8de","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Anindita Das \u003canindita.das@intel.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-12-28 23:06:28 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"[LM] Extending ml2_port_binding table PK"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Extending the Primary Key of ml2_port_binding table to include \"hosts\""},{"line_number":10,"context_line":"similar to the ml2_distributed_port_binding table"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":23,"id":"7a3c09a3_f5607c03","line":7,"range":{"start_line":7,"start_character":0,"end_line":7,"end_character":4},"in_reply_to":"7a3c09a3_2066a4ed","updated":"2017-01-17 06:21:08.000000000","message":"Changed it to Live Migration :)","commit_id":"7f3329a8febbfe1e33363328c91764e3bdd3840f"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d59920b6380089575d03d7ac8bd9853932c042d4","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Extended the Primary Key of ml2_port_binding table to include \"hosts\""},{"line_number":10,"context_line":"and added a new column named \"status\" to indicate the status of the"},{"line_number":11,"context_line":"port similar to the ml2_distributed_port_binding table. Updated the"},{"line_number":12,"context_line":"PortBinding object with the above changes. Changed the status column"},{"line_number":13,"context_line":"to have enum type field."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: Ie01f83b01ab673b9ae7e05b4eaed504ffc8db773"},{"line_number":16,"context_line":"Co-Authored-By: Brian Stajkowski"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":27,"id":"7a3c09a3_7cf4495a","line":13,"range":{"start_line":12,"start_character":42,"end_line":13,"end_character":24},"updated":"2017-01-17 20:40:46.000000000","message":"changed comparing to what? it\u0027s a new field.","commit_id":"577503466fa65060e2c4d730cd4b0a0c3a1eb0ed"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"f0656d53115a1d35d3f2ba78f8273df862532599","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Extended the Primary Key of ml2_port_binding table to include \"hosts\""},{"line_number":10,"context_line":"and added a new column named \"status\" to indicate the status of the"},{"line_number":11,"context_line":"port similar to the ml2_distributed_port_binding table. Updated the"},{"line_number":12,"context_line":"PortBinding object with the above changes. Changed the status column"},{"line_number":13,"context_line":"to have enum type field."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: Ie01f83b01ab673b9ae7e05b4eaed504ffc8db773"},{"line_number":16,"context_line":"Co-Authored-By: Brian Stajkowski"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":27,"id":"7a3c09a3_cb11ed05","line":13,"range":{"start_line":12,"start_character":42,"end_line":13,"end_character":24},"in_reply_to":"7a3c09a3_7cf4495a","updated":"2017-01-17 22:21:26.000000000","message":"Updated it to say it\u0027s a new field. I am putting the type of \"status\" field in the commit message to convey the message that we are introducing this new field which is similar to the one that is in ml2_distributed_port_binding table but the field type is enum and not string as compared to ml2_distributed_port_binding_table.","commit_id":"577503466fa65060e2c4d730cd4b0a0c3a1eb0ed"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"f525abdabb3751746f6f56c64f7e1337639f4e5f","unresolved":false,"context_lines":[{"line_number":13,"context_line":"is defined as an enum type field."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: Ie01f83b01ab673b9ae7e05b4eaed504ffc8db773"},{"line_number":16,"context_line":"Co-Authored-By: Brian Stajkowski"},{"line_number":17,"context_line":"Partial-Bug: #1580880"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":37,"id":"5a3905b3_9eb092df","line":16,"range":{"start_line":16,"start_character":0,"end_line":16,"end_character":32},"updated":"2017-01-19 22:03:47.000000000","message":"nit: co-author\u0027s email should also be added","commit_id":"a367ba506c90232e122568431b877125ffb59fb4"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"994a2741dc5b97b56a152d1c86ef05b2cba62129","unresolved":false,"context_lines":[{"line_number":13,"context_line":"is defined as an enum type field."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: Ie01f83b01ab673b9ae7e05b4eaed504ffc8db773"},{"line_number":16,"context_line":"Co-Authored-By: Brian Stajkowski"},{"line_number":17,"context_line":"Partial-Bug: #1580880"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":37,"id":"5a3905b3_5dc0b9e0","line":16,"range":{"start_line":16,"start_character":0,"end_line":16,"end_character":32},"in_reply_to":"5a3905b3_9eb092df","updated":"2017-01-20 19:20:37.000000000","message":"Done","commit_id":"a367ba506c90232e122568431b877125ffb59fb4"}],"neutron/common/constants.py":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d59920b6380089575d03d7ac8bd9853932c042d4","unresolved":false,"context_lines":[{"line_number":148,"context_line":"PORT_BINDING_STATUS_ACTIVE \u003d \u0027ACTIVE\u0027"},{"line_number":149,"context_line":"PORT_BINDING_STATUS_INACTIVE \u003d \u0027INACTIVE\u0027"},{"line_number":150,"context_line":"PORT_BINDING_STATUSES \u003d (PORT_BINDING_STATUS_ACTIVE,"},{"line_number":151,"context_line":"                       PORT_BINDING_STATUS_INACTIVE)"}],"source_content_type":"text/x-python","patch_set":27,"id":"7a3c09a3_dc053d46","line":151,"updated":"2017-01-17 20:40:46.000000000","message":"nit: indentation is wrong here","commit_id":"577503466fa65060e2c4d730cd4b0a0c3a1eb0ed"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"f0656d53115a1d35d3f2ba78f8273df862532599","unresolved":false,"context_lines":[{"line_number":148,"context_line":"PORT_BINDING_STATUS_ACTIVE \u003d \u0027ACTIVE\u0027"},{"line_number":149,"context_line":"PORT_BINDING_STATUS_INACTIVE \u003d \u0027INACTIVE\u0027"},{"line_number":150,"context_line":"PORT_BINDING_STATUSES \u003d (PORT_BINDING_STATUS_ACTIVE,"},{"line_number":151,"context_line":"                       PORT_BINDING_STATUS_INACTIVE)"}],"source_content_type":"text/x-python","patch_set":27,"id":"7a3c09a3_10c96459","line":151,"in_reply_to":"7a3c09a3_dc053d46","updated":"2017-01-17 22:21:26.000000000","message":"Done","commit_id":"577503466fa65060e2c4d730cd4b0a0c3a1eb0ed"}],"neutron/db/migration/alembic_migrations/versions/ocata/expand/a9c43481023c_extend_ml2_port_bindings.py":[{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"adeca78964d26d2edc013381ee1adec6ba9b92b9","unresolved":false,"context_lines":[{"line_number":24,"context_line":"# revision identifiers, used by Alembic."},{"line_number":25,"context_line":"revision \u003d \u0027a9c43481023c\u0027"},{"line_number":26,"context_line":"down_revision \u003d \u00275cd92597d11d\u0027"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"from alembic import op"},{"line_number":29,"context_line":"import sqlalchemy as sa"},{"line_number":30,"context_line":"from sqlalchemy.engine.reflection import Inspector as insp"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a71b18c_b598f61c","line":27,"updated":"2016-12-09 10:20:19.000000000","message":"You change should be depends-on migration that creates ml2_port_bindings table.","commit_id":"df339a0c1b6ac6d18c1ae76d1aaf41b7442f4b29"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"ca49d2ebfdfd159b22fc942d6505e1a4085021d9","unresolved":false,"context_lines":[{"line_number":24,"context_line":"# revision identifiers, used by Alembic."},{"line_number":25,"context_line":"revision \u003d \u0027a9c43481023c\u0027"},{"line_number":26,"context_line":"down_revision \u003d \u00275cd92597d11d\u0027"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"from alembic import op"},{"line_number":29,"context_line":"import sqlalchemy as sa"},{"line_number":30,"context_line":"from sqlalchemy.engine.reflection import Inspector as insp"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a6eadb0_5dd41846","line":27,"in_reply_to":"1a6eadb0_1bec848e","updated":"2016-12-15 15:18:23.000000000","message":"Thank you Ann. Do you think I need to add a downgrade method too?","commit_id":"df339a0c1b6ac6d18c1ae76d1aaf41b7442f4b29"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"197a33dd3193b809debcf96f7273d8b7907c328f","unresolved":false,"context_lines":[{"line_number":24,"context_line":"# revision identifiers, used by Alembic."},{"line_number":25,"context_line":"revision \u003d \u0027a9c43481023c\u0027"},{"line_number":26,"context_line":"down_revision \u003d \u00275cd92597d11d\u0027"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"from alembic import op"},{"line_number":29,"context_line":"import sqlalchemy as sa"},{"line_number":30,"context_line":"from sqlalchemy.engine.reflection import Inspector as insp"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a6eadb0_c8b90d17","line":27,"in_reply_to":"1a6eadb0_5dd41846","updated":"2016-12-15 16:54:36.000000000","message":"No, we do not support downgrades","commit_id":"df339a0c1b6ac6d18c1ae76d1aaf41b7442f4b29"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"da1cc27e7d9ad545cdf61631d18832fe94b18963","unresolved":false,"context_lines":[{"line_number":24,"context_line":"# revision identifiers, used by Alembic."},{"line_number":25,"context_line":"revision \u003d \u0027a9c43481023c\u0027"},{"line_number":26,"context_line":"down_revision \u003d \u00275cd92597d11d\u0027"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"from alembic import op"},{"line_number":29,"context_line":"import sqlalchemy as sa"},{"line_number":30,"context_line":"from sqlalchemy.engine.reflection import Inspector as insp"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a6eadb0_1bec848e","line":27,"in_reply_to":"1a6eadb0_f67c47ed","updated":"2016-12-14 09:06:47.000000000","message":"ml2_init_ops.py is not a migration. Migration is https://github.com/openstack/neutron/blob/master/neutron/db/migration/alembic_migrations/versions/kilo_initial.py#L60","commit_id":"df339a0c1b6ac6d18c1ae76d1aaf41b7442f4b29"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"30bcb68459e0fdcc5045a3355dd5b757a5eac8e8","unresolved":false,"context_lines":[{"line_number":24,"context_line":"# revision identifiers, used by Alembic."},{"line_number":25,"context_line":"revision \u003d \u0027a9c43481023c\u0027"},{"line_number":26,"context_line":"down_revision \u003d \u00275cd92597d11d\u0027"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"from alembic import op"},{"line_number":29,"context_line":"import sqlalchemy as sa"},{"line_number":30,"context_line":"from sqlalchemy.engine.reflection import Inspector as insp"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a6eadb0_f67c47ed","line":27,"in_reply_to":"3a71b18c_b598f61c","updated":"2016-12-14 05:52:32.000000000","message":"@Ann: migration that creates the ml2_port_bindings_table is https://github.com/openstack/neutron/blob/master/neutron/db/migration/alembic_migrations/ml2_init_ops.py.\n\nThere is no revision# in this. I am not sure what will be the revision# for depends_on. Any thoughts?","commit_id":"df339a0c1b6ac6d18c1ae76d1aaf41b7442f4b29"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"adeca78964d26d2edc013381ee1adec6ba9b92b9","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    op.add_column(\u0027ml2_port_bindings\u0027,"},{"line_number":41,"context_line":"                  sa.Column(\u0027status\u0027,"},{"line_number":42,"context_line":"                  sa.String(length\u003d16),"},{"line_number":43,"context_line":"                  nullable\u003dFalse))"},{"line_number":44,"context_line":"    engine \u003d op.get_bind().engine"},{"line_number":45,"context_line":"    inspector \u003d insp.from_engine(engine)"},{"line_number":46,"context_line":"    pk_constraint \u003d inspector.get_pk_constraint(\u0027ml2_port_bindings\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a71b18c_75e1fe99","line":43,"updated":"2016-12-09 10:20:19.000000000","message":"Please add server_default\u003d\u0027\u0027 here","commit_id":"df339a0c1b6ac6d18c1ae76d1aaf41b7442f4b29"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"30bcb68459e0fdcc5045a3355dd5b757a5eac8e8","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    op.add_column(\u0027ml2_port_bindings\u0027,"},{"line_number":41,"context_line":"                  sa.Column(\u0027status\u0027,"},{"line_number":42,"context_line":"                  sa.String(length\u003d16),"},{"line_number":43,"context_line":"                  nullable\u003dFalse))"},{"line_number":44,"context_line":"    engine \u003d op.get_bind().engine"},{"line_number":45,"context_line":"    inspector \u003d insp.from_engine(engine)"},{"line_number":46,"context_line":"    pk_constraint \u003d inspector.get_pk_constraint(\u0027ml2_port_bindings\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a6eadb0_f6d3675d","line":43,"in_reply_to":"3a71b18c_75e1fe99","updated":"2016-12-14 05:52:32.000000000","message":"Done","commit_id":"df339a0c1b6ac6d18c1ae76d1aaf41b7442f4b29"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"adeca78964d26d2edc013381ee1adec6ba9b92b9","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    elif (engine.name \u003d\u003d POSTGRESQL_ENGINE):"},{"line_number":51,"context_line":"        op.execute(\"ALTER TABLE ml2_port_bindings DROP CONSTRAINT %s,\""},{"line_number":52,"context_line":"                \"ADD PRIMARY KEY(port_id, host);\" % pk_constraint.get(\u0027name\u0027))"},{"line_number":53,"context_line":"    else:"},{"line_number":54,"context_line":"        LOG.debug(\"Unsupported db\")"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a71b18c_d5dd7243","line":54,"range":{"start_line":53,"start_character":4,"end_line":54,"end_character":35},"updated":"2016-12-09 10:20:19.000000000","message":"Migration can be run against db2 backend. \nPlease, change your code in the following way:\n\n   if (engine.name \u003d\u003d MYSQL_ENGINE):\n       op.execute(\"ALTER TABLE ml2_port_bindings DROP PRIMARY KEY,\"\n                \"ADD PRIMARY KEY(port_id, host);\")\n   else:\n       op.drop_constraint(pk_constraint.get(\u0027name\u0027), \u0027ml2_port_bindings\u0027, type_\u003d\u0027primary\u0027)\n       op.create_primary_key(op.f(\"pk_ml2_port_bindings\"), \"ml2_port_bindings\", [\"port_id\", \"host\"])\n\nWe should use sql only if alembic is not handled this.","commit_id":"df339a0c1b6ac6d18c1ae76d1aaf41b7442f4b29"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"30bcb68459e0fdcc5045a3355dd5b757a5eac8e8","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    elif (engine.name \u003d\u003d POSTGRESQL_ENGINE):"},{"line_number":51,"context_line":"        op.execute(\"ALTER TABLE ml2_port_bindings DROP CONSTRAINT %s,\""},{"line_number":52,"context_line":"                \"ADD PRIMARY KEY(port_id, host);\" % pk_constraint.get(\u0027name\u0027))"},{"line_number":53,"context_line":"    else:"},{"line_number":54,"context_line":"        LOG.debug(\"Unsupported db\")"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a6eadb0_16cb83a6","line":54,"range":{"start_line":53,"start_character":4,"end_line":54,"end_character":35},"in_reply_to":"3a71b18c_d5dd7243","updated":"2016-12-14 05:52:32.000000000","message":"Done","commit_id":"df339a0c1b6ac6d18c1ae76d1aaf41b7442f4b29"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"b842cbfe1530b4ee264cc78ff7c91966503bce14","unresolved":false,"context_lines":[{"line_number":42,"context_line":"                  sa.Column(\u0027status\u0027,"},{"line_number":43,"context_line":"                  sa.String(length\u003d16),"},{"line_number":44,"context_line":"                  nullable\u003dFalse),"},{"line_number":45,"context_line":"                  server_default\u003d\u0027\u0027)"},{"line_number":46,"context_line":"    engine \u003d op.get_bind().engine"},{"line_number":47,"context_line":"    inspector \u003d insp.from_engine(engine)"},{"line_number":48,"context_line":"    pk_constraint \u003d inspector.get_pk_constraint(\u0027ml2_port_bindings\u0027)"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a6eadb0_2ad36b05","line":45,"range":{"start_line":45,"start_character":18,"end_line":45,"end_character":35},"updated":"2016-12-15 11:12:17.000000000","message":"server_default\u003d\u0027\u0027 is parameter of Column like nullable.","commit_id":"13cec4ccf21531867a7abc87a3a374ae0e1a27bb"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"58ae59e896a783ff26f1b75bc85f277b2d0ba802","unresolved":false,"context_lines":[{"line_number":42,"context_line":"                  sa.Column(\u0027status\u0027,"},{"line_number":43,"context_line":"                  sa.String(length\u003d16),"},{"line_number":44,"context_line":"                  nullable\u003dFalse),"},{"line_number":45,"context_line":"                  server_default\u003d\u0027\u0027)"},{"line_number":46,"context_line":"    engine \u003d op.get_bind().engine"},{"line_number":47,"context_line":"    inspector \u003d insp.from_engine(engine)"},{"line_number":48,"context_line":"    pk_constraint \u003d inspector.get_pk_constraint(\u0027ml2_port_bindings\u0027)"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a6eadb0_f9006103","line":45,"range":{"start_line":45,"start_character":18,"end_line":45,"end_character":35},"in_reply_to":"1a6eadb0_2ad36b05","updated":"2016-12-15 15:30:22.000000000","message":"oops my bad :( fixing it","commit_id":"13cec4ccf21531867a7abc87a3a374ae0e1a27bb"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"2624f4ea738a51739eee6332dff36ae5e9e0e3fb","unresolved":false,"context_lines":[{"line_number":33,"context_line":"from oslo_log import log as logging"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"MYSQL_ENGINE \u003d \u0027mysql\u0027"},{"line_number":36,"context_line":"POSTGRESQL_ENGINE \u003d \u0027postgresql\u0027"},{"line_number":37,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"1a6eadb0_0c50a6d3","line":36,"range":{"start_line":36,"start_character":0,"end_line":36,"end_character":32},"updated":"2016-12-21 08:00:30.000000000","message":"Not needed","commit_id":"07d2dfa38ced69831ce5e3c337a75d4ff6f57868"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"59e9368e1f1f3e1812c77680ac202194b0dcd266","unresolved":false,"context_lines":[{"line_number":33,"context_line":"from oslo_log import log as logging"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"MYSQL_ENGINE \u003d \u0027mysql\u0027"},{"line_number":36,"context_line":"POSTGRESQL_ENGINE \u003d \u0027postgresql\u0027"},{"line_number":37,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"da4df55a_4563c1b1","line":36,"range":{"start_line":36,"start_character":0,"end_line":36,"end_character":32},"in_reply_to":"1a6eadb0_0c50a6d3","updated":"2016-12-22 18:16:11.000000000","message":"Done","commit_id":"07d2dfa38ced69831ce5e3c337a75d4ff6f57868"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"5e8ff8dc318dbde61c1c7704b892cc19b620aa5d","unresolved":false,"context_lines":[{"line_number":42,"context_line":"                  sa.String(length\u003d16),"},{"line_number":43,"context_line":"                  nullable\u003dFalse,"},{"line_number":44,"context_line":"                  server_default\u003d\u0027\u0027))"},{"line_number":45,"context_line":"    engine \u003d op.get_bind().engine"},{"line_number":46,"context_line":"    inspector \u003d insp.from_engine(engine)"},{"line_number":47,"context_line":"    if (engine.name \u003d\u003d MYSQL_ENGINE):"},{"line_number":48,"context_line":"        op.execute(\"ALTER TABLE ml2_port_bindings DROP PRIMARY KEY,\""},{"line_number":49,"context_line":"                \"ADD PRIMARY KEY(port_id, host);\")"}],"source_content_type":"text/x-python","patch_set":20,"id":"da4df55a_11fb517a","line":46,"range":{"start_line":45,"start_character":4,"end_line":46,"end_character":40},"updated":"2016-12-27 11:52:17.000000000","message":"You\u0027ve got failures for Postgres to solve them:\n\n    bind \u003d op.get_bind()\n    inspector \u003d insp.from_engine(bind)\n\nAlso this lines can be moved for 51 line.","commit_id":"f92c8a843dade45a2c323050efe620bfb727647e"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"60b7c6d16710666e43a93c0797f27bd4d7db063e","unresolved":false,"context_lines":[{"line_number":42,"context_line":"                  sa.String(length\u003d16),"},{"line_number":43,"context_line":"                  nullable\u003dFalse,"},{"line_number":44,"context_line":"                  server_default\u003d\u0027\u0027))"},{"line_number":45,"context_line":"    engine \u003d op.get_bind().engine"},{"line_number":46,"context_line":"    inspector \u003d insp.from_engine(engine)"},{"line_number":47,"context_line":"    if (engine.name \u003d\u003d MYSQL_ENGINE):"},{"line_number":48,"context_line":"        op.execute(\"ALTER TABLE ml2_port_bindings DROP PRIMARY KEY,\""},{"line_number":49,"context_line":"                \"ADD PRIMARY KEY(port_id, host);\")"}],"source_content_type":"text/x-python","patch_set":20,"id":"ba5201f7_a72f0ef5","line":46,"range":{"start_line":45,"start_character":4,"end_line":46,"end_character":40},"in_reply_to":"ba5201f7_41d115fb","updated":"2017-01-10 08:58:50.000000000","message":"Actually bind and engine is very close in what they are, but in migrations you should you bind, as it gives correct access for database.","commit_id":"f92c8a843dade45a2c323050efe620bfb727647e"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"09846071fb7403665f76618928c98fcb61816219","unresolved":false,"context_lines":[{"line_number":42,"context_line":"                  sa.String(length\u003d16),"},{"line_number":43,"context_line":"                  nullable\u003dFalse,"},{"line_number":44,"context_line":"                  server_default\u003d\u0027\u0027))"},{"line_number":45,"context_line":"    engine \u003d op.get_bind().engine"},{"line_number":46,"context_line":"    inspector \u003d insp.from_engine(engine)"},{"line_number":47,"context_line":"    if (engine.name \u003d\u003d MYSQL_ENGINE):"},{"line_number":48,"context_line":"        op.execute(\"ALTER TABLE ml2_port_bindings DROP PRIMARY KEY,\""},{"line_number":49,"context_line":"                \"ADD PRIMARY KEY(port_id, host);\")"}],"source_content_type":"text/x-python","patch_set":20,"id":"7a3c09a3_d5e0e0fc","line":46,"range":{"start_line":45,"start_character":4,"end_line":46,"end_character":40},"in_reply_to":"ba5201f7_a72f0ef5","updated":"2017-01-17 06:22:23.000000000","message":"@Ann: Thank you fro the explanation :)","commit_id":"f92c8a843dade45a2c323050efe620bfb727647e"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"6e29fcc178ea2783fc8fe471360285718aef9185","unresolved":false,"context_lines":[{"line_number":42,"context_line":"                  sa.String(length\u003d16),"},{"line_number":43,"context_line":"                  nullable\u003dFalse,"},{"line_number":44,"context_line":"                  server_default\u003d\u0027\u0027))"},{"line_number":45,"context_line":"    engine \u003d op.get_bind().engine"},{"line_number":46,"context_line":"    inspector \u003d insp.from_engine(engine)"},{"line_number":47,"context_line":"    if (engine.name \u003d\u003d MYSQL_ENGINE):"},{"line_number":48,"context_line":"        op.execute(\"ALTER TABLE ml2_port_bindings DROP PRIMARY KEY,\""},{"line_number":49,"context_line":"                \"ADD PRIMARY KEY(port_id, host);\")"}],"source_content_type":"text/x-python","patch_set":20,"id":"ba5201f7_41d115fb","line":46,"range":{"start_line":45,"start_character":4,"end_line":46,"end_character":40},"in_reply_to":"da4df55a_11fb517a","updated":"2016-12-29 16:49:56.000000000","message":"Thank you Ann. This resolved the failures. \nBut I didn\u0027t understand the difference between inspector \u003d insp.from_engine(engine) and inspector \u003d insp.from_engine(bind). Can you please explain it?","commit_id":"f92c8a843dade45a2c323050efe620bfb727647e"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"cf13ecae4c4c899e72856b39e88ffd411587aaf3","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    under the License."},{"line_number":14,"context_line":"#"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"\"\"\"extend_pk_with_host_and_add_status_to_ml2_port_binding"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Revision ID: a9c43481023c"},{"line_number":19,"context_line":"Revises: 5cd92597d11d"}],"source_content_type":"text/x-python","patch_set":23,"id":"7a3c09a3_c07c0075","line":16,"range":{"start_line":16,"start_character":23,"end_line":16,"end_character":38},"updated":"2017-01-13 17:56:50.000000000","message":"this may be not needed if we end up dropping status attribute addition from the patch","commit_id":"7f3329a8febbfe1e33363328c91764e3bdd3840f"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"61bdefcc0c7fff0f3e03e0568761ec285883e8de","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    under the License."},{"line_number":14,"context_line":"#"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"\"\"\"extend_pk_with_host_and_add_status_to_ml2_port_binding"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Revision ID: a9c43481023c"},{"line_number":19,"context_line":"Revises: 5cd92597d11d"}],"source_content_type":"text/x-python","patch_set":23,"id":"7a3c09a3_b53994f4","line":16,"range":{"start_line":16,"start_character":23,"end_line":16,"end_character":38},"in_reply_to":"7a3c09a3_c07c0075","updated":"2017-01-17 06:21:08.000000000","message":"same as line 43","commit_id":"7f3329a8febbfe1e33363328c91764e3bdd3840f"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"cf13ecae4c4c899e72856b39e88ffd411587aaf3","unresolved":false,"context_lines":[{"line_number":24,"context_line":"# revision identifiers, used by Alembic."},{"line_number":25,"context_line":"revision \u003d \u0027a9c43481023c\u0027"},{"line_number":26,"context_line":"down_revision \u003d \u00275cd92597d11d\u0027"},{"line_number":27,"context_line":"depends_on \u003d \u0027kilo\u0027"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"from alembic import op"},{"line_number":30,"context_line":"import sqlalchemy as sa"}],"source_content_type":"text/x-python","patch_set":23,"id":"7a3c09a3_60b7cc39","line":27,"range":{"start_line":27,"start_character":0,"end_line":27,"end_character":19},"updated":"2017-01-13 17:56:50.000000000","message":"why is that needed? Doesn\u0027t down_revision already pull kilo for you?","commit_id":"7f3329a8febbfe1e33363328c91764e3bdd3840f"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"61bdefcc0c7fff0f3e03e0568761ec285883e8de","unresolved":false,"context_lines":[{"line_number":24,"context_line":"# revision identifiers, used by Alembic."},{"line_number":25,"context_line":"revision \u003d \u0027a9c43481023c\u0027"},{"line_number":26,"context_line":"down_revision \u003d \u00275cd92597d11d\u0027"},{"line_number":27,"context_line":"depends_on \u003d \u0027kilo\u0027"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"from alembic import op"},{"line_number":30,"context_line":"import sqlalchemy as sa"}],"source_content_type":"text/x-python","patch_set":23,"id":"7a3c09a3_15ca684e","line":27,"range":{"start_line":27,"start_character":0,"end_line":27,"end_character":19},"in_reply_to":"7a3c09a3_2551fdd8","updated":"2017-01-17 06:21:08.000000000","message":"Removed the \u0027depends on\u0027 line","commit_id":"7f3329a8febbfe1e33363328c91764e3bdd3840f"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"5e3f8d184bd5c65bfb96c2c4469866a3164c1a26","unresolved":false,"context_lines":[{"line_number":24,"context_line":"# revision identifiers, used by Alembic."},{"line_number":25,"context_line":"revision \u003d \u0027a9c43481023c\u0027"},{"line_number":26,"context_line":"down_revision \u003d \u00275cd92597d11d\u0027"},{"line_number":27,"context_line":"depends_on \u003d \u0027kilo\u0027"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"from alembic import op"},{"line_number":30,"context_line":"import sqlalchemy as sa"}],"source_content_type":"text/x-python","patch_set":23,"id":"7a3c09a3_ed01a1b0","line":27,"range":{"start_line":27,"start_character":0,"end_line":27,"end_character":19},"in_reply_to":"7a3c09a3_3e4ce041","updated":"2017-01-16 20:49:57.000000000","message":"That\u0027s weird. I want to understand why it hits us, and only for psql. Sadly I couldn\u0027t set my local env to execute the test against psql (do we have any instructions somewhere on how to achieve that?), so I posted https://review.openstack.org/420949 to play with it a bit. Stay tuned.","commit_id":"7f3329a8febbfe1e33363328c91764e3bdd3840f"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"88ffda9ba898e6578c004a39db976183ae78e940","unresolved":false,"context_lines":[{"line_number":24,"context_line":"# revision identifiers, used by Alembic."},{"line_number":25,"context_line":"revision \u003d \u0027a9c43481023c\u0027"},{"line_number":26,"context_line":"down_revision \u003d \u00275cd92597d11d\u0027"},{"line_number":27,"context_line":"depends_on \u003d \u0027kilo\u0027"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"from alembic import op"},{"line_number":30,"context_line":"import sqlalchemy as sa"}],"source_content_type":"text/x-python","patch_set":23,"id":"7a3c09a3_3e4ce041","line":27,"range":{"start_line":27,"start_character":0,"end_line":27,"end_character":19},"in_reply_to":"7a3c09a3_60b7cc39","updated":"2017-01-16 06:19:22.000000000","message":"I asked to add it here as functional tests for postgres were failing with \"sqlalchemy.exc.NoSuchTableError: ml2_port_bindings\"\nhttp://logs.openstack.org/93/404293/10/check/gate-neutron-dsvm-functional-ubuntu-xenial/6a6255e/testr_results.html.gz","commit_id":"7f3329a8febbfe1e33363328c91764e3bdd3840f"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"5cd1ea18bb59e1ac6e2ac78e3c95418e4f5f907c","unresolved":false,"context_lines":[{"line_number":24,"context_line":"# revision identifiers, used by Alembic."},{"line_number":25,"context_line":"revision \u003d \u0027a9c43481023c\u0027"},{"line_number":26,"context_line":"down_revision \u003d \u00275cd92597d11d\u0027"},{"line_number":27,"context_line":"depends_on \u003d \u0027kilo\u0027"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"from alembic import op"},{"line_number":30,"context_line":"import sqlalchemy as sa"}],"source_content_type":"text/x-python","patch_set":23,"id":"7a3c09a3_2551fdd8","line":27,"range":{"start_line":27,"start_character":0,"end_line":27,"end_character":19},"in_reply_to":"7a3c09a3_ed01a1b0","updated":"2017-01-16 22:04:47.000000000","message":"As you can see, the patch removing the dependency passes just fine in gate. So please remove the line, it\u0027s not needed.","commit_id":"7f3329a8febbfe1e33363328c91764e3bdd3840f"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"cf13ecae4c4c899e72856b39e88ffd411587aaf3","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"def upgrade():"},{"line_number":39,"context_line":"    op.add_column(ML2_PORT_BINDING,"},{"line_number":40,"context_line":"                  sa.Column(\u0027status\u0027,"},{"line_number":41,"context_line":"                  sa.String(length\u003d16),"},{"line_number":42,"context_line":"                  nullable\u003dFalse,"},{"line_number":43,"context_line":"                  server_default\u003d\u0027\u0027))"},{"line_number":44,"context_line":"    bind \u003d op.get_bind()"},{"line_number":45,"context_line":"    engine \u003d bind.engine"},{"line_number":46,"context_line":"    if (engine.name \u003d\u003d MYSQL_ENGINE):"}],"source_content_type":"text/x-python","patch_set":23,"id":"7a3c09a3_a0a0d4f5","line":43,"range":{"start_line":39,"start_character":4,"end_line":43,"end_character":37},"updated":"2017-01-13 17:56:50.000000000","message":"This part is not described in the commit message. More over, we better keep it separate.","commit_id":"7f3329a8febbfe1e33363328c91764e3bdd3840f"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"61bdefcc0c7fff0f3e03e0568761ec285883e8de","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"def upgrade():"},{"line_number":39,"context_line":"    op.add_column(ML2_PORT_BINDING,"},{"line_number":40,"context_line":"                  sa.Column(\u0027status\u0027,"},{"line_number":41,"context_line":"                  sa.String(length\u003d16),"},{"line_number":42,"context_line":"                  nullable\u003dFalse,"},{"line_number":43,"context_line":"                  server_default\u003d\u0027\u0027))"},{"line_number":44,"context_line":"    bind \u003d op.get_bind()"},{"line_number":45,"context_line":"    engine \u003d bind.engine"},{"line_number":46,"context_line":"    if (engine.name \u003d\u003d MYSQL_ENGINE):"}],"source_content_type":"text/x-python","patch_set":23,"id":"7a3c09a3_9519f8d9","line":43,"range":{"start_line":39,"start_character":4,"end_line":43,"end_character":37},"in_reply_to":"7a3c09a3_a0a0d4f5","updated":"2017-01-17 06:21:08.000000000","message":"@Ihar: I have updated the commit message. I was thinking in one expand migration both the extension of the primary key and addition of new column can be done. Do you think we will have some issue if we do that?","commit_id":"7f3329a8febbfe1e33363328c91764e3bdd3840f"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"3add2943565447b078292c07732992cc2534c9b3","unresolved":false,"context_lines":[{"line_number":55,"context_line":"                              ML2_PORT_BINDING, [\u0027port_id\u0027, \u0027host\u0027])"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"def expand_drop_exceptions():"},{"line_number":59,"context_line":"    \"\"\"Drop the existing primary key constraint and then extend it to include"},{"line_number":60,"context_line":"    host as the primary key to support multiple bindings for the same port."},{"line_number":61,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":23,"id":"ba5201f7_d6464620","line":58,"updated":"2017-01-11 10:03:02.000000000","message":"Is it used somewhere?","commit_id":"7f3329a8febbfe1e33363328c91764e3bdd3840f"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"5e3f8d184bd5c65bfb96c2c4469866a3164c1a26","unresolved":false,"context_lines":[{"line_number":55,"context_line":"                              ML2_PORT_BINDING, [\u0027port_id\u0027, \u0027host\u0027])"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"def expand_drop_exceptions():"},{"line_number":59,"context_line":"    \"\"\"Drop the existing primary key constraint and then extend it to include"},{"line_number":60,"context_line":"    host as the primary key to support multiple bindings for the same port."},{"line_number":61,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":23,"id":"7a3c09a3_ad74f967","line":58,"in_reply_to":"ba5201f7_5fbfc95f","updated":"2017-01-16 20:49:57.000000000","message":"FYI I have checked Newton code, it does not seem to assume a single binding record (using .first instead of .one, and such).","commit_id":"7f3329a8febbfe1e33363328c91764e3bdd3840f"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"b847799cb6e9902bbe398da7dff5fbc5dfd7e976","unresolved":false,"context_lines":[{"line_number":55,"context_line":"                              ML2_PORT_BINDING, [\u0027port_id\u0027, \u0027host\u0027])"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"def expand_drop_exceptions():"},{"line_number":59,"context_line":"    \"\"\"Drop the existing primary key constraint and then extend it to include"},{"line_number":60,"context_line":"    host as the primary key to support multiple bindings for the same port."},{"line_number":61,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":23,"id":"ba5201f7_d6900651","line":58,"in_reply_to":"ba5201f7_d6464620","updated":"2017-01-11 10:06:22.000000000","message":"This is need to use drop in expand migration to pass test_branches. Usually this operation should not be allowed here.\n\nBy, the way is it OK to recreate pk key in expand?","commit_id":"7f3329a8febbfe1e33363328c91764e3bdd3840f"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"3a25b2fd5ec38184e9e83d8265be104f5386632e","unresolved":false,"context_lines":[{"line_number":55,"context_line":"                              ML2_PORT_BINDING, [\u0027port_id\u0027, \u0027host\u0027])"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"def expand_drop_exceptions():"},{"line_number":59,"context_line":"    \"\"\"Drop the existing primary key constraint and then extend it to include"},{"line_number":60,"context_line":"    host as the primary key to support multiple bindings for the same port."},{"line_number":61,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":23,"id":"ba5201f7_5fbfc95f","line":58,"in_reply_to":"ba5201f7_d6900651","updated":"2017-01-11 11:07:43.000000000","message":"If it is backward compatible then yes. I guess it can lock db for some time, but until older version of neutron-server is able to operate on modified schema, we are OK.","commit_id":"7f3329a8febbfe1e33363328c91764e3bdd3840f"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d59920b6380089575d03d7ac8bd9853932c042d4","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"MYSQL_ENGINE \u003d \u0027mysql\u0027"},{"line_number":35,"context_line":"ML2_PORT_BINDING \u003d \u0027ml2_port_bindings\u0027"},{"line_number":36,"context_line":"port_binding_statuses \u003d sa.Enum(constants.PORT_BINDING_STATUS_ACTIVE,"},{"line_number":37,"context_line":"                        constants.PORT_BINDING_STATUS_INACTIVE,"},{"line_number":38,"context_line":"                        name\u003d\u0027port_binding_statuses\u0027)"},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"7a3c09a3_3c01e106","line":36,"updated":"2017-01-17 20:40:46.000000000","message":"any reason to define it here and not inline in L44?","commit_id":"577503466fa65060e2c4d730cd4b0a0c3a1eb0ed"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"f0656d53115a1d35d3f2ba78f8273df862532599","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"MYSQL_ENGINE \u003d \u0027mysql\u0027"},{"line_number":35,"context_line":"ML2_PORT_BINDING \u003d \u0027ml2_port_bindings\u0027"},{"line_number":36,"context_line":"port_binding_statuses \u003d sa.Enum(constants.PORT_BINDING_STATUS_ACTIVE,"},{"line_number":37,"context_line":"                        constants.PORT_BINDING_STATUS_INACTIVE,"},{"line_number":38,"context_line":"                        name\u003d\u0027port_binding_statuses\u0027)"},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"7a3c09a3_30774003","line":36,"in_reply_to":"7a3c09a3_3c01e106","updated":"2017-01-17 22:21:26.000000000","message":"Did it to avoid multiple lines. But Moved it back inline :)","commit_id":"577503466fa65060e2c4d730cd4b0a0c3a1eb0ed"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d59920b6380089575d03d7ac8bd9853932c042d4","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    op.add_column(ML2_PORT_BINDING,"},{"line_number":43,"context_line":"                  sa.Column(\u0027status\u0027,"},{"line_number":44,"context_line":"                  port_binding_statuses,"},{"line_number":45,"context_line":"                  server_default\u003dconstants.PORT_STATUS_ACTIVE))"},{"line_number":46,"context_line":"    bind \u003d op.get_bind()"},{"line_number":47,"context_line":"    engine \u003d bind.engine"},{"line_number":48,"context_line":"    if (engine.name \u003d\u003d MYSQL_ENGINE):"}],"source_content_type":"text/x-python","patch_set":27,"id":"7a3c09a3_3c8e41d0","line":45,"updated":"2017-01-17 20:40:46.000000000","message":"should we also set default here, not just server_default?","commit_id":"577503466fa65060e2c4d730cd4b0a0c3a1eb0ed"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"f0656d53115a1d35d3f2ba78f8273df862532599","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    op.add_column(ML2_PORT_BINDING,"},{"line_number":43,"context_line":"                  sa.Column(\u0027status\u0027,"},{"line_number":44,"context_line":"                  port_binding_statuses,"},{"line_number":45,"context_line":"                  server_default\u003dconstants.PORT_STATUS_ACTIVE))"},{"line_number":46,"context_line":"    bind \u003d op.get_bind()"},{"line_number":47,"context_line":"    engine \u003d bind.engine"},{"line_number":48,"context_line":"    if (engine.name \u003d\u003d MYSQL_ENGINE):"}],"source_content_type":"text/x-python","patch_set":27,"id":"7a3c09a3_f0577855","line":45,"in_reply_to":"7a3c09a3_3c8e41d0","updated":"2017-01-17 22:21:26.000000000","message":"Done","commit_id":"577503466fa65060e2c4d730cd4b0a0c3a1eb0ed"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"c9037ac494d9f68ee27a2472aa3cf59aa8ef055b","unresolved":false,"context_lines":[{"line_number":41,"context_line":"                      sa.Enum(constants.PORT_BINDING_STATUS_ACTIVE,"},{"line_number":42,"context_line":"                              constants.PORT_BINDING_STATUS_INACTIVE,"},{"line_number":43,"context_line":"                              name\u003d\u0027port_binding_statuses\u0027),"},{"line_number":44,"context_line":"                      default\u003dconstants.PORT_BINDING_STATUS_ACTIVE,"},{"line_number":45,"context_line":"                      server_default\u003dconstants.PORT_BINDING_STATUS_ACTIVE))"},{"line_number":46,"context_line":"    bind \u003d op.get_bind()"},{"line_number":47,"context_line":"    engine \u003d bind.engine"}],"source_content_type":"text/x-python","patch_set":29,"id":"7a3c09a3_3e9b8319","line":44,"range":{"start_line":44,"start_character":22,"end_line":44,"end_character":29},"updated":"2017-01-18 07:06:20.000000000","message":"default is useless in migrations. Please, see http://docs.openstack.org/developer/neutron/devref/db_layer.html#difference-between-default-and-server-default-parameters-for-columns","commit_id":"1c38666f66d3503aaec9db2fde7b558ed3106ba4"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"c55cf13964633f70c4717b6403574a4dfb085e3b","unresolved":false,"context_lines":[{"line_number":41,"context_line":"                      sa.Enum(constants.PORT_BINDING_STATUS_ACTIVE,"},{"line_number":42,"context_line":"                              constants.PORT_BINDING_STATUS_INACTIVE,"},{"line_number":43,"context_line":"                              name\u003d\u0027port_binding_statuses\u0027),"},{"line_number":44,"context_line":"                      default\u003dconstants.PORT_BINDING_STATUS_ACTIVE,"},{"line_number":45,"context_line":"                      server_default\u003dconstants.PORT_BINDING_STATUS_ACTIVE))"},{"line_number":46,"context_line":"    bind \u003d op.get_bind()"},{"line_number":47,"context_line":"    engine \u003d bind.engine"}],"source_content_type":"text/x-python","patch_set":29,"id":"7a3c09a3_dccc2b37","line":44,"range":{"start_line":44,"start_character":22,"end_line":44,"end_character":29},"in_reply_to":"7a3c09a3_3e9b8319","updated":"2017-01-18 19:08:20.000000000","message":"Removed","commit_id":"1c38666f66d3503aaec9db2fde7b558ed3106ba4"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"d49cb73e2fc3b6ed63794fcc12ed11643f4b9b31","unresolved":false,"context_lines":[{"line_number":41,"context_line":"                      sa.Enum(constants.PORT_BINDING_STATUS_ACTIVE,"},{"line_number":42,"context_line":"                              constants.PORT_BINDING_STATUS_INACTIVE,"},{"line_number":43,"context_line":"                              name\u003d\u0027port_binding_statuses\u0027),"},{"line_number":44,"context_line":"                      default\u003dconstants.PORT_BINDING_STATUS_ACTIVE,"},{"line_number":45,"context_line":"                      server_default\u003dconstants.PORT_BINDING_STATUS_ACTIVE))"},{"line_number":46,"context_line":"    bind \u003d op.get_bind()"},{"line_number":47,"context_line":"    engine \u003d bind.engine"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a3c09a3_340a9b26","line":44,"updated":"2017-01-18 18:04:43.000000000","message":"as Ann suggested, default\u003d should be removed","commit_id":"5e4590b388bc09810339979aad6cfe6460f5c850"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"272b7d571a7a2eec007de8db96fe61ae05e45e38","unresolved":false,"context_lines":[{"line_number":41,"context_line":"                      sa.Enum(constants.PORT_BINDING_STATUS_ACTIVE,"},{"line_number":42,"context_line":"                              constants.PORT_BINDING_STATUS_INACTIVE,"},{"line_number":43,"context_line":"                              name\u003d\u0027port_binding_statuses\u0027),"},{"line_number":44,"context_line":"                      default\u003dconstants.PORT_BINDING_STATUS_ACTIVE,"},{"line_number":45,"context_line":"                      server_default\u003dconstants.PORT_BINDING_STATUS_ACTIVE))"},{"line_number":46,"context_line":"    bind \u003d op.get_bind()"},{"line_number":47,"context_line":"    engine \u003d bind.engine"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a3c09a3_220b362d","line":44,"in_reply_to":"7a3c09a3_340a9b26","updated":"2017-01-18 19:08:47.000000000","message":"done","commit_id":"5e4590b388bc09810339979aad6cfe6460f5c850"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"69771cdfad55bd4089e1a93fcbfdf5e7dd220ee9","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"def upgrade():"},{"line_number":41,"context_line":"    op.add_column(ML2_PORT_BINDING,"},{"line_number":42,"context_line":"                  sa.Column(\u0027status\u0027,"},{"line_number":43,"context_line":"                  name\u003d\u0027port_binding_statuses\u0027,"},{"line_number":44,"context_line":"                  server_default\u003dconstants.PORT_BINDING_STATUS_ACTIVE))"},{"line_number":45,"context_line":"    bind \u003d op.get_bind()"}],"source_content_type":"text/x-python","patch_set":31,"id":"7a3c09a3_9d2a8f2e","line":42,"updated":"2017-01-18 19:13:29.000000000","message":"have you just reverted some latest changes, and removed type info from the column?","commit_id":"b136b43df82ddd4f8b2fc3603c3d4317cddd2285"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"3c584b95a8a069c83208b897b601bbe790832514","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"def upgrade():"},{"line_number":41,"context_line":"    op.add_column(ML2_PORT_BINDING,"},{"line_number":42,"context_line":"                  sa.Column(\u0027status\u0027,"},{"line_number":43,"context_line":"                  name\u003d\u0027port_binding_statuses\u0027,"},{"line_number":44,"context_line":"                  server_default\u003dconstants.PORT_BINDING_STATUS_ACTIVE))"},{"line_number":45,"context_line":"    bind \u003d op.get_bind()"}],"source_content_type":"text/x-python","patch_set":31,"id":"7a3c09a3_751fb7b7","line":42,"in_reply_to":"7a3c09a3_9d2a8f2e","updated":"2017-01-18 20:05:43.000000000","message":"Sorry mistakenly added name\u003d\u0027port_binding_statuses\u0027. Reverted it back","commit_id":"b136b43df82ddd4f8b2fc3603c3d4317cddd2285"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"fca590cee4c156a00831dbee6749d2ff75835a19","unresolved":false,"context_lines":[{"line_number":41,"context_line":"def upgrade():"},{"line_number":42,"context_line":"    op.add_column(ML2_PORT_BINDING,"},{"line_number":43,"context_line":"                  sa.Column(\u0027status\u0027,"},{"line_number":44,"context_line":"                  port_binding_statuses,"},{"line_number":45,"context_line":"                  server_default\u003dconstants.PORT_BINDING_STATUS_ACTIVE))"},{"line_number":46,"context_line":"    bind \u003d op.get_bind()"},{"line_number":47,"context_line":"    engine \u003d bind.engine"}],"source_content_type":"text/x-python","patch_set":32,"id":"7a3c09a3_15483387","line":44,"range":{"start_line":44,"start_character":18,"end_line":44,"end_character":39},"updated":"2017-01-18 20:10:24.000000000","message":"could as well be inline, but ok","commit_id":"42acf4da1465ff557bfd957008243d1fd3feba45"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"9e9e166d3eebf23bfd4a1b6cf2e7cf8c1103462d","unresolved":false,"context_lines":[{"line_number":41,"context_line":"def upgrade():"},{"line_number":42,"context_line":"    op.add_column(ML2_PORT_BINDING,"},{"line_number":43,"context_line":"                  sa.Column(\u0027status\u0027,"},{"line_number":44,"context_line":"                  port_binding_statuses,"},{"line_number":45,"context_line":"                  server_default\u003dconstants.PORT_BINDING_STATUS_ACTIVE))"},{"line_number":46,"context_line":"    bind \u003d op.get_bind()"},{"line_number":47,"context_line":"    engine \u003d bind.engine"}],"source_content_type":"text/x-python","patch_set":32,"id":"7a3c09a3_4e85c8ab","line":44,"range":{"start_line":44,"start_character":18,"end_line":44,"end_character":39},"in_reply_to":"7a3c09a3_15483387","updated":"2017-01-18 21:26:32.000000000","message":"@Ihar: Using enum type in op.add_column is failing for postgresql. Working on fixing it.","commit_id":"42acf4da1465ff557bfd957008243d1fd3feba45"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"1c24e9cc07c3902308c4c3a8da5265f954ca45fe","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        op.execute(\"ALTER TABLE ml2_port_bindings DROP PRIMARY KEY,\""},{"line_number":44,"context_line":"                \"ADD PRIMARY KEY(port_id, host);\")"},{"line_number":45,"context_line":"    else:"},{"line_number":46,"context_line":"        port_binding_statuses \u003d postgresql.ENUM("},{"line_number":47,"context_line":"                constants.PORT_BINDING_STATUS_ACTIVE,"},{"line_number":48,"context_line":"                constants.PORT_BINDING_STATUS_INACTIVE,"},{"line_number":49,"context_line":"                name\u003d\u0027port_binding_statuses\u0027)"},{"line_number":50,"context_line":"        port_binding_statuses.create(bind)"},{"line_number":51,"context_line":"        inspector \u003d insp.from_engine(bind)"},{"line_number":52,"context_line":"        pk_constraint \u003d inspector.get_pk_constraint(ML2_PORT_BINDING)"},{"line_number":53,"context_line":"        op.drop_constraint(pk_constraint.get(\u0027name\u0027), ML2_PORT_BINDING,"}],"source_content_type":"text/x-python","patch_set":36,"id":"5a3905b3_b67849fa","line":50,"range":{"start_line":46,"start_character":8,"end_line":50,"end_character":42},"updated":"2017-01-19 06:37:46.000000000","message":"This is need only in case of PostgreSQL, so we need to add check here that engine.name \u003d\u003d \u0027postgres\u0027 and this can be moved before creation of column.","commit_id":"fc4ece3369107322cd0d8955061507b39c6b3fdf"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"3d8eecd3830983afc0a424bd872c20bfaac52a76","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        op.execute(\"ALTER TABLE ml2_port_bindings DROP PRIMARY KEY,\""},{"line_number":44,"context_line":"                \"ADD PRIMARY KEY(port_id, host);\")"},{"line_number":45,"context_line":"    else:"},{"line_number":46,"context_line":"        port_binding_statuses \u003d postgresql.ENUM("},{"line_number":47,"context_line":"                constants.PORT_BINDING_STATUS_ACTIVE,"},{"line_number":48,"context_line":"                constants.PORT_BINDING_STATUS_INACTIVE,"},{"line_number":49,"context_line":"                name\u003d\u0027port_binding_statuses\u0027)"},{"line_number":50,"context_line":"        port_binding_statuses.create(bind)"},{"line_number":51,"context_line":"        inspector \u003d insp.from_engine(bind)"},{"line_number":52,"context_line":"        pk_constraint \u003d inspector.get_pk_constraint(ML2_PORT_BINDING)"},{"line_number":53,"context_line":"        op.drop_constraint(pk_constraint.get(\u0027name\u0027), ML2_PORT_BINDING,"}],"source_content_type":"text/x-python","patch_set":36,"id":"5a3905b3_507c6972","line":50,"range":{"start_line":46,"start_character":8,"end_line":50,"end_character":42},"in_reply_to":"5a3905b3_b67849fa","updated":"2017-01-19 16:29:54.000000000","message":"Done","commit_id":"fc4ece3369107322cd0d8955061507b39c6b3fdf"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"6eea612b0f87899b0557df19db1a38934e50016d","unresolved":false,"context_lines":[{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    if (engine.name \u003d\u003d POSTGRESQL_ENGINE):"},{"line_number":45,"context_line":"        port_binding_statuses \u003d postgresql.ENUM("},{"line_number":46,"context_line":"                constants.PORT_BINDING_STATUS_ACTIVE,"},{"line_number":47,"context_line":"                constants.PORT_BINDING_STATUS_INACTIVE,"},{"line_number":48,"context_line":"                name\u003d\u0027port_binding_statuses\u0027)"},{"line_number":49,"context_line":"        port_binding_statuses.create(bind)"}],"source_content_type":"text/x-python","patch_set":37,"id":"5a3905b3_99cc3137","line":46,"updated":"2017-01-19 20:35:40.000000000","message":"If we envision the state to have only two values and we do prescribe that in the logical schema, have we considered making it a bool at all?","commit_id":"a367ba506c90232e122568431b877125ffb59fb4"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"d1c731b8abefe5f6517ed9e43b438d7636cad8b6","unresolved":false,"context_lines":[{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    if (engine.name \u003d\u003d POSTGRESQL_ENGINE):"},{"line_number":45,"context_line":"        port_binding_statuses \u003d postgresql.ENUM("},{"line_number":46,"context_line":"                constants.PORT_BINDING_STATUS_ACTIVE,"},{"line_number":47,"context_line":"                constants.PORT_BINDING_STATUS_INACTIVE,"},{"line_number":48,"context_line":"                name\u003d\u0027port_binding_statuses\u0027)"},{"line_number":49,"context_line":"        port_binding_statuses.create(bind)"}],"source_content_type":"text/x-python","patch_set":37,"id":"5a3905b3_a85c02ee","line":46,"in_reply_to":"5a3905b3_5e4d4a71","updated":"2017-01-20 16:32:21.000000000","message":"I get that, but that would involve a DB migration, would it not? At this point I wonder if it\u0027s not saver to store this as string and do validation in the business logic.","commit_id":"a367ba506c90232e122568431b877125ffb59fb4"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"d8906ddc67c5e68a586740f35d9f12b470d16988","unresolved":false,"context_lines":[{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    if (engine.name \u003d\u003d POSTGRESQL_ENGINE):"},{"line_number":45,"context_line":"        port_binding_statuses \u003d postgresql.ENUM("},{"line_number":46,"context_line":"                constants.PORT_BINDING_STATUS_ACTIVE,"},{"line_number":47,"context_line":"                constants.PORT_BINDING_STATUS_INACTIVE,"},{"line_number":48,"context_line":"                name\u003d\u0027port_binding_statuses\u0027)"},{"line_number":49,"context_line":"        port_binding_statuses.create(bind)"}],"source_content_type":"text/x-python","patch_set":37,"id":"5a3905b3_5e4d4a71","line":46,"in_reply_to":"5a3905b3_99cc3137","updated":"2017-01-19 21:55:24.000000000","message":"@Armando: I kept it as enum because in future  we might introduce a state to indicate that port binding has encountered an error say \"ERROR or INVALID\".","commit_id":"a367ba506c90232e122568431b877125ffb59fb4"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"994a2741dc5b97b56a152d1c86ef05b2cba62129","unresolved":false,"context_lines":[{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    if (engine.name \u003d\u003d POSTGRESQL_ENGINE):"},{"line_number":45,"context_line":"        port_binding_statuses \u003d postgresql.ENUM("},{"line_number":46,"context_line":"                constants.PORT_BINDING_STATUS_ACTIVE,"},{"line_number":47,"context_line":"                constants.PORT_BINDING_STATUS_INACTIVE,"},{"line_number":48,"context_line":"                name\u003d\u0027port_binding_statuses\u0027)"},{"line_number":49,"context_line":"        port_binding_statuses.create(bind)"}],"source_content_type":"text/x-python","patch_set":37,"id":"5a3905b3_9d7141e3","line":46,"in_reply_to":"5a3905b3_a85c02ee","updated":"2017-01-20 19:20:37.000000000","message":"As per our discussion, changed it to string and handled the validation in OVO.","commit_id":"a367ba506c90232e122568431b877125ffb59fb4"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"6eea612b0f87899b0557df19db1a38934e50016d","unresolved":false,"context_lines":[{"line_number":70,"context_line":"def expand_drop_exceptions():"},{"line_number":71,"context_line":"    \"\"\"Drop the existing primary key constraint and then extend it to include"},{"line_number":72,"context_line":"    host as the primary key to support multiple bindings for the same port."},{"line_number":73,"context_line":"    \"\"\""},{"line_number":74,"context_line":"    return {"},{"line_number":75,"context_line":"        sa.Constraint: [\u0027ml2_port_bindings_pkey\u0027]"},{"line_number":76,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":37,"id":"5a3905b3_597569f7","line":73,"updated":"2017-01-19 20:35:40.000000000","message":"This docstring doesn\u0027t really explain why this is an exception, though.","commit_id":"a367ba506c90232e122568431b877125ffb59fb4"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"994a2741dc5b97b56a152d1c86ef05b2cba62129","unresolved":false,"context_lines":[{"line_number":70,"context_line":"def expand_drop_exceptions():"},{"line_number":71,"context_line":"    \"\"\"Drop the existing primary key constraint and then extend it to include"},{"line_number":72,"context_line":"    host as the primary key to support multiple bindings for the same port."},{"line_number":73,"context_line":"    \"\"\""},{"line_number":74,"context_line":"    return {"},{"line_number":75,"context_line":"        sa.Constraint: [\u0027ml2_port_bindings_pkey\u0027]"},{"line_number":76,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":37,"id":"5a3905b3_bdb19d91","line":73,"in_reply_to":"5a3905b3_02bb53e6","updated":"2017-01-20 19:20:37.000000000","message":"Done","commit_id":"a367ba506c90232e122568431b877125ffb59fb4"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"d1c731b8abefe5f6517ed9e43b438d7636cad8b6","unresolved":false,"context_lines":[{"line_number":70,"context_line":"def expand_drop_exceptions():"},{"line_number":71,"context_line":"    \"\"\"Drop the existing primary key constraint and then extend it to include"},{"line_number":72,"context_line":"    host as the primary key to support multiple bindings for the same port."},{"line_number":73,"context_line":"    \"\"\""},{"line_number":74,"context_line":"    return {"},{"line_number":75,"context_line":"        sa.Constraint: [\u0027ml2_port_bindings_pkey\u0027]"},{"line_number":76,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":37,"id":"5a3905b3_c8730e7f","line":73,"in_reply_to":"5a3905b3_02bb53e6","updated":"2017-01-20 16:32:21.000000000","message":"as Ann said.","commit_id":"a367ba506c90232e122568431b877125ffb59fb4"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"73827641aaf4f413dc9ee1d361d828d3ccc58df3","unresolved":false,"context_lines":[{"line_number":70,"context_line":"def expand_drop_exceptions():"},{"line_number":71,"context_line":"    \"\"\"Drop the existing primary key constraint and then extend it to include"},{"line_number":72,"context_line":"    host as the primary key to support multiple bindings for the same port."},{"line_number":73,"context_line":"    \"\"\""},{"line_number":74,"context_line":"    return {"},{"line_number":75,"context_line":"        sa.Constraint: [\u0027ml2_port_bindings_pkey\u0027]"},{"line_number":76,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":37,"id":"5a3905b3_02bb53e6","line":73,"in_reply_to":"5a3905b3_3ebcfe04","updated":"2017-01-20 06:25:00.000000000","message":"You need to add explanation why it is OK to do this in expand. See comments - https://review.openstack.org/#/c/404293/23/neutron/db/migration/alembic_migrations/versions/ocata/expand/a9c43481023c_extend_ml2_port_bindings.py@58","commit_id":"a367ba506c90232e122568431b877125ffb59fb4"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"d8906ddc67c5e68a586740f35d9f12b470d16988","unresolved":false,"context_lines":[{"line_number":70,"context_line":"def expand_drop_exceptions():"},{"line_number":71,"context_line":"    \"\"\"Drop the existing primary key constraint and then extend it to include"},{"line_number":72,"context_line":"    host as the primary key to support multiple bindings for the same port."},{"line_number":73,"context_line":"    \"\"\""},{"line_number":74,"context_line":"    return {"},{"line_number":75,"context_line":"        sa.Constraint: [\u0027ml2_port_bindings_pkey\u0027]"},{"line_number":76,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":37,"id":"5a3905b3_3ebcfe04","line":73,"in_reply_to":"5a3905b3_597569f7","updated":"2017-01-19 21:55:24.000000000","message":"@Armando: If we do not add \"expand drop_exceptions\" the tests in test_migrations fails. I can update the docstring in the followup patch. Thoughts?","commit_id":"a367ba506c90232e122568431b877125ffb59fb4"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"994a2741dc5b97b56a152d1c86ef05b2cba62129","unresolved":false,"context_lines":[{"line_number":70,"context_line":"def expand_drop_exceptions():"},{"line_number":71,"context_line":"    \"\"\"Drop the existing primary key constraint and then extend it to include"},{"line_number":72,"context_line":"    host as the primary key to support multiple bindings for the same port."},{"line_number":73,"context_line":"    \"\"\""},{"line_number":74,"context_line":"    return {"},{"line_number":75,"context_line":"        sa.Constraint: [\u0027ml2_port_bindings_pkey\u0027]"},{"line_number":76,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":37,"id":"5a3905b3_ddaca937","line":73,"in_reply_to":"5a3905b3_c8730e7f","updated":"2017-01-20 19:20:37.000000000","message":"Done","commit_id":"a367ba506c90232e122568431b877125ffb59fb4"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"394533038335a8a6ff59487ef2cdc2814d154eaf","unresolved":false,"context_lines":[{"line_number":59,"context_line":""},{"line_number":60,"context_line":"def expand_drop_exceptions():"},{"line_number":61,"context_line":"    \"\"\""},{"line_number":62,"context_line":"    Drop the existing primary key constraint and then extend it to include"},{"line_number":63,"context_line":"    host as the primary key to support multiple bindings for the same port."},{"line_number":64,"context_line":"    This is needed to use drop in expand migration to pass test_branches."},{"line_number":65,"context_line":"    \"\"\""},{"line_number":66,"context_line":"    return {"},{"line_number":67,"context_line":"        sa.Constraint: [\u0027ml2_port_bindings_pkey\u0027]"}],"source_content_type":"text/x-python","patch_set":40,"id":"5a3905b3_6425b007","line":64,"range":{"start_line":62,"start_character":4,"end_line":64,"end_character":73},"updated":"2017-01-23 06:58:24.000000000","message":"You add information here why it is need, but you still don\u0027t add information why it is safe.","commit_id":"500746128c7af480094a5131d85c128a2a589dc3"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"b5dda4223dbf7006b7123dd2992703725824b35a","unresolved":false,"context_lines":[{"line_number":59,"context_line":""},{"line_number":60,"context_line":"def expand_drop_exceptions():"},{"line_number":61,"context_line":"    \"\"\""},{"line_number":62,"context_line":"    Drop the existing primary key constraint and then extend it to include"},{"line_number":63,"context_line":"    host as the primary key to support multiple bindings for the same port."},{"line_number":64,"context_line":"    This is needed to use drop in expand migration to pass test_branches."},{"line_number":65,"context_line":"    \"\"\""},{"line_number":66,"context_line":"    return {"},{"line_number":67,"context_line":"        sa.Constraint: [\u0027ml2_port_bindings_pkey\u0027]"}],"source_content_type":"text/x-python","patch_set":40,"id":"5a3905b3_e2009503","line":64,"range":{"start_line":62,"start_character":4,"end_line":64,"end_character":73},"in_reply_to":"5a3905b3_6425b007","updated":"2017-01-23 15:54:36.000000000","message":"@Ann: Added the information why it is safe.","commit_id":"500746128c7af480094a5131d85c128a2a589dc3"}],"neutron/db/migration/alembic_migrations/versions/ocata/expand/a9c43481023c_extend_pk_with_host_and_add_status_to_.py":[{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"756d9a9824cf6454d93718af11831a49b59c8247","unresolved":false,"context_lines":[{"line_number":34,"context_line":"                  sa.Column(\u0027status\u0027,"},{"line_number":35,"context_line":"                  sa.String(length\u003d16),"},{"line_number":36,"context_line":"                  nullable\u003dFalse))"},{"line_number":37,"context_line":"    op.execute(\"ALTER TABLE ml2_port_bindings DROP PRIMARY KEY,\""},{"line_number":38,"context_line":"               \"ADD PRIMARY KEY(port_id, host);\")"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a71b18c_0949f98b","line":38,"range":{"start_line":37,"start_character":16,"end_line":38,"end_character":46},"updated":"2016-12-01 10:08:27.000000000","message":"This is not working for PostgeSQL","commit_id":"adc40cceb10245e1720f8072584251b7d6beb67d"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"ccd040adf1799f5f430d64f8398817c6a7380975","unresolved":false,"context_lines":[{"line_number":34,"context_line":"                  sa.Column(\u0027status\u0027,"},{"line_number":35,"context_line":"                  sa.String(length\u003d16),"},{"line_number":36,"context_line":"                  nullable\u003dFalse))"},{"line_number":37,"context_line":"    op.execute(\"ALTER TABLE ml2_port_bindings DROP PRIMARY KEY,\""},{"line_number":38,"context_line":"               \"ADD PRIMARY KEY(port_id, host);\")"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a71b18c_1e112aad","line":38,"range":{"start_line":37,"start_character":16,"end_line":38,"end_character":46},"in_reply_to":"3a71b18c_0949f98b","updated":"2016-12-01 10:36:28.000000000","message":"Maybe deleting this line works?\n\nSELECT *  FROM information_schema.table_constraints  WHERE constraint_schema \u003d \u0027neutron\u0027  and constraint_name \u003d \u0027PRIMARY\u0027 and table_name \u003d \u0027ml2_port_bindings\u0027;","commit_id":"adc40cceb10245e1720f8072584251b7d6beb67d"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"624b6cfbe91ef851ddb5d8fb4da7e2223324a134","unresolved":false,"context_lines":[{"line_number":34,"context_line":"                  sa.Column(\u0027status\u0027,"},{"line_number":35,"context_line":"                  sa.String(length\u003d16),"},{"line_number":36,"context_line":"                  nullable\u003dFalse))"},{"line_number":37,"context_line":"    op.execute(\"ALTER TABLE ml2_port_bindings DROP PRIMARY KEY,\""},{"line_number":38,"context_line":"               \"ADD PRIMARY KEY(port_id, host);\")"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a71b18c_fab424f3","line":38,"range":{"start_line":37,"start_character":16,"end_line":38,"end_character":46},"in_reply_to":"3a71b18c_10882722","updated":"2016-12-02 17:05:13.000000000","message":"@Ann and @Andreas: When I use the drop_constraint function from alembic after I retrieve the pk_name using sqlalchemy I get the error as in [1]. I have pasted the log and the code snippet in [1]. Am I missing something?\n\n[1] http://paste.openstack.org/show/591265/","commit_id":"adc40cceb10245e1720f8072584251b7d6beb67d"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"3860cf855ed02b475cd1fe59337a7285b1633bdc","unresolved":false,"context_lines":[{"line_number":34,"context_line":"                  sa.Column(\u0027status\u0027,"},{"line_number":35,"context_line":"                  sa.String(length\u003d16),"},{"line_number":36,"context_line":"                  nullable\u003dFalse))"},{"line_number":37,"context_line":"    op.execute(\"ALTER TABLE ml2_port_bindings DROP PRIMARY KEY,\""},{"line_number":38,"context_line":"               \"ADD PRIMARY KEY(port_id, host);\")"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a71b18c_e0fe8004","line":38,"range":{"start_line":37,"start_character":16,"end_line":38,"end_character":46},"in_reply_to":"3a71b18c_1e112aad","updated":"2016-12-01 14:25:55.000000000","message":"@Ann and @Andreas: Is there anyway to get the engine using alembic then I can have a execute statement based on the engine\n\n@Andreas: Deleting which line?","commit_id":"adc40cceb10245e1720f8072584251b7d6beb67d"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"c9937c75e818dbbafa1f3a9bb382629161401015","unresolved":false,"context_lines":[{"line_number":34,"context_line":"                  sa.Column(\u0027status\u0027,"},{"line_number":35,"context_line":"                  sa.String(length\u003d16),"},{"line_number":36,"context_line":"                  nullable\u003dFalse))"},{"line_number":37,"context_line":"    op.execute(\"ALTER TABLE ml2_port_bindings DROP PRIMARY KEY,\""},{"line_number":38,"context_line":"               \"ADD PRIMARY KEY(port_id, host);\")"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a71b18c_80d86cf1","line":38,"range":{"start_line":37,"start_character":16,"end_line":38,"end_character":46},"in_reply_to":"3a71b18c_1e112aad","updated":"2016-12-01 14:32:48.000000000","message":"You should use sqlachemy and alembic options rather that execute sql if it is possible. And I think it is possible here. You can get pk name with http://docs.sqlalchemy.org/en/latest/core/reflection.html#sqlalchemy.engine.reflection.Inspector.get_pk_constraint\nand drop with http://alembic.zzzcomputing.com/en/latest/ops.html?highlight\u003ddrop_constraint#alembic.operations.Operations.drop_constraint\n\nAlthough, I have a concern here - is it save for expand migration to drop pk.","commit_id":"adc40cceb10245e1720f8072584251b7d6beb67d"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"068eafb9fcaa088e973d175b05bd920004eb3d34","unresolved":false,"context_lines":[{"line_number":34,"context_line":"                  sa.Column(\u0027status\u0027,"},{"line_number":35,"context_line":"                  sa.String(length\u003d16),"},{"line_number":36,"context_line":"                  nullable\u003dFalse))"},{"line_number":37,"context_line":"    op.execute(\"ALTER TABLE ml2_port_bindings DROP PRIMARY KEY,\""},{"line_number":38,"context_line":"               \"ADD PRIMARY KEY(port_id, host);\")"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a71b18c_10882722","line":38,"range":{"start_line":37,"start_character":16,"end_line":38,"end_character":46},"in_reply_to":"3a71b18c_a006481e","updated":"2016-12-01 15:13:19.000000000","message":"there is a table that holds information about all the PKs. If you remove that line (that represents the PK), this might work for deletion. But probably this is also backend (mysql) specific - so you better forget about that ;)","commit_id":"adc40cceb10245e1720f8072584251b7d6beb67d"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"4d47ffc63b67c2726821b9a36ff77367c9e8afe9","unresolved":false,"context_lines":[{"line_number":34,"context_line":"                  sa.Column(\u0027status\u0027,"},{"line_number":35,"context_line":"                  sa.String(length\u003d16),"},{"line_number":36,"context_line":"                  nullable\u003dFalse))"},{"line_number":37,"context_line":"    op.execute(\"ALTER TABLE ml2_port_bindings DROP PRIMARY KEY,\""},{"line_number":38,"context_line":"               \"ADD PRIMARY KEY(port_id, host);\")"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a71b18c_a006481e","line":38,"range":{"start_line":37,"start_character":16,"end_line":38,"end_character":46},"in_reply_to":"3a71b18c_e0fe8004","updated":"2016-12-01 14:34:40.000000000","message":"You can get engine with op.get_bind().engine","commit_id":"adc40cceb10245e1720f8072584251b7d6beb67d"}],"neutron/extensions/portbindings_extended.py":[{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"2624f4ea738a51739eee6332dff36ae5e9e0e3fb","unresolved":false,"context_lines":[{"line_number":14,"context_line":"from neutron_lib import constants"},{"line_number":15,"context_line":"from neutron_lib.plugins import directory"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from neutron.api import extensions"},{"line_number":18,"context_line":"from neutron.api.v2 import base"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"BINDINGS \u003d \u0027bindings\u0027"}],"source_content_type":"text/x-python","patch_set":16,"id":"1a6eadb0_cc1eae0b","line":17,"range":{"start_line":17,"start_character":0,"end_line":17,"end_character":34},"updated":"2016-12-21 08:00:30.000000000","message":"from neutron_lib.api import extensions","commit_id":"07d2dfa38ced69831ce5e3c337a75d4ff6f57868"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"59e9368e1f1f3e1812c77680ac202194b0dcd266","unresolved":false,"context_lines":[{"line_number":14,"context_line":"from neutron_lib import constants"},{"line_number":15,"context_line":"from neutron_lib.plugins import directory"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from neutron.api import extensions"},{"line_number":18,"context_line":"from neutron.api.v2 import base"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"BINDINGS \u003d \u0027bindings\u0027"}],"source_content_type":"text/x-python","patch_set":16,"id":"da4df55a_a4d8ea54","line":17,"range":{"start_line":17,"start_character":0,"end_line":17,"end_character":34},"in_reply_to":"1a6eadb0_cc1eae0b","updated":"2016-12-22 18:16:11.000000000","message":"Split this into two patches. This change is done in https://review.openstack.org/#/c/414251/","commit_id":"07d2dfa38ced69831ce5e3c337a75d4ff6f57868"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"2624f4ea738a51739eee6332dff36ae5e9e0e3fb","unresolved":false,"context_lines":[{"line_number":56,"context_line":"}"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"class Portbindings_extended(extensions.ExtensionDescriptor):"},{"line_number":60,"context_line":"    \"\"\"Extension class supporting port bindings."},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    This class is used by neutron\u0027s extension framework to make"}],"source_content_type":"text/x-python","patch_set":16,"id":"1a6eadb0_0cc34658","line":59,"range":{"start_line":59,"start_character":18,"end_line":59,"end_character":27},"updated":"2016-12-21 08:00:30.000000000","message":"Why was decided to name class in that way?","commit_id":"07d2dfa38ced69831ce5e3c337a75d4ff6f57868"},{"author":{"_account_id":19611,"name":"Brian Stajkowski","email":"brian.stajkowski@rackspace.com","username":"ski"},"change_message_id":"68d72c7de7225deaf999c2d4de5eb930f244ba70","unresolved":false,"context_lines":[{"line_number":56,"context_line":"}"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"class Portbindings_extended(extensions.ExtensionDescriptor):"},{"line_number":60,"context_line":"    \"\"\"Extension class supporting port bindings."},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    This class is used by neutron\u0027s extension framework to make"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa48f94a_4648522e","line":59,"range":{"start_line":59,"start_character":18,"end_line":59,"end_character":27},"in_reply_to":"1a6eadb0_0cc34658","updated":"2016-12-21 18:48:38.000000000","message":"We didn\u0027t know what to call it, so just picked something in hopes of a drive by suggestion.  Any suggestions? :)","commit_id":"07d2dfa38ced69831ce5e3c337a75d4ff6f57868"}],"neutron/objects/ports.py":[{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"2f7a373de51b8ff7264bb46cd8cc1818f8e9a663","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        \u0027vif_type\u0027: obj_fields.StringField(),"},{"line_number":74,"context_line":"        \u0027vif_details\u0027: common_types.DictOfMiscValuesField(nullable\u003dTrue),"},{"line_number":75,"context_line":"        \u0027vnic_type\u0027: obj_fields.StringField(),"},{"line_number":76,"context_line":"        \u0027status\u0027: obj_fields.StringField(default\u003dconstants.ACTIVE),"},{"line_number":77,"context_line":"    }"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    primary_keys \u003d [\u0027port_id\u0027, \u0027host\u0027]"}],"source_content_type":"text/x-python","patch_set":26,"id":"7a3c09a3_306cabcf","line":76,"range":{"start_line":76,"start_character":18,"end_line":76,"end_character":66},"updated":"2017-01-17 18:10:54.000000000","message":"If we can reuse those variables[1], this should be a new enum field.\n\n[1] https://review.openstack.org/#/c/404293/26/neutron/plugins/ml2/models.py@22","commit_id":"f67519628aa7608dc036be2bac715b0df33e6773"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"3abe06a723bd49a701c20cdf314627f8c97b6285","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        \u0027vif_type\u0027: obj_fields.StringField(),"},{"line_number":74,"context_line":"        \u0027vif_details\u0027: common_types.DictOfMiscValuesField(nullable\u003dTrue),"},{"line_number":75,"context_line":"        \u0027vnic_type\u0027: obj_fields.StringField(),"},{"line_number":76,"context_line":"        \u0027status\u0027: obj_fields.StringField(default\u003dconstants.ACTIVE),"},{"line_number":77,"context_line":"    }"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    primary_keys \u003d [\u0027port_id\u0027, \u0027host\u0027]"}],"source_content_type":"text/x-python","patch_set":26,"id":"7a3c09a3_fcc83957","line":76,"range":{"start_line":76,"start_character":18,"end_line":76,"end_character":66},"in_reply_to":"7a3c09a3_306cabcf","updated":"2017-01-17 20:36:26.000000000","message":"Done","commit_id":"f67519628aa7608dc036be2bac715b0df33e6773"}],"neutron/plugins/ml2/models.py":[{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"756d9a9824cf6454d93718af11831a49b59c8247","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    vif_details \u003d sa.Column(sa.String(4095), nullable\u003dFalse, default\u003d\u0027\u0027,"},{"line_number":49,"context_line":"                            server_default\u003d\u0027\u0027)"},{"line_number":50,"context_line":"    status \u003d sa.Column(sa.String(16), nullable\u003dFalse, default\u003d\u0027\u0027,"},{"line_number":51,"context_line":"            server_default\u003d\u0027\u0027)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    # Add a relationship to the Port model in order to instruct SQLAlchemy to"},{"line_number":54,"context_line":"    # eagerly load port bindings"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a71b18c_7b1dd065","line":51,"range":{"start_line":51,"start_character":12,"end_line":51,"end_character":26},"updated":"2016-12-01 10:08:27.000000000","message":"Please, add server_default for migration as well.","commit_id":"adc40cceb10245e1720f8072584251b7d6beb67d"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"6b67b5263c5c4af1e77162613526bddf41b0be1f","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    vif_details \u003d sa.Column(sa.String(4095), nullable\u003dFalse, default\u003d\u0027\u0027,"},{"line_number":49,"context_line":"                            server_default\u003d\u0027\u0027)"},{"line_number":50,"context_line":"    status \u003d sa.Column(sa.String(16), nullable\u003dFalse, default\u003d\u0027\u0027,"},{"line_number":51,"context_line":"            server_default\u003d\u0027\u0027)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    # Add a relationship to the Port model in order to instruct SQLAlchemy to"},{"line_number":54,"context_line":"    # eagerly load port bindings"}],"source_content_type":"text/x-python","patch_set":23,"id":"7a3c09a3_72ddf441","line":51,"updated":"2017-01-13 12:54:12.000000000","message":"nit: indentation","commit_id":"7f3329a8febbfe1e33363328c91764e3bdd3840f"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"61bdefcc0c7fff0f3e03e0568761ec285883e8de","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    vif_details \u003d sa.Column(sa.String(4095), nullable\u003dFalse, default\u003d\u0027\u0027,"},{"line_number":49,"context_line":"                            server_default\u003d\u0027\u0027)"},{"line_number":50,"context_line":"    status \u003d sa.Column(sa.String(16), nullable\u003dFalse, default\u003d\u0027\u0027,"},{"line_number":51,"context_line":"            server_default\u003d\u0027\u0027)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    # Add a relationship to the Port model in order to instruct SQLAlchemy to"},{"line_number":54,"context_line":"    # eagerly load port bindings"}],"source_content_type":"text/x-python","patch_set":23,"id":"7a3c09a3_757bacf5","line":51,"in_reply_to":"7a3c09a3_72ddf441","updated":"2017-01-17 06:21:08.000000000","message":"Done","commit_id":"7f3329a8febbfe1e33363328c91764e3bdd3840f"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"67436748694fd3b09d64ca1b4356efe6f99a4705","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    vif_type \u003d sa.Column(sa.String(64), nullable\u003dFalse)"},{"line_number":48,"context_line":"    vif_details \u003d sa.Column(sa.String(4095), nullable\u003dFalse, default\u003d\u0027\u0027,"},{"line_number":49,"context_line":"                            server_default\u003d\u0027\u0027)"},{"line_number":50,"context_line":"    status \u003d sa.Column(sa.String(16), nullable\u003dFalse, default\u003d\u0027\u0027,"},{"line_number":51,"context_line":"                       server_default\u003d\u0027\u0027)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    # Add a relationship to the Port model in order to instruct SQLAlchemy to"}],"source_content_type":"text/x-python","patch_set":25,"id":"7a3c09a3_99d3d503","line":50,"range":{"start_line":50,"start_character":62,"end_line":50,"end_character":64},"updated":"2017-01-17 16:35:47.000000000","message":"Should we maybe use ACTIVE as default so that all existing bindings get relevant value?","commit_id":"4f6112b2f1a0490be20079fcc9009e75559b7c19"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"1fde7f45448578e4ea359f280f5467d469ed016c","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    vif_type \u003d sa.Column(sa.String(64), nullable\u003dFalse)"},{"line_number":48,"context_line":"    vif_details \u003d sa.Column(sa.String(4095), nullable\u003dFalse, default\u003d\u0027\u0027,"},{"line_number":49,"context_line":"                            server_default\u003d\u0027\u0027)"},{"line_number":50,"context_line":"    status \u003d sa.Column(sa.String(16), nullable\u003dFalse, default\u003d\u0027\u0027,"},{"line_number":51,"context_line":"                       server_default\u003d\u0027\u0027)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    # Add a relationship to the Port model in order to instruct SQLAlchemy to"}],"source_content_type":"text/x-python","patch_set":25,"id":"7a3c09a3_9a5d8049","line":50,"range":{"start_line":50,"start_character":62,"end_line":50,"end_character":64},"in_reply_to":"7a3c09a3_4a0a697a","updated":"2017-01-17 17:57:06.000000000","message":"Could this be a constant? I\u0027m anticipating to have a new Enum type in OVO","commit_id":"4f6112b2f1a0490be20079fcc9009e75559b7c19"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"a18d4948ee844dccb70cd2a84430ed3ada545214","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    vif_type \u003d sa.Column(sa.String(64), nullable\u003dFalse)"},{"line_number":48,"context_line":"    vif_details \u003d sa.Column(sa.String(4095), nullable\u003dFalse, default\u003d\u0027\u0027,"},{"line_number":49,"context_line":"                            server_default\u003d\u0027\u0027)"},{"line_number":50,"context_line":"    status \u003d sa.Column(sa.String(16), nullable\u003dFalse, default\u003d\u0027\u0027,"},{"line_number":51,"context_line":"                       server_default\u003d\u0027\u0027)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    # Add a relationship to the Port model in order to instruct SQLAlchemy to"}],"source_content_type":"text/x-python","patch_set":25,"id":"7a3c09a3_7a6ff42a","line":50,"range":{"start_line":50,"start_character":62,"end_line":50,"end_character":64},"in_reply_to":"7a3c09a3_4a0a697a","updated":"2017-01-17 17:55:13.000000000","message":"Done","commit_id":"4f6112b2f1a0490be20079fcc9009e75559b7c19"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"a18d4948ee844dccb70cd2a84430ed3ada545214","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    vif_type \u003d sa.Column(sa.String(64), nullable\u003dFalse)"},{"line_number":48,"context_line":"    vif_details \u003d sa.Column(sa.String(4095), nullable\u003dFalse, default\u003d\u0027\u0027,"},{"line_number":49,"context_line":"                            server_default\u003d\u0027\u0027)"},{"line_number":50,"context_line":"    status \u003d sa.Column(sa.String(16), nullable\u003dFalse, default\u003d\u0027\u0027,"},{"line_number":51,"context_line":"                       server_default\u003d\u0027\u0027)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    # Add a relationship to the Port model in order to instruct SQLAlchemy to"}],"source_content_type":"text/x-python","patch_set":25,"id":"7a3c09a3_7f97e947","line":50,"range":{"start_line":50,"start_character":62,"end_line":50,"end_character":64},"in_reply_to":"7a3c09a3_99d3d503","updated":"2017-01-17 17:55:13.000000000","message":"Makes Sense. Done","commit_id":"4f6112b2f1a0490be20079fcc9009e75559b7c19"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"940883b18ac8af369d9520bf7ea30be774a8bcca","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    vif_type \u003d sa.Column(sa.String(64), nullable\u003dFalse)"},{"line_number":48,"context_line":"    vif_details \u003d sa.Column(sa.String(4095), nullable\u003dFalse, default\u003d\u0027\u0027,"},{"line_number":49,"context_line":"                            server_default\u003d\u0027\u0027)"},{"line_number":50,"context_line":"    status \u003d sa.Column(sa.String(16), nullable\u003dFalse, default\u003d\u0027\u0027,"},{"line_number":51,"context_line":"                       server_default\u003d\u0027\u0027)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    # Add a relationship to the Port model in order to instruct SQLAlchemy to"}],"source_content_type":"text/x-python","patch_set":25,"id":"7a3c09a3_4a0a697a","line":50,"range":{"start_line":50,"start_character":62,"end_line":50,"end_character":64},"in_reply_to":"7a3c09a3_99d3d503","updated":"2017-01-17 17:15:27.000000000","message":"Yes, it maybe a good idea. It depends on what should be the default value in back-end and API implementation for already existing bindings. I guess that ACTIVE can be default, for created bindings before extending the table.","commit_id":"4f6112b2f1a0490be20079fcc9009e75559b7c19"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"07c962bec889031f440774b2e7f2f2c204159b08","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    vif_type \u003d sa.Column(sa.String(64), nullable\u003dFalse)"},{"line_number":48,"context_line":"    vif_details \u003d sa.Column(sa.String(4095), nullable\u003dFalse, default\u003d\u0027\u0027,"},{"line_number":49,"context_line":"                            server_default\u003d\u0027\u0027)"},{"line_number":50,"context_line":"    status \u003d sa.Column(sa.String(16), nullable\u003dFalse, default\u003d\u0027\u0027,"},{"line_number":51,"context_line":"                       server_default\u003d\u0027\u0027)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    # Add a relationship to the Port model in order to instruct SQLAlchemy to"}],"source_content_type":"text/x-python","patch_set":25,"id":"7a3c09a3_8d7628d5","line":50,"range":{"start_line":50,"start_character":62,"end_line":50,"end_character":64},"in_reply_to":"7a3c09a3_9a5d8049","updated":"2017-01-17 22:22:10.000000000","message":"@Victor: Updated the status field to have enum type with 2 values ACTIVE and INACTIVE","commit_id":"4f6112b2f1a0490be20079fcc9009e75559b7c19"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"2f7a373de51b8ff7264bb46cd8cc1818f8e9a663","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from neutron.db import models_v2"},{"line_number":21,"context_line":"from neutron.extensions import portbindings"},{"line_number":22,"context_line":"from neutron.plugins.common import constants"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"BINDING_PROFILE_LEN \u003d 4095"},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"7a3c09a3_8d2468c5","line":22,"range":{"start_line":22,"start_character":0,"end_line":22,"end_character":44},"updated":"2017-01-17 18:10:54.000000000","message":"According to its comment[1] these constants are used for services, I also noticed that LBaaS uses for verifying the provisioning status[2], is it fine to reuse them?.  More likely, it\u0027ll needed to create its our set of constants for managing the status\n\n[1] https://github.com/openstack/neutron/blob/master/neutron/plugins/common/constants.py#L52\n[2] http://git.openstack.org/cgit/openstack/neutron-lbaas/tree/neutron_lbaas/drivers/common/agent_callbacks.py#n100","commit_id":"f67519628aa7608dc036be2bac715b0df33e6773"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"10a2484c9aadd66e05a8d87f3a637bc05b4f601a","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from neutron.db import models_v2"},{"line_number":21,"context_line":"from neutron.extensions import portbindings"},{"line_number":22,"context_line":"from neutron.plugins.common import constants"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"BINDING_PROFILE_LEN \u003d 4095"},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"7a3c09a3_c1fe37ad","line":22,"range":{"start_line":22,"start_character":0,"end_line":22,"end_character":44},"in_reply_to":"7a3c09a3_8d2468c5","updated":"2017-01-17 19:00:00.000000000","message":"I think we can reuse them. As for enum, yes, we need our own if we go this route, so that we can change it independent of other work in tree.","commit_id":"f67519628aa7608dc036be2bac715b0df33e6773"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"3abe06a723bd49a701c20cdf314627f8c97b6285","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from neutron.db import models_v2"},{"line_number":21,"context_line":"from neutron.extensions import portbindings"},{"line_number":22,"context_line":"from neutron.plugins.common import constants"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"BINDING_PROFILE_LEN \u003d 4095"},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"7a3c09a3_9cfd7570","line":22,"range":{"start_line":22,"start_character":0,"end_line":22,"end_character":44},"in_reply_to":"7a3c09a3_c1fe37ad","updated":"2017-01-17 20:36:26.000000000","message":"@Ihar and Victor: Introduced new constants to reflect the Port Binding status. Updated the status field to enum type and updated the object accordingly. Let me know ur thoughts.","commit_id":"f67519628aa7608dc036be2bac715b0df33e6773"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"6b9959a624d06279bd07e3b98828e44a10b14872","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    vif_details \u003d sa.Column(sa.String(4095), nullable\u003dFalse, default\u003d\u0027\u0027,"},{"line_number":50,"context_line":"                            server_default\u003d\u0027\u0027)"},{"line_number":51,"context_line":"    status \u003d sa.Column(sa.String(16), nullable\u003dFalse, default\u003dconstants.ACTIVE,"},{"line_number":52,"context_line":"                       server_default\u003d\u0027\u0027)"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    # Add a relationship to the Port model in order to instruct SQLAlchemy to"},{"line_number":55,"context_line":"    # eagerly load port bindings"}],"source_content_type":"text/x-python","patch_set":26,"id":"7a3c09a3_cdbf50a8","line":52,"range":{"start_line":52,"start_character":38,"end_line":52,"end_character":40},"updated":"2017-01-17 18:04:50.000000000","message":"wait, server_default should probably also be changed.","commit_id":"f67519628aa7608dc036be2bac715b0df33e6773"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"3abe06a723bd49a701c20cdf314627f8c97b6285","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    vif_details \u003d sa.Column(sa.String(4095), nullable\u003dFalse, default\u003d\u0027\u0027,"},{"line_number":50,"context_line":"                            server_default\u003d\u0027\u0027)"},{"line_number":51,"context_line":"    status \u003d sa.Column(sa.String(16), nullable\u003dFalse, default\u003dconstants.ACTIVE,"},{"line_number":52,"context_line":"                       server_default\u003d\u0027\u0027)"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    # Add a relationship to the Port model in order to instruct SQLAlchemy to"},{"line_number":55,"context_line":"    # eagerly load port bindings"}],"source_content_type":"text/x-python","patch_set":26,"id":"7a3c09a3_36710045","line":52,"range":{"start_line":52,"start_character":38,"end_line":52,"end_character":40},"in_reply_to":"7a3c09a3_cdbf50a8","updated":"2017-01-17 20:36:26.000000000","message":"Done","commit_id":"f67519628aa7608dc036be2bac715b0df33e6773"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"8a54b84bec65495e9ecf1f70104ff96f549ace17","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    vif_type \u003d sa.Column(sa.String(64), nullable\u003dFalse)"},{"line_number":49,"context_line":"    vif_details \u003d sa.Column(sa.String(4095), nullable\u003dFalse, default\u003d\u0027\u0027,"},{"line_number":50,"context_line":"                            server_default\u003d\u0027\u0027)"},{"line_number":51,"context_line":"    status \u003d sa.Column(sa.Enum(constants.PORT_BINDING_STATUS_ACTIVE,"},{"line_number":52,"context_line":"                               constants.PORT_BINDING_STATUS_INACTIVE,"},{"line_number":53,"context_line":"                               name\u003d\u0027port_binding_statuses\u0027),"},{"line_number":54,"context_line":"                       default\u003dconstants.PORT_BINDING_STATUS_ACTIVE,"}],"source_content_type":"text/x-python","patch_set":38,"id":"5a3905b3_a0a972e1","line":51,"updated":"2017-01-20 19:26:39.000000000","message":"should change to string here too?","commit_id":"8c2ae0e7ce96743a46eb9194375f43a5bc6c104d"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"54e36e92d9f2d33fa99d726efcab90247952b3f9","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    vif_type \u003d sa.Column(sa.String(64), nullable\u003dFalse)"},{"line_number":49,"context_line":"    vif_details \u003d sa.Column(sa.String(4095), nullable\u003dFalse, default\u003d\u0027\u0027,"},{"line_number":50,"context_line":"                            server_default\u003d\u0027\u0027)"},{"line_number":51,"context_line":"    status \u003d sa.Column(sa.Enum(constants.PORT_BINDING_STATUS_ACTIVE,"},{"line_number":52,"context_line":"                               constants.PORT_BINDING_STATUS_INACTIVE,"},{"line_number":53,"context_line":"                               name\u003d\u0027port_binding_statuses\u0027),"},{"line_number":54,"context_line":"                       default\u003dconstants.PORT_BINDING_STATUS_ACTIVE,"}],"source_content_type":"text/x-python","patch_set":38,"id":"5a3905b3_4bf2af70","line":51,"in_reply_to":"5a3905b3_0b5267dd","updated":"2017-01-20 20:03:52.000000000","message":"Changed it here in the model","commit_id":"8c2ae0e7ce96743a46eb9194375f43a5bc6c104d"},{"author":{"_account_id":22220,"name":"Anindita Das","email":"anindita.das@utexas.edu","username":"anudas"},"change_message_id":"cd4a2f41b5e39da73fe872431decdf25c50eb9bf","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    vif_type \u003d sa.Column(sa.String(64), nullable\u003dFalse)"},{"line_number":49,"context_line":"    vif_details \u003d sa.Column(sa.String(4095), nullable\u003dFalse, default\u003d\u0027\u0027,"},{"line_number":50,"context_line":"                            server_default\u003d\u0027\u0027)"},{"line_number":51,"context_line":"    status \u003d sa.Column(sa.Enum(constants.PORT_BINDING_STATUS_ACTIVE,"},{"line_number":52,"context_line":"                               constants.PORT_BINDING_STATUS_INACTIVE,"},{"line_number":53,"context_line":"                               name\u003d\u0027port_binding_statuses\u0027),"},{"line_number":54,"context_line":"                       default\u003dconstants.PORT_BINDING_STATUS_ACTIVE,"}],"source_content_type":"text/x-python","patch_set":38,"id":"5a3905b3_0b5267dd","line":51,"in_reply_to":"5a3905b3_a0a972e1","updated":"2017-01-20 19:49:58.000000000","message":"@Ihar: I think we can keep this as Enum at the OVO level that will handle the validation and will allow only ACTIVE and INACTIVE value in the db. Thoughts?","commit_id":"8c2ae0e7ce96743a46eb9194375f43a5bc6c104d"}]}
