)]}'
{"doc/source/devref/rolling.upgrades.rst":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"b6c6270ad4beaf3ac9aaef2477f0d202d1e51747","unresolved":false,"context_lines":[{"line_number":69,"context_line":"In general incompatible database schema migrations can be tracked to ALTER and"},{"line_number":70,"context_line":"DROP SQL commands instruction issued either against a column or table. This is"},{"line_number":71,"context_line":"why a unit test that blocks such migrations was introduced. We should keep our"},{"line_number":72,"context_line":"DB modifications additive (reasonable exceptions from this rule are possible)."},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"To actually perform subtractive DB migration we need to make more complicated"},{"line_number":75,"context_line":"steps streching through 3 releases - always keeping the backwards"}],"source_content_type":"text/x-rst","patch_set":4,"id":"bae84128_9d68c6f6","line":72,"range":{"start_line":72,"start_character":27,"end_line":72,"end_character":76},"updated":"2016-02-24 16:01:46.000000000","message":"I need to explain more how to judged if exception is reasonable.","commit_id":"e628ae21236751e259ef8a9cb96c506380e49a2b"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"605b0e044c004a5dd63cdf4ee1d7930de84e9b19","unresolved":false,"context_lines":[{"line_number":43,"context_line":"  \u003chttps://specs.openstack.org/openstack/api-wg/guidelines/evaluating_api_changes.html\u003e`_"},{"line_number":44,"context_line":"  for reference."},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"* **Database schema migrations** - e.g. if N-1 was relying on some column in"},{"line_number":47,"context_line":"  the DB being present, N\u0027s migrations cannot remove it. N+1\u0027s however can"},{"line_number":48,"context_line":"  (assuming N has no notion of the column)."},{"line_number":49,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"9aed3d3a_1c7a1f88","line":46,"updated":"2016-03-01 08:56:55.000000000","message":"I noticed that we droped iscis_targets  in  mitaka: https://github.com/openstack/cinder/blob/master/cinder/db/sqlalchemy/migrate_repo/versions/063_drop_iscsi_targets_table.py\n\nAnd update the data type is changed in mitaka: \nhttps://github.com/openstack/cinder/blob/master/cinder/db/sqlalchemy/migrate_repo/versions/062_deleted_type_to_Integer.py\n\nDo such changes leads upgrade problems?","commit_id":"ec8b7d0c9cff0467e1c442abfeee05045a2d029b"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"3936193f77cfb79cfba19c6140137b95778dc8da","unresolved":false,"context_lines":[{"line_number":43,"context_line":"  \u003chttps://specs.openstack.org/openstack/api-wg/guidelines/evaluating_api_changes.html\u003e`_"},{"line_number":44,"context_line":"  for reference."},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"* **Database schema migrations** - e.g. if N-1 was relying on some column in"},{"line_number":47,"context_line":"  the DB being present, N\u0027s migrations cannot remove it. N+1\u0027s however can"},{"line_number":48,"context_line":"  (assuming N has no notion of the column)."},{"line_number":49,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"3afc51ec_2cfbdfc2","line":46,"in_reply_to":"7af24918_881a386d","updated":"2016-03-14 16:29:36.000000000","message":"BTW - removal of iscsi_targets turned out to be a problem, as it was joined in volume_destroy call. :(","commit_id":"ec8b7d0c9cff0467e1c442abfeee05045a2d029b"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5b0b253ddc02e142d0f5ff21d53c2cceefbf2f18","unresolved":false,"context_lines":[{"line_number":43,"context_line":"  \u003chttps://specs.openstack.org/openstack/api-wg/guidelines/evaluating_api_changes.html\u003e`_"},{"line_number":44,"context_line":"  for reference."},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"* **Database schema migrations** - e.g. if N-1 was relying on some column in"},{"line_number":47,"context_line":"  the DB being present, N\u0027s migrations cannot remove it. N+1\u0027s however can"},{"line_number":48,"context_line":"  (assuming N has no notion of the column)."},{"line_number":49,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"7af24918_881a386d","line":46,"in_reply_to":"9aed3d3a_1c7a1f88","updated":"2016-03-01 12:58:03.000000000","message":"iscsi_targets wasn\u0027t used anywhere in Liberty code, so this isn\u0027t a problem for us. SQLAlchemy would never try to access that table.\n\nThe second migration is more of a problem unfortunately and it even breaks rolling upgrade when someone uses PostgreSQL. I\u0027ve decided to allow it, because there weren\u0027t any reasonable alternatives that would fix this bug. :( Anyway it seems better to do it now when we call upgrades support \"tech-preview\".","commit_id":"ec8b7d0c9cff0467e1c442abfeee05045a2d029b"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"66157cc5cc5963ca52a6103c61e022c02d07f17d","unresolved":false,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":"* **Database data migrations** - if a migration requires big amount of data to"},{"line_number":51,"context_line":"  be transfered between columns or tables or converted, it will most likely"},{"line_number":52,"context_line":"  lock the tables. This may cause services to be unresponsible, causing the"},{"line_number":53,"context_line":"  downtime."},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"* **RPC API changes** - adding or removing RPC method parameter, or the method"}],"source_content_type":"text/x-rst","patch_set":5,"id":"3afc51ec_1b6f3b2c","line":52,"range":{"start_line":52,"start_character":49,"end_line":52,"end_character":62},"updated":"2016-03-14 15:35:04.000000000","message":"/unresponsible/unresponsive/","commit_id":"ec8b7d0c9cff0467e1c442abfeee05045a2d029b"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"4a6fb3fb2a8194c7ae8a3257a5d603e245f242a7","unresolved":false,"context_lines":[{"line_number":105,"context_line":"* Remove old place from SQLAlchemy."},{"line_number":106,"context_line":"* Read and write only to the new place."},{"line_number":107,"context_line":"* Remove the column as the post-upgrade migration (or as first migration in"},{"line_number":108,"context_line":"  N+3)."},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"Please note that this is the most complicated case. When we just want to remove"},{"line_number":111,"context_line":"a column or table without moving the data around - we just need to remove it"}],"source_content_type":"text/x-rst","patch_set":5,"id":"7af24918_9a4a5082","line":108,"updated":"2016-03-02 02:40:46.000000000","message":"Michal, I think you can\u0027t remove old place in N+2. As it writes data to both places in N+1. In a N+1 and N+2 mixed environment, if removing old place write operations in N+1 will fail. Unless you can do some exception handles. Like ignore the error in N+1 and N+2 environments.\n\nSeems it is safe to delete old place from SQLAlchemy and post-upgrade migration in N+3.","commit_id":"ec8b7d0c9cff0467e1c442abfeee05045a2d029b"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"3936193f77cfb79cfba19c6140137b95778dc8da","unresolved":false,"context_lines":[{"line_number":105,"context_line":"* Remove old place from SQLAlchemy."},{"line_number":106,"context_line":"* Read and write only to the new place."},{"line_number":107,"context_line":"* Remove the column as the post-upgrade migration (or as first migration in"},{"line_number":108,"context_line":"  N+3)."},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"Please note that this is the most complicated case. When we just want to remove"},{"line_number":111,"context_line":"a column or table without moving the data around - we just need to remove it"}],"source_content_type":"text/x-rst","patch_set":5,"id":"3afc51ec_cceb5baf","line":108,"in_reply_to":"7af24918_9a4a5082","updated":"2016-03-14 16:29:36.000000000","message":"You should be able to do remove it as post-upgrade in N+2. Post-upgrade migration is run *after* the upgrade, so in N+2 that means that we have only N+2\u0027s services running in the deployment. And N+2\u0027s services don\u0027t have a notion of the column:\n\n * Read and write only to the new place.\n * Remove the column as the post-upgrade migration (or as first migration in\n   N+3).","commit_id":"ec8b7d0c9cff0467e1c442abfeee05045a2d029b"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"4a6fb3fb2a8194c7ae8a3257a5d603e245f242a7","unresolved":false,"context_lines":[{"line_number":106,"context_line":"* Read and write only to the new place."},{"line_number":107,"context_line":"* Remove the column as the post-upgrade migration (or as first migration in"},{"line_number":108,"context_line":"  N+3)."},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"Please note that this is the most complicated case. When we just want to remove"},{"line_number":111,"context_line":"a column or table without moving the data around - we just need to remove it"},{"line_number":112,"context_line":"from the model in N and merge a subtracting DB migration in N+1 (or as"}],"source_content_type":"text/x-rst","patch_set":5,"id":"7af24918_ed48fc2f","line":109,"updated":"2016-03-02 02:40:46.000000000","message":"If we read/write data through versioned object, we can delete old place in N+2. I think may you think like this way?\n\nIn N+1, during upgrade where N and N+1 mixed, write data to both places. But after upgrade completes, like refresh rpc_current_version after upgrade, we only read/write data to new place. \n\nSo that we can delete old place in N+2.","commit_id":"ec8b7d0c9cff0467e1c442abfeee05045a2d029b"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"3936193f77cfb79cfba19c6140137b95778dc8da","unresolved":false,"context_lines":[{"line_number":106,"context_line":"* Read and write only to the new place."},{"line_number":107,"context_line":"* Remove the column as the post-upgrade migration (or as first migration in"},{"line_number":108,"context_line":"  N+3)."},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"Please note that this is the most complicated case. When we just want to remove"},{"line_number":111,"context_line":"a column or table without moving the data around - we just need to remove it"},{"line_number":112,"context_line":"from the model in N and merge a subtracting DB migration in N+1 (or as"}],"source_content_type":"text/x-rst","patch_set":5,"id":"3afc51ec_6ce7a7b0","line":109,"in_reply_to":"7af24918_ed48fc2f","updated":"2016-03-14 16:29:36.000000000","message":"Orchestrating on \"rpc_current_version\" can be faulty, as to make it robust we would need to have an atomic operation that switches all the versions in the deployment at once. And that\u0027s not possible in the distributed system.","commit_id":"ec8b7d0c9cff0467e1c442abfeee05045a2d029b"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"4a6fb3fb2a8194c7ae8a3257a5d603e245f242a7","unresolved":false,"context_lines":[{"line_number":109,"context_line":""},{"line_number":110,"context_line":"Please note that this is the most complicated case. When we just want to remove"},{"line_number":111,"context_line":"a column or table without moving the data around - we just need to remove it"},{"line_number":112,"context_line":"from the model in N and merge a subtracting DB migration in N+1 (or as"},{"line_number":113,"context_line":"post-upgrade migration in N). Also if data in the column cannot actually change"},{"line_number":114,"context_line":"(for example :code:`host` in :code:`services` table), in N we can read from new"},{"line_number":115,"context_line":"place and fallback to the old place if data is missing. This way we can skip"}],"source_content_type":"text/x-rst","patch_set":5,"id":"7af24918_6d098c95","line":112,"updated":"2016-03-02 02:40:46.000000000","message":"I think it again.  If we remove a column from model in N, and merge a subtracting DB migration in N+1, we need to check whether the column exist in the DB migration script and handle them differently. As the column exist in some N environments(upgrade from N-1) and doesn\u0027t exist in some N environments(new created in N).\n\nMeanwhile, should we care about versioned object changes? For example, when remove the corresponding field from object? Seems that we need to remove the corresponding field from N+1 release if the field is used in N-1 release, but we can delete the field in N release if the field is not used in N-1 release.","commit_id":"ec8b7d0c9cff0467e1c442abfeee05045a2d029b"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"3936193f77cfb79cfba19c6140137b95778dc8da","unresolved":false,"context_lines":[{"line_number":109,"context_line":""},{"line_number":110,"context_line":"Please note that this is the most complicated case. When we just want to remove"},{"line_number":111,"context_line":"a column or table without moving the data around - we just need to remove it"},{"line_number":112,"context_line":"from the model in N and merge a subtracting DB migration in N+1 (or as"},{"line_number":113,"context_line":"post-upgrade migration in N). Also if data in the column cannot actually change"},{"line_number":114,"context_line":"(for example :code:`host` in :code:`services` table), in N we can read from new"},{"line_number":115,"context_line":"place and fallback to the old place if data is missing. This way we can skip"}],"source_content_type":"text/x-rst","patch_set":5,"id":"3afc51ec_475284de","line":112,"in_reply_to":"7af24918_6d098c95","updated":"2016-03-14 16:29:36.000000000","message":"I don\u0027t really understand the first paragraph here. Until we merge the migration dropping the column we will not remove it from the database. Please note that the DB in Cinder isn\u0027t created from the models.py, but by applying DB migrations one-by-one (``cinder-manage db sync`` command).\n\nThe second paragraph is a good question. I expect that judging on the particular situation it may be sometimes required to have some kind of compatibility layer in o.vo. This is all possible to do in the current implementation of objects versioning.","commit_id":"ec8b7d0c9cff0467e1c442abfeee05045a2d029b"},{"author":{"_account_id":15961,"name":"lisali","email":"xiaoyan.li@intel.com","username":"lisali"},"change_message_id":"4a6fb3fb2a8194c7ae8a3257a5d603e245f242a7","unresolved":false,"context_lines":[{"line_number":117,"context_line":""},{"line_number":118,"context_line":"More details about that can be found in the `online-schema-upgrades spec"},{"line_number":119,"context_line":"\u003chttp://specs.openstack.org/openstack/cinder-specs/specs/mitaka/online-schema-upgrades.html\u003e`_."},{"line_number":120,"context_line":""},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"RPC API changes"},{"line_number":123,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"7af24918_2d9144f1","line":120,"updated":"2016-03-02 02:40:46.000000000","message":"Do we need to describe something about object changes? Like above data move case? Especially from new version to old version.","commit_id":"ec8b7d0c9cff0467e1c442abfeee05045a2d029b"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"3936193f77cfb79cfba19c6140137b95778dc8da","unresolved":false,"context_lines":[{"line_number":117,"context_line":""},{"line_number":118,"context_line":"More details about that can be found in the `online-schema-upgrades spec"},{"line_number":119,"context_line":"\u003chttp://specs.openstack.org/openstack/cinder-specs/specs/mitaka/online-schema-upgrades.html\u003e`_."},{"line_number":120,"context_line":""},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"RPC API changes"},{"line_number":123,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"3afc51ec_27d0181f","line":120,"in_reply_to":"7af24918_2d9144f1","updated":"2016-03-14 16:29:36.000000000","message":"I think I\u0027m explaining it in \"RPC payload changes (oslo.versionedobject)\" section. If you think that something more can be added to this section, please elaborate. :)","commit_id":"ec8b7d0c9cff0467e1c442abfeee05045a2d029b"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"66157cc5cc5963ca52a6103c61e022c02d07f17d","unresolved":false,"context_lines":[{"line_number":165,"context_line":"        request_spec_p \u003d jsonutils.to_primitive(request_spec)"},{"line_number":166,"context_line":"        cctxt.cast(ctxt, \u0027create_volume\u0027, **msg_args)"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"As can be see there\u0027s this magic :code:`self.client.can_send_version()` method"},{"line_number":169,"context_line":"which detects if we\u0027re running in a version-heterogenious environment and need"},{"line_number":170,"context_line":"to downgrade the message. Detection is based on dynamic RPC version pinning. In"},{"line_number":171,"context_line":"general all the services (managers) report supported RPC API version. RPC API"}],"source_content_type":"text/x-rst","patch_set":5,"id":"3afc51ec_5e1ff15e","line":168,"range":{"start_line":168,"start_character":10,"end_line":168,"end_character":13},"updated":"2016-03-14 15:35:04.000000000","message":"/see/seen/","commit_id":"ec8b7d0c9cff0467e1c442abfeee05045a2d029b"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"66157cc5cc5963ca52a6103c61e022c02d07f17d","unresolved":false,"context_lines":[{"line_number":184,"context_line":"In case of removing whole RPC method we need to leave it there in N\u0027s manager"},{"line_number":185,"context_line":"and can remove it in N+1 (because N-1 will be talking with N). When adding a"},{"line_number":186,"context_line":"new one we need to make sure that when the RPC client is pinned to a too low"},{"line_number":187,"context_line":"version any try to send new message should fail (because client will not know"},{"line_number":188,"context_line":"if manager receiving the message will understand it) or ensure the manager will"},{"line_number":189,"context_line":"get updated before clients by stating the recommended order of upgrades for"},{"line_number":190,"context_line":"that release."}],"source_content_type":"text/x-rst","patch_set":5,"id":"3afc51ec_be7275ab","line":187,"range":{"start_line":187,"start_character":12,"end_line":187,"end_character":15},"updated":"2016-03-14 15:35:04.000000000","message":"/try/attempt/","commit_id":"ec8b7d0c9cff0467e1c442abfeee05045a2d029b"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"137df2926310f48099769d0dae15c87504b0add3","unresolved":false,"context_lines":[{"line_number":17,"context_line":"Upgrades"},{"line_number":18,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Starting from Mitaka release Cinder gained ability to be upgraded without"},{"line_number":21,"context_line":"introducing downtime of control plane services. Operator can simply upgrade"},{"line_number":22,"context_line":"Cinder services instances one-by-one. To achieve that developers need to make"},{"line_number":23,"context_line":"sure that any introduced change doesn\u0027t break older services running in the"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1af94dfe_fb40ef09","line":20,"updated":"2016-03-15 12:07:21.000000000","message":"nit: s/gained ability/gained the ability","commit_id":"aa528ece71018f168bb419f70ae8da148c05f3d4"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"611f13f3c75d595d8319d46b9fc5075f1d4a0dc0","unresolved":false,"context_lines":[{"line_number":17,"context_line":"Upgrades"},{"line_number":18,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Starting from Mitaka release Cinder gained ability to be upgraded without"},{"line_number":21,"context_line":"introducing downtime of control plane services. Operator can simply upgrade"},{"line_number":22,"context_line":"Cinder services instances one-by-one. To achieve that developers need to make"},{"line_number":23,"context_line":"sure that any introduced change doesn\u0027t break older services running in the"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1af94dfe_24f6b8d7","line":20,"in_reply_to":"1af94dfe_fb40ef09","updated":"2016-03-15 16:42:02.000000000","message":"Done","commit_id":"aa528ece71018f168bb419f70ae8da148c05f3d4"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"137df2926310f48099769d0dae15c87504b0add3","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Starting from Mitaka release Cinder gained ability to be upgraded without"},{"line_number":21,"context_line":"introducing downtime of control plane services. Operator can simply upgrade"},{"line_number":22,"context_line":"Cinder services instances one-by-one. To achieve that developers need to make"},{"line_number":23,"context_line":"sure that any introduced change doesn\u0027t break older services running in the"},{"line_number":24,"context_line":"same Cinder deployment."},{"line_number":25,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"1af94dfe_1b1ddb0f","line":22,"updated":"2016-03-15 12:07:21.000000000","message":"nit: s/that/that,","commit_id":"aa528ece71018f168bb419f70ae8da148c05f3d4"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"611f13f3c75d595d8319d46b9fc5075f1d4a0dc0","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Starting from Mitaka release Cinder gained ability to be upgraded without"},{"line_number":21,"context_line":"introducing downtime of control plane services. Operator can simply upgrade"},{"line_number":22,"context_line":"Cinder services instances one-by-one. To achieve that developers need to make"},{"line_number":23,"context_line":"sure that any introduced change doesn\u0027t break older services running in the"},{"line_number":24,"context_line":"same Cinder deployment."},{"line_number":25,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"1af94dfe_6400c0ab","line":22,"in_reply_to":"1af94dfe_1b1ddb0f","updated":"2016-03-15 16:42:02.000000000","message":"Done","commit_id":"aa528ece71018f168bb419f70ae8da148c05f3d4"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"137df2926310f48099769d0dae15c87504b0add3","unresolved":false,"context_lines":[{"line_number":23,"context_line":"sure that any introduced change doesn\u0027t break older services running in the"},{"line_number":24,"context_line":"same Cinder deployment."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"In general there\u0027s an assumption that release N will keep backward"},{"line_number":27,"context_line":"compatibility with release N-1 and in a deployment N\u0027s and N-1\u0027s services can"},{"line_number":28,"context_line":"safely coexist. Further in the document N will denote the current release, N-1"},{"line_number":29,"context_line":"a previous one, N+1 the next one, etc."}],"source_content_type":"text/x-rst","patch_set":6,"id":"1af94dfe_dbb413d3","line":26,"updated":"2016-03-15 12:07:21.000000000","message":"nit: I think you should rephrase this to indicate that this is a hard requirement, as current phrase may seem too loose.","commit_id":"aa528ece71018f168bb419f70ae8da148c05f3d4"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"611f13f3c75d595d8319d46b9fc5075f1d4a0dc0","unresolved":false,"context_lines":[{"line_number":23,"context_line":"sure that any introduced change doesn\u0027t break older services running in the"},{"line_number":24,"context_line":"same Cinder deployment."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"In general there\u0027s an assumption that release N will keep backward"},{"line_number":27,"context_line":"compatibility with release N-1 and in a deployment N\u0027s and N-1\u0027s services can"},{"line_number":28,"context_line":"safely coexist. Further in the document N will denote the current release, N-1"},{"line_number":29,"context_line":"a previous one, N+1 the next one, etc."}],"source_content_type":"text/x-rst","patch_set":6,"id":"1af94dfe_a4a5a8b6","line":26,"in_reply_to":"1af94dfe_dbb413d3","updated":"2016-03-15 16:42:02.000000000","message":"Done","commit_id":"aa528ece71018f168bb419f70ae8da148c05f3d4"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"137df2926310f48099769d0dae15c87504b0add3","unresolved":false,"context_lines":[{"line_number":32,"context_line":"release-to-release upgrades as well as upgrades of deployments following the"},{"line_number":33,"context_line":"Cinder master more closely. We cannot just merge patches implementing"},{"line_number":34,"context_line":"compatibility at the end of the release - we should keep things compatible"},{"line_number":35,"context_line":"through the whole release."},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"To achieve compatibility discipline is required from the developers. There are"},{"line_number":38,"context_line":"several planes on which incompatibility may occurr:"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1af94dfe_db39b343","line":35,"updated":"2016-03-15 12:07:21.000000000","message":"Nicely said!!","commit_id":"aa528ece71018f168bb419f70ae8da148c05f3d4"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"137df2926310f48099769d0dae15c87504b0add3","unresolved":false,"context_lines":[{"line_number":34,"context_line":"compatibility at the end of the release - we should keep things compatible"},{"line_number":35,"context_line":"through the whole release."},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"To achieve compatibility discipline is required from the developers. There are"},{"line_number":38,"context_line":"several planes on which incompatibility may occurr:"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"* **REST API changes** - these are prohibited by definition and this document"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1af94dfe_7b497fd0","line":37,"updated":"2016-03-15 12:07:21.000000000","message":"nit: s/compatibility/compatibility,","commit_id":"aa528ece71018f168bb419f70ae8da148c05f3d4"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"611f13f3c75d595d8319d46b9fc5075f1d4a0dc0","unresolved":false,"context_lines":[{"line_number":34,"context_line":"compatibility at the end of the release - we should keep things compatible"},{"line_number":35,"context_line":"through the whole release."},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"To achieve compatibility discipline is required from the developers. There are"},{"line_number":38,"context_line":"several planes on which incompatibility may occurr:"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"* **REST API changes** - these are prohibited by definition and this document"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1af94dfe_24235807","line":37,"in_reply_to":"1af94dfe_7b497fd0","updated":"2016-03-15 16:42:02.000000000","message":"Done","commit_id":"aa528ece71018f168bb419f70ae8da148c05f3d4"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"137df2926310f48099769d0dae15c87504b0add3","unresolved":false,"context_lines":[{"line_number":59,"context_line":"  passed over RPC may lead to incompatibilities."},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"Next sections of this document will focus on explaining last four points and"},{"line_number":62,"context_line":"providing means to tackle required changes in these matters while maintaining"},{"line_number":63,"context_line":"backward compatibility."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"1af94dfe_9bcbab1e","line":62,"updated":"2016-03-15 12:07:21.000000000","message":"nit: s/providing/provide","commit_id":"aa528ece71018f168bb419f70ae8da148c05f3d4"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"611f13f3c75d595d8319d46b9fc5075f1d4a0dc0","unresolved":false,"context_lines":[{"line_number":59,"context_line":"  passed over RPC may lead to incompatibilities."},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"Next sections of this document will focus on explaining last four points and"},{"line_number":62,"context_line":"providing means to tackle required changes in these matters while maintaining"},{"line_number":63,"context_line":"backward compatibility."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"1af94dfe_c478b4fb","line":62,"in_reply_to":"1af94dfe_9bcbab1e","updated":"2016-03-15 16:42:02.000000000","message":"Done","commit_id":"aa528ece71018f168bb419f70ae8da148c05f3d4"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"137df2926310f48099769d0dae15c87504b0add3","unresolved":false,"context_lines":[{"line_number":81,"context_line":"additions will be blocked during the migration. This sometimes isn\u0027t a problem"},{"line_number":82,"context_line":"- for example it\u0027s not the end of the world if a service won\u0027t be able to"},{"line_number":83,"context_line":"report it\u0027s status one or two times (and :code:`services` table is normally"},{"line_number":84,"context_line":"small)."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"To actually perform a subtractive DB migration we need to make more complicated"},{"line_number":87,"context_line":"steps streching through 3 releases - always keeping the backwards"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1af94dfe_7e6ccd9c","line":84,"updated":"2016-03-15 12:07:21.000000000","message":"?: What are proposed alternatives for cases where it would block?","commit_id":"aa528ece71018f168bb419f70ae8da148c05f3d4"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"611f13f3c75d595d8319d46b9fc5075f1d4a0dc0","unresolved":false,"context_lines":[{"line_number":81,"context_line":"additions will be blocked during the migration. This sometimes isn\u0027t a problem"},{"line_number":82,"context_line":"- for example it\u0027s not the end of the world if a service won\u0027t be able to"},{"line_number":83,"context_line":"report it\u0027s status one or two times (and :code:`services` table is normally"},{"line_number":84,"context_line":"small)."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"To actually perform a subtractive DB migration we need to make more complicated"},{"line_number":87,"context_line":"steps streching through 3 releases - always keeping the backwards"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1af94dfe_aad44f47","line":84,"in_reply_to":"1af94dfe_7e6ccd9c","updated":"2016-03-15 16:42:02.000000000","message":"Done","commit_id":"aa528ece71018f168bb419f70ae8da148c05f3d4"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"137df2926310f48099769d0dae15c87504b0add3","unresolved":false,"context_lines":[{"line_number":83,"context_line":"report it\u0027s status one or two times (and :code:`services` table is normally"},{"line_number":84,"context_line":"small)."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"To actually perform a subtractive DB migration we need to make more complicated"},{"line_number":87,"context_line":"steps streching through 3 releases - always keeping the backwards"},{"line_number":88,"context_line":"compatibility. In short when we want to start to move data inside the DB, then"},{"line_number":89,"context_line":"in N we should:"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1af94dfe_7b2fbfa1","line":86,"updated":"2016-03-15 12:07:21.000000000","message":"-1: This is not a subtractive DB migration, this is a renaming.\n\nSubtracting only needs 1 or 2 releases, depending if you need to keep filling that data in for N-1 or not.","commit_id":"aa528ece71018f168bb419f70ae8da148c05f3d4"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"611f13f3c75d595d8319d46b9fc5075f1d4a0dc0","unresolved":false,"context_lines":[{"line_number":83,"context_line":"report it\u0027s status one or two times (and :code:`services` table is normally"},{"line_number":84,"context_line":"small)."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"To actually perform a subtractive DB migration we need to make more complicated"},{"line_number":87,"context_line":"steps streching through 3 releases - always keeping the backwards"},{"line_number":88,"context_line":"compatibility. In short when we want to start to move data inside the DB, then"},{"line_number":89,"context_line":"in N we should:"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1af94dfe_cacf1bb2","line":86,"in_reply_to":"1af94dfe_7b2fbfa1","updated":"2016-03-15 16:42:02.000000000","message":"Yeah, that\u0027s true. I\u0027ve tried to explained that better in the next patchset.","commit_id":"aa528ece71018f168bb419f70ae8da148c05f3d4"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"137df2926310f48099769d0dae15c87504b0add3","unresolved":false,"context_lines":[{"line_number":102,"context_line":""},{"line_number":103,"context_line":"In N+2"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"* Remove old place from SQLAlchemy."},{"line_number":106,"context_line":"* Read and write only to the new place."},{"line_number":107,"context_line":"* Remove the column as the post-upgrade migration (or as first migration in"},{"line_number":108,"context_line":"  N+3)."}],"source_content_type":"text/x-rst","patch_set":6,"id":"1af94dfe_1e65c9e0","line":105,"updated":"2016-03-15 12:07:21.000000000","message":"?: What about Versioned Objects?","commit_id":"aa528ece71018f168bb419f70ae8da148c05f3d4"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"611f13f3c75d595d8319d46b9fc5075f1d4a0dc0","unresolved":false,"context_lines":[{"line_number":102,"context_line":""},{"line_number":103,"context_line":"In N+2"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"* Remove old place from SQLAlchemy."},{"line_number":106,"context_line":"* Read and write only to the new place."},{"line_number":107,"context_line":"* Remove the column as the post-upgrade migration (or as first migration in"},{"line_number":108,"context_line":"  N+3)."}],"source_content_type":"text/x-rst","patch_set":6,"id":"1af94dfe_ba993822","line":105,"in_reply_to":"1af94dfe_1e65c9e0","updated":"2016-03-15 16:42:02.000000000","message":"It may depend on the example, sometimes it may be worth to leave the alias in the o.vo. It\u0027s certainly not a requirement to get rid of a field from o.vo model.","commit_id":"aa528ece71018f168bb419f70ae8da148c05f3d4"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"137df2926310f48099769d0dae15c87504b0add3","unresolved":false,"context_lines":[{"line_number":107,"context_line":"* Remove the column as the post-upgrade migration (or as first migration in"},{"line_number":108,"context_line":"  N+3)."},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"Please note that this is the most complicated case. When we just want to remove"},{"line_number":111,"context_line":"a column or table without moving the data around - we just need to remove it"},{"line_number":112,"context_line":"from the model in N and merge a subtracting DB migration in N+1 (or as"},{"line_number":113,"context_line":"post-upgrade migration in N). Also if data in the column cannot actually change"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1af94dfe_3e4b652d","line":110,"updated":"2016-03-15 12:07:21.000000000","message":"-1: I would move this before previous case so the document can be read in increased order of complexity.\n\n- Addition\n- Simple removal (can drop field in 1 release)\n- Medium removal (2 releases are needed - N will write data because N-1 needs it but will not use it, and in N+1 will not write data and the field can be dropped)\n- Renaming (3 releases are needed as you explained)","commit_id":"aa528ece71018f168bb419f70ae8da148c05f3d4"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"137df2926310f48099769d0dae15c87504b0add3","unresolved":false,"context_lines":[{"line_number":118,"context_line":"Of course real-world examples may be different. E.g. sometimes it may be"},{"line_number":119,"context_line":"required to write some more compatibility code in the oslo.versionedobjects"},{"line_number":120,"context_line":"layer to compensate for different versions of objects passed over RPC. This is"},{"line_number":121,"context_line":"explained more in `RPC payload changes (oslo.versionedobjects)`_ section."},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"More details about that can be found in the `online-schema-upgrades spec"},{"line_number":124,"context_line":"\u003chttp://specs.openstack.org/openstack/cinder-specs/specs/mitaka/online-schema-upgrades.html\u003e`_."}],"source_content_type":"text/x-rst","patch_set":6,"id":"1af94dfe_be1135b2","line":121,"updated":"2016-03-15 12:07:21.000000000","message":"nit: I think it is worth mentioning in this spec that this compatibility is only needed for N-1 and N so, once we have moved past N compatibility code can be removed, so a TODO with the release when it can be removed should be added to the code to make sure we can easily grep it at the beginning of each cycle and clean it all up.\n\nMaybe add it in another section as this applies to RCP API changes and DB migrations as well.","commit_id":"aa528ece71018f168bb419f70ae8da148c05f3d4"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"611f13f3c75d595d8319d46b9fc5075f1d4a0dc0","unresolved":false,"context_lines":[{"line_number":118,"context_line":"Of course real-world examples may be different. E.g. sometimes it may be"},{"line_number":119,"context_line":"required to write some more compatibility code in the oslo.versionedobjects"},{"line_number":120,"context_line":"layer to compensate for different versions of objects passed over RPC. This is"},{"line_number":121,"context_line":"explained more in `RPC payload changes (oslo.versionedobjects)`_ section."},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"More details about that can be found in the `online-schema-upgrades spec"},{"line_number":124,"context_line":"\u003chttp://specs.openstack.org/openstack/cinder-specs/specs/mitaka/online-schema-upgrades.html\u003e`_."}],"source_content_type":"text/x-rst","patch_set":6,"id":"1af94dfe_10180884","line":121,"in_reply_to":"1af94dfe_be1135b2","updated":"2016-03-15 16:42:02.000000000","message":"I\u0027ve added that to initial section.","commit_id":"aa528ece71018f168bb419f70ae8da148c05f3d4"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"137df2926310f48099769d0dae15c87504b0add3","unresolved":false,"context_lines":[{"line_number":178,"context_line":"downgrade messages to it."},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"To limit impact on the DB the pinned version of certain RPC API is cached."},{"line_number":181,"context_line":"After all the services in the deployment are updated operator should restart"},{"line_number":182,"context_line":"all the services or send them a SIGHUP signal to force reload of version pins."},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"As we need to support only N RPC API in N+1 release, we should bump the major"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1af94dfe_3eb0858b","line":181,"updated":"2016-03-15 12:07:21.000000000","message":"nit: s/updated/updated,","commit_id":"aa528ece71018f168bb419f70ae8da148c05f3d4"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"611f13f3c75d595d8319d46b9fc5075f1d4a0dc0","unresolved":false,"context_lines":[{"line_number":178,"context_line":"downgrade messages to it."},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"To limit impact on the DB the pinned version of certain RPC API is cached."},{"line_number":181,"context_line":"After all the services in the deployment are updated operator should restart"},{"line_number":182,"context_line":"all the services or send them a SIGHUP signal to force reload of version pins."},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"As we need to support only N RPC API in N+1 release, we should bump the major"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1af94dfe_4e6f9692","line":181,"in_reply_to":"1af94dfe_3eb0858b","updated":"2016-03-15 16:42:02.000000000","message":"Done","commit_id":"aa528ece71018f168bb419f70ae8da148c05f3d4"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"137df2926310f48099769d0dae15c87504b0add3","unresolved":false,"context_lines":[{"line_number":184,"context_line":"As we need to support only N RPC API in N+1 release, we should bump the major"},{"line_number":185,"context_line":"RPC API version and remove N-1\u0027s shims in N+1. This is explained in details in"},{"line_number":186,"context_line":"`Nova\u0027s documentation"},{"line_number":187,"context_line":"\u003chttps://wiki.openstack.org/wiki/RpcMajorVersionUpdates\u003e`_."},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"In case of removing whole RPC method we need to leave it there in N\u0027s manager"},{"line_number":190,"context_line":"and can remove it in N+1 (because N-1 will be talking with N). When adding a"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1af94dfe_811dfe68","line":187,"updated":"2016-03-15 12:07:21.000000000","message":"-1: URL seems to be broken","commit_id":"aa528ece71018f168bb419f70ae8da148c05f3d4"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"a56ae43e01fece1c212710b950b5291349427fe2","unresolved":false,"context_lines":[{"line_number":184,"context_line":"As we need to support only N RPC API in N+1 release, we should bump the major"},{"line_number":185,"context_line":"RPC API version and remove N-1\u0027s shims in N+1. This is explained in details in"},{"line_number":186,"context_line":"`Nova\u0027s documentation"},{"line_number":187,"context_line":"\u003chttps://wiki.openstack.org/wiki/RpcMajorVersionUpdates\u003e`_."},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"In case of removing whole RPC method we need to leave it there in N\u0027s manager"},{"line_number":190,"context_line":"and can remove it in N+1 (because N-1 will be talking with N). When adding a"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1af94dfe_a45d6deb","line":187,"in_reply_to":"1af94dfe_6e72527e","updated":"2016-03-16 14:37:49.000000000","message":"Ok, today it works.  XD","commit_id":"aa528ece71018f168bb419f70ae8da148c05f3d4"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"611f13f3c75d595d8319d46b9fc5075f1d4a0dc0","unresolved":false,"context_lines":[{"line_number":184,"context_line":"As we need to support only N RPC API in N+1 release, we should bump the major"},{"line_number":185,"context_line":"RPC API version and remove N-1\u0027s shims in N+1. This is explained in details in"},{"line_number":186,"context_line":"`Nova\u0027s documentation"},{"line_number":187,"context_line":"\u003chttps://wiki.openstack.org/wiki/RpcMajorVersionUpdates\u003e`_."},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"In case of removing whole RPC method we need to leave it there in N\u0027s manager"},{"line_number":190,"context_line":"and can remove it in N+1 (because N-1 will be talking with N). When adding a"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1af94dfe_6e72527e","line":187,"in_reply_to":"1af94dfe_811dfe68","updated":"2016-03-15 16:42:02.000000000","message":"Works for me without issues. Maybe the problems you\u0027ve had are related to recent SSO problems on Launchpad side?","commit_id":"aa528ece71018f168bb419f70ae8da148c05f3d4"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"137df2926310f48099769d0dae15c87504b0add3","unresolved":false,"context_lines":[{"line_number":201,"context_line":"\u003chttp://docs.openstack.org/developer/oslo.versionedobjects\u003e`_ is a library that"},{"line_number":202,"context_line":"helps us to maintain compatibility of the payload sent over RPC. As during the"},{"line_number":203,"context_line":"process of upgrades it is possible that a newer version of the service will"},{"line_number":204,"context_line":"send an object to the older one, it may happen that newer object is"},{"line_number":205,"context_line":"incompatible with older service."},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"Imagine that we (finally!) decide that :code:`request_spec` sent in"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1af94dfe_21650ae1","line":204,"updated":"2016-03-15 12:07:21.000000000","message":"nit: s/the older/an older","commit_id":"aa528ece71018f168bb419f70ae8da148c05f3d4"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"611f13f3c75d595d8319d46b9fc5075f1d4a0dc0","unresolved":false,"context_lines":[{"line_number":201,"context_line":"\u003chttp://docs.openstack.org/developer/oslo.versionedobjects\u003e`_ is a library that"},{"line_number":202,"context_line":"helps us to maintain compatibility of the payload sent over RPC. As during the"},{"line_number":203,"context_line":"process of upgrades it is possible that a newer version of the service will"},{"line_number":204,"context_line":"send an object to the older one, it may happen that newer object is"},{"line_number":205,"context_line":"incompatible with older service."},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"Imagine that we (finally!) decide that :code:`request_spec` sent in"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1af94dfe_0e146ef3","line":204,"in_reply_to":"1af94dfe_21650ae1","updated":"2016-03-15 16:42:02.000000000","message":"Done","commit_id":"aa528ece71018f168bb419f70ae8da148c05f3d4"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"137df2926310f48099769d0dae15c87504b0add3","unresolved":false,"context_lines":[{"line_number":214,"context_line":""},{"line_number":215,"context_line":"Let\u0027s take a step back - similarly to the RPC API situation we need a way to"},{"line_number":216,"context_line":"tell if we need to send a backward-compatible version of the message. In this"},{"line_number":217,"context_line":"case we need to know to what version downgrade the object. We\u0027re using a"},{"line_number":218,"context_line":"similar solution for that. A problem here is that we need a single identifier"},{"line_number":219,"context_line":"(that we will be reported to :code:`services` DB table) to denote whole set of"},{"line_number":220,"context_line":"versions of all the objects. To do that we\u0027ve introduced a concept of"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1af94dfe_a1ed9a27","line":217,"updated":"2016-03-15 12:07:21.000000000","message":"nit: s/version downgrade/version to downgrade","commit_id":"aa528ece71018f168bb419f70ae8da148c05f3d4"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"611f13f3c75d595d8319d46b9fc5075f1d4a0dc0","unresolved":false,"context_lines":[{"line_number":214,"context_line":""},{"line_number":215,"context_line":"Let\u0027s take a step back - similarly to the RPC API situation we need a way to"},{"line_number":216,"context_line":"tell if we need to send a backward-compatible version of the message. In this"},{"line_number":217,"context_line":"case we need to know to what version downgrade the object. We\u0027re using a"},{"line_number":218,"context_line":"similar solution for that. A problem here is that we need a single identifier"},{"line_number":219,"context_line":"(that we will be reported to :code:`services` DB table) to denote whole set of"},{"line_number":220,"context_line":"versions of all the objects. To do that we\u0027ve introduced a concept of"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1af94dfe_2e268a68","line":217,"in_reply_to":"1af94dfe_a1ed9a27","updated":"2016-03-15 16:42:02.000000000","message":"Done","commit_id":"aa528ece71018f168bb419f70ae8da148c05f3d4"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"137df2926310f48099769d0dae15c87504b0add3","unresolved":false,"context_lines":[{"line_number":215,"context_line":"Let\u0027s take a step back - similarly to the RPC API situation we need a way to"},{"line_number":216,"context_line":"tell if we need to send a backward-compatible version of the message. In this"},{"line_number":217,"context_line":"case we need to know to what version downgrade the object. We\u0027re using a"},{"line_number":218,"context_line":"similar solution for that. A problem here is that we need a single identifier"},{"line_number":219,"context_line":"(that we will be reported to :code:`services` DB table) to denote whole set of"},{"line_number":220,"context_line":"versions of all the objects. To do that we\u0027ve introduced a concept of"},{"line_number":221,"context_line":":code:`CinderObjectVersionHistory` object. There we keep sets of individual"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1af94dfe_c1cf06b2","line":218,"updated":"2016-03-15 12:07:21.000000000","message":"nit: s/solution for that/solution to the one used for RPC API for that","commit_id":"aa528ece71018f168bb419f70ae8da148c05f3d4"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"611f13f3c75d595d8319d46b9fc5075f1d4a0dc0","unresolved":false,"context_lines":[{"line_number":215,"context_line":"Let\u0027s take a step back - similarly to the RPC API situation we need a way to"},{"line_number":216,"context_line":"tell if we need to send a backward-compatible version of the message. In this"},{"line_number":217,"context_line":"case we need to know to what version downgrade the object. We\u0027re using a"},{"line_number":218,"context_line":"similar solution for that. A problem here is that we need a single identifier"},{"line_number":219,"context_line":"(that we will be reported to :code:`services` DB table) to denote whole set of"},{"line_number":220,"context_line":"versions of all the objects. To do that we\u0027ve introduced a concept of"},{"line_number":221,"context_line":":code:`CinderObjectVersionHistory` object. There we keep sets of individual"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1af94dfe_092588aa","line":218,"in_reply_to":"1af94dfe_c1cf06b2","updated":"2016-03-15 16:42:02.000000000","message":"Done","commit_id":"aa528ece71018f168bb419f70ae8da148c05f3d4"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"137df2926310f48099769d0dae15c87504b0add3","unresolved":false,"context_lines":[{"line_number":218,"context_line":"similar solution for that. A problem here is that we need a single identifier"},{"line_number":219,"context_line":"(that we will be reported to :code:`services` DB table) to denote whole set of"},{"line_number":220,"context_line":"versions of all the objects. To do that we\u0027ve introduced a concept of"},{"line_number":221,"context_line":":code:`CinderObjectVersionHistory` object. There we keep sets of individual"},{"line_number":222,"context_line":"object versions aggregated into a single version string. When making a change"},{"line_number":223,"context_line":"in a single object you need to bump its version (we have a unit test enforcing"},{"line_number":224,"context_line":"that) *and* add a new version to"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1af94dfe_e145e217","line":221,"updated":"2016-03-15 12:07:21.000000000","message":"nit: s/There/Where","commit_id":"aa528ece71018f168bb419f70ae8da148c05f3d4"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"611f13f3c75d595d8319d46b9fc5075f1d4a0dc0","unresolved":false,"context_lines":[{"line_number":218,"context_line":"similar solution for that. A problem here is that we need a single identifier"},{"line_number":219,"context_line":"(that we will be reported to :code:`services` DB table) to denote whole set of"},{"line_number":220,"context_line":"versions of all the objects. To do that we\u0027ve introduced a concept of"},{"line_number":221,"context_line":":code:`CinderObjectVersionHistory` object. There we keep sets of individual"},{"line_number":222,"context_line":"object versions aggregated into a single version string. When making a change"},{"line_number":223,"context_line":"in a single object you need to bump its version (we have a unit test enforcing"},{"line_number":224,"context_line":"that) *and* add a new version to"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1af94dfe_eea022a8","line":221,"in_reply_to":"1af94dfe_e145e217","updated":"2016-03-15 16:42:02.000000000","message":"Done","commit_id":"aa528ece71018f168bb419f70ae8da148c05f3d4"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"137df2926310f48099769d0dae15c87504b0add3","unresolved":false,"context_lines":[{"line_number":221,"context_line":":code:`CinderObjectVersionHistory` object. There we keep sets of individual"},{"line_number":222,"context_line":"object versions aggregated into a single version string. When making a change"},{"line_number":223,"context_line":"in a single object you need to bump its version (we have a unit test enforcing"},{"line_number":224,"context_line":"that) *and* add a new version to"},{"line_number":225,"context_line":":code:`cinder.objects.base.CinderObjectVersionsHistory` (there\u0027s a unit test as"},{"line_number":226,"context_line":"well). Example code doing that is below::"},{"line_number":227,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"1af94dfe_81f17ed0","line":224,"updated":"2016-03-15 12:07:21.000000000","message":"nit: I think this should be explained in more detail, because you don\u0027t always need to bump the version, sometimes you just need to change the unittest hash.  It depends on the changes, so I think an explanation for coders/reviewers would be awesome.\n\nFor example, do we need to bump a List Versioned Object when we update the version of the vo contained in the list?","commit_id":"aa528ece71018f168bb419f70ae8da148c05f3d4"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"611f13f3c75d595d8319d46b9fc5075f1d4a0dc0","unresolved":false,"context_lines":[{"line_number":221,"context_line":":code:`CinderObjectVersionHistory` object. There we keep sets of individual"},{"line_number":222,"context_line":"object versions aggregated into a single version string. When making a change"},{"line_number":223,"context_line":"in a single object you need to bump its version (we have a unit test enforcing"},{"line_number":224,"context_line":"that) *and* add a new version to"},{"line_number":225,"context_line":":code:`cinder.objects.base.CinderObjectVersionsHistory` (there\u0027s a unit test as"},{"line_number":226,"context_line":"well). Example code doing that is below::"},{"line_number":227,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"1af94dfe_cd03abb7","line":224,"in_reply_to":"1af94dfe_81f17ed0","updated":"2016-03-15 16:42:02.000000000","message":"This isn\u0027t that simple. I can remember one exception when I\u0027ve asked not to bump the versions (synchronizing nullable constraints between o.vo and SQLA models), but that was long-thought and wasn\u0027t really easy to decide. In general I don\u0027t think such cases can be enumerated easily.\n\nWe should bump List objects version, but fortunately we\u0027re not sending them over RPC yet, so even if we\u0027ve missed it in some case - it shouldn\u0027t hurt us much.","commit_id":"aa528ece71018f168bb419f70ae8da148c05f3d4"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"a56ae43e01fece1c212710b950b5291349427fe2","unresolved":false,"context_lines":[{"line_number":221,"context_line":":code:`CinderObjectVersionHistory` object. There we keep sets of individual"},{"line_number":222,"context_line":"object versions aggregated into a single version string. When making a change"},{"line_number":223,"context_line":"in a single object you need to bump its version (we have a unit test enforcing"},{"line_number":224,"context_line":"that) *and* add a new version to"},{"line_number":225,"context_line":":code:`cinder.objects.base.CinderObjectVersionsHistory` (there\u0027s a unit test as"},{"line_number":226,"context_line":"well). Example code doing that is below::"},{"line_number":227,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"1af94dfe_ff137c5a","line":224,"in_reply_to":"1af94dfe_cd03abb7","updated":"2016-03-16 14:37:49.000000000","message":"I know it isn\u0027t that simple, that\u0027s why I wanted to point it out.  ;-)","commit_id":"aa528ece71018f168bb419f70ae8da148c05f3d4"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"137df2926310f48099769d0dae15c87504b0add3","unresolved":false,"context_lines":[{"line_number":230,"context_line":"This line adds a new 1.1 aggregated object version that is different from 1.0"},{"line_number":231,"context_line":"by two objects - :code:`Service` in 1.2 and :code:`ServiceList` in 1.1. This"},{"line_number":232,"context_line":"means that the commit which added this line bumped versions of these two"},{"line_number":233,"context_line":"objects. Now if we know that a service we\u0027re talking to is running 1.1"},{"line_number":234,"context_line":"aggregated version - we need to downgrade :code:`Service` and"},{"line_number":235,"context_line":":code:`ServiceList` to 1.2 and 1.1 respectively before sending. Please note"},{"line_number":236,"context_line":"that of course other objects as included in the 1.1 aggregated version, but you"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1af94dfe_619c326a","line":233,"updated":"2016-03-15 12:07:21.000000000","message":"nit: I would split into a new line the sentence that begins with Now","commit_id":"aa528ece71018f168bb419f70ae8da148c05f3d4"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"611f13f3c75d595d8319d46b9fc5075f1d4a0dc0","unresolved":false,"context_lines":[{"line_number":230,"context_line":"This line adds a new 1.1 aggregated object version that is different from 1.0"},{"line_number":231,"context_line":"by two objects - :code:`Service` in 1.2 and :code:`ServiceList` in 1.1. This"},{"line_number":232,"context_line":"means that the commit which added this line bumped versions of these two"},{"line_number":233,"context_line":"objects. Now if we know that a service we\u0027re talking to is running 1.1"},{"line_number":234,"context_line":"aggregated version - we need to downgrade :code:`Service` and"},{"line_number":235,"context_line":":code:`ServiceList` to 1.2 and 1.1 respectively before sending. Please note"},{"line_number":236,"context_line":"that of course other objects as included in the 1.1 aggregated version, but you"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1af94dfe_6ea3729f","line":233,"in_reply_to":"1af94dfe_619c326a","updated":"2016-03-15 16:42:02.000000000","message":"Done","commit_id":"aa528ece71018f168bb419f70ae8da148c05f3d4"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"137df2926310f48099769d0dae15c87504b0add3","unresolved":false,"context_lines":[{"line_number":241,"context_line":":code:`volume_properties` from there (most of data in there is already"},{"line_number":242,"context_line":"somewhere else inside the :code:`request_spec` object). We\u0027ve made a change in"},{"line_number":243,"context_line":"the object fields, we\u0027ve bumped it\u0027s version (from 1.0 to 1.1), we\u0027ve updated"},{"line_number":244,"context_line":"hash in the :code:`cinder.tests.unit.test_objects` to make the unit test pass"},{"line_number":245,"context_line":"and we\u0027ve added a new aggregated object history version in"},{"line_number":246,"context_line":":code:`cinder.objects.base`."},{"line_number":247,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"1af94dfe_c1dc261b","line":244,"updated":"2016-03-15 12:07:21.000000000","message":"nit: I would rephrase this, as it looks like you are changing it because you want the tests to pass... I would say to synchronize the tests\u0027s hash with modified Versioned Object.","commit_id":"aa528ece71018f168bb419f70ae8da148c05f3d4"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"611f13f3c75d595d8319d46b9fc5075f1d4a0dc0","unresolved":false,"context_lines":[{"line_number":241,"context_line":":code:`volume_properties` from there (most of data in there is already"},{"line_number":242,"context_line":"somewhere else inside the :code:`request_spec` object). We\u0027ve made a change in"},{"line_number":243,"context_line":"the object fields, we\u0027ve bumped it\u0027s version (from 1.0 to 1.1), we\u0027ve updated"},{"line_number":244,"context_line":"hash in the :code:`cinder.tests.unit.test_objects` to make the unit test pass"},{"line_number":245,"context_line":"and we\u0027ve added a new aggregated object history version in"},{"line_number":246,"context_line":":code:`cinder.objects.base`."},{"line_number":247,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"1af94dfe_f02abc7d","line":244,"in_reply_to":"1af94dfe_c1dc261b","updated":"2016-03-15 16:42:02.000000000","message":"Done","commit_id":"aa528ece71018f168bb419f70ae8da148c05f3d4"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"137df2926310f48099769d0dae15c87504b0add3","unresolved":false,"context_lines":[{"line_number":247,"context_line":""},{"line_number":248,"context_line":"What else is required? We need to provide code that actually downgrades"},{"line_number":249,"context_line":"RequestSpec object from 1.1 to 1.0 - to be used when sending the object to"},{"line_number":250,"context_line":"the older services. This is done by implementing :code:`obj_make_compatible`"},{"line_number":251,"context_line":"method in the object::"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"    def obj_make_compatible(self, primitive, target_version):"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1af94dfe_01fe0e6b","line":250,"updated":"2016-03-15 12:07:21.000000000","message":"nit: remove the initial the","commit_id":"aa528ece71018f168bb419f70ae8da148c05f3d4"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"611f13f3c75d595d8319d46b9fc5075f1d4a0dc0","unresolved":false,"context_lines":[{"line_number":247,"context_line":""},{"line_number":248,"context_line":"What else is required? We need to provide code that actually downgrades"},{"line_number":249,"context_line":"RequestSpec object from 1.1 to 1.0 - to be used when sending the object to"},{"line_number":250,"context_line":"the older services. This is done by implementing :code:`obj_make_compatible`"},{"line_number":251,"context_line":"method in the object::"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"    def obj_make_compatible(self, primitive, target_version):"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1af94dfe_2ee7aae5","line":250,"in_reply_to":"1af94dfe_01fe0e6b","updated":"2016-03-15 16:42:02.000000000","message":"Done","commit_id":"aa528ece71018f168bb419f70ae8da148c05f3d4"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"137df2926310f48099769d0dae15c87504b0add3","unresolved":false,"context_lines":[{"line_number":249,"context_line":"RequestSpec object from 1.1 to 1.0 - to be used when sending the object to"},{"line_number":250,"context_line":"the older services. This is done by implementing :code:`obj_make_compatible`"},{"line_number":251,"context_line":"method in the object::"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"    def obj_make_compatible(self, primitive, target_version):"},{"line_number":254,"context_line":"        super(RequestSpec, self).obj_make_compatible(primitive, target_version)"},{"line_number":255,"context_line":"        target_version \u003d versionutils.convert_version_to_tuple(target_version)"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1af94dfe_a12f5af5","line":252,"updated":"2016-03-15 12:07:21.000000000","message":"nit: I would add here the versionutils import","commit_id":"aa528ece71018f168bb419f70ae8da148c05f3d4"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"611f13f3c75d595d8319d46b9fc5075f1d4a0dc0","unresolved":false,"context_lines":[{"line_number":249,"context_line":"RequestSpec object from 1.1 to 1.0 - to be used when sending the object to"},{"line_number":250,"context_line":"the older services. This is done by implementing :code:`obj_make_compatible`"},{"line_number":251,"context_line":"method in the object::"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"    def obj_make_compatible(self, primitive, target_version):"},{"line_number":254,"context_line":"        super(RequestSpec, self).obj_make_compatible(primitive, target_version)"},{"line_number":255,"context_line":"        target_version \u003d versionutils.convert_version_to_tuple(target_version)"}],"source_content_type":"text/x-rst","patch_set":6,"id":"1af94dfe_2e35ea45","line":252,"in_reply_to":"1af94dfe_a12f5af5","updated":"2016-03-15 16:42:02.000000000","message":"Done","commit_id":"aa528ece71018f168bb419f70ae8da148c05f3d4"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"137df2926310f48099769d0dae15c87504b0add3","unresolved":false,"context_lines":[{"line_number":264,"context_line":"With these pieces in place Cinder will take care of sending"},{"line_number":265,"context_line":":code:`request_spec` with :code:`volume_properties` when running in mixed"},{"line_number":266,"context_line":"environment and without when all services are upgraded and will understand"},{"line_number":267,"context_line":":code:`request_spec` without :code:`volume_properties` element."}],"source_content_type":"text/x-rst","patch_set":6,"id":"1af94dfe_c19426ea","line":267,"updated":"2016-03-15 12:07:21.000000000","message":"nit: It should be mentioned that VO already do the recursive call of making obj compatible for our List objects.","commit_id":"aa528ece71018f168bb419f70ae8da148c05f3d4"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"611f13f3c75d595d8319d46b9fc5075f1d4a0dc0","unresolved":false,"context_lines":[{"line_number":264,"context_line":"With these pieces in place Cinder will take care of sending"},{"line_number":265,"context_line":":code:`request_spec` with :code:`volume_properties` when running in mixed"},{"line_number":266,"context_line":"environment and without when all services are upgraded and will understand"},{"line_number":267,"context_line":":code:`request_spec` without :code:`volume_properties` element."}],"source_content_type":"text/x-rst","patch_set":6,"id":"1af94dfe_53dd7a41","line":267,"in_reply_to":"1af94dfe_c19426ea","updated":"2016-03-15 16:42:02.000000000","message":"Done","commit_id":"aa528ece71018f168bb419f70ae8da148c05f3d4"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"04a2e989da9704a9c3a0e58bc66da43860ec0023","unresolved":false,"context_lines":[{"line_number":83,"context_line":"Adding a column"},{"line_number":84,"context_line":"..............."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"This is a simplest case - we don\u0027t have any requirements when adding a new"},{"line_number":87,"context_line":"column apart from the fact that it should be added as a last one in the table."},{"line_number":88,"context_line":"If that\u0027s covered, the DB engine will make sure the migraton won\u0027t be"},{"line_number":89,"context_line":"disruptive."}],"source_content_type":"text/x-rst","patch_set":7,"id":"1af94dfe_8482f150","line":86,"updated":"2016-03-16 10:54:48.000000000","message":"nit: s/is a simplest/is the simplest","commit_id":"c8cded5d36f2b74af849ef5aec1f3be394b11c3c"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"43d1d35503141fd25d7f89af29a7520784dd8da6","unresolved":false,"context_lines":[{"line_number":83,"context_line":"Adding a column"},{"line_number":84,"context_line":"..............."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"This is a simplest case - we don\u0027t have any requirements when adding a new"},{"line_number":87,"context_line":"column apart from the fact that it should be added as a last one in the table."},{"line_number":88,"context_line":"If that\u0027s covered, the DB engine will make sure the migraton won\u0027t be"},{"line_number":89,"context_line":"disruptive."}],"source_content_type":"text/x-rst","patch_set":7,"id":"1af94dfe_f379f8fd","line":86,"in_reply_to":"1af94dfe_8482f150","updated":"2016-03-16 11:45:19.000000000","message":"I should have listened better on English grammar lessons. ;)","commit_id":"c8cded5d36f2b74af849ef5aec1f3be394b11c3c"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"04a2e989da9704a9c3a0e58bc66da43860ec0023","unresolved":false,"context_lines":[{"line_number":84,"context_line":"..............."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"This is a simplest case - we don\u0027t have any requirements when adding a new"},{"line_number":87,"context_line":"column apart from the fact that it should be added as a last one in the table."},{"line_number":88,"context_line":"If that\u0027s covered, the DB engine will make sure the migraton won\u0027t be"},{"line_number":89,"context_line":"disruptive."},{"line_number":90,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"1af94dfe_04970191","line":87,"updated":"2016-03-16 10:54:48.000000000","message":"nit: s/as a last/as the last","commit_id":"c8cded5d36f2b74af849ef5aec1f3be394b11c3c"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"43d1d35503141fd25d7f89af29a7520784dd8da6","unresolved":false,"context_lines":[{"line_number":84,"context_line":"..............."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"This is a simplest case - we don\u0027t have any requirements when adding a new"},{"line_number":87,"context_line":"column apart from the fact that it should be added as a last one in the table."},{"line_number":88,"context_line":"If that\u0027s covered, the DB engine will make sure the migraton won\u0027t be"},{"line_number":89,"context_line":"disruptive."},{"line_number":90,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"1af94dfe_d37cbced","line":87,"in_reply_to":"1af94dfe_04970191","updated":"2016-03-16 11:45:19.000000000","message":"Done","commit_id":"c8cded5d36f2b74af849ef5aec1f3be394b11c3c"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"04a2e989da9704a9c3a0e58bc66da43860ec0023","unresolved":false,"context_lines":[{"line_number":221,"context_line":"After all the services in the deployment are updated, operator should restart"},{"line_number":222,"context_line":"all the services or send them a SIGHUP signal to force reload of version pins."},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"As we need to support only N RPC API in N+1 release, we should bump the major"},{"line_number":225,"context_line":"RPC API version and remove N-1\u0027s shims in N+1. This is explained in details in"},{"line_number":226,"context_line":"`Nova\u0027s documentation"},{"line_number":227,"context_line":"\u003chttps://wiki.openstack.org/wiki/RpcMajorVersionUpdates\u003e`_."}],"source_content_type":"text/x-rst","patch_set":7,"id":"1af94dfe_646885f6","line":224,"updated":"2016-03-16 10:54:48.000000000","message":"-1: What I understand from this paragraph is that we\u0027ll bump major version on each release, but that\u0027s not what the Nova documentation says...","commit_id":"c8cded5d36f2b74af849ef5aec1f3be394b11c3c"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"43d1d35503141fd25d7f89af29a7520784dd8da6","unresolved":false,"context_lines":[{"line_number":221,"context_line":"After all the services in the deployment are updated, operator should restart"},{"line_number":222,"context_line":"all the services or send them a SIGHUP signal to force reload of version pins."},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"As we need to support only N RPC API in N+1 release, we should bump the major"},{"line_number":225,"context_line":"RPC API version and remove N-1\u0027s shims in N+1. This is explained in details in"},{"line_number":226,"context_line":"`Nova\u0027s documentation"},{"line_number":227,"context_line":"\u003chttps://wiki.openstack.org/wiki/RpcMajorVersionUpdates\u003e`_."}],"source_content_type":"text/x-rst","patch_set":7,"id":"1af94dfe_53ac2c35","line":224,"in_reply_to":"1af94dfe_646885f6","updated":"2016-03-16 11:45:19.000000000","message":"Ah, right, when I was writing this we were on the verge of deciding on Cinder\u0027s guideline. I\u0027ve changed this to reflect that.","commit_id":"c8cded5d36f2b74af849ef5aec1f3be394b11c3c"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"0f770a26c9b8f28c0d029a79d4ba9c7b476f09ad","unresolved":false,"context_lines":[{"line_number":232,"context_line":"documentation \u003chttps://wiki.openstack.org/wiki/RpcMajorVersionUpdates\u003e`_."},{"line_number":233,"context_line":"Please note that in case of Cinder we\u0027re accessing the DB from all of the"},{"line_number":234,"context_line":"services, so we should follow the more complicated \"Mixed version environments\""},{"line_number":235,"context_line":"process for every of our services."},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"In case of removing whole RPC method we need to leave it there in N\u0027s manager"},{"line_number":238,"context_line":"and can remove it in N+1 (because N-1 will be talking with N). When adding a"}],"source_content_type":"text/x-rst","patch_set":8,"id":"1af94dfe_2b275cb7","line":235,"updated":"2016-03-16 14:45:10.000000000","message":"nit: s/every/every one","commit_id":"aeeff1393d4d1b3483e8be7ac13eed741903055a"}]}
