)]}'
{"doc/source/cli/nova-manage.rst":[{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"04f2703cbc291d923e84a48f8923486a1959b72e","unresolved":false,"context_lines":[{"line_number":86,"context_line":"    Lists and optionally deletes database records where instance_uuid is NULL."},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"``nova-manage db online_data_migrations [--max-count]``"},{"line_number":89,"context_line":"   Perform data migration to update all live data. Return exit code 0 if no (further)"},{"line_number":90,"context_line":"   updates are needed, exit code 1 if some updates were completed successfully but"},{"line_number":91,"context_line":"   others may remain pending (even if some generated errors), exit code 2 if some"},{"line_number":92,"context_line":"   updates generated errors and no others remain pending, or exit code 127 if invalid"},{"line_number":93,"context_line":"   input is provided (e.g.  non-numeric max-count). This command should be called after"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_ea41ec64","line":90,"range":{"start_line":89,"start_character":72,"end_line":90,"end_character":21},"updated":"2018-10-10 07:06:02.000000000","message":"Why do we need to change this part? Seems fine with the original one","commit_id":"58f918a010e01a86658695f2df8764767f21fecf"},{"author":{"_account_id":23561,"name":"iain MacDonnell","email":"iain.macdonnell@oracle.com","username":"imacdonn"},"change_message_id":"96970b57e8ebbd63b795fc5d24d7e88aa729847f","unresolved":false,"context_lines":[{"line_number":86,"context_line":"    Lists and optionally deletes database records where instance_uuid is NULL."},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"``nova-manage db online_data_migrations [--max-count]``"},{"line_number":89,"context_line":"   Perform data migration to update all live data. Return exit code 0 if no (further)"},{"line_number":90,"context_line":"   updates are needed, exit code 1 if some updates were completed successfully but"},{"line_number":91,"context_line":"   others may remain pending (even if some generated errors), exit code 2 if some"},{"line_number":92,"context_line":"   updates generated errors and no others remain pending, or exit code 127 if invalid"},{"line_number":93,"context_line":"   input is provided (e.g.  non-numeric max-count). This command should be called after"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_1227b620","line":90,"range":{"start_line":89,"start_character":72,"end_line":90,"end_character":21},"in_reply_to":"3f79a3b5_ea41ec64","updated":"2018-10-10 10:59:00.000000000","message":"1) The term \"migrations\" is used here, where the term \"updates\" is used throughout the rest of this section.\n\n2) Exit code 0 can happen where there are no updates needed, as well as when some have been completed and there are no more pending.","commit_id":"58f918a010e01a86658695f2df8764767f21fecf"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"0dbf9aae4d327497e42e85d8a10b287385bcb746","unresolved":false,"context_lines":[{"line_number":88,"context_line":"``nova-manage db online_data_migrations [--max-count]``"},{"line_number":89,"context_line":"   Perform data migration to update all live data. Return exit code 0 if no (further)"},{"line_number":90,"context_line":"   updates are needed, exit code 1 if some updates were completed successfully but"},{"line_number":91,"context_line":"   others may remain pending (even if some generated errors), exit code 2 if some"},{"line_number":92,"context_line":"   updates generated errors and no others remain pending, or exit code 127 if invalid"},{"line_number":93,"context_line":"   input is provided (e.g.  non-numeric max-count). This command should be called after"},{"line_number":94,"context_line":"   upgrading database schema and nova services on all controller nodes. If the command"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_d27ffe14","line":91,"range":{"start_line":91,"start_character":29,"end_line":91,"end_character":60},"updated":"2018-10-10 10:59:51.000000000","message":"i woudl delete this,\nmy suggestion was that retrun code 0 and 1 woudl only be retruned if no errors happended","commit_id":"58f918a010e01a86658695f2df8764767f21fecf"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"0dbf9aae4d327497e42e85d8a10b287385bcb746","unresolved":false,"context_lines":[{"line_number":89,"context_line":"   Perform data migration to update all live data. Return exit code 0 if no (further)"},{"line_number":90,"context_line":"   updates are needed, exit code 1 if some updates were completed successfully but"},{"line_number":91,"context_line":"   others may remain pending (even if some generated errors), exit code 2 if some"},{"line_number":92,"context_line":"   updates generated errors and no others remain pending, or exit code 127 if invalid"},{"line_number":93,"context_line":"   input is provided (e.g.  non-numeric max-count). This command should be called after"},{"line_number":94,"context_line":"   upgrading database schema and nova services on all controller nodes. If the command"},{"line_number":95,"context_line":"   exits with partial updates (exit status 1) the command will need to be called again."}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_f2823aff","line":92,"range":{"start_line":92,"start_character":28,"end_line":92,"end_character":56},"updated":"2018-10-10 10:59:51.000000000","message":"this is incorrect and should be removed","commit_id":"58f918a010e01a86658695f2df8764767f21fecf"},{"author":{"_account_id":23561,"name":"iain MacDonnell","email":"iain.macdonnell@oracle.com","username":"imacdonn"},"change_message_id":"8bd81fb5433592e53924a73433cac07e538c176a","unresolved":false,"context_lines":[{"line_number":89,"context_line":"   Perform data migration to update all live data. Return exit code 0 if no (further)"},{"line_number":90,"context_line":"   updates are needed, exit code 1 if some updates were completed successfully but"},{"line_number":91,"context_line":"   others may remain pending (even if some generated errors), exit code 2 if some"},{"line_number":92,"context_line":"   updates generated errors and no others remain pending, or exit code 127 if invalid"},{"line_number":93,"context_line":"   input is provided (e.g.  non-numeric max-count). This command should be called after"},{"line_number":94,"context_line":"   upgrading database schema and nova services on all controller nodes. If the command"},{"line_number":95,"context_line":"   exits with partial updates (exit status 1) the command will need to be called again."}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_d2685ef5","line":92,"range":{"start_line":92,"start_character":28,"end_line":92,"end_character":56},"in_reply_to":"3f79a3b5_f2823aff","updated":"2018-10-10 11:14:09.000000000","message":"It\u0027s only incorrect if we adopt your meaning of 2 (i.e. exceptions, whether or not there are any other migrations pending). I\u0027m not sure that we can do that.","commit_id":"58f918a010e01a86658695f2df8764767f21fecf"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"532f9d9e34b61d9dadb01c9f1992f4665e96f99b","unresolved":false,"context_lines":[{"line_number":94,"context_line":"   upgrading database schema and nova services on all controller nodes. If the command"},{"line_number":95,"context_line":"   exits with partial updates (exit status 1) the command will need to be called again."},{"line_number":96,"context_line":"   If it exits with status 2, intervention is required to resolve the issue causing"},{"line_number":97,"context_line":"   updates to fail."},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"   ``--max-count`` controls the maximum number of objects to migrate in a given"},{"line_number":100,"context_line":"   call. If not specified, migration will occur in batches of 50 until fully"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f79a3b5_e329033a","line":97,"updated":"2018-10-10 19:53:47.000000000","message":"As I said on the reno, I would avoid saying \"and no others remain pending\". The most likely case for only errors being raised is that there are a few more things to update but we\u0027re failing to do so. I would stick to \"I made progress, but there were errors, which might be resolved if I run again\" and \"I made no progress, so I\u0027m stuck\"","commit_id":"58f918a010e01a86658695f2df8764767f21fecf"}],"doc/source/user/upgrade.rst":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"5b2f46a82fc187941dec29a4e8d766b78efb80bf","unresolved":false,"context_lines":[{"line_number":150,"context_line":"     effect, and more work may remain to be done), even if some migrations"},{"line_number":151,"context_line":"     produce errors. If all possible migrations have completed and some are"},{"line_number":152,"context_line":"     still producing errors, exit status 2 will be returned. In this case, the"},{"line_number":153,"context_line":"     cause of the errors should be investigated and resolved. migrations should be"},{"line_number":154,"context_line":"     considered successfully completed only when the command returns exit status 0."},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"   * At this point, you must also ensure you update the configuration, to stop"}],"source_content_type":"text/x-rst","patch_set":4,"id":"3f79a3b5_7b53fe6c","line":153,"range":{"start_line":153,"start_character":62,"end_line":153,"end_character":63},"updated":"2018-10-15 19:58:36.000000000","message":"Caps","commit_id":"72712b460f5b5124c814e16cdd8efa07cc1d80c7"}],"nova/cmd/manage.py":[{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"20b0904e7eef31861f9a33f6a0ed6a7f4c01f420","unresolved":false,"context_lines":[{"line_number":159,"context_line":"        try:"},{"line_number":160,"context_line":"            db.floating_ip_bulk_create(admin_context, ips, want_result\u003dFalse)"},{"line_number":161,"context_line":"        except exception.FloatingIpExists as exc:"},{"line_number":162,"context_line":"            # NOTE(simplylizz): Maybe logging would be better here"},{"line_number":163,"context_line":"            # instead of printing, but logging isn\u0027t used here and I"},{"line_number":164,"context_line":"            # don\u0027t know why."},{"line_number":165,"context_line":"            print(\u0027error: %s\u0027 % exc)"},{"line_number":166,"context_line":"            return 1"},{"line_number":167,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_d2a0afa7","line":164,"range":{"start_line":162,"start_character":0,"end_line":164,"end_character":29},"updated":"2018-10-05 18:31:37.000000000","message":"here","commit_id":"e2925d631d531de1bd502174203374b8e28b77b6"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7cab748a142663d0c06102598544111ef752b3fe","unresolved":false,"context_lines":[{"line_number":681,"context_line":"            except Exception:"},{"line_number":682,"context_line":"                msg \u003d (_(\"Error attempting to run %(method)s\") % dict("},{"line_number":683,"context_line":"                       method\u003dmigration_meth))"},{"line_number":684,"context_line":"                print(msg)"},{"line_number":685,"context_line":"                LOG.exception(msg)"},{"line_number":686,"context_line":"                exceptions \u003d True"},{"line_number":687,"context_line":"                found \u003d done \u003d 0"},{"line_number":688,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_ed4b9883","line":685,"range":{"start_line":684,"start_character":16,"end_line":685,"end_character":34},"updated":"2018-10-05 14:02:06.000000000","message":"Why both?","commit_id":"e2925d631d531de1bd502174203374b8e28b77b6"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"20b0904e7eef31861f9a33f6a0ed6a7f4c01f420","unresolved":false,"context_lines":[{"line_number":681,"context_line":"            except Exception:"},{"line_number":682,"context_line":"                msg \u003d (_(\"Error attempting to run %(method)s\") % dict("},{"line_number":683,"context_line":"                       method\u003dmigration_meth))"},{"line_number":684,"context_line":"                print(msg)"},{"line_number":685,"context_line":"                LOG.exception(msg)"},{"line_number":686,"context_line":"                exceptions \u003d True"},{"line_number":687,"context_line":"                found \u003d done \u003d 0"},{"line_number":688,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_92aa3782","line":685,"range":{"start_line":684,"start_character":16,"end_line":685,"end_character":34},"in_reply_to":"3f79a3b5_1ce880dd","updated":"2018-10-05 18:31:37.000000000","message":"There is not any place which outputs log in this module, but there is a question about that as line 163.\nIt would be better to remove LOG at this time and change them if necessary in the future.","commit_id":"e2925d631d531de1bd502174203374b8e28b77b6"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7e8a81dbc6ec85feb5915a6777744a6908b95b69","unresolved":false,"context_lines":[{"line_number":681,"context_line":"            except Exception:"},{"line_number":682,"context_line":"                msg \u003d (_(\"Error attempting to run %(method)s\") % dict("},{"line_number":683,"context_line":"                       method\u003dmigration_meth))"},{"line_number":684,"context_line":"                print(msg)"},{"line_number":685,"context_line":"                LOG.exception(msg)"},{"line_number":686,"context_line":"                exceptions \u003d True"},{"line_number":687,"context_line":"                found \u003d done \u003d 0"},{"line_number":688,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_1b84035d","line":685,"range":{"start_line":684,"start_character":16,"end_line":685,"end_character":34},"in_reply_to":"3f79a3b5_52f1ff95","updated":"2018-10-05 20:12:46.000000000","message":"Note that the stdout is just the message, but the log has the stack trace, which is useful.\n\nAgree with Iain, there is logging from callouts to methods in imported modules, which is presumably why logging is set up in the first place in main() (L2334-7). I see no reason to go make a whole separate patch in which to discuss the virtues of adding LOG to this module (L78).","commit_id":"e2925d631d531de1bd502174203374b8e28b77b6"},{"author":{"_account_id":23561,"name":"iain MacDonnell","email":"iain.macdonnell@oracle.com","username":"imacdonn"},"change_message_id":"e3480d98c80323db74d3942362bfb1c9be041693","unresolved":false,"context_lines":[{"line_number":681,"context_line":"            except Exception:"},{"line_number":682,"context_line":"                msg \u003d (_(\"Error attempting to run %(method)s\") % dict("},{"line_number":683,"context_line":"                       method\u003dmigration_meth))"},{"line_number":684,"context_line":"                print(msg)"},{"line_number":685,"context_line":"                LOG.exception(msg)"},{"line_number":686,"context_line":"                exceptions \u003d True"},{"line_number":687,"context_line":"                found \u003d done \u003d 0"},{"line_number":688,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_52f1ff95","line":685,"range":{"start_line":684,"start_character":16,"end_line":685,"end_character":34},"in_reply_to":"3f79a3b5_92aa3782","updated":"2018-10-05 18:41:24.000000000","message":"There is logging from imported modules, though - specifically for schema migrations.\n\nI\u0027d rather address any concerns about using logging than just assume that it\u0027s bad because it wasn\u0027t used before....","commit_id":"e2925d631d531de1bd502174203374b8e28b77b6"},{"author":{"_account_id":23561,"name":"iain MacDonnell","email":"iain.macdonnell@oracle.com","username":"imacdonn"},"change_message_id":"84daf9bc9cb9e627f094f55fd83725f135c0a776","unresolved":false,"context_lines":[{"line_number":681,"context_line":"            except Exception:"},{"line_number":682,"context_line":"                msg \u003d (_(\"Error attempting to run %(method)s\") % dict("},{"line_number":683,"context_line":"                       method\u003dmigration_meth))"},{"line_number":684,"context_line":"                print(msg)"},{"line_number":685,"context_line":"                LOG.exception(msg)"},{"line_number":686,"context_line":"                exceptions \u003d True"},{"line_number":687,"context_line":"                found \u003d done \u003d 0"},{"line_number":688,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_1ce880dd","line":685,"range":{"start_line":684,"start_character":16,"end_line":685,"end_character":34},"in_reply_to":"3f79a3b5_ed4b9883","updated":"2018-10-05 16:39:28.000000000","message":"print() goes to stdout, which is (potentially) immediately visible to the user, and provides an indication that something went wrong, while attempts at other migrations might still be under way. It\u0027s also where the message goes in the current implementation. I could probably be persueded to remove it.","commit_id":"e2925d631d531de1bd502174203374b8e28b77b6"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7f270f8c1124ace423a1013f533b4b79ff4395e6","unresolved":false,"context_lines":[{"line_number":701,"context_line":""},{"line_number":702,"context_line":"    @args(\u0027--max-count\u0027, metavar\u003d\u0027\u003cnumber\u003e\u0027, dest\u003d\u0027max_count\u0027,"},{"line_number":703,"context_line":"          help\u003d\u0027Maximum number of objects to consider\u0027)"},{"line_number":704,"context_line":"    def online_data_migrations(self, max_count\u003dNone):"},{"line_number":705,"context_line":"        ctxt \u003d context.get_admin_context()"},{"line_number":706,"context_line":"        if max_count is not None:"},{"line_number":707,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_6efe5e6b","line":704,"updated":"2018-10-09 16:16:33.000000000","message":"Semi-related, it\u0027s too bad we don\u0027t have help documentation/description on the command itself like what we have in the man page docs. That could be a follow up though...","commit_id":"e2925d631d531de1bd502174203374b8e28b77b6"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"069edba89b78fbe92dc822afddabefdfbc553fa1","unresolved":false,"context_lines":[{"line_number":701,"context_line":""},{"line_number":702,"context_line":"    @args(\u0027--max-count\u0027, metavar\u003d\u0027\u003cnumber\u003e\u0027, dest\u003d\u0027max_count\u0027,"},{"line_number":703,"context_line":"          help\u003d\u0027Maximum number of objects to consider\u0027)"},{"line_number":704,"context_line":"    def online_data_migrations(self, max_count\u003dNone):"},{"line_number":705,"context_line":"        ctxt \u003d context.get_admin_context()"},{"line_number":706,"context_line":"        if max_count is not None:"},{"line_number":707,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_a941c938","line":704,"range":{"start_line":704,"start_character":8,"end_line":704,"end_character":30},"updated":"2018-10-09 23:05:45.000000000","message":"some im goint to step through this and annotate my current understanding of the code so follow my comments :) ...","commit_id":"e2925d631d531de1bd502174203374b8e28b77b6"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"069edba89b78fbe92dc822afddabefdfbc553fa1","unresolved":false,"context_lines":[{"line_number":708,"context_line":"                max_count \u003d int(max_count)"},{"line_number":709,"context_line":"            except ValueError:"},{"line_number":710,"context_line":"                max_count \u003d -1"},{"line_number":711,"context_line":"            unlimited \u003d False"},{"line_number":712,"context_line":"            if max_count \u003c 1:"},{"line_number":713,"context_line":"                print(_(\u0027Must supply a positive value for max_number\u0027))"},{"line_number":714,"context_line":"                return 127"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_296ff9c4","line":711,"range":{"start_line":711,"start_character":12,"end_line":711,"end_character":29},"updated":"2018-10-09 23:05:45.000000000","message":"... if we pass --max-count we set unlimited to false ...","commit_id":"e2925d631d531de1bd502174203374b8e28b77b6"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"069edba89b78fbe92dc822afddabefdfbc553fa1","unresolved":false,"context_lines":[{"line_number":721,"context_line":"        migration_info \u003d {}"},{"line_number":722,"context_line":"        got_exceptions \u003d False"},{"line_number":723,"context_line":"        while ran is None or ran !\u003d 0:"},{"line_number":724,"context_line":"            migrations, exceptions \u003d self._run_migration(ctxt, max_count)"},{"line_number":725,"context_line":"            ran \u003d 0"},{"line_number":726,"context_line":"            for name in migrations:"},{"line_number":727,"context_line":"                migration_info.setdefault(name, (0, 0))"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_29a4d906","line":724,"range":{"start_line":724,"start_character":37,"end_line":724,"end_character":73},"updated":"2018-10-09 23:05:45.000000000","message":"we run up to max_count migrations that may or may not raise exceptions.","commit_id":"e2925d631d531de1bd502174203374b8e28b77b6"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"069edba89b78fbe92dc822afddabefdfbc553fa1","unresolved":false,"context_lines":[{"line_number":722,"context_line":"        got_exceptions \u003d False"},{"line_number":723,"context_line":"        while ran is None or ran !\u003d 0:"},{"line_number":724,"context_line":"            migrations, exceptions \u003d self._run_migration(ctxt, max_count)"},{"line_number":725,"context_line":"            ran \u003d 0"},{"line_number":726,"context_line":"            for name in migrations:"},{"line_number":727,"context_line":"                migration_info.setdefault(name, (0, 0))"},{"line_number":728,"context_line":"                migration_info[name] \u003d ("}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_09a1ddf7","line":725,"range":{"start_line":725,"start_character":12,"end_line":725,"end_character":19},"updated":"2018-10-09 23:05:45.000000000","message":"ran is set to 0 to indicate we ran 0 migrations on this iteration of the loop.","commit_id":"e2925d631d531de1bd502174203374b8e28b77b6"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"069edba89b78fbe92dc822afddabefdfbc553fa1","unresolved":false,"context_lines":[{"line_number":729,"context_line":"                    migration_info[name][0] + migrations[name][0],"},{"line_number":730,"context_line":"                    migration_info[name][1] + migrations[name][1],"},{"line_number":731,"context_line":"                )"},{"line_number":732,"context_line":"                ran +\u003d migrations[name][1]"},{"line_number":733,"context_line":"            got_exceptions \u003d exceptions or got_exceptions"},{"line_number":734,"context_line":"            if not unlimited:"},{"line_number":735,"context_line":"                break"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_6983b156","line":732,"range":{"start_line":732,"start_character":16,"end_line":732,"end_character":42},"updated":"2018-10-09 23:05:45.000000000","message":"we count how many migrations ran","commit_id":"e2925d631d531de1bd502174203374b8e28b77b6"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"069edba89b78fbe92dc822afddabefdfbc553fa1","unresolved":false,"context_lines":[{"line_number":731,"context_line":"                )"},{"line_number":732,"context_line":"                ran +\u003d migrations[name][1]"},{"line_number":733,"context_line":"            got_exceptions \u003d exceptions or got_exceptions"},{"line_number":734,"context_line":"            if not unlimited:"},{"line_number":735,"context_line":"                break"},{"line_number":736,"context_line":""},{"line_number":737,"context_line":"        t \u003d prettytable.PrettyTable([_(\u0027Migration\u0027),"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_89696d8d","line":734,"range":{"start_line":734,"start_character":11,"end_line":734,"end_character":29},"updated":"2018-10-09 23:05:45.000000000","message":"... if max count was passed we unlimeited is false so\nnot unlimited is true.\nand we break out of the loop here.\n\nif this iteration ran any migrations then \nreturn ran and 1 or 0 on line 757 will return 1\n\nas a result 1 previously meant that\nwe ran up to max_count sucessful migrations. we may have ran less then max count but there was at least one succeful migration \nand if there were exceptions they were swallowed by the except clasue on line 681 with an error message printed to the console.\n\nif we did not set max count unlimeted is ture so not unlimited is false and we revalue the while condition.\n\nif ran is currently 0 that means there were no sucessful migrations this run and there are no migrations remeanting.\n\nso we exit the loop and \"return ran and 1 or 0\" on line 757 retruns 0\n\nas a result 0 means i ran all migrations that are pending. they may or may not have  been sucessful.","commit_id":"e2925d631d531de1bd502174203374b8e28b77b6"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"b4f543c03e7687ee4f2eee1c8bf2befcd5c75052","unresolved":false,"context_lines":[{"line_number":750,"context_line":"        if got_exceptions:"},{"line_number":751,"context_line":"            print(_(\"Some migrations raised exceptions. Check log, resolve \""},{"line_number":752,"context_line":"                    \"issues (if applicable), and retry.\"))"},{"line_number":753,"context_line":"            return 1"},{"line_number":754,"context_line":""},{"line_number":755,"context_line":"        # TODO(mriedem): Potentially add another return code for"},{"line_number":756,"context_line":"        # \"there are more migrations, but not completable right now\""}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_6e973e3b","line":753,"range":{"start_line":753,"start_character":12,"end_line":753,"end_character":20},"updated":"2018-10-09 16:11:14.000000000","message":"This now confuses the \"I ran some stuff\" and \"there was a failure\", which is a very bad ambiguity.\n\nIMHO, we can\u0027t just change the return value of this command on a whim, as everyone that is automating this process will be affected. Since I imagine people are simply running this until it returns zero, this change will now send things into an infinite loop. Even with exceptions, at least we\u0027d likely terminate at a zero return eventually.\n\nAt the very least it needs to be a different return code, and well-documented/reno\u0027d.","commit_id":"e2925d631d531de1bd502174203374b8e28b77b6"},{"author":{"_account_id":23561,"name":"iain MacDonnell","email":"iain.macdonnell@oracle.com","username":"imacdonn"},"change_message_id":"e43070eeb16c3a49e9fde1dc67825acfd9444818","unresolved":false,"context_lines":[{"line_number":750,"context_line":"        if got_exceptions:"},{"line_number":751,"context_line":"            print(_(\"Some migrations raised exceptions. Check log, resolve \""},{"line_number":752,"context_line":"                    \"issues (if applicable), and retry.\"))"},{"line_number":753,"context_line":"            return 1"},{"line_number":754,"context_line":""},{"line_number":755,"context_line":"        # TODO(mriedem): Potentially add another return code for"},{"line_number":756,"context_line":"        # \"there are more migrations, but not completable right now\""}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_d4905852","line":753,"range":{"start_line":753,"start_character":12,"end_line":753,"end_character":20},"in_reply_to":"3f79a3b5_492a752f","updated":"2018-10-10 00:30:12.000000000","message":"Sortof, but there\u0027s no way to determine total_migration_count.","commit_id":"e2925d631d531de1bd502174203374b8e28b77b6"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7f270f8c1124ace423a1013f533b4b79ff4395e6","unresolved":false,"context_lines":[{"line_number":750,"context_line":"        if got_exceptions:"},{"line_number":751,"context_line":"            print(_(\"Some migrations raised exceptions. Check log, resolve \""},{"line_number":752,"context_line":"                    \"issues (if applicable), and retry.\"))"},{"line_number":753,"context_line":"            return 1"},{"line_number":754,"context_line":""},{"line_number":755,"context_line":"        # TODO(mriedem): Potentially add another return code for"},{"line_number":756,"context_line":"        # \"there are more migrations, but not completable right now\""}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_8e017a70","line":753,"range":{"start_line":753,"start_character":12,"end_line":753,"end_character":20},"in_reply_to":"3f79a3b5_6e973e3b","updated":"2018-10-09 16:16:33.000000000","message":"Agree, and missed that we call this out specifically in the man page docs:\n\nhttps://docs.openstack.org/nova/latest/cli/nova-manage.html\n\n\" Return exit code 0 if migrations were successful or exit code 1 for partial updates. This command should be called after upgrading database schema and nova services on all controller nodes. If the command exits with partial updates (exit code 1) the command will need to be called again.\"\n\nHaving said that, would we return 1 before anyway? I guess not since we didn\u0027t raise any exceptions, we swallowed them. So I\u0027d exit with 2 or something like that to indicate a difference between 1 and \"something failed, check it out\" as Dan said. And document it (and reno).","commit_id":"e2925d631d531de1bd502174203374b8e28b77b6"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"069edba89b78fbe92dc822afddabefdfbc553fa1","unresolved":false,"context_lines":[{"line_number":750,"context_line":"        if got_exceptions:"},{"line_number":751,"context_line":"            print(_(\"Some migrations raised exceptions. Check log, resolve \""},{"line_number":752,"context_line":"                    \"issues (if applicable), and retry.\"))"},{"line_number":753,"context_line":"            return 1"},{"line_number":754,"context_line":""},{"line_number":755,"context_line":"        # TODO(mriedem): Potentially add another return code for"},{"line_number":756,"context_line":"        # \"there are more migrations, but not completable right now\""}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_492a752f","line":753,"range":{"start_line":753,"start_character":12,"end_line":753,"end_character":20},"in_reply_to":"3f79a3b5_8e017a70","updated":"2018-10-09 23:05:45.000000000","message":"based on that i woudl sugges we return 2 here and have it mean i ran some migrations and at least 1 had an error.\n\nby introduceing a retrun value of 2\n\nreturning 1 now means \"we ran up to max-count successful migrations with no error and there are more to run\"\n\nand returning 0 now means we ran all pending migrations and there were no errors.\n\nso if your scripts stoped on 0 you now know all migrations suceeded.\nif you scripts repated on 1 that is still correct as no errors have happended.\n\nif there was an error we always exit with 2 and your scripts should stop as a migration failed and some action is required to fix it.\n\nif the exception was due to migration ordering the srict could retry on 2 up to a fixed limit to see if it resolves the ordiering issues. this is different for 1 mean ther was more work to do so your scripts should retry with out limit for a result of 1\n\nthe upper bound for retries with a return of 1 is ((total_migration_count/max_count) +1)  or in other words\nas the batch size decreases (--max-count) the number of expected retries for exit code 1 increase.\n\ndoes this make sense?","commit_id":"e2925d631d531de1bd502174203374b8e28b77b6"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7f270f8c1124ace423a1013f533b4b79ff4395e6","unresolved":false,"context_lines":[{"line_number":2356,"context_line":"            pdb.post_mortem()"},{"line_number":2357,"context_line":"        else:"},{"line_number":2358,"context_line":"            print(_(\"An error has occurred:\\n%s\") % traceback.format_exc())"},{"line_number":2359,"context_line":"        return 1"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_0ecc8a60","line":2359,"range":{"start_line":2359,"start_character":8,"end_line":2359,"end_character":16},"updated":"2018-10-09 16:16:33.000000000","message":"Would we return 1 before anyway?","commit_id":"e2925d631d531de1bd502174203374b8e28b77b6"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"0dbf9aae4d327497e42e85d8a10b287385bcb746","unresolved":false,"context_lines":[{"line_number":681,"context_line":"            except Exception:"},{"line_number":682,"context_line":"                msg \u003d (_(\"Error attempting to run %(method)s\") % dict("},{"line_number":683,"context_line":"                       method\u003dmigration_meth))"},{"line_number":684,"context_line":"                print(msg)"},{"line_number":685,"context_line":"                LOG.exception(msg)"},{"line_number":686,"context_line":"                exceptions \u003d True"},{"line_number":687,"context_line":"                found \u003d done \u003d 0"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_b299226c","line":684,"range":{"start_line":684,"start_character":16,"end_line":684,"end_character":26},"updated":"2018-10-10 10:59:51.000000000","message":"the print is not needed if you are using LOG so i would remove.","commit_id":"58f918a010e01a86658695f2df8764767f21fecf"},{"author":{"_account_id":23561,"name":"iain MacDonnell","email":"iain.macdonnell@oracle.com","username":"imacdonn"},"change_message_id":"8bd81fb5433592e53924a73433cac07e538c176a","unresolved":false,"context_lines":[{"line_number":681,"context_line":"            except Exception:"},{"line_number":682,"context_line":"                msg \u003d (_(\"Error attempting to run %(method)s\") % dict("},{"line_number":683,"context_line":"                       method\u003dmigration_meth))"},{"line_number":684,"context_line":"                print(msg)"},{"line_number":685,"context_line":"                LOG.exception(msg)"},{"line_number":686,"context_line":"                exceptions \u003d True"},{"line_number":687,"context_line":"                found \u003d done \u003d 0"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_b26da202","line":684,"range":{"start_line":684,"start_character":16,"end_line":684,"end_character":26},"in_reply_to":"3f79a3b5_b299226c","updated":"2018-10-10 11:14:09.000000000","message":"We\u0027ve already been over this. See comments from PS1.","commit_id":"58f918a010e01a86658695f2df8764767f21fecf"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"0dbf9aae4d327497e42e85d8a10b287385bcb746","unresolved":false,"context_lines":[{"line_number":743,"context_line":"        print(t)"},{"line_number":744,"context_line":""},{"line_number":745,"context_line":"        # NOTE(imacdonn): Some migrations may depend on others having already"},{"line_number":746,"context_line":"        # completed, and may raise exceptions if that has not yet happened,"},{"line_number":747,"context_line":"        # so only consider exceptions fatal if no work was done (by other"},{"line_number":748,"context_line":"        # migrations), so that the command may be iterated until no further"},{"line_number":749,"context_line":"        # work is deemed possible."},{"line_number":750,"context_line":"        if got_exceptions and not ran:"},{"line_number":751,"context_line":"            print(_(\"Some migrations failed, and no others succeeded. Check \""},{"line_number":752,"context_line":"                    \"log for details.\"))"},{"line_number":753,"context_line":"            return 2"},{"line_number":754,"context_line":""},{"line_number":755,"context_line":"        # TODO(mriedem): Potentially add another return code for"},{"line_number":756,"context_line":"        # \"there are more migrations, but not completable right now\""}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_d2a61ec1","line":753,"range":{"start_line":746,"start_character":7,"end_line":753,"end_character":20},"updated":"2018-10-10 10:59:51.000000000","message":"this message is inccorecct.\nyou could have processed the first 50 migrations succesfully and then failed on the secod iteration on the first migration in the second iteration of the loop.\n\n\nyou cannot say that no others suceeded with the code as written. you would need as sperate total_ran value that is not reset witin the loop and need to assert it is 0.\n\nbut simpler then that if you remove no others succeded from the message and change the if to just\n\nif got_exceptions:\n    print(...)\n    return 2\n\nthe 1 and 0 will only be returned if non of the migration they ran raised an exception and 2 unabiusly will mean there was an exception wehn running the migrations.","commit_id":"58f918a010e01a86658695f2df8764767f21fecf"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"ab9a3876b6213cf0f1d9c8bde138c7b8a9cf3dfa","unresolved":false,"context_lines":[{"line_number":743,"context_line":"        print(t)"},{"line_number":744,"context_line":""},{"line_number":745,"context_line":"        # NOTE(imacdonn): Some migrations may depend on others having already"},{"line_number":746,"context_line":"        # completed, and may raise exceptions if that has not yet happened,"},{"line_number":747,"context_line":"        # so only consider exceptions fatal if no work was done (by other"},{"line_number":748,"context_line":"        # migrations), so that the command may be iterated until no further"},{"line_number":749,"context_line":"        # work is deemed possible."},{"line_number":750,"context_line":"        if got_exceptions and not ran:"},{"line_number":751,"context_line":"            print(_(\"Some migrations failed, and no others succeeded. Check \""},{"line_number":752,"context_line":"                    \"log for details.\"))"},{"line_number":753,"context_line":"            return 2"},{"line_number":754,"context_line":""},{"line_number":755,"context_line":"        # TODO(mriedem): Potentially add another return code for"},{"line_number":756,"context_line":"        # \"there are more migrations, but not completable right now\""}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_a3c78b98","line":753,"range":{"start_line":746,"start_character":7,"end_line":753,"end_character":20},"in_reply_to":"3f79a3b5_32199286","updated":"2018-10-10 19:51:10.000000000","message":"I\u0027m confused. What you have here seems correct to me. \"not ran\" means we didn\u0027t do any actual migrations, and if we had exceptions, that\u0027s what exit code 2 is for.","commit_id":"58f918a010e01a86658695f2df8764767f21fecf"},{"author":{"_account_id":23561,"name":"iain MacDonnell","email":"iain.macdonnell@oracle.com","username":"imacdonn"},"change_message_id":"8bd81fb5433592e53924a73433cac07e538c176a","unresolved":false,"context_lines":[{"line_number":743,"context_line":"        print(t)"},{"line_number":744,"context_line":""},{"line_number":745,"context_line":"        # NOTE(imacdonn): Some migrations may depend on others having already"},{"line_number":746,"context_line":"        # completed, and may raise exceptions if that has not yet happened,"},{"line_number":747,"context_line":"        # so only consider exceptions fatal if no work was done (by other"},{"line_number":748,"context_line":"        # migrations), so that the command may be iterated until no further"},{"line_number":749,"context_line":"        # work is deemed possible."},{"line_number":750,"context_line":"        if got_exceptions and not ran:"},{"line_number":751,"context_line":"            print(_(\"Some migrations failed, and no others succeeded. Check \""},{"line_number":752,"context_line":"                    \"log for details.\"))"},{"line_number":753,"context_line":"            return 2"},{"line_number":754,"context_line":""},{"line_number":755,"context_line":"        # TODO(mriedem): Potentially add another return code for"},{"line_number":756,"context_line":"        # \"there are more migrations, but not completable right now\""}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_32199286","line":753,"range":{"start_line":746,"start_character":7,"end_line":753,"end_character":20},"in_reply_to":"3f79a3b5_d2a61ec1","updated":"2018-10-10 11:14:09.000000000","message":"I will change this to \"no others and pending\", depending on the discussion about whether not not this is the right thing to do.\n\nIf we exit 2 here, there is no way for automated upgrades to attempt retrying to the command, because there\u0027s no way to know how many times it might be necessary to retry.","commit_id":"58f918a010e01a86658695f2df8764767f21fecf"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9cffe91942681d4c9d1d85438269c2a945ff06c0","unresolved":false,"context_lines":[{"line_number":748,"context_line":"        # fatal if no work was done by any other migrations (\"not ran\"),"},{"line_number":749,"context_line":"        # because otherwise work may still remain to be done, and that work"},{"line_number":750,"context_line":"        # may resolve dependencies for the failing migrations."},{"line_number":751,"context_line":"        if exceptions and (unlimited or not ran):"},{"line_number":752,"context_line":"            print(_(\"Some migrations failed unexpectedly. Check log for \""},{"line_number":753,"context_line":"                    \"details.\"))"},{"line_number":754,"context_line":"            return 2"},{"line_number":755,"context_line":""},{"line_number":756,"context_line":"        # TODO(mriedem): Potentially add another return code for"},{"line_number":757,"context_line":"        # \"there are more migrations, but not completable right now\""}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_362b9b33","line":754,"range":{"start_line":751,"start_character":7,"end_line":754,"end_character":20},"updated":"2018-10-11 20:53:57.000000000","message":"ok\nthis only exits 2 if no progress was made with a max_count set or when no max count was set and no more progress can be made without intervention so im fine with this.","commit_id":"72712b460f5b5124c814e16cdd8efa07cc1d80c7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"356946123c67013dbe592ef43ccbb5feb2bc8325","unresolved":false,"context_lines":[{"line_number":719,"context_line":""},{"line_number":720,"context_line":"        ran \u003d None"},{"line_number":721,"context_line":"        migration_info \u003d {}"},{"line_number":722,"context_line":"        exceptions \u003d False"},{"line_number":723,"context_line":"        while ran is None or ran !\u003d 0:"},{"line_number":724,"context_line":"            migrations, exceptions \u003d self._run_migration(ctxt, max_count)"},{"line_number":725,"context_line":"            ran \u003d 0"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_e5daf673","line":722,"updated":"2018-10-16 15:49:41.000000000","message":"So this will only ever be True outside the loop if any migration raised an exception and ran is 0, right? So we can get rc 1 with exceptions as long as we migrated something, and 2 is we got exceptions and didn\u0027t migrate anything, i.e. we\u0027re blocked.","commit_id":"919fd30eb78a974954d6d9e32ea44c98f26a177d"},{"author":{"_account_id":12898,"name":"Tony Breeds","email":"tony@bakeyournoodle.com","username":"tonyb"},"change_message_id":"4a239a4d084a249a69cd5ea5055f08b77ef18684","unresolved":false,"context_lines":[{"line_number":753,"context_line":"                    \"details.\"))"},{"line_number":754,"context_line":"            return 2"},{"line_number":755,"context_line":""},{"line_number":756,"context_line":"        # TODO(mriedem): Potentially add another return code for"},{"line_number":757,"context_line":"        # \"there are more migrations, but not completable right now\""},{"line_number":758,"context_line":"        return ran and 1 or 0"},{"line_number":759,"context_line":""},{"line_number":760,"context_line":"    @args(\u0027--resource_class\u0027, metavar\u003d\u0027\u003cclass\u003e\u0027, required\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_96a108f9","line":757,"range":{"start_line":756,"start_character":0,"end_line":757,"end_character":68},"updated":"2018-10-16 04:14:50.000000000","message":"Isn\u0027t this what you just added?  Return value of 2 means \"All the possible migrations have completed except the ones in error\" right?","commit_id":"919fd30eb78a974954d6d9e32ea44c98f26a177d"},{"author":{"_account_id":23561,"name":"iain MacDonnell","email":"iain.macdonnell@oracle.com","username":"imacdonn"},"change_message_id":"366375382006f1bbe457397eb7d3364f1ff97b66","unresolved":false,"context_lines":[{"line_number":753,"context_line":"                    \"details.\"))"},{"line_number":754,"context_line":"            return 2"},{"line_number":755,"context_line":""},{"line_number":756,"context_line":"        # TODO(mriedem): Potentially add another return code for"},{"line_number":757,"context_line":"        # \"there are more migrations, but not completable right now\""},{"line_number":758,"context_line":"        return ran and 1 or 0"},{"line_number":759,"context_line":""},{"line_number":760,"context_line":"    @args(\u0027--resource_class\u0027, metavar\u003d\u0027\u003cclass\u003e\u0027, required\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_f95cef1a","line":757,"range":{"start_line":756,"start_character":0,"end_line":757,"end_character":68},"in_reply_to":"3f79a3b5_96a108f9","updated":"2018-10-16 04:40:15.000000000","message":"IIUC, there are some migrations that cannot be applied, even though there are rows in the database to which they could pertain. They would not raise exceptions, but would not take effect (leaving the rows unmodified). My interpretation of the TODO was to add another return code that indicates that there were some of those. I\u0027m not sure what the value would be, though.","commit_id":"919fd30eb78a974954d6d9e32ea44c98f26a177d"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"a033cf7f92440bcc449cb40591d510433f127d4b","unresolved":false,"context_lines":[{"line_number":753,"context_line":"                    \"details.\"))"},{"line_number":754,"context_line":"            return 2"},{"line_number":755,"context_line":""},{"line_number":756,"context_line":"        # TODO(mriedem): Potentially add another return code for"},{"line_number":757,"context_line":"        # \"there are more migrations, but not completable right now\""},{"line_number":758,"context_line":"        return ran and 1 or 0"},{"line_number":759,"context_line":""},{"line_number":760,"context_line":"    @args(\u0027--resource_class\u0027, metavar\u003d\u0027\u003cclass\u003e\u0027, required\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f79a3b5_012a8976","line":757,"range":{"start_line":756,"start_character":0,"end_line":757,"end_character":68},"in_reply_to":"3f79a3b5_f95cef1a","updated":"2018-10-16 14:01:41.000000000","message":"Yeah, mine as well. What is being added here are migrations that think they should be able to work, but fail. What Matt was suggesting was a future where we could communicate back some information from each migration about there being some known dependency that is preventing them from running to completion (different from an error). We had that in the PCI migration of yesteryear, where we had to have all computes come online, update their root parent id before the migration could patch up their linkage.","commit_id":"919fd30eb78a974954d6d9e32ea44c98f26a177d"}],"releasenotes/notes/nova-manage-online-migrations-exit-status-9de5ea7836d0e368.yaml":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"ab9a3876b6213cf0f1d9c8bde138c7b8a9cf3dfa","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    status 2 in the case where some migrations failed (raised exceptions) and"},{"line_number":6,"context_line":"    no others were completed successfully. This should be considered a fatal"},{"line_number":7,"context_line":"    condition that requires intervention. Exit status 1 will be returned in"},{"line_number":8,"context_line":"    the case where some migrations failed but others may remain pending,"},{"line_number":9,"context_line":"    because the former may depend on the latter. The command should be"},{"line_number":10,"context_line":"    reiterated while it returns exit status 1, and considered completed"},{"line_number":11,"context_line":"    successfully only when it returns exit status 0 "}],"source_content_type":"text/x-yaml","patch_set":3,"id":"3f79a3b5_e35b43f6","line":8,"range":{"start_line":8,"start_character":64,"end_line":8,"end_character":71},"updated":"2018-10-10 19:51:10.000000000","message":"Just so you know, I don\u0027t like the word pending here, because you don\u0027t really know that. I think here (and everywhere else) we should stick to \"no work was done, only errors\" vs. \"some work was done, and some errors, which may be resolved if we run again\".","commit_id":"58f918a010e01a86658695f2df8764767f21fecf"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"ab9a3876b6213cf0f1d9c8bde138c7b8a9cf3dfa","unresolved":false,"context_lines":[{"line_number":8,"context_line":"    the case where some migrations failed but others may remain pending,"},{"line_number":9,"context_line":"    because the former may depend on the latter. The command should be"},{"line_number":10,"context_line":"    reiterated while it returns exit status 1, and considered completed"},{"line_number":11,"context_line":"    successfully only when it returns exit status 0 "}],"source_content_type":"text/x-yaml","patch_set":3,"id":"3f79a3b5_e33263c0","line":11,"range":{"start_line":11,"start_character":51,"end_line":11,"end_character":52},"updated":"2018-10-10 19:51:10.000000000","message":"Trailing whitespace, need a period here.","commit_id":"58f918a010e01a86658695f2df8764767f21fecf"},{"author":{"_account_id":12898,"name":"Tony Breeds","email":"tony@bakeyournoodle.com","username":"tonyb"},"change_message_id":"4a239a4d084a249a69cd5ea5055f08b77ef18684","unresolved":false,"context_lines":[{"line_number":6,"context_line":"    no others were completed successfully from the last batch attempted. This"},{"line_number":7,"context_line":"    should be considered a fatal condition that requires intervention. Exit"},{"line_number":8,"context_line":"    status 1 will be returned in the case where the ``--max-count`` option was"},{"line_number":9,"context_line":"    used and some migrations failed but others succeeded (updated at last one"},{"line_number":10,"context_line":"    row), because more work may remain for the non-failing migrations, and"},{"line_number":11,"context_line":"    their completion may be a dependency for the failing ones. The command"},{"line_number":12,"context_line":"    should be reiterated while it returns exit status 1, and considered"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"3f79a3b5_937fdadc","line":9,"range":{"start_line":9,"start_character":69,"end_line":9,"end_character":73},"updated":"2018-10-16 04:14:50.000000000","message":"least?","commit_id":"919fd30eb78a974954d6d9e32ea44c98f26a177d"},{"author":{"_account_id":23561,"name":"iain MacDonnell","email":"iain.macdonnell@oracle.com","username":"imacdonn"},"change_message_id":"366375382006f1bbe457397eb7d3364f1ff97b66","unresolved":false,"context_lines":[{"line_number":6,"context_line":"    no others were completed successfully from the last batch attempted. This"},{"line_number":7,"context_line":"    should be considered a fatal condition that requires intervention. Exit"},{"line_number":8,"context_line":"    status 1 will be returned in the case where the ``--max-count`` option was"},{"line_number":9,"context_line":"    used and some migrations failed but others succeeded (updated at last one"},{"line_number":10,"context_line":"    row), because more work may remain for the non-failing migrations, and"},{"line_number":11,"context_line":"    their completion may be a dependency for the failing ones. The command"},{"line_number":12,"context_line":"    should be reiterated while it returns exit status 1, and considered"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"3f79a3b5_192a0b77","line":9,"range":{"start_line":9,"start_character":69,"end_line":9,"end_character":73},"in_reply_to":"3f79a3b5_937fdadc","updated":"2018-10-16 04:40:15.000000000","message":"Yes :/","commit_id":"919fd30eb78a974954d6d9e32ea44c98f26a177d"}]}
