)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"cc0a5f4c420e903ef8f3a03d00dbf098d5e038cf","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2017-09-28 08:53:10 +0300"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Spec: Database Migration"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: Id3878f1362e97e7e6f5aa77074646611326ae3dc"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"7f515b1d_18179ca6","line":8,"updated":"2017-10-01 09:14:28.000000000","message":"Co-author?","commit_id":"2acec2a1bdbd63da3a63f175aaf5dc6ae35c0d83"}],"doc/source/specs/database_migration_and_upgrade.rst":[{"author":{"_account_id":11731,"name":"Pino de Candia","email":"giuseppe.decandia@gmail.com","username":"Pino"},"change_message_id":"b3f284ad0ee92be4ac2519054626eda1174a1549","unresolved":false,"context_lines":[{"line_number":14,"context_line":"This blueprint describe how to implement upgrades in Dragonflow, including:"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"* Rolling upgrades, i.e. continuously upgrading the cloud host by host, without"},{"line_number":17,"context_line":"  the need to reinstall"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"* Database migration, i.e. how to modify the database and upgrade the schema in"},{"line_number":20,"context_line":"  a way that facilitates the above."}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f2577a7_27132610","line":17,"updated":"2017-09-08 19:41:34.000000000","message":"Please provide some additional context in the summary. Does DF support this feature today? What does upgrade look like today?","commit_id":"6354caaa3ab8ff47193346d5aafd67404808bcfa"},{"author":{"_account_id":11731,"name":"Pino de Candia","email":"giuseppe.decandia@gmail.com","username":"Pino"},"change_message_id":"b3f284ad0ee92be4ac2519054626eda1174a1549","unresolved":false,"context_lines":[{"line_number":17,"context_line":"  the need to reinstall"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"* Database migration, i.e. how to modify the database and upgrade the schema in"},{"line_number":20,"context_line":"  a way that facilitates the above."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Problem Description"},{"line_number":23,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f2577a7_872d3a48","line":20,"updated":"2017-09-08 19:41:34.000000000","message":"Does DF support database migration today and with what assumptions about upgrade workflow?","commit_id":"6354caaa3ab8ff47193346d5aafd67404808bcfa"},{"author":{"_account_id":26131,"name":"Eyal Leshem","email":"eyal.leshem@toganetworks.com","username":"leyal"},"change_message_id":"168f3309e4bf2951d8970a639ca7a816a599c327","unresolved":false,"context_lines":[{"line_number":17,"context_line":"  the need to reinstall"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"* Database migration, i.e. how to modify the database and upgrade the schema in"},{"line_number":20,"context_line":"  a way that facilitates the above."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Problem Description"},{"line_number":23,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f2577a7_d7b518f0","line":20,"in_reply_to":"5f2577a7_872d3a48","updated":"2017-09-11 10:57:16.000000000","message":"Maybe add to the spec some explanation about how this part should be done ..","commit_id":"6354caaa3ab8ff47193346d5aafd67404808bcfa"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"2ebeee482c6de9c822528fe546b30a3d2fe1b458","unresolved":false,"context_lines":[{"line_number":17,"context_line":"  the need to reinstall"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"* Database migration, i.e. how to modify the database and upgrade the schema in"},{"line_number":20,"context_line":"  a way that facilitates the above."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Problem Description"},{"line_number":23,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f2577a7_9e3ef788","line":20,"in_reply_to":"5f2577a7_d7b518f0","updated":"2017-09-25 12:46:27.000000000","message":"@Pino, added.\n\n@Eyal, See below.","commit_id":"6354caaa3ab8ff47193346d5aafd67404808bcfa"},{"author":{"_account_id":11731,"name":"Pino de Candia","email":"giuseppe.decandia@gmail.com","username":"Pino"},"change_message_id":"b3f284ad0ee92be4ac2519054626eda1174a1549","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"This spec proposes a solution on how to upgrade a deployed cloud, without"},{"line_number":34,"context_line":"breaking functionality, including incompatible database upgrades."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"Proposed Change"},{"line_number":37,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":38,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f2577a7_c79d8267","line":35,"updated":"2017-09-08 19:41:34.000000000","message":"It might be useful to make certain assumptions explicit because they have repercussions on the upgrade workflow.\n\nFor example:\n- Are VM deployments and virtual network changes possible during upgrade? Are Neutron and Nova (CUD) APIs disabled during DF upgrade? Or is DF database taken off-line from the perspective of DF\u0027s Neutron drivers/services?\n- Existing workloads, connectivity and security continue to work normally, with some exceptions (e.g. failure of a chassis during upgrade may go undetected for some time).\n- Rollback is supported without loss of data before Neutron/Nova writes are re-enabled.\n- Rollback may lose data if it occurs after Neutron/Nova writes are re-enabled.","commit_id":"6354caaa3ab8ff47193346d5aafd67404808bcfa"},{"author":{"_account_id":11731,"name":"Pino de Candia","email":"giuseppe.decandia@gmail.com","username":"Pino"},"change_message_id":"b3f284ad0ee92be4ac2519054626eda1174a1549","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"Proposed Change"},{"line_number":37,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"Option 1"},{"line_number":40,"context_line":"--------"},{"line_number":41,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f2577a7_a7a83677","line":38,"updated":"2017-09-08 19:41:34.000000000","message":"Similar, but distinct from the assumptions, I would like to see an explicit upgrade/rollback workflow proposed. The objective is to have an easily automated, user-friendly and robust workflow. That workflow needs its own discussion.\n\nThe database versioning can only come after and is just one (albeit important) aspect of implementing the upgrade/rollback workflow.","commit_id":"6354caaa3ab8ff47193346d5aafd67404808bcfa"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"7cc3b5a89869cce2d700e09554c16fc5134c61a7","unresolved":false,"context_lines":[{"line_number":42,"context_line":"Every database object will have a _version_."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"Every Dragonflow deployment will support a specific _version_, and older, up"},{"line_number":45,"context_line":"to say, 2 cycle."},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"Our code will \u0027prefer\u0027 to work on the newest version it knows. If the version"},{"line_number":48,"context_line":"is older, _migration_ code will upgrade the object to the latest version."}],"source_content_type":"text/x-rst","patch_set":1,"id":"7f287b81_32cafd6d","line":45,"range":{"start_line":45,"start_character":7,"end_line":45,"end_character":16},"updated":"2017-09-12 13:33:24.000000000","message":"You mean you want to support 3 versions at once? I think 2 is enough.","commit_id":"6354caaa3ab8ff47193346d5aafd67404808bcfa"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"7cc3b5a89869cce2d700e09554c16fc5134c61a7","unresolved":false,"context_lines":[{"line_number":70,"context_line":""},{"line_number":71,"context_line":"Cons:"},{"line_number":72,"context_line":"~~~~~"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"* Neutron plugins will either have to know to write both versions, or be"},{"line_number":75,"context_line":"  upgraded last, or provide database object _downgrade_ code."},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"  This can be worked around by requiring both upgrade and downgrade code, and"},{"line_number":78,"context_line":"  automatically calling the _downgrade_ code when writing an object. Tests can"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7f287b81_b28cad35","line":75,"range":{"start_line":73,"start_character":0,"end_line":75,"end_character":61},"updated":"2017-09-12 13:33:24.000000000","message":"Or we can pin model versions using configuration, and the Neutron side code can be upgraded at any point.","commit_id":"6354caaa3ab8ff47193346d5aafd67404808bcfa"},{"author":{"_account_id":11731,"name":"Pino de Candia","email":"giuseppe.decandia@gmail.com","username":"Pino"},"change_message_id":"b3f284ad0ee92be4ac2519054626eda1174a1549","unresolved":false,"context_lines":[{"line_number":72,"context_line":"~~~~~"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"* Neutron plugins will either have to know to write both versions, or be"},{"line_number":75,"context_line":"  upgraded last, or provide database object _downgrade_ code."},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"  This can be worked around by requiring both upgrade and downgrade code, and"},{"line_number":78,"context_line":"  automatically calling the _downgrade_ code when writing an object. Tests can"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f2577a7_2788c61d","line":75,"updated":"2017-09-08 19:41:34.000000000","message":"This text suggests you\u0027re trying to support DF upgrades transparently with respect to Neutron and Nova (i.e. without taking them off-line).\n\nIt\u0027s worth making that explicit in the assumptions.","commit_id":"6354caaa3ab8ff47193346d5aafd67404808bcfa"},{"author":{"_account_id":26131,"name":"Eyal Leshem","email":"eyal.leshem@toganetworks.com","username":"leyal"},"change_message_id":"168f3309e4bf2951d8970a639ca7a816a599c327","unresolved":false,"context_lines":[{"line_number":108,"context_line":""},{"line_number":109,"context_line":"Cons:"},{"line_number":110,"context_line":"~~~~~"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"* Code modification on non-upgraded elements"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"References"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f2577a7_97731081","line":111,"updated":"2017-09-11 10:57:16.000000000","message":"Maybe add to cons that neutron must be upgraded last (i think that restriction is more hard then in option-1, because we can\u0027t write __upgrade__ code as neutron-server isn\u0027t upgraded yet..)","commit_id":"6354caaa3ab8ff47193346d5aafd67404808bcfa"},{"author":{"_account_id":26131,"name":"Eyal Leshem","email":"eyal.leshem@toganetworks.com","username":"leyal"},"change_message_id":"168f3309e4bf2951d8970a639ca7a816a599c327","unresolved":false,"context_lines":[{"line_number":111,"context_line":""},{"line_number":112,"context_line":"* Code modification on non-upgraded elements"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"References"},{"line_number":115,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f2577a7_7770a473","line":114,"updated":"2017-09-11 10:57:16.000000000","message":"which option is suggested by this spec?","commit_id":"6354caaa3ab8ff47193346d5aafd67404808bcfa"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"a9761d245c12bdb49ae86a17e5d956dd2b8a9499","unresolved":false,"context_lines":[{"line_number":54,"context_line":"* Networking between ports should continue to work normally. Especially l2, l3,"},{"line_number":55,"context_line":"  and security groups."},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"* Rollback is supported without loss of data before Neutron/Nova writes are"},{"line_number":58,"context_line":"  re-enabled."},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"Proposed Change"},{"line_number":61,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_0ec7f347","line":58,"range":{"start_line":57,"start_character":0,"end_line":58,"end_character":13},"updated":"2017-09-25 12:39:55.000000000","message":"Any ideas how we can do this? Consider I have 2 scripts to run, the first one runs fine, and the second wipes the database and fails. Can we still recover?","commit_id":"6a4385a5dc60dfa9341e5c0939759737e6f51be0"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"28c2abf1d54cae6b9a4ff549ca125946f990cd22","unresolved":false,"context_lines":[{"line_number":54,"context_line":"* Networking between ports should continue to work normally. Especially l2, l3,"},{"line_number":55,"context_line":"  and security groups."},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"* Rollback is supported without loss of data before Neutron/Nova writes are"},{"line_number":58,"context_line":"  re-enabled."},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"Proposed Change"},{"line_number":61,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_ae1a1f7a","line":58,"range":{"start_line":57,"start_character":0,"end_line":58,"end_character":13},"in_reply_to":"7f515b1d_0e513363","updated":"2017-09-25 12:52:24.000000000","message":"We can do this automatically, by wrapping nb_api to db_driver, and creating a delta, but this might not scale well with number of objects in database.","commit_id":"6a4385a5dc60dfa9341e5c0939759737e6f51be0"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"2ebeee482c6de9c822528fe546b30a3d2fe1b458","unresolved":false,"context_lines":[{"line_number":54,"context_line":"* Networking between ports should continue to work normally. Especially l2, l3,"},{"line_number":55,"context_line":"  and security groups."},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"* Rollback is supported without loss of data before Neutron/Nova writes are"},{"line_number":58,"context_line":"  re-enabled."},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"Proposed Change"},{"line_number":61,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_0e513363","line":58,"range":{"start_line":57,"start_character":0,"end_line":58,"end_character":13},"in_reply_to":"7f515b1d_0ec7f347","updated":"2017-09-25 12:46:27.000000000","message":"Every upgrade function will have an undo command. It will store in memory (or in a file) all the information needed to undo the action.\n\nIf the action includes wiping the db, then it\u0027s the upgrade scripts\u0027 responsibility to back up that data before doing so.","commit_id":"6a4385a5dc60dfa9341e5c0939759737e6f51be0"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"0ddc3a4089ca04f335455eaf1a2b2e22e79760bc","unresolved":false,"context_lines":[{"line_number":54,"context_line":"* Networking between ports should continue to work normally. Especially l2, l3,"},{"line_number":55,"context_line":"  and security groups."},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"* Rollback is supported without loss of data before Neutron/Nova writes are"},{"line_number":58,"context_line":"  re-enabled."},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"Proposed Change"},{"line_number":61,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_d145fe44","line":58,"range":{"start_line":57,"start_character":0,"end_line":58,"end_character":13},"in_reply_to":"7f515b1d_ae1a1f7a","updated":"2017-09-25 12:59:56.000000000","message":"This can be proposed as a composite library, for example. And then if it fits the needs, it\u0027s used. It doesn\u0027t have to be scaleable, since upgrade is a slow process anyway.\n\nRe scale: I\u0027m all right with having an initial upgrade process that isn\u0027t scalable, and fixing the scalability issue in the next version.","commit_id":"6a4385a5dc60dfa9341e5c0939759737e6f51be0"},{"author":{"_account_id":26131,"name":"Eyal Leshem","email":"eyal.leshem@toganetworks.com","username":"leyal"},"change_message_id":"44678d0556c1c0020b0a2c8f8110e0fb5ba2cb61","unresolved":false,"context_lines":[{"line_number":54,"context_line":"* Networking between ports should continue to work normally. Especially l2, l3,"},{"line_number":55,"context_line":"  and security groups."},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"* Rollback is supported without loss of data before Neutron/Nova writes are"},{"line_number":58,"context_line":"  re-enabled."},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"Proposed Change"},{"line_number":61,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_41f4785b","line":58,"range":{"start_line":57,"start_character":0,"end_line":58,"end_character":13},"in_reply_to":"7f515b1d_d145fe44","updated":"2017-09-26 11:01:58.000000000","message":"If neutron/nova modification not enabled during the upgrade , maybe instead of saving those delta , we can just creating a snapshot of the DB before the migration ? \n(Don\u0027t sure it\u0027s better from scale aspect , but it\u0027s should be much simpler..)","commit_id":"6a4385a5dc60dfa9341e5c0939759737e6f51be0"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"a9761d245c12bdb49ae86a17e5d956dd2b8a9499","unresolved":false,"context_lines":[{"line_number":78,"context_line":"Every Dragonflow deployment will support the lastest database version."},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"In order to support out-of-tree features, the object _version_ will be on"},{"line_number":81,"context_line":"a per-object basis. Migration scripts will note the models they upgrade."},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"During upgrade, migration scripts will upgrade the database model objects from"},{"line_number":84,"context_line":"the previous version to the current version. The _version_ tag is increased"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_8ebf63cf","line":81,"range":{"start_line":81,"start_character":20,"end_line":81,"end_character":72},"updated":"2017-09-25 12:39:55.000000000","message":"What do we mean by \u0027scripts noting the models\u0027? In a comment? In some kind of API?","commit_id":"6a4385a5dc60dfa9341e5c0939759737e6f51be0"},{"author":{"_account_id":26131,"name":"Eyal Leshem","email":"eyal.leshem@toganetworks.com","username":"leyal"},"change_message_id":"44678d0556c1c0020b0a2c8f8110e0fb5ba2cb61","unresolved":false,"context_lines":[{"line_number":78,"context_line":"Every Dragonflow deployment will support the lastest database version."},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"In order to support out-of-tree features, the object _version_ will be on"},{"line_number":81,"context_line":"a per-object basis. Migration scripts will note the models they upgrade."},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"During upgrade, migration scripts will upgrade the database model objects from"},{"line_number":84,"context_line":"the previous version to the current version. The _version_ tag is increased"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_e18924ca","line":81,"range":{"start_line":81,"start_character":20,"end_line":81,"end_character":72},"in_reply_to":"7f515b1d_0e3a5333","updated":"2017-09-26 11:01:58.000000000","message":"well i still don\u0027t understand what\u0027s that mean ..","commit_id":"6a4385a5dc60dfa9341e5c0939759737e6f51be0"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"2ebeee482c6de9c822528fe546b30a3d2fe1b458","unresolved":false,"context_lines":[{"line_number":78,"context_line":"Every Dragonflow deployment will support the lastest database version."},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"In order to support out-of-tree features, the object _version_ will be on"},{"line_number":81,"context_line":"a per-object basis. Migration scripts will note the models they upgrade."},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"During upgrade, migration scripts will upgrade the database model objects from"},{"line_number":84,"context_line":"the previous version to the current version. The _version_ tag is increased"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_0e3a5333","line":81,"range":{"start_line":81,"start_character":20,"end_line":81,"end_character":72},"in_reply_to":"7f515b1d_8ebf63cf","updated":"2017-09-25 12:46:27.000000000","message":"In an API. Not in a comment - We want this accessible programmatically.","commit_id":"6a4385a5dc60dfa9341e5c0939759737e6f51be0"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"a9761d245c12bdb49ae86a17e5d956dd2b8a9499","unresolved":false,"context_lines":[{"line_number":80,"context_line":"In order to support out-of-tree features, the object _version_ will be on"},{"line_number":81,"context_line":"a per-object basis. Migration scripts will note the models they upgrade."},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"During upgrade, migration scripts will upgrade the database model objects from"},{"line_number":84,"context_line":"the previous version to the current version. The _version_ tag is increased"},{"line_number":85,"context_line":"manually by the scripts."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"Whenever a patch modifies the database model, a migration script must be added,"},{"line_number":88,"context_line":"unless the upgrade can be done automatically."}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_eec93778","line":85,"range":{"start_line":83,"start_character":0,"end_line":85,"end_character":24},"updated":"2017-09-25 12:39:55.000000000","message":"Version is kind of complex here, what if 2 scripts want to upgrade the same model, where\n\n * both are out of tree\n * there is no real conflict between the scripts\n\nThey\u0027ll need to coordinate versions or break.","commit_id":"6a4385a5dc60dfa9341e5c0939759737e6f51be0"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"0ddc3a4089ca04f335455eaf1a2b2e22e79760bc","unresolved":false,"context_lines":[{"line_number":80,"context_line":"In order to support out-of-tree features, the object _version_ will be on"},{"line_number":81,"context_line":"a per-object basis. Migration scripts will note the models they upgrade."},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"During upgrade, migration scripts will upgrade the database model objects from"},{"line_number":84,"context_line":"the previous version to the current version. The _version_ tag is increased"},{"line_number":85,"context_line":"manually by the scripts."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"Whenever a patch modifies the database model, a migration script must be added,"},{"line_number":88,"context_line":"unless the upgrade can be done automatically."}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_51a8eed9","line":85,"range":{"start_line":83,"start_character":0,"end_line":85,"end_character":24},"in_reply_to":"7f515b1d_0e7253e4","updated":"2017-09-25 12:59:56.000000000","message":"Sounds like an example on why we *should* do it this way :)\n\nOut-of-tree modules which modify in-tree models sounds like a coupling that will be very difficult to maintain accros versions.\n\nTrue, there is tight coupling for versions since out-of-tree models rely on model structure to access members, but this is still a weaker coupling than relying on the structure to modify it in a specific way. Additionally, if there are many out-of-tree modules modifying in-tree (or not-owned) models, the chances of collision are not to be ignored.","commit_id":"6a4385a5dc60dfa9341e5c0939759737e6f51be0"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"28c2abf1d54cae6b9a4ff549ca125946f990cd22","unresolved":false,"context_lines":[{"line_number":80,"context_line":"In order to support out-of-tree features, the object _version_ will be on"},{"line_number":81,"context_line":"a per-object basis. Migration scripts will note the models they upgrade."},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"During upgrade, migration scripts will upgrade the database model objects from"},{"line_number":84,"context_line":"the previous version to the current version. The _version_ tag is increased"},{"line_number":85,"context_line":"manually by the scripts."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"Whenever a patch modifies the database model, a migration script must be added,"},{"line_number":88,"context_line":"unless the upgrade can be done automatically."}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_0e7253e4","line":85,"range":{"start_line":83,"start_character":0,"end_line":85,"end_character":24},"in_reply_to":"7f515b1d_ee2137fd","updated":"2017-09-25 12:52:24.000000000","message":"This will hinder extending existing models. For instance, if I had an out of tree extension that added support for migration (ahem), I would be required to create extra model, rather than \u0027migration_status\u0027 field on the port.\n\nMight not be the best example but...","commit_id":"6a4385a5dc60dfa9341e5c0939759737e6f51be0"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"2ebeee482c6de9c822528fe546b30a3d2fe1b458","unresolved":false,"context_lines":[{"line_number":80,"context_line":"In order to support out-of-tree features, the object _version_ will be on"},{"line_number":81,"context_line":"a per-object basis. Migration scripts will note the models they upgrade."},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"During upgrade, migration scripts will upgrade the database model objects from"},{"line_number":84,"context_line":"the previous version to the current version. The _version_ tag is increased"},{"line_number":85,"context_line":"manually by the scripts."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"Whenever a patch modifies the database model, a migration script must be added,"},{"line_number":88,"context_line":"unless the upgrade can be done automatically."}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_ee2137fd","line":85,"range":{"start_line":83,"start_character":0,"end_line":85,"end_character":24},"in_reply_to":"7f515b1d_eec93778","updated":"2017-09-25 12:46:27.000000000","message":"Yes.\n\nThe original thought was that out-of-tree modules shouldn\u0027t modify in-tree or other out-of-tree models (that do not belong to them).\n\nBut in a pinch, this also can be used to coordinate upgrades of/by out-of-tree modules. Though I don\u0027t see how we can do this in a stable way.\n\nWhat assurance do we have that there is no conflict? How do we deal with conflict in case it exists? By allowing only the owner to upgrade their models, these questions are circumvented.","commit_id":"6a4385a5dc60dfa9341e5c0939759737e6f51be0"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"cc0a5f4c420e903ef8f3a03d00dbf098d5e038cf","unresolved":false,"context_lines":[{"line_number":1,"context_line":".."},{"line_number":2,"context_line":" This work is licensed under a Creative Commons Attribution 3.0 Unported"},{"line_number":3,"context_line":" License."},{"line_number":4,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_78f7b08c","line":1,"updated":"2017-10-01 09:14:28.000000000","message":"e","commit_id":"2acec2a1bdbd63da3a63f175aaf5dc6ae35c0d83"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"b88bec8ff1bbc1bb8858b5e2c347f1469a9453dd","unresolved":false,"context_lines":[{"line_number":1,"context_line":".."},{"line_number":2,"context_line":" This work is licensed under a Creative Commons Attribution 3.0 Unported"},{"line_number":3,"context_line":" License."},{"line_number":4,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_bdcd70b8","line":1,"in_reply_to":"7f515b1d_78f7b08c","updated":"2017-10-22 12:16:55.000000000","message":"?","commit_id":"2acec2a1bdbd63da3a63f175aaf5dc6ae35c0d83"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"cc0a5f4c420e903ef8f3a03d00dbf098d5e038cf","unresolved":false,"context_lines":[{"line_number":11,"context_line":"https://bugs.launchpad.net/dragonflow/+bug/1644111"},{"line_number":12,"context_line":"https://bugs.launchpad.net/dragonflow/+bug/1712586"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Currently, upgrading Dragonflow is not supported. To upgrade Dragonflow, the"},{"line_number":15,"context_line":"new version must be installed on all cloud servers (compute nodes and"},{"line_number":16,"context_line":"controller nodes), and the database must be replaced."},{"line_number":17,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_f88f2027","line":14,"range":{"start_line":14,"start_character":11,"end_line":14,"end_character":20},"updated":"2017-10-01 09:14:28.000000000","message":"is it DB related only or App code base as well?","commit_id":"2acec2a1bdbd63da3a63f175aaf5dc6ae35c0d83"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"b88bec8ff1bbc1bb8858b5e2c347f1469a9453dd","unresolved":false,"context_lines":[{"line_number":11,"context_line":"https://bugs.launchpad.net/dragonflow/+bug/1644111"},{"line_number":12,"context_line":"https://bugs.launchpad.net/dragonflow/+bug/1712586"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Currently, upgrading Dragonflow is not supported. To upgrade Dragonflow, the"},{"line_number":15,"context_line":"new version must be installed on all cloud servers (compute nodes and"},{"line_number":16,"context_line":"controller nodes), and the database must be replaced."},{"line_number":17,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f4b6375_ba184e75","line":14,"range":{"start_line":14,"start_character":11,"end_line":14,"end_character":20},"in_reply_to":"7f515b1d_f88f2027","updated":"2017-10-22 12:16:55.000000000","message":"We\u0027re talking about DB upgrades. Code upgrades fall under a specific deployment technique.","commit_id":"2acec2a1bdbd63da3a63f175aaf5dc6ae35c0d83"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"cc0a5f4c420e903ef8f3a03d00dbf098d5e038cf","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":"Assumptions:"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"* DHCP, metadata service, or anything requiring the controller may stop working"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"* Network modification may not work"},{"line_number":53,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_78ce905a","line":50,"updated":"2017-10-01 09:14:28.000000000","message":"should it be done in a controlled way (pause/resume app)?","commit_id":"2acec2a1bdbd63da3a63f175aaf5dc6ae35c0d83"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"b88bec8ff1bbc1bb8858b5e2c347f1469a9453dd","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":"Assumptions:"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"* DHCP, metadata service, or anything requiring the controller may stop working"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"* Network modification may not work"},{"line_number":53,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f4b6375_9fe8e416","line":50,"in_reply_to":"7f515b1d_78ce905a","updated":"2017-10-22 12:16:55.000000000","message":"The whole controller will be stopped for the duration of the upgrade.\n\nGenerally this part only list what is allowed or to be expected for the duration of the upgrade.","commit_id":"2acec2a1bdbd63da3a63f175aaf5dc6ae35c0d83"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"cc0a5f4c420e903ef8f3a03d00dbf098d5e038cf","unresolved":false,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":"* DHCP, metadata service, or anything requiring the controller may stop working"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"* Network modification may not work"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"* Networking between ports should continue to work normally. Especially l2, l3,"},{"line_number":55,"context_line":"  and security groups."}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_38d498e8","line":52,"range":{"start_line":52,"start_character":1,"end_line":52,"end_character":22},"updated":"2017-10-01 09:14:28.000000000","message":"Topology changes? I think neutron API should be disabled for Put/Post during the upgrade","commit_id":"2acec2a1bdbd63da3a63f175aaf5dc6ae35c0d83"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"cc0a5f4c420e903ef8f3a03d00dbf098d5e038cf","unresolved":false,"context_lines":[{"line_number":60,"context_line":"Proposed Change"},{"line_number":61,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"In this spec., we discuss a whole-cloud upgrade. For each compute node, an"},{"line_number":64,"context_line":"upgrade process is initiated."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"* Neutron writes are disabled"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_d8fea469","line":63,"range":{"start_line":63,"start_character":27,"end_line":63,"end_character":47},"updated":"2017-10-01 09:14:28.000000000","message":"I think it is limited to the Network (Neutron+ DF) component only","commit_id":"2acec2a1bdbd63da3a63f175aaf5dc6ae35c0d83"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"b88bec8ff1bbc1bb8858b5e2c347f1469a9453dd","unresolved":false,"context_lines":[{"line_number":60,"context_line":"Proposed Change"},{"line_number":61,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"In this spec., we discuss a whole-cloud upgrade. For each compute node, an"},{"line_number":64,"context_line":"upgrade process is initiated."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"* Neutron writes are disabled"}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f4b6375_dfc41c43","line":63,"range":{"start_line":63,"start_character":27,"end_line":63,"end_character":47},"in_reply_to":"7f515b1d_d8fea469","updated":"2017-10-22 12:16:55.000000000","message":"Agree","commit_id":"2acec2a1bdbd63da3a63f175aaf5dc6ae35c0d83"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"cc0a5f4c420e903ef8f3a03d00dbf098d5e038cf","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":"In this spec., we discuss a whole-cloud upgrade. For each compute node, an"},{"line_number":64,"context_line":"upgrade process is initiated."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"* Neutron writes are disabled"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"* All Dragonflow processes, Neutron processes, and Dragonflow drivers are"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_b801a86c","line":65,"updated":"2017-10-01 09:14:28.000000000","message":"Please add the full workflow starting from admin starting User initiation of the upgrade process. Also it is not clear which part is manually initiated and which is automatically.","commit_id":"2acec2a1bdbd63da3a63f175aaf5dc6ae35c0d83"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"b88bec8ff1bbc1bb8858b5e2c347f1469a9453dd","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":"In this spec., we discuss a whole-cloud upgrade. For each compute node, an"},{"line_number":64,"context_line":"upgrade process is initiated."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"* Neutron writes are disabled"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"* All Dragonflow processes, Neutron processes, and Dragonflow drivers are"}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f4b6375_3f39f040","line":65,"in_reply_to":"7f515b1d_b801a86c","updated":"2017-10-22 12:16:55.000000000","message":"Will do","commit_id":"2acec2a1bdbd63da3a63f175aaf5dc6ae35c0d83"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"cc0a5f4c420e903ef8f3a03d00dbf098d5e038cf","unresolved":false,"context_lines":[{"line_number":82,"context_line":"During upgrade, the migration process will snapshot the database, and run all"},{"line_number":83,"context_line":"migrations in-memory (or at least locally)."},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"Each migration script will be passed an NB API object and will perform its"},{"line_number":86,"context_line":"actions through NB\u0027s CRUD methods or the DB driver."},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"Each migration script run will be documented in the NB DB, including when the"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_182e7cfa","line":85,"range":{"start_line":85,"start_character":0,"end_line":85,"end_character":21},"updated":"2017-10-01 09:14:28.000000000","message":"What is the granularity of the scripts?","commit_id":"2acec2a1bdbd63da3a63f175aaf5dc6ae35c0d83"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"b88bec8ff1bbc1bb8858b5e2c347f1469a9453dd","unresolved":false,"context_lines":[{"line_number":82,"context_line":"During upgrade, the migration process will snapshot the database, and run all"},{"line_number":83,"context_line":"migrations in-memory (or at least locally)."},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"Each migration script will be passed an NB API object and will perform its"},{"line_number":86,"context_line":"actions through NB\u0027s CRUD methods or the DB driver."},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"Each migration script run will be documented in the NB DB, including when the"}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f4b6375_1fdab4e8","line":85,"range":{"start_line":85,"start_character":0,"end_line":85,"end_character":21},"in_reply_to":"7f515b1d_182e7cfa","updated":"2017-10-22 12:16:55.000000000","message":"Up to the developer really, but in essence, each script should be related to some specific change or new feature.","commit_id":"2acec2a1bdbd63da3a63f175aaf5dc6ae35c0d83"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"cc0a5f4c420e903ef8f3a03d00dbf098d5e038cf","unresolved":false,"context_lines":[{"line_number":83,"context_line":"migrations in-memory (or at least locally)."},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"Each migration script will be passed an NB API object and will perform its"},{"line_number":86,"context_line":"actions through NB\u0027s CRUD methods or the DB driver."},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"Each migration script run will be documented in the NB DB, including when the"},{"line_number":89,"context_line":"upgrade was executed."}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_f8304058","line":86,"range":{"start_line":86,"start_character":15,"end_line":86,"end_character":50},"updated":"2017-10-01 09:14:28.000000000","message":"Can you please elaborate?","commit_id":"2acec2a1bdbd63da3a63f175aaf5dc6ae35c0d83"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"b88bec8ff1bbc1bb8858b5e2c347f1469a9453dd","unresolved":false,"context_lines":[{"line_number":83,"context_line":"migrations in-memory (or at least locally)."},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"Each migration script will be passed an NB API object and will perform its"},{"line_number":86,"context_line":"actions through NB\u0027s CRUD methods or the DB driver."},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"Each migration script run will be documented in the NB DB, including when the"},{"line_number":89,"context_line":"upgrade was executed."}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f4b6375_bfe04098","line":86,"range":{"start_line":86,"start_character":15,"end_line":86,"end_character":50},"in_reply_to":"7f515b1d_f8304058","updated":"2017-10-22 12:16:55.000000000","message":"Will elaborate in the following PS","commit_id":"2acec2a1bdbd63da3a63f175aaf5dc6ae35c0d83"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"cc0a5f4c420e903ef8f3a03d00dbf098d5e038cf","unresolved":false,"context_lines":[{"line_number":87,"context_line":""},{"line_number":88,"context_line":"Each migration script run will be documented in the NB DB, including when the"},{"line_number":89,"context_line":"upgrade was executed."},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"Whenever a patch modifies the database model, a migration script must be added,"},{"line_number":92,"context_line":"unless the upgrade can be done automatically."},{"line_number":93,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_d8334461","line":90,"updated":"2017-10-01 09:14:28.000000000","message":"Please add changes to the DB data model","commit_id":"2acec2a1bdbd63da3a63f175aaf5dc6ae35c0d83"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"b88bec8ff1bbc1bb8858b5e2c347f1469a9453dd","unresolved":false,"context_lines":[{"line_number":87,"context_line":""},{"line_number":88,"context_line":"Each migration script run will be documented in the NB DB, including when the"},{"line_number":89,"context_line":"upgrade was executed."},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"Whenever a patch modifies the database model, a migration script must be added,"},{"line_number":92,"context_line":"unless the upgrade can be done automatically."},{"line_number":93,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f4b6375_5fe94c7e","line":90,"in_reply_to":"7f515b1d_d8334461","updated":"2017-10-22 12:16:55.000000000","message":"Will do","commit_id":"2acec2a1bdbd63da3a63f175aaf5dc6ae35c0d83"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"cc0a5f4c420e903ef8f3a03d00dbf098d5e038cf","unresolved":false,"context_lines":[{"line_number":88,"context_line":"Each migration script run will be documented in the NB DB, including when the"},{"line_number":89,"context_line":"upgrade was executed."},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"Whenever a patch modifies the database model, a migration script must be added,"},{"line_number":92,"context_line":"unless the upgrade can be done automatically."},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"Upgrade can be done automatically only in the following cases:"},{"line_number":95,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_b8364850","line":92,"range":{"start_line":91,"start_character":0,"end_line":92,"end_character":45},"updated":"2017-10-01 09:14:28.000000000","message":"Is there going to be a dedicated tool to run DB upgrade?","commit_id":"2acec2a1bdbd63da3a63f175aaf5dc6ae35c0d83"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"b88bec8ff1bbc1bb8858b5e2c347f1469a9453dd","unresolved":false,"context_lines":[{"line_number":88,"context_line":"Each migration script run will be documented in the NB DB, including when the"},{"line_number":89,"context_line":"upgrade was executed."},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"Whenever a patch modifies the database model, a migration script must be added,"},{"line_number":92,"context_line":"unless the upgrade can be done automatically."},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"Upgrade can be done automatically only in the following cases:"},{"line_number":95,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f4b6375_dffc1c40","line":92,"range":{"start_line":91,"start_character":0,"end_line":92,"end_character":45},"in_reply_to":"7f515b1d_b8364850","updated":"2017-10-22 12:16:55.000000000","message":"At the moment, the plan is to add a new verb to df-db utility","commit_id":"2acec2a1bdbd63da3a63f175aaf5dc6ae35c0d83"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"cc0a5f4c420e903ef8f3a03d00dbf098d5e038cf","unresolved":false,"context_lines":[{"line_number":97,"context_line":""},{"line_number":98,"context_line":"* A model is added"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"Note that deleting a field or model does not happen automatically. This is"},{"line_number":101,"context_line":"because it is assumed the stored information has to be moved somewhere first."},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"References"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7f515b1d_783c502e","line":100,"range":{"start_line":100,"start_character":10,"end_line":100,"end_character":35},"updated":"2017-10-01 09:14:28.000000000","message":"Does it mean deleting is supported between any or only the major versions?","commit_id":"2acec2a1bdbd63da3a63f175aaf5dc6ae35c0d83"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"b88bec8ff1bbc1bb8858b5e2c347f1469a9453dd","unresolved":false,"context_lines":[{"line_number":97,"context_line":""},{"line_number":98,"context_line":"* A model is added"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"Note that deleting a field or model does not happen automatically. This is"},{"line_number":101,"context_line":"because it is assumed the stored information has to be moved somewhere first."},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"References"}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f4b6375_df91bcf3","line":100,"range":{"start_line":100,"start_character":10,"end_line":100,"end_character":35},"in_reply_to":"7f515b1d_783c502e","updated":"2017-10-22 12:16:55.000000000","message":"Deleting is supported between any two upgrade points","commit_id":"2acec2a1bdbd63da3a63f175aaf5dc6ae35c0d83"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"cc0a5f4c420e903ef8f3a03d00dbf098d5e038cf","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"7f515b1d_384258ac","line":105,"updated":"2017-10-01 09:14:28.000000000","message":"Any relation to the neutron upgrade process?","commit_id":"2acec2a1bdbd63da3a63f175aaf5dc6ae35c0d83"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"b88bec8ff1bbc1bb8858b5e2c347f1469a9453dd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"3f4b6375_bfa72050","line":105,"in_reply_to":"7f515b1d_384258ac","updated":"2017-10-22 12:16:55.000000000","message":"Our upgrades should mimic relevant upgrades introduced in neutron, plus, any changes we\u0027ll need internally (eg. dhcp ports and subnet network relations)","commit_id":"2acec2a1bdbd63da3a63f175aaf5dc6ae35c0d83"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"c5c2dd191f9202283a8e439463c617c6ab828fab","unresolved":false,"context_lines":[{"line_number":18,"context_line":"Unless otherwise specified, none of the items below exist prior to this"},{"line_number":19,"context_line":"feature."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"This blueprint describe how to implement upgrades in Dragonflow, including:"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"* Database migration, i.e. how to modify the database and upgrade the schema in"},{"line_number":24,"context_line":"  a way that facilitates the above."}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f4b6375_4d1dcabb","line":21,"range":{"start_line":21,"start_character":40,"end_line":21,"end_character":49},"updated":"2017-10-23 05:15:27.000000000","message":"DB upgrades","commit_id":"6f97d1546ee1d4366270b68e2826f05453e74dba"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"53fc92936d4430af3b79552f34e6f93d301ad6cf","unresolved":false,"context_lines":[{"line_number":18,"context_line":"Unless otherwise specified, none of the items below exist prior to this"},{"line_number":19,"context_line":"feature."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"This blueprint describe how to implement upgrades in Dragonflow, including:"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"* Database migration, i.e. how to modify the database and upgrade the schema in"},{"line_number":24,"context_line":"  a way that facilitates the above."}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f4b6375_ac7312b1","line":21,"range":{"start_line":21,"start_character":40,"end_line":21,"end_character":49},"in_reply_to":"3f4b6375_4d1dcabb","updated":"2017-10-23 14:46:47.000000000","message":"Done","commit_id":"6f97d1546ee1d4366270b68e2826f05453e74dba"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"c5c2dd191f9202283a8e439463c617c6ab828fab","unresolved":false,"context_lines":[{"line_number":23,"context_line":"* Database migration, i.e. how to modify the database and upgrade the schema in"},{"line_number":24,"context_line":"  a way that facilitates the above."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"* Cloud upgrades, i.e. upgrading all the servers in the cloud simultaneously."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"The following is out of scope, and will be solved under a different feature:"},{"line_number":29,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f4b6375_4d726a13","line":26,"range":{"start_line":26,"start_character":62,"end_line":26,"end_character":76},"updated":"2017-10-23 05:15:27.000000000","message":"I guess still with separation of the Compute (DF Controller) and DB nodes","commit_id":"6f97d1546ee1d4366270b68e2826f05453e74dba"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"4126ec468e61b8c78a338330bc5ae44398c0b545","unresolved":false,"context_lines":[{"line_number":23,"context_line":"* Database migration, i.e. how to modify the database and upgrade the schema in"},{"line_number":24,"context_line":"  a way that facilitates the above."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"* Cloud upgrades, i.e. upgrading all the servers in the cloud simultaneously."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"The following is out of scope, and will be solved under a different feature:"},{"line_number":29,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f4b6375_252a817e","line":26,"range":{"start_line":26,"start_character":62,"end_line":26,"end_character":76},"in_reply_to":"3f4b6375_4d726a13","updated":"2017-10-25 07:24:17.000000000","message":"The idea is that the cloud does not \u0027run\u0027, i.e. API services are halted  (and network controller operations) until all elements are upgraded.","commit_id":"6f97d1546ee1d4366270b68e2826f05453e74dba"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"c5c2dd191f9202283a8e439463c617c6ab828fab","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"The following is out of scope, and will be solved under a different feature:"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"* Rolling upgrades, i.e. continuously upgrading the cloud host by host, without"},{"line_number":31,"context_line":"  the need to reinstall"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f4b6375_cd865adc","line":30,"range":{"start_line":30,"start_character":2,"end_line":30,"end_character":18},"updated":"2017-10-23 05:15:27.000000000","message":"But the title states: \"and Rolling Upgrade\"","commit_id":"6f97d1546ee1d4366270b68e2826f05453e74dba"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"53fc92936d4430af3b79552f34e6f93d301ad6cf","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"The following is out of scope, and will be solved under a different feature:"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"* Rolling upgrades, i.e. continuously upgrading the cloud host by host, without"},{"line_number":31,"context_line":"  the need to reinstall"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f4b6375_cb819b4c","line":30,"range":{"start_line":30,"start_character":2,"end_line":30,"end_character":18},"in_reply_to":"3f4b6375_cd865adc","updated":"2017-10-23 14:46:47.000000000","message":"Will drop","commit_id":"6f97d1546ee1d4366270b68e2826f05453e74dba"},{"author":{"_account_id":26131,"name":"Eyal Leshem","email":"eyal.leshem@toganetworks.com","username":"leyal"},"change_message_id":"1efd57f2577c1b79310679f6cf4e6d6e4825d172","unresolved":false,"context_lines":[{"line_number":85,"context_line":""},{"line_number":86,"context_line":"* Locate all avaliable migrations in the stevedore managed paths"},{"line_number":87,"context_line":"* Locate all applied migrations from the north-bound database"},{"line_number":88,"context_line":"* Decide whether any migrations should be applied"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"  * If no migrations to apply, terminate."},{"line_number":91,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f4b6375_2d2c87aa","line":88,"updated":"2017-10-25 07:47:36.000000000","message":"Didn\u0027t we know which migration should be applied according to source and target versions ?","commit_id":"6f97d1546ee1d4366270b68e2826f05453e74dba"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"a789bfe8b24b639353463f939d4ccd3f372927ee","unresolved":false,"context_lines":[{"line_number":85,"context_line":""},{"line_number":86,"context_line":"* Locate all avaliable migrations in the stevedore managed paths"},{"line_number":87,"context_line":"* Locate all applied migrations from the north-bound database"},{"line_number":88,"context_line":"* Decide whether any migrations should be applied"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"  * If no migrations to apply, terminate."},{"line_number":91,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f4b6375_374dd03a","line":88,"in_reply_to":"3f4b6375_2d2c87aa","updated":"2017-11-06 13:43:12.000000000","message":"We get this knowledge by comparing the current state with the desired one","commit_id":"6f97d1546ee1d4366270b68e2826f05453e74dba"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"c5c2dd191f9202283a8e439463c617c6ab828fab","unresolved":false,"context_lines":[{"line_number":90,"context_line":"  * If no migrations to apply, terminate."},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"* Take in-memory snapshot of the north-bound database."},{"line_number":93,"context_line":"* Iterate migrations ordered by their proposed date, and apply each one on the"},{"line_number":94,"context_line":"  in-memory copy of the database."},{"line_number":95,"context_line":""},{"line_number":96,"context_line":" * If an error occured, report and stop (nothing was written to the database)."}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f4b6375_ed9fd600","line":93,"range":{"start_line":93,"start_character":38,"end_line":93,"end_character":51},"updated":"2017-10-23 05:15:27.000000000","message":"Maybe worth to have some order between migrations, not solely rely on date?","commit_id":"6f97d1546ee1d4366270b68e2826f05453e74dba"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"4126ec468e61b8c78a338330bc5ae44398c0b545","unresolved":false,"context_lines":[{"line_number":90,"context_line":"  * If no migrations to apply, terminate."},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"* Take in-memory snapshot of the north-bound database."},{"line_number":93,"context_line":"* Iterate migrations ordered by their proposed date, and apply each one on the"},{"line_number":94,"context_line":"  in-memory copy of the database."},{"line_number":95,"context_line":""},{"line_number":96,"context_line":" * If an error occured, report and stop (nothing was written to the database)."}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f4b6375_c5728dad","line":93,"range":{"start_line":93,"start_character":38,"end_line":93,"end_character":51},"in_reply_to":"3f4b6375_77fb9a78","updated":"2017-10-25 07:24:17.000000000","message":"I prefer the date solution. I fear having an after\u003d[id1,id2] annotation will be error prone and difficult to maintain later, especially for new contributors who are not aware of the entire upgrade history.\n\nRegarding bug fixes: I see two options:\n1. Either special care has to be taken to fix the upgrade script to fit in the previous role (less preferable, but possibly unavoidable)\n\n2. New upgrade script to fix the botch-up done by the original. (Better, but not always an option).","commit_id":"6f97d1546ee1d4366270b68e2826f05453e74dba"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"6b5b0a826794ffd2638c60f384d222b76dc356f4","unresolved":false,"context_lines":[{"line_number":90,"context_line":"  * If no migrations to apply, terminate."},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"* Take in-memory snapshot of the north-bound database."},{"line_number":93,"context_line":"* Iterate migrations ordered by their proposed date, and apply each one on the"},{"line_number":94,"context_line":"  in-memory copy of the database."},{"line_number":95,"context_line":""},{"line_number":96,"context_line":" * If an error occured, report and stop (nothing was written to the database)."}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f4b6375_77fb9a78","line":93,"range":{"start_line":93,"start_character":38,"end_line":93,"end_character":51},"in_reply_to":"3f4b6375_cc0f6edf","updated":"2017-10-23 19:17:57.000000000","message":"What if some migration script will be updated (let\u0027s say some bug fix)?","commit_id":"6f97d1546ee1d4366270b68e2826f05453e74dba"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"53fc92936d4430af3b79552f34e6f93d301ad6cf","unresolved":false,"context_lines":[{"line_number":90,"context_line":"  * If no migrations to apply, terminate."},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"* Take in-memory snapshot of the north-bound database."},{"line_number":93,"context_line":"* Iterate migrations ordered by their proposed date, and apply each one on the"},{"line_number":94,"context_line":"  in-memory copy of the database."},{"line_number":95,"context_line":""},{"line_number":96,"context_line":" * If an error occured, report and stop (nothing was written to the database)."}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f4b6375_cc0f6edf","line":93,"range":{"start_line":93,"start_character":38,"end_line":93,"end_character":51},"in_reply_to":"3f4b6375_ed9fd600","updated":"2017-10-23 14:46:47.000000000","message":"I opted for date because the subset of upgrades that depend on other updates should be relatively small, and ordering by date gives a quite accurate chronology. Dates can be coupled where strong ordering is required.\n\nWe as reviewers should take care to merge upgrades with proposed date relatively close to the actual merge date.\n\nAnother idea I had was to add \u0027after\u003d[id1, id2]\u0027 annotation to updates, so the upgrade script can make sure it applies the updates in the correct order.","commit_id":"6f97d1546ee1d4366270b68e2826f05453e74dba"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"4126ec468e61b8c78a338330bc5ae44398c0b545","unresolved":false,"context_lines":[{"line_number":102,"context_line":""},{"line_number":103,"context_line":".. code:: python"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"  def migration(nb_api):"},{"line_number":106,"context_line":"      # For each lport:"},{"line_number":107,"context_line":"      #     Alter some field"},{"line_number":108,"context_line":"      #     Persist in th passed NB API"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f4b6375_25d4c147","line":105,"range":{"start_line":105,"start_character":0,"end_line":105,"end_character":24},"updated":"2017-10-25 07:24:17.000000000","message":"Didn\u0027t we say we also need the Neutron plugin? Or is this postponed to a post-upgrade sync/scan?","commit_id":"6f97d1546ee1d4366270b68e2826f05453e74dba"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"a789bfe8b24b639353463f939d4ccd3f372927ee","unresolved":false,"context_lines":[{"line_number":102,"context_line":""},{"line_number":103,"context_line":".. code:: python"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"  def migration(nb_api):"},{"line_number":106,"context_line":"      # For each lport:"},{"line_number":107,"context_line":"      #     Alter some field"},{"line_number":108,"context_line":"      #     Persist in th passed NB API"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f4b6375_5dae2d2e","line":105,"range":{"start_line":105,"start_character":0,"end_line":105,"end_character":24},"in_reply_to":"3f4b6375_25d4c147","updated":"2017-11-06 13:43:12.000000000","message":"Problem is the API is down during upgrade..","commit_id":"6f97d1546ee1d4366270b68e2826f05453e74dba"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"4e1a190a728695a899fc9e43776a719a79da6f42","unresolved":false,"context_lines":[{"line_number":102,"context_line":""},{"line_number":103,"context_line":".. code:: python"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"  def migration(nb_api):"},{"line_number":106,"context_line":"      # For each lport:"},{"line_number":107,"context_line":"      #     Alter some field"},{"line_number":108,"context_line":"      #     Persist in th passed NB API"}],"source_content_type":"text/x-rst","patch_set":10,"id":"1f485f77_3fac7beb","line":105,"range":{"start_line":105,"start_character":0,"end_line":105,"end_character":24},"in_reply_to":"3f4b6375_5dae2d2e","updated":"2017-11-19 11:20:55.000000000","message":"On second thought, it also breaks the \u0027headless Dragonflow\u0027 possibility.\n\nMaybe a separate migration utility that goes via Neutron DB? Though it may cause double-work (e.g. update the ports both in NB-DB and Neutron-DB).","commit_id":"6f97d1546ee1d4366270b68e2826f05453e74dba"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"c5c2dd191f9202283a8e439463c617c6ab828fab","unresolved":false,"context_lines":[{"line_number":125,"context_line":"A new model SchemaMigration will be introduced:"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"::"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    +------------------------+---------------------------------------------+"},{"line_number":130,"context_line":"    |    Attribute Name      |               Description                   |"},{"line_number":131,"context_line":"    +\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f4b6375_ed6d9604","line":128,"updated":"2017-10-23 05:15:27.000000000","message":"Why to map each migration script to db entry?","commit_id":"6f97d1546ee1d4366270b68e2826f05453e74dba"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"6b5b0a826794ffd2638c60f384d222b76dc356f4","unresolved":false,"context_lines":[{"line_number":125,"context_line":"A new model SchemaMigration will be introduced:"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"::"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    +------------------------+---------------------------------------------+"},{"line_number":130,"context_line":"    |    Attribute Name      |               Description                   |"},{"line_number":131,"context_line":"    +\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f4b6375_f7154a9d","line":128,"in_reply_to":"3f4b6375_8bd8437f","updated":"2017-10-23 19:17:57.000000000","message":"Can you please elaborate?","commit_id":"6f97d1546ee1d4366270b68e2826f05453e74dba"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"53fc92936d4430af3b79552f34e6f93d301ad6cf","unresolved":false,"context_lines":[{"line_number":125,"context_line":"A new model SchemaMigration will be introduced:"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"::"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    +------------------------+---------------------------------------------+"},{"line_number":130,"context_line":"    |    Attribute Name      |               Description                   |"},{"line_number":131,"context_line":"    +\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f4b6375_8bd8437f","line":128,"in_reply_to":"3f4b6375_ed6d9604","updated":"2017-10-23 14:46:47.000000000","message":"I think it will make troubleshooting easier.","commit_id":"6f97d1546ee1d4366270b68e2826f05453e74dba"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"4126ec468e61b8c78a338330bc5ae44398c0b545","unresolved":false,"context_lines":[{"line_number":125,"context_line":"A new model SchemaMigration will be introduced:"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"::"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    +------------------------+---------------------------------------------+"},{"line_number":130,"context_line":"    |    Attribute Name      |               Description                   |"},{"line_number":131,"context_line":"    +\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f4b6375_8dadbb9c","line":128,"in_reply_to":"3f4b6375_f7154a9d","updated":"2017-10-25 07:24:17.000000000","message":"I don\u0027t see the mapping here, but I also think there\u0027s a rudimentary security feature: A feature can provide a migration script that can only modify models that belong to it.\n\nThis may come in handy when we support out-of-tree applications.","commit_id":"6f97d1546ee1d4366270b68e2826f05453e74dba"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"c5c2dd191f9202283a8e439463c617c6ab828fab","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"3f4b6375_0d67d227","line":146,"updated":"2017-10-23 05:15:27.000000000","message":"worth to add reference to the neutron db migration","commit_id":"6f97d1546ee1d4366270b68e2826f05453e74dba"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"53fc92936d4430af3b79552f34e6f93d301ad6cf","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"3f4b6375_ac12f207","line":146,"in_reply_to":"3f4b6375_0d67d227","updated":"2017-10-23 14:46:47.000000000","message":"Will add","commit_id":"6f97d1546ee1d4366270b68e2826f05453e74dba"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"43c94a70f07b4493da5dd107c87be6f205963225","unresolved":false,"context_lines":[{"line_number":126,"context_line":"database."},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"Option 1: Two migration scripts"},{"line_number":129,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"This option proposes that in addition to Dragonflow\u0027s migration scripts, we"},{"line_number":132,"context_line":"also add Neutron migration scripts which update the Neutron database."}],"source_content_type":"text/x-rst","patch_set":14,"id":"df87a7cf_93be1563","line":129,"updated":"2017-12-20 10:50:44.000000000","message":"I vote for this option,","commit_id":"2d9911795aa1dca1961fed20e4f185b64dcea310"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"171b9d7949c6017675ef0cf010aba1b02dbb3b3c","unresolved":false,"context_lines":[{"line_number":126,"context_line":"database."},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"Option 1: Two migration scripts"},{"line_number":129,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"This option proposes that in addition to Dragonflow\u0027s migration scripts, we"},{"line_number":132,"context_line":"also add Neutron migration scripts which update the Neutron database."}],"source_content_type":"text/x-rst","patch_set":14,"id":"bf8cb3f7_40e14efe","line":129,"in_reply_to":"df87a7cf_93be1563","updated":"2017-12-20 13:32:57.000000000","message":"+1","commit_id":"2d9911795aa1dca1961fed20e4f185b64dcea310"},{"author":{"_account_id":26131,"name":"Eyal Leshem","email":"eyal.leshem@toganetworks.com","username":"leyal"},"change_message_id":"fffff0d89c7ff966fe6d944be6665273233f707b","unresolved":false,"context_lines":[{"line_number":156,"context_line":""},{"line_number":157,"context_line":"Option 2: Online Neutron Changes"},{"line_number":158,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"This option proposes that Dragonflow migration only handles the syntactic"},{"line_number":161,"context_line":"differences only, e.g. renaming fields."},{"line_number":162,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"df87a7cf_aec16c56","line":159,"updated":"2017-12-20 11:20:55.000000000","message":"I vote for this option for the following reasons: \n1. currently some actions will require neutron-logic for example - IPAM or segmentation-allocation.     \n2. Not need to touch the neutron-DB directly. \n3. option 1 add new way that DF object can be created , and i think that good idea to keep only one create execution-flow","commit_id":"2d9911795aa1dca1961fed20e4f185b64dcea310"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"171b9d7949c6017675ef0cf010aba1b02dbb3b3c","unresolved":false,"context_lines":[{"line_number":156,"context_line":""},{"line_number":157,"context_line":"Option 2: Online Neutron Changes"},{"line_number":158,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"This option proposes that Dragonflow migration only handles the syntactic"},{"line_number":161,"context_line":"differences only, e.g. renaming fields."},{"line_number":162,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"bf8cb3f7_80a516b8","line":159,"in_reply_to":"bf8cb3f7_2040ca07","updated":"2017-12-20 13:32:57.000000000","message":"Regarding (2), I think this is aligned with the neutron DB migration process","commit_id":"2d9911795aa1dca1961fed20e4f185b64dcea310"},{"author":{"_account_id":26131,"name":"Eyal Leshem","email":"eyal.leshem@toganetworks.com","username":"leyal"},"change_message_id":"31b876d7b2f5e0bcc7f565a5012958f6cc4310e0","unresolved":false,"context_lines":[{"line_number":156,"context_line":""},{"line_number":157,"context_line":"Option 2: Online Neutron Changes"},{"line_number":158,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"This option proposes that Dragonflow migration only handles the syntactic"},{"line_number":161,"context_line":"differences only, e.g. renaming fields."},{"line_number":162,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"bf8cb3f7_e6967a95","line":159,"in_reply_to":"bf8cb3f7_2040ca07","updated":"2017-12-20 14:29:51.000000000","message":"regarding to 1 - \nwhat in my mind is the DHCP. \nAnd in the dhcp we creating new port that needed ip (even it\u0027s can be workaround in this case - by using the ips that already allocated for the subnets ..). \nIf in future changes will do tunneling topology changes - maybe the tunnels should be reallocate ips. \n\nregarding to 3 -\nDon\u0027t think that can cause issue , just think that a bad practice. You have 2 points in the code that add the same object to the DF-DB.","commit_id":"2d9911795aa1dca1961fed20e4f185b64dcea310"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"7cef4147e347b4a5d71216e8c4ee03c3cac7b7cd","unresolved":false,"context_lines":[{"line_number":156,"context_line":""},{"line_number":157,"context_line":"Option 2: Online Neutron Changes"},{"line_number":158,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"This option proposes that Dragonflow migration only handles the syntactic"},{"line_number":161,"context_line":"differences only, e.g. renaming fields."},{"line_number":162,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"bf8cb3f7_2040ca07","line":159,"in_reply_to":"df87a7cf_aec16c56","updated":"2017-12-20 13:25:20.000000000","message":"\u003e 1. currently some actions will require neutron-logic for example -\n \u003e IPAM or segmentation-allocation.\n\nIs there a scenario where this is done during upgrade?\n\n \u003e 2. Not need to touch the neutron-DB directly.\n\nTrue\n\n \u003e 3. option 1 add new way that DF object can be created , and i think\n \u003e that good idea to keep only one create execution-flow\n\nDragonflow controllers are assumed to be down anyway, and when they re-awake they sync with the northbound DB. So I think this should be a non-issue in this case.","commit_id":"2d9911795aa1dca1961fed20e4f185b64dcea310"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"38ffcecebf671f416ff8fa7371641df73fa36f19","unresolved":false,"context_lines":[{"line_number":142,"context_line":"    3. Restart Dragonflow controllers and Neutron servers."},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"The order of 2.1. and 2.2. can be changed, since while everything is shut down"},{"line_number":145,"context_line":"it shuold make a difference."},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"Pros:"},{"line_number":148,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"9f91af0f_f33f18b3","line":145,"range":{"start_line":145,"start_character":3,"end_line":145,"end_character":9},"updated":"2017-12-28 07:35:03.000000000","message":"should not","commit_id":"0dc0cf5f4a346320e9801a58e6477d2cb6367af9"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"316bbbee9e4c8681d7388874144adf79b7633ae5","unresolved":false,"context_lines":[{"line_number":142,"context_line":"    3. Restart Dragonflow controllers and Neutron servers."},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"The order of 2.1. and 2.2. can be changed, since while everything is shut down"},{"line_number":145,"context_line":"it shuold make a difference."},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"Pros:"},{"line_number":148,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"9f91af0f_c443ac12","line":145,"range":{"start_line":145,"start_character":3,"end_line":145,"end_character":9},"in_reply_to":"9f91af0f_f33f18b3","updated":"2018-01-07 09:38:27.000000000","message":"Done","commit_id":"0dc0cf5f4a346320e9801a58e6477d2cb6367af9"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"38ffcecebf671f416ff8fa7371641df73fa36f19","unresolved":false,"context_lines":[{"line_number":205,"context_line":"    +------------------------+---------------------------------------------+"},{"line_number":206,"context_line":"    | applied_at             | Time the script was executed                |"},{"line_number":207,"context_line":"    +------------------------+---------------------------------------------+"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"References"},{"line_number":210,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":16,"id":"9f91af0f_336fc0c6","line":208,"updated":"2017-12-28 07:35:03.000000000","message":"please add more details when and how this table is going to be used","commit_id":"0dc0cf5f4a346320e9801a58e6477d2cb6367af9"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"316bbbee9e4c8681d7388874144adf79b7633ae5","unresolved":false,"context_lines":[{"line_number":205,"context_line":"    +------------------------+---------------------------------------------+"},{"line_number":206,"context_line":"    | applied_at             | Time the script was executed                |"},{"line_number":207,"context_line":"    +------------------------+---------------------------------------------+"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"References"},{"line_number":210,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":16,"id":"9f91af0f_a43ea888","line":208,"in_reply_to":"9f91af0f_336fc0c6","updated":"2018-01-07 09:38:27.000000000","message":"Done","commit_id":"0dc0cf5f4a346320e9801a58e6477d2cb6367af9"},{"author":{"_account_id":17880,"name":"Shachar Snapiri","email":"shachar.snapiri@toganetworks.com","username":"snapiri"},"change_message_id":"53aab637c33a4ab8f4b5047d75d94296e72eb85a","unresolved":false,"context_lines":[{"line_number":70,"context_line":""},{"line_number":71,"context_line":"  #. If new configuration is required, it is performed at this stage."},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"#. On a single host, the operator executed the upgrade utilities (first Neutron"},{"line_number":74,"context_line":"   and then Dragonflow)."},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"   #. If any of the upgrades fail, operator reverts package and configuration"}],"source_content_type":"text/x-rst","patch_set":17,"id":"9f91af0f_81458c45","line":73,"range":{"start_line":73,"start_character":34,"end_line":73,"end_character":42},"updated":"2018-01-08 11:32:57.000000000","message":"executes","commit_id":"0e633b423868a5cab6d5ac6615fc1c5f10967234"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"c6a5d6631d9de18a519d7203984dc88c10a9eeb4","unresolved":false,"context_lines":[{"line_number":70,"context_line":""},{"line_number":71,"context_line":"  #. If new configuration is required, it is performed at this stage."},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"#. On a single host, the operator executed the upgrade utilities (first Neutron"},{"line_number":74,"context_line":"   and then Dragonflow)."},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"   #. If any of the upgrades fail, operator reverts package and configuration"}],"source_content_type":"text/x-rst","patch_set":17,"id":"7f96bb07_f9500561","line":73,"range":{"start_line":73,"start_character":34,"end_line":73,"end_character":42},"in_reply_to":"9f91af0f_81458c45","updated":"2018-01-16 13:07:20.000000000","message":"Done","commit_id":"0e633b423868a5cab6d5ac6615fc1c5f10967234"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"c547123a15e0628684653e00d55e643e02f90628","unresolved":false,"context_lines":[{"line_number":125,"context_line":"There are several options as to how to align the migration with the Neutron"},{"line_number":126,"context_line":"database."},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"Option 1: Two migration scripts"},{"line_number":129,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"This option proposes that in addition to Dragonflow\u0027s migration scripts, we"}],"source_content_type":"text/x-rst","patch_set":17,"id":"9f91af0f_fdf19a6c","line":128,"range":{"start_line":128,"start_character":0,"end_line":128,"end_character":31},"updated":"2018-01-08 08:08:59.000000000","message":"+1","commit_id":"0e633b423868a5cab6d5ac6615fc1c5f10967234"},{"author":{"_account_id":17880,"name":"Shachar Snapiri","email":"shachar.snapiri@toganetworks.com","username":"snapiri"},"change_message_id":"53aab637c33a4ab8f4b5047d75d94296e72eb85a","unresolved":false,"context_lines":[{"line_number":125,"context_line":"There are several options as to how to align the migration with the Neutron"},{"line_number":126,"context_line":"database."},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"Option 1: Two migration scripts"},{"line_number":129,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"This option proposes that in addition to Dragonflow\u0027s migration scripts, we"}],"source_content_type":"text/x-rst","patch_set":17,"id":"9f91af0f_551ada6e","line":128,"range":{"start_line":128,"start_character":0,"end_line":128,"end_character":31},"in_reply_to":"9f91af0f_fdf19a6c","updated":"2018-01-08 11:32:57.000000000","message":"+1","commit_id":"0e633b423868a5cab6d5ac6615fc1c5f10967234"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"a99d6750f8753bd3bb42da3d2c72dda9d215a0c0","unresolved":false,"context_lines":[{"line_number":142,"context_line":"    3. Restart Dragonflow controllers and Neutron servers."},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"The order of 2.1. and 2.2. can be changed, since while everything is shut down"},{"line_number":145,"context_line":"it shuold not make a difference."},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"Pros:"},{"line_number":148,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"9f91af0f_441c7cc0","line":145,"range":{"start_line":145,"start_character":3,"end_line":145,"end_character":9},"updated":"2018-01-07 10:48:02.000000000","message":"should","commit_id":"0e633b423868a5cab6d5ac6615fc1c5f10967234"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"6c2643ae78f792eda25bdc71e2297af3287a8308","unresolved":false,"context_lines":[{"line_number":18,"context_line":"Unless otherwise specified, none of the items below exist prior to this"},{"line_number":19,"context_line":"feature."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"This blueprint describe how to implement upgrades in Dragonflow, including:"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"* Database migration, i.e. how to modify the database and upgrade the schema in"},{"line_number":24,"context_line":"  a way that facilitates the above."}],"source_content_type":"text/x-rst","patch_set":18,"id":"7f96bb07_19b85174","line":21,"range":{"start_line":21,"start_character":15,"end_line":21,"end_character":23},"updated":"2018-01-14 13:30:55.000000000","message":"describes","commit_id":"e009a3b9fdaa0c77f69cd7772893e8858793ced7"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"c6a5d6631d9de18a519d7203984dc88c10a9eeb4","unresolved":false,"context_lines":[{"line_number":18,"context_line":"Unless otherwise specified, none of the items below exist prior to this"},{"line_number":19,"context_line":"feature."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"This blueprint describe how to implement upgrades in Dragonflow, including:"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"* Database migration, i.e. how to modify the database and upgrade the schema in"},{"line_number":24,"context_line":"  a way that facilitates the above."}],"source_content_type":"text/x-rst","patch_set":18,"id":"7f96bb07_02865cdc","line":21,"range":{"start_line":21,"start_character":15,"end_line":21,"end_character":23},"in_reply_to":"7f96bb07_19b85174","updated":"2018-01-16 13:07:20.000000000","message":"Done","commit_id":"e009a3b9fdaa0c77f69cd7772893e8858793ced7"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"6c2643ae78f792eda25bdc71e2297af3287a8308","unresolved":false,"context_lines":[{"line_number":28,"context_line":"The following is out of scope, and will be solved under a different feature:"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"* Rolling upgrades, i.e. continuously upgrading the cloud host by host, without"},{"line_number":31,"context_line":"  the need to reinstall"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"Problem Description"}],"source_content_type":"text/x-rst","patch_set":18,"id":"7f96bb07_abec6029","line":31,"range":{"start_line":31,"start_character":6,"end_line":31,"end_character":23},"updated":"2018-01-14 13:30:55.000000000","message":"need to reinstall what? I think the main idea of the rolling upgrade is the ability to perform update without any downtime","commit_id":"e009a3b9fdaa0c77f69cd7772893e8858793ced7"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"c6a5d6631d9de18a519d7203984dc88c10a9eeb4","unresolved":false,"context_lines":[{"line_number":28,"context_line":"The following is out of scope, and will be solved under a different feature:"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"* Rolling upgrades, i.e. continuously upgrading the cloud host by host, without"},{"line_number":31,"context_line":"  the need to reinstall"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"Problem Description"}],"source_content_type":"text/x-rst","patch_set":18,"id":"7f96bb07_624de0c2","line":31,"range":{"start_line":31,"start_character":6,"end_line":31,"end_character":23},"in_reply_to":"7f96bb07_abec6029","updated":"2018-01-16 13:07:20.000000000","message":"Changed.","commit_id":"e009a3b9fdaa0c77f69cd7772893e8858793ced7"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"6c2643ae78f792eda25bdc71e2297af3287a8308","unresolved":false,"context_lines":[{"line_number":35,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"Suppose you have a cloud already deployed. You have several controller nodes,"},{"line_number":38,"context_line":"and some compute nodes. You want to upgrade the cloud to latest and greatest"},{"line_number":39,"context_line":"without losing all the deployed and provisioned resources."},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"The most difficult part of an upgrade is API and database changes. In"}],"source_content_type":"text/x-rst","patch_set":18,"id":"7f96bb07_cbe68c45","line":38,"range":{"start_line":38,"start_character":57,"end_line":38,"end_character":76},"updated":"2018-01-14 13:30:55.000000000","message":"Any limitation to be only latest and greatest?","commit_id":"e009a3b9fdaa0c77f69cd7772893e8858793ced7"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"c6a5d6631d9de18a519d7203984dc88c10a9eeb4","unresolved":false,"context_lines":[{"line_number":35,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"Suppose you have a cloud already deployed. You have several controller nodes,"},{"line_number":38,"context_line":"and some compute nodes. You want to upgrade the cloud to latest and greatest"},{"line_number":39,"context_line":"without losing all the deployed and provisioned resources."},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"The most difficult part of an upgrade is API and database changes. In"}],"source_content_type":"text/x-rst","patch_set":18,"id":"7f96bb07_02d41cbc","line":38,"range":{"start_line":38,"start_character":57,"end_line":38,"end_character":76},"in_reply_to":"7f96bb07_cbe68c45","updated":"2018-01-16 13:07:20.000000000","message":"Changed","commit_id":"e009a3b9fdaa0c77f69cd7772893e8858793ced7"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"6c2643ae78f792eda25bdc71e2297af3287a8308","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"Suppose you have a cloud already deployed. You have several controller nodes,"},{"line_number":38,"context_line":"and some compute nodes. You want to upgrade the cloud to latest and greatest"},{"line_number":39,"context_line":"without losing all the deployed and provisioned resources."},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"The most difficult part of an upgrade is API and database changes. In"},{"line_number":42,"context_line":"Dragonflow, the API is inferred from the database. Therefore, database"}],"source_content_type":"text/x-rst","patch_set":18,"id":"7f96bb07_ebe1082c","line":39,"range":{"start_line":39,"start_character":15,"end_line":39,"end_character":18},"updated":"2018-01-14 13:30:55.000000000","message":"any","commit_id":"e009a3b9fdaa0c77f69cd7772893e8858793ced7"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"c6a5d6631d9de18a519d7203984dc88c10a9eeb4","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"Suppose you have a cloud already deployed. You have several controller nodes,"},{"line_number":38,"context_line":"and some compute nodes. You want to upgrade the cloud to latest and greatest"},{"line_number":39,"context_line":"without losing all the deployed and provisioned resources."},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"The most difficult part of an upgrade is API and database changes. In"},{"line_number":42,"context_line":"Dragonflow, the API is inferred from the database. Therefore, database"}],"source_content_type":"text/x-rst","patch_set":18,"id":"7f96bb07_c2d954f3","line":39,"range":{"start_line":39,"start_character":15,"end_line":39,"end_character":18},"in_reply_to":"7f96bb07_ebe1082c","updated":"2018-01-16 13:07:20.000000000","message":"Done","commit_id":"e009a3b9fdaa0c77f69cd7772893e8858793ced7"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"6c2643ae78f792eda25bdc71e2297af3287a8308","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":"Assumptions during upgrade phase (the duration of upgrade procedure):"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"* DHCP, metadata service, or anything requiring the controller is allowed to"},{"line_number":51,"context_line":"  stop working"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"* Network modification allowed to fail"}],"source_content_type":"text/x-rst","patch_set":18,"id":"7f96bb07_4bccbcbb","line":50,"range":{"start_line":50,"start_character":63,"end_line":50,"end_character":65},"updated":"2018-01-14 13:30:55.000000000","message":"are","commit_id":"e009a3b9fdaa0c77f69cd7772893e8858793ced7"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"c6a5d6631d9de18a519d7203984dc88c10a9eeb4","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":"Assumptions during upgrade phase (the duration of upgrade procedure):"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"* DHCP, metadata service, or anything requiring the controller is allowed to"},{"line_number":51,"context_line":"  stop working"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"* Network modification allowed to fail"}],"source_content_type":"text/x-rst","patch_set":18,"id":"7f96bb07_e2e7b0ab","line":50,"range":{"start_line":50,"start_character":63,"end_line":50,"end_character":65},"in_reply_to":"7f96bb07_4bccbcbb","updated":"2018-01-16 13:07:20.000000000","message":"Done.","commit_id":"e009a3b9fdaa0c77f69cd7772893e8858793ced7"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"6c2643ae78f792eda25bdc71e2297af3287a8308","unresolved":false,"context_lines":[{"line_number":50,"context_line":"* DHCP, metadata service, or anything requiring the controller is allowed to"},{"line_number":51,"context_line":"  stop working"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"* Network modification allowed to fail"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"* Networking between ports should continue to work normally. Especially l2, l3,"},{"line_number":56,"context_line":"  and security groups."}],"source_content_type":"text/x-rst","patch_set":18,"id":"7f96bb07_6bcf38b0","line":53,"range":{"start_line":53,"start_character":2,"end_line":53,"end_character":22},"updated":"2018-01-14 13:30:55.000000000","message":"Do you mean Network virtual topology?","commit_id":"e009a3b9fdaa0c77f69cd7772893e8858793ced7"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"c6a5d6631d9de18a519d7203984dc88c10a9eeb4","unresolved":false,"context_lines":[{"line_number":50,"context_line":"* DHCP, metadata service, or anything requiring the controller is allowed to"},{"line_number":51,"context_line":"  stop working"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"* Network modification allowed to fail"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"* Networking between ports should continue to work normally. Especially l2, l3,"},{"line_number":56,"context_line":"  and security groups."}],"source_content_type":"text/x-rst","patch_set":18,"id":"7f96bb07_a278c8c3","line":53,"range":{"start_line":53,"start_character":2,"end_line":53,"end_character":22},"in_reply_to":"7f96bb07_6bcf38b0","updated":"2018-01-16 13:07:20.000000000","message":"Yes.","commit_id":"e009a3b9fdaa0c77f69cd7772893e8858793ced7"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"6c2643ae78f792eda25bdc71e2297af3287a8308","unresolved":false,"context_lines":[{"line_number":68,"context_line":"#. Neutron and Dragonflow services are stopped on all cloud nodes."},{"line_number":69,"context_line":"#. Neutron and Dragonflow code is updated on all nodes."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"  #. If new configuration is required, it is performed at this stage."},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"#. On a single host, the operator executes the upgrade utilities (first Neutron"},{"line_number":74,"context_line":"   and then Dragonflow)."}],"source_content_type":"text/x-rst","patch_set":18,"id":"7f96bb07_ab3a2095","line":71,"range":{"start_line":71,"start_character":8,"end_line":71,"end_character":68},"updated":"2018-01-14 13:30:55.000000000","message":"Can you please provide some example?","commit_id":"e009a3b9fdaa0c77f69cd7772893e8858793ced7"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"c6a5d6631d9de18a519d7203984dc88c10a9eeb4","unresolved":false,"context_lines":[{"line_number":68,"context_line":"#. Neutron and Dragonflow services are stopped on all cloud nodes."},{"line_number":69,"context_line":"#. Neutron and Dragonflow code is updated on all nodes."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"  #. If new configuration is required, it is performed at this stage."},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"#. On a single host, the operator executes the upgrade utilities (first Neutron"},{"line_number":74,"context_line":"   and then Dragonflow)."}],"source_content_type":"text/x-rst","patch_set":18,"id":"7f96bb07_a22688cd","line":71,"range":{"start_line":71,"start_character":8,"end_line":71,"end_character":68},"in_reply_to":"7f96bb07_ab3a2095","updated":"2018-01-16 13:07:20.000000000","message":"Added an explanation","commit_id":"e009a3b9fdaa0c77f69cd7772893e8858793ced7"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"6c2643ae78f792eda25bdc71e2297af3287a8308","unresolved":false,"context_lines":[{"line_number":70,"context_line":""},{"line_number":71,"context_line":"  #. If new configuration is required, it is performed at this stage."},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"#. On a single host, the operator executes the upgrade utilities (first Neutron"},{"line_number":74,"context_line":"   and then Dragonflow)."},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"   #. If any of the upgrades fail, operator reverts package and configuration"}],"source_content_type":"text/x-rst","patch_set":18,"id":"7f96bb07_6b44181c","line":73,"range":{"start_line":73,"start_character":5,"end_line":73,"end_character":18},"updated":"2018-01-14 13:30:55.000000000","message":"Do you mean controller node?\nWorth to distinguish between tasks on Neutron Controller and Local Controller nodes","commit_id":"e009a3b9fdaa0c77f69cd7772893e8858793ced7"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"c6a5d6631d9de18a519d7203984dc88c10a9eeb4","unresolved":false,"context_lines":[{"line_number":70,"context_line":""},{"line_number":71,"context_line":"  #. If new configuration is required, it is performed at this stage."},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"#. On a single host, the operator executes the upgrade utilities (first Neutron"},{"line_number":74,"context_line":"   and then Dragonflow)."},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"   #. If any of the upgrades fail, operator reverts package and configuration"}],"source_content_type":"text/x-rst","patch_set":18,"id":"7f96bb07_221cb876","line":73,"range":{"start_line":73,"start_character":5,"end_line":73,"end_character":18},"in_reply_to":"7f96bb07_6b44181c","updated":"2018-01-16 13:07:20.000000000","message":"Done","commit_id":"e009a3b9fdaa0c77f69cd7772893e8858793ced7"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"6c2643ae78f792eda25bdc71e2297af3287a8308","unresolved":false,"context_lines":[{"line_number":83,"context_line":""},{"line_number":84,"context_line":"Database migration process will perform the following:"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"* Locate all avaliable migrations in the stevedore managed paths"},{"line_number":87,"context_line":"* Locate all applied migrations from the north-bound database"},{"line_number":88,"context_line":"* Decide whether any migrations should be applied"},{"line_number":89,"context_line":""}],"source_content_type":"text/x-rst","patch_set":18,"id":"7f96bb07_2b461023","line":86,"range":{"start_line":86,"start_character":13,"end_line":86,"end_character":22},"updated":"2018-01-14 13:30:55.000000000","message":"typo","commit_id":"e009a3b9fdaa0c77f69cd7772893e8858793ced7"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"6c2643ae78f792eda25bdc71e2297af3287a8308","unresolved":false,"context_lines":[{"line_number":84,"context_line":"Database migration process will perform the following:"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"* Locate all avaliable migrations in the stevedore managed paths"},{"line_number":87,"context_line":"* Locate all applied migrations from the north-bound database"},{"line_number":88,"context_line":"* Decide whether any migrations should be applied"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"  * If no migrations to apply, terminate."}],"source_content_type":"text/x-rst","patch_set":18,"id":"7f96bb07_eb4fc831","line":87,"range":{"start_line":87,"start_character":13,"end_line":87,"end_character":20},"updated":"2018-01-14 13:30:55.000000000","message":"to be applied?","commit_id":"e009a3b9fdaa0c77f69cd7772893e8858793ced7"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"c6a5d6631d9de18a519d7203984dc88c10a9eeb4","unresolved":false,"context_lines":[{"line_number":84,"context_line":"Database migration process will perform the following:"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"* Locate all avaliable migrations in the stevedore managed paths"},{"line_number":87,"context_line":"* Locate all applied migrations from the north-bound database"},{"line_number":88,"context_line":"* Decide whether any migrations should be applied"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"  * If no migrations to apply, terminate."}],"source_content_type":"text/x-rst","patch_set":18,"id":"7f96bb07_6533aaf7","line":87,"range":{"start_line":87,"start_character":13,"end_line":87,"end_character":20},"in_reply_to":"7f96bb07_eb4fc831","updated":"2018-01-16 13:07:20.000000000","message":"Here the meaning is migrations that were already applied, and are registered in SchemaMigration.","commit_id":"e009a3b9fdaa0c77f69cd7772893e8858793ced7"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"6c2643ae78f792eda25bdc71e2297af3287a8308","unresolved":false,"context_lines":[{"line_number":93,"context_line":"* Iterate migrations ordered by their proposed date, and apply each one on the"},{"line_number":94,"context_line":"  in-memory copy of the database."},{"line_number":95,"context_line":""},{"line_number":96,"context_line":" * If an error occured, report and stop (nothing was written to the database)."},{"line_number":97,"context_line":" * If no errors occur, an entry is added to the migration table, specifying the"},{"line_number":98,"context_line":"   migration performed and the current date \u0026 time."},{"line_number":99,"context_line":"* Once all migrations completed, copy in-memory database over actual database."}],"source_content_type":"text/x-rst","patch_set":18,"id":"7f96bb07_2b6ff092","line":96,"range":{"start_line":96,"start_character":15,"end_line":96,"end_character":22},"updated":"2018-01-14 13:30:55.000000000","message":"occurs","commit_id":"e009a3b9fdaa0c77f69cd7772893e8858793ced7"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"c6a5d6631d9de18a519d7203984dc88c10a9eeb4","unresolved":false,"context_lines":[{"line_number":93,"context_line":"* Iterate migrations ordered by their proposed date, and apply each one on the"},{"line_number":94,"context_line":"  in-memory copy of the database."},{"line_number":95,"context_line":""},{"line_number":96,"context_line":" * If an error occured, report and stop (nothing was written to the database)."},{"line_number":97,"context_line":" * If no errors occur, an entry is added to the migration table, specifying the"},{"line_number":98,"context_line":"   migration performed and the current date \u0026 time."},{"line_number":99,"context_line":"* Once all migrations completed, copy in-memory database over actual database."}],"source_content_type":"text/x-rst","patch_set":18,"id":"7f96bb07_0544261a","line":96,"range":{"start_line":96,"start_character":15,"end_line":96,"end_character":22},"in_reply_to":"7f96bb07_2b6ff092","updated":"2018-01-16 13:07:20.000000000","message":"Sure.","commit_id":"e009a3b9fdaa0c77f69cd7772893e8858793ced7"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"6c2643ae78f792eda25bdc71e2297af3287a8308","unresolved":false,"context_lines":[{"line_number":96,"context_line":" * If an error occured, report and stop (nothing was written to the database)."},{"line_number":97,"context_line":" * If no errors occur, an entry is added to the migration table, specifying the"},{"line_number":98,"context_line":"   migration performed and the current date \u0026 time."},{"line_number":99,"context_line":"* Once all migrations completed, copy in-memory database over actual database."},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"Each migration will be in a form of a function that acts on the NB API object:"},{"line_number":102,"context_line":""}],"source_content_type":"text/x-rst","patch_set":18,"id":"7f96bb07_eb682888","line":99,"range":{"start_line":99,"start_character":21,"end_line":99,"end_character":30},"updated":"2018-01-14 13:30:55.000000000","message":"are completed","commit_id":"e009a3b9fdaa0c77f69cd7772893e8858793ced7"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"c6a5d6631d9de18a519d7203984dc88c10a9eeb4","unresolved":false,"context_lines":[{"line_number":96,"context_line":" * If an error occured, report and stop (nothing was written to the database)."},{"line_number":97,"context_line":" * If no errors occur, an entry is added to the migration table, specifying the"},{"line_number":98,"context_line":"   migration performed and the current date \u0026 time."},{"line_number":99,"context_line":"* Once all migrations completed, copy in-memory database over actual database."},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"Each migration will be in a form of a function that acts on the NB API object:"},{"line_number":102,"context_line":""}],"source_content_type":"text/x-rst","patch_set":18,"id":"7f96bb07_e50c9aed","line":99,"range":{"start_line":99,"start_character":21,"end_line":99,"end_character":30},"in_reply_to":"7f96bb07_eb682888","updated":"2018-01-16 13:07:20.000000000","message":"Done","commit_id":"e009a3b9fdaa0c77f69cd7772893e8858793ced7"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"6c2643ae78f792eda25bdc71e2297af3287a8308","unresolved":false,"context_lines":[{"line_number":129,"context_line":"offline. i.e. Neutron will not accept API requests, and the DF controllers"},{"line_number":130,"context_line":"will be down."},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"The process will be as follows:"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"::"},{"line_number":135,"context_line":""}],"source_content_type":"text/x-rst","patch_set":18,"id":"7f96bb07_cb1bec18","line":132,"range":{"start_line":132,"start_character":23,"end_line":132,"end_character":30},"updated":"2018-01-14 13:30:55.000000000","message":"following","commit_id":"e009a3b9fdaa0c77f69cd7772893e8858793ced7"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"c6a5d6631d9de18a519d7203984dc88c10a9eeb4","unresolved":false,"context_lines":[{"line_number":129,"context_line":"offline. i.e. Neutron will not accept API requests, and the DF controllers"},{"line_number":130,"context_line":"will be down."},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"The process will be as follows:"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"::"},{"line_number":135,"context_line":""}],"source_content_type":"text/x-rst","patch_set":18,"id":"7f96bb07_85fd96b2","line":132,"range":{"start_line":132,"start_character":23,"end_line":132,"end_character":30},"in_reply_to":"7f96bb07_cb1bec18","updated":"2018-01-16 13:07:20.000000000","message":"I think this is good as is.","commit_id":"e009a3b9fdaa0c77f69cd7772893e8858793ced7"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"6c2643ae78f792eda25bdc71e2297af3287a8308","unresolved":false,"context_lines":[{"line_number":163,"context_line":"    +------------------------+---------------------------------------------+"},{"line_number":164,"context_line":"    |    Attribute Name      |               Description                   |"},{"line_number":165,"context_line":"    +\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+"},{"line_number":166,"context_line":"    | id                     | Unique identity of the script               |"},{"line_number":167,"context_line":"    +------------------------+---------------------------------------------+"},{"line_number":168,"context_line":"    | release                | Release the upgrade belongs to              |"},{"line_number":169,"context_line":"    +------------------------+---------------------------------------------+"}],"source_content_type":"text/x-rst","patch_set":18,"id":"7f96bb07_8bbc04dd","line":166,"range":{"start_line":166,"start_character":5,"end_line":166,"end_character":9},"updated":"2018-01-14 13:30:55.000000000","message":"better be something like script_id, since id is usually used to have unique entries in the current table","commit_id":"e009a3b9fdaa0c77f69cd7772893e8858793ced7"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"c6a5d6631d9de18a519d7203984dc88c10a9eeb4","unresolved":false,"context_lines":[{"line_number":163,"context_line":"    +------------------------+---------------------------------------------+"},{"line_number":164,"context_line":"    |    Attribute Name      |               Description                   |"},{"line_number":165,"context_line":"    +\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+"},{"line_number":166,"context_line":"    | id                     | Unique identity of the script               |"},{"line_number":167,"context_line":"    +------------------------+---------------------------------------------+"},{"line_number":168,"context_line":"    | release                | Release the upgrade belongs to              |"},{"line_number":169,"context_line":"    +------------------------+---------------------------------------------+"}],"source_content_type":"text/x-rst","patch_set":18,"id":"7f96bb07_8599167a","line":166,"range":{"start_line":166,"start_character":5,"end_line":166,"end_character":9},"in_reply_to":"7f96bb07_8bbc04dd","updated":"2018-01-16 13:07:20.000000000","message":"Yes. The description says this identifier is unique. Additionally, we have to have an \u0027id\u0027 field (with that name) anyway due to our framework, so might as well have the same field.\n\nI could add a property called \u0027script_id\u0027 aliasing ID, but I think that\u0027s an overkill.","commit_id":"e009a3b9fdaa0c77f69cd7772893e8858793ced7"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"6c2643ae78f792eda25bdc71e2297af3287a8308","unresolved":false,"context_lines":[{"line_number":176,"context_line":"    +------------------------+---------------------------------------------+"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"This model will keep a record of the \u0027migrations\u0027 (or upgrades) that were"},{"line_number":179,"context_line":"already applied. The migration mechanism will use this table to see if a"},{"line_number":180,"context_line":"migration script needs to be executed. It can also be used for troubleshooting"},{"line_number":181,"context_line":"to see if the correct (or expected) migrations were applied."},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"References"}],"source_content_type":"text/x-rst","patch_set":18,"id":"7f96bb07_6bb978e7","line":180,"range":{"start_line":179,"start_character":17,"end_line":180,"end_character":37},"updated":"2018-01-14 13:30:55.000000000","message":"Not sure I understand how this will be performed?","commit_id":"e009a3b9fdaa0c77f69cd7772893e8858793ced7"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"c6a5d6631d9de18a519d7203984dc88c10a9eeb4","unresolved":false,"context_lines":[{"line_number":176,"context_line":"    +------------------------+---------------------------------------------+"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"This model will keep a record of the \u0027migrations\u0027 (or upgrades) that were"},{"line_number":179,"context_line":"already applied. The migration mechanism will use this table to see if a"},{"line_number":180,"context_line":"migration script needs to be executed. It can also be used for troubleshooting"},{"line_number":181,"context_line":"to see if the correct (or expected) migrations were applied."},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"References"}],"source_content_type":"text/x-rst","patch_set":18,"id":"7f96bb07_25912248","line":180,"range":{"start_line":179,"start_character":17,"end_line":180,"end_character":37},"in_reply_to":"7f96bb07_6bb978e7","updated":"2018-01-16 13:07:20.000000000","message":"This is covered in the algorithm above.","commit_id":"e009a3b9fdaa0c77f69cd7772893e8858793ced7"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"6c2643ae78f792eda25bdc71e2297af3287a8308","unresolved":false,"context_lines":[{"line_number":181,"context_line":"to see if the correct (or expected) migrations were applied."},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"References"},{"line_number":184,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":18,"id":"7f96bb07_4bab5c88","line":184,"updated":"2018-01-14 13:30:55.000000000","message":"Either remove or put N/A. But maybe worth to reference neutron DB migration documentation","commit_id":"e009a3b9fdaa0c77f69cd7772893e8858793ced7"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"8b9b87bbe44e3cfd3fd7dc042cdebe038b83ae0e","unresolved":false,"context_lines":[{"line_number":171,"context_line":"+------------------------+---------------------------------------------+"},{"line_number":172,"context_line":"|    Attribute Name      |               Description                   |"},{"line_number":173,"context_line":"+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+"},{"line_number":174,"context_line":"| id                     | Unique identity of the script               |"},{"line_number":175,"context_line":"+------------------------+---------------------------------------------+"},{"line_number":176,"context_line":"| release                | Release the upgrade belongs to              |"},{"line_number":177,"context_line":"+------------------------+---------------------------------------------+"}],"source_content_type":"text/x-rst","patch_set":19,"id":"7f96bb07_7ec2425b","line":174,"range":{"start_line":174,"start_character":2,"end_line":174,"end_character":59},"updated":"2018-01-17 06:52:00.000000000","message":"I think its better for the compatibility with the rest of the tables to keep id as an identity of the current row and not to have it serve other purpose. I suggest to have additional field, something like script_id.","commit_id":"a29518c87bc35fd98a1c5b1c867fa141c22e6ea5"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"efb654f51c0314c8f0959cb93bf0634bf67f6529","unresolved":false,"context_lines":[{"line_number":171,"context_line":"+------------------------+---------------------------------------------+"},{"line_number":172,"context_line":"|    Attribute Name      |               Description                   |"},{"line_number":173,"context_line":"+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+"},{"line_number":174,"context_line":"| id                     | Unique identity of the script               |"},{"line_number":175,"context_line":"+------------------------+---------------------------------------------+"},{"line_number":176,"context_line":"| release                | Release the upgrade belongs to              |"},{"line_number":177,"context_line":"+------------------------+---------------------------------------------+"}],"source_content_type":"text/x-rst","patch_set":19,"id":"7f96bb07_851ad214","line":174,"range":{"start_line":174,"start_character":2,"end_line":174,"end_character":59},"in_reply_to":"7f96bb07_3f3671b6","updated":"2018-01-22 13:07:59.000000000","message":"I think script_id improves clarity, but not critical.\nLooking more closely, probably the name of the Table should be something like ShemaMigrationLog","commit_id":"a29518c87bc35fd98a1c5b1c867fa141c22e6ea5"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"acf9b1f7d6d8293f136ff263f8c24f1abdd3f618","unresolved":false,"context_lines":[{"line_number":171,"context_line":"+------------------------+---------------------------------------------+"},{"line_number":172,"context_line":"|    Attribute Name      |               Description                   |"},{"line_number":173,"context_line":"+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+"},{"line_number":174,"context_line":"| id                     | Unique identity of the script               |"},{"line_number":175,"context_line":"+------------------------+---------------------------------------------+"},{"line_number":176,"context_line":"| release                | Release the upgrade belongs to              |"},{"line_number":177,"context_line":"+------------------------+---------------------------------------------+"}],"source_content_type":"text/x-rst","patch_set":19,"id":"7f96bb07_3f3671b6","line":174,"range":{"start_line":174,"start_character":2,"end_line":174,"end_character":59},"in_reply_to":"7f96bb07_760986db","updated":"2018-01-22 11:37:38.000000000","message":"If id will be fixed, then it will have the same value as script_id (we\u0027ll just take it of the migration script). If id is auto-generated, it will be generated of the script_id (e.g. uuid.uuid5(MIGRATION_NAMESPACE, script_id)).\n\nI don\u0027t see any added value to the script_id field. Therefore, I vote to keep the structure as is.","commit_id":"a29518c87bc35fd98a1c5b1c867fa141c22e6ea5"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"4fa8033368db38146a3aa7c306235ff3a1bb99dc","unresolved":false,"context_lines":[{"line_number":171,"context_line":"+------------------------+---------------------------------------------+"},{"line_number":172,"context_line":"|    Attribute Name      |               Description                   |"},{"line_number":173,"context_line":"+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+"},{"line_number":174,"context_line":"| id                     | Unique identity of the script               |"},{"line_number":175,"context_line":"+------------------------+---------------------------------------------+"},{"line_number":176,"context_line":"| release                | Release the upgrade belongs to              |"},{"line_number":177,"context_line":"+------------------------+---------------------------------------------+"}],"source_content_type":"text/x-rst","patch_set":19,"id":"7f96bb07_d0266217","line":174,"range":{"start_line":174,"start_character":2,"end_line":174,"end_character":59},"in_reply_to":"7f96bb07_7ec2425b","updated":"2018-01-22 08:54:52.000000000","message":"Will script_id will have the same value as id?","commit_id":"a29518c87bc35fd98a1c5b1c867fa141c22e6ea5"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"c5660e17e79e44209c5f31893829512aae006867","unresolved":false,"context_lines":[{"line_number":171,"context_line":"+------------------------+---------------------------------------------+"},{"line_number":172,"context_line":"|    Attribute Name      |               Description                   |"},{"line_number":173,"context_line":"+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+"},{"line_number":174,"context_line":"| id                     | Unique identity of the script               |"},{"line_number":175,"context_line":"+------------------------+---------------------------------------------+"},{"line_number":176,"context_line":"| release                | Release the upgrade belongs to              |"},{"line_number":177,"context_line":"+------------------------+---------------------------------------------+"}],"source_content_type":"text/x-rst","patch_set":19,"id":"7f96bb07_0d74a898","line":174,"range":{"start_line":174,"start_character":2,"end_line":174,"end_character":59},"in_reply_to":"7f96bb07_851ad214","updated":"2018-01-22 14:38:01.000000000","message":"+1 for SchemaMigrationLog.\nAs for the id field, I think it will be understood  enough combining with the table\u0027s name.","commit_id":"a29518c87bc35fd98a1c5b1c867fa141c22e6ea5"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"8cbb8d776d703996f5f0dcfe21cf4974747623bc","unresolved":false,"context_lines":[{"line_number":171,"context_line":"+------------------------+---------------------------------------------+"},{"line_number":172,"context_line":"|    Attribute Name      |               Description                   |"},{"line_number":173,"context_line":"+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+"},{"line_number":174,"context_line":"| id                     | Unique identity of the script               |"},{"line_number":175,"context_line":"+------------------------+---------------------------------------------+"},{"line_number":176,"context_line":"| release                | Release the upgrade belongs to              |"},{"line_number":177,"context_line":"+------------------------+---------------------------------------------+"}],"source_content_type":"text/x-rst","patch_set":19,"id":"7f96bb07_760986db","line":174,"range":{"start_line":174,"start_character":2,"end_line":174,"end_character":59},"in_reply_to":"7f96bb07_d0266217","updated":"2018-01-22 09:50:21.000000000","message":"No, id should be either fixed like with chassis table or keep the auto-generated id as with neutron derived tables","commit_id":"a29518c87bc35fd98a1c5b1c867fa141c22e6ea5"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"efb654f51c0314c8f0959cb93bf0634bf67f6529","unresolved":false,"context_lines":[{"line_number":173,"context_line":"+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+"},{"line_number":174,"context_line":"| id                     | Unique identity of the script               |"},{"line_number":175,"context_line":"+------------------------+---------------------------------------------+"},{"line_number":176,"context_line":"| release                | Release the upgrade belongs to              |"},{"line_number":177,"context_line":"+------------------------+---------------------------------------------+"},{"line_number":178,"context_line":"| description            | Short descrption of the upgrade             |"},{"line_number":179,"context_line":"+------------------------+---------------------------------------------+"}],"source_content_type":"text/x-rst","patch_set":19,"id":"7f96bb07_25e17eff","line":176,"range":{"start_line":176,"start_character":46,"end_line":176,"end_character":47},"updated":"2018-01-22 13:07:59.000000000","message":"script","commit_id":"a29518c87bc35fd98a1c5b1c867fa141c22e6ea5"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"efb654f51c0314c8f0959cb93bf0634bf67f6529","unresolved":false,"context_lines":[{"line_number":175,"context_line":"+------------------------+---------------------------------------------+"},{"line_number":176,"context_line":"| release                | Release the upgrade belongs to              |"},{"line_number":177,"context_line":"+------------------------+---------------------------------------------+"},{"line_number":178,"context_line":"| description            | Short descrption of the upgrade             |"},{"line_number":179,"context_line":"+------------------------+---------------------------------------------+"},{"line_number":180,"context_line":"| proposed_at            | Time the migration script was implemented,  |"},{"line_number":181,"context_line":"|                        | used to create some ordering between scripts|"}],"source_content_type":"text/x-rst","patch_set":19,"id":"7f96bb07_85ef32e8","line":178,"range":{"start_line":178,"start_character":58,"end_line":178,"end_character":71},"updated":"2018-01-22 13:07:59.000000000","message":"script","commit_id":"a29518c87bc35fd98a1c5b1c867fa141c22e6ea5"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"efb654f51c0314c8f0959cb93bf0634bf67f6529","unresolved":false,"context_lines":[{"line_number":175,"context_line":"+------------------------+---------------------------------------------+"},{"line_number":176,"context_line":"| release                | Release the upgrade belongs to              |"},{"line_number":177,"context_line":"+------------------------+---------------------------------------------+"},{"line_number":178,"context_line":"| description            | Short descrption of the upgrade             |"},{"line_number":179,"context_line":"+------------------------+---------------------------------------------+"},{"line_number":180,"context_line":"| proposed_at            | Time the migration script was implemented,  |"},{"line_number":181,"context_line":"|                        | used to create some ordering between scripts|"}],"source_content_type":"text/x-rst","patch_set":19,"id":"7f96bb07_c5e53a0c","line":178,"range":{"start_line":178,"start_character":33,"end_line":178,"end_character":43},"updated":"2018-01-22 13:07:59.000000000","message":"typo","commit_id":"a29518c87bc35fd98a1c5b1c867fa141c22e6ea5"}]}
