)]}'
{"cinder/cmd/manage.py":[{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"fbe0d10231c2cd6cf441fd6cf2d622e927bd23a1","unresolved":false,"context_lines":[{"line_number":240,"context_line":"                    \"logs for more details.\"))"},{"line_number":241,"context_line":"            sys.exit(1)"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"    def _run_migration(self, ctxt, max_count, force):"},{"line_number":244,"context_line":"        ran \u003d 0"},{"line_number":245,"context_line":"        for migration_meth in self.online_migrations:"},{"line_number":246,"context_line":"            count \u003d max_count - ran"}],"source_content_type":"text/x-python","patch_set":1,"id":"7aa08908_2d53ed3a","line":243,"range":{"start_line":243,"start_character":46,"end_line":243,"end_character":51},"updated":"2016-06-16 17:49:48.000000000","message":"How are you planning to use force here?  I get it in the context of online_data_migration but I\u0027m not following why it bubble up through here?","commit_id":"b525cc36c39fd2331fdc2c98acab2a0a5674272b"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"9635fc9427831599f88a0e506329d81cd4d36352","unresolved":false,"context_lines":[{"line_number":240,"context_line":"                    \"logs for more details.\"))"},{"line_number":241,"context_line":"            sys.exit(1)"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"    def _run_migration(self, ctxt, max_count, force):"},{"line_number":244,"context_line":"        ran \u003d 0"},{"line_number":245,"context_line":"        for migration_meth in self.online_migrations:"},{"line_number":246,"context_line":"            count \u003d max_count - ran"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a9d85d2_95c9517b","line":243,"range":{"start_line":243,"start_character":46,"end_line":243,"end_character":51},"in_reply_to":"7aa08908_2d53ed3a","updated":"2016-06-21 13:25:31.000000000","message":"If someone doesn\u0027t care about live upgrade and is shutting down all the services prior to that, then he can specify the flag. That will tell migrations that we\u0027re offline. Otherwise I would expect migrations not to modify records that are in the middle of some action (in most cases - status !\u003d AVAILABLE) to prevent race conditions.","commit_id":"b525cc36c39fd2331fdc2c98acab2a0a5674272b"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"fbe0d10231c2cd6cf441fd6cf2d622e927bd23a1","unresolved":false,"context_lines":[{"line_number":242,"context_line":""},{"line_number":243,"context_line":"    def _run_migration(self, ctxt, max_count, force):"},{"line_number":244,"context_line":"        ran \u003d 0"},{"line_number":245,"context_line":"        for migration_meth in self.online_migrations:"},{"line_number":246,"context_line":"            count \u003d max_count - ran"},{"line_number":247,"context_line":"            try:"},{"line_number":248,"context_line":"                found, done \u003d migration_meth(ctxt, count, force)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7aa08908_ad287d34","line":245,"range":{"start_line":245,"start_character":26,"end_line":245,"end_character":27},"updated":"2016-06-16 17:49:48.000000000","message":"it appears online_migrations is always empty?  Or is this the precursor to O that you mention in the commit message before adding possible online migrations?","commit_id":"b525cc36c39fd2331fdc2c98acab2a0a5674272b"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"9635fc9427831599f88a0e506329d81cd4d36352","unresolved":false,"context_lines":[{"line_number":242,"context_line":""},{"line_number":243,"context_line":"    def _run_migration(self, ctxt, max_count, force):"},{"line_number":244,"context_line":"        ran \u003d 0"},{"line_number":245,"context_line":"        for migration_meth in self.online_migrations:"},{"line_number":246,"context_line":"            count \u003d max_count - ran"},{"line_number":247,"context_line":"            try:"},{"line_number":248,"context_line":"                found, done \u003d migration_meth(ctxt, count, force)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a9d85d2_f5cd35b8","line":245,"range":{"start_line":245,"start_character":26,"end_line":245,"end_character":27},"in_reply_to":"7aa08908_ad287d34","updated":"2016-06-21 13:25:31.000000000","message":"Yup, I\u0027ve split that from another commit because Alex needed that in another place. This is just generic infrastructure.","commit_id":"b525cc36c39fd2331fdc2c98acab2a0a5674272b"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"fbe0d10231c2cd6cf441fd6cf2d622e927bd23a1","unresolved":false,"context_lines":[{"line_number":289,"context_line":"            if not unlimited:"},{"line_number":290,"context_line":"                break"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"        return ran and 1 or 0"},{"line_number":293,"context_line":""},{"line_number":294,"context_line":""},{"line_number":295,"context_line":"class VersionCommands(object):"}],"source_content_type":"text/x-python","patch_set":1,"id":"7aa08908_2ad633f1","line":292,"range":{"start_line":292,"start_character":19,"end_line":292,"end_character":29},"updated":"2016-06-16 17:49:48.000000000","message":"? I realize Nova has been using this code and it all appears to work... but I\u0027m unclear on the logic here?  Couldn\u0027t we just simply say if ran: return 1 or something?\n\nIf I\u0027m wrong about this, then it\u0027s more evident that I think we should have a comment explaining the logic and the expected value of ran.  My understanding is it\u0027s the count of migrations performed, so as long as that\u0027s \u003e0 we\u0027ll eval the and to 1 no?","commit_id":"b525cc36c39fd2331fdc2c98acab2a0a5674272b"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"9635fc9427831599f88a0e506329d81cd4d36352","unresolved":false,"context_lines":[{"line_number":289,"context_line":"            if not unlimited:"},{"line_number":290,"context_line":"                break"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"        return ran and 1 or 0"},{"line_number":293,"context_line":""},{"line_number":294,"context_line":""},{"line_number":295,"context_line":"class VersionCommands(object):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a9d85d2_30c6ab49","line":292,"range":{"start_line":292,"start_character":19,"end_line":292,"end_character":29},"in_reply_to":"7aa08908_2ad633f1","updated":"2016-06-21 13:25:31.000000000","message":"http://www.diveintopython.net/power_of_introspection/and_or.html#d0e9975\n\nThat\u0027s simply equivalent of:\n\n 1 if ran else 0\n\nI can change that.","commit_id":"b525cc36c39fd2331fdc2c98acab2a0a5674272b"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"0cffc499b7cfea2dcca7aeb1089cb9520697742b","unresolved":false,"context_lines":[{"line_number":264,"context_line":""},{"line_number":265,"context_line":"    @args(\u0027--max_count\u0027, metavar\u003d\u0027\u003cnumber\u003e\u0027, dest\u003d\u0027max_count\u0027,"},{"line_number":266,"context_line":"          help\u003d\u0027Maximum number of objects to consider.\u0027)"},{"line_number":267,"context_line":"    @args(\u0027--force\u0027, action\u003d\u0027store_true\u0027, dest\u003d\u0027force\u0027,"},{"line_number":268,"context_line":"          help\u003d\u0027Force objects to migrate (even if they may be performing \u0027"},{"line_number":269,"context_line":"               \u0027another operation). This may be dangerous.\u0027)"},{"line_number":270,"context_line":"    def online_data_migrations(self, max_count\u003dNone, force\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":2,"id":"1aa78d24_349db20a","line":267,"updated":"2016-07-06 14:39:54.000000000","message":"Can we name this something like \"--ignore-status\" rather than \"--force\"?  (Or perhaps you have a better name.)\n\nI\u0027d really prefer we stop using \"force\" as a parameter name, since nobody is ever really sure what it means exactly when they want to run these commands.","commit_id":"390addcc0e82c5b90f7c8450ba7a9bf5af78fc43"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"0e41b1f7124396334d9d718361291bad78fbf0a6","unresolved":false,"context_lines":[{"line_number":247,"context_line":"            try:"},{"line_number":248,"context_line":"                found, done \u003d migration_meth(ctxt, count, ignore_state)"},{"line_number":249,"context_line":"            except Exception:"},{"line_number":250,"context_line":"                print(_(\"Error attempting to run %(method)s\") % dict("},{"line_number":251,"context_line":"                    method\u003dmigration_meth))"},{"line_number":252,"context_line":"                found \u003d done \u003d 0"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"            if found:"}],"source_content_type":"text/x-python","patch_set":3,"id":"dada55a8_eb313ca3","line":251,"range":{"start_line":250,"start_character":64,"end_line":251,"end_character":43},"updated":"2016-07-21 21:24:21.000000000","message":"why not simply {...}?\nalso there probably should be migration_meth.__name__","commit_id":"3a3748de4d3231c1218b27abd212ba40b66de19d"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"2a4a2c102bc5fbd06b6978b8d2f4ed46b82c9ff6","unresolved":false,"context_lines":[{"line_number":247,"context_line":"            try:"},{"line_number":248,"context_line":"                found, done \u003d migration_meth(ctxt, count, ignore_state)"},{"line_number":249,"context_line":"            except Exception:"},{"line_number":250,"context_line":"                print(_(\"Error attempting to run %(method)s\") % dict("},{"line_number":251,"context_line":"                    method\u003dmigration_meth))"},{"line_number":252,"context_line":"                found \u003d done \u003d 0"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"            if found:"}],"source_content_type":"text/x-python","patch_set":3,"id":"dada55a8_72e36934","line":251,"range":{"start_line":250,"start_character":64,"end_line":251,"end_character":43},"in_reply_to":"dada55a8_eb313ca3","updated":"2016-07-22 10:01:53.000000000","message":"Done","commit_id":"3a3748de4d3231c1218b27abd212ba40b66de19d"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"0e41b1f7124396334d9d718361291bad78fbf0a6","unresolved":false,"context_lines":[{"line_number":262,"context_line":"                    break"},{"line_number":263,"context_line":"        return ran"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"    @args(\u0027--max_count\u0027, metavar\u003d\u0027\u003cnumber\u003e\u0027, dest\u003d\u0027max_count\u0027,"},{"line_number":266,"context_line":"          help\u003d\u0027Maximum number of objects to consider.\u0027)"},{"line_number":267,"context_line":"    @args(\u0027--ignore_state\u0027, action\u003d\u0027store_true\u0027, dest\u003d\u0027force\u0027,"},{"line_number":268,"context_line":"          help\u003d\u0027Force records to migrate even if another operation is \u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"dada55a8_061e546f","line":265,"updated":"2016-07-21 21:24:21.000000000","message":"you can add type\u003dint and argparse will handle conversion and error handling if value is not an integer","commit_id":"3a3748de4d3231c1218b27abd212ba40b66de19d"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"2a4a2c102bc5fbd06b6978b8d2f4ed46b82c9ff6","unresolved":false,"context_lines":[{"line_number":262,"context_line":"                    break"},{"line_number":263,"context_line":"        return ran"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"    @args(\u0027--max_count\u0027, metavar\u003d\u0027\u003cnumber\u003e\u0027, dest\u003d\u0027max_count\u0027,"},{"line_number":266,"context_line":"          help\u003d\u0027Maximum number of objects to consider.\u0027)"},{"line_number":267,"context_line":"    @args(\u0027--ignore_state\u0027, action\u003d\u0027store_true\u0027, dest\u003d\u0027force\u0027,"},{"line_number":268,"context_line":"          help\u003d\u0027Force records to migrate even if another operation is \u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"dada55a8_f270f9de","line":265,"in_reply_to":"dada55a8_061e546f","updated":"2016-07-22 10:01:53.000000000","message":"Done","commit_id":"3a3748de4d3231c1218b27abd212ba40b66de19d"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"0e41b1f7124396334d9d718361291bad78fbf0a6","unresolved":false,"context_lines":[{"line_number":264,"context_line":""},{"line_number":265,"context_line":"    @args(\u0027--max_count\u0027, metavar\u003d\u0027\u003cnumber\u003e\u0027, dest\u003d\u0027max_count\u0027,"},{"line_number":266,"context_line":"          help\u003d\u0027Maximum number of objects to consider.\u0027)"},{"line_number":267,"context_line":"    @args(\u0027--ignore_state\u0027, action\u003d\u0027store_true\u0027, dest\u003d\u0027force\u0027,"},{"line_number":268,"context_line":"          help\u003d\u0027Force records to migrate even if another operation is \u0027"},{"line_number":269,"context_line":"               \u0027performed on them. This may be dangerous, please refer to \u0027"},{"line_number":270,"context_line":"               \u0027release notes for more information.\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"dada55a8_231b8a82","line":267,"range":{"start_line":267,"start_character":49,"end_line":267,"end_character":61},"updated":"2016-07-21 21:24:21.000000000","message":"dest is \"force\" but function expects parameter \"ignore_state\"","commit_id":"3a3748de4d3231c1218b27abd212ba40b66de19d"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"2a4a2c102bc5fbd06b6978b8d2f4ed46b82c9ff6","unresolved":false,"context_lines":[{"line_number":264,"context_line":""},{"line_number":265,"context_line":"    @args(\u0027--max_count\u0027, metavar\u003d\u0027\u003cnumber\u003e\u0027, dest\u003d\u0027max_count\u0027,"},{"line_number":266,"context_line":"          help\u003d\u0027Maximum number of objects to consider.\u0027)"},{"line_number":267,"context_line":"    @args(\u0027--ignore_state\u0027, action\u003d\u0027store_true\u0027, dest\u003d\u0027force\u0027,"},{"line_number":268,"context_line":"          help\u003d\u0027Force records to migrate even if another operation is \u0027"},{"line_number":269,"context_line":"               \u0027performed on them. This may be dangerous, please refer to \u0027"},{"line_number":270,"context_line":"               \u0027release notes for more information.\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"dada55a8_b2668127","line":267,"range":{"start_line":267,"start_character":49,"end_line":267,"end_character":61},"in_reply_to":"dada55a8_231b8a82","updated":"2016-07-22 10:01:53.000000000","message":"Done","commit_id":"3a3748de4d3231c1218b27abd212ba40b66de19d"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"0e41b1f7124396334d9d718361291bad78fbf0a6","unresolved":false,"context_lines":[{"line_number":268,"context_line":"          help\u003d\u0027Force records to migrate even if another operation is \u0027"},{"line_number":269,"context_line":"               \u0027performed on them. This may be dangerous, please refer to \u0027"},{"line_number":270,"context_line":"               \u0027release notes for more information.\u0027)"},{"line_number":271,"context_line":"    def online_data_migrations(self, max_count\u003dNone, ignore_state\u003dFalse):"},{"line_number":272,"context_line":"        ctxt \u003d context.get_admin_context()"},{"line_number":273,"context_line":"        if max_count is not None:"},{"line_number":274,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":3,"id":"dada55a8_265c337c","line":271,"range":{"start_line":271,"start_character":8,"end_line":271,"end_character":30},"updated":"2016-07-21 21:24:21.000000000","message":"that\u0027s quite a long command comparing to other db commands, any chance to change it to something shorter like \"migrate\"?\nalso docstring would be nice","commit_id":"3a3748de4d3231c1218b27abd212ba40b66de19d"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"2a4a2c102bc5fbd06b6978b8d2f4ed46b82c9ff6","unresolved":false,"context_lines":[{"line_number":268,"context_line":"          help\u003d\u0027Force records to migrate even if another operation is \u0027"},{"line_number":269,"context_line":"               \u0027performed on them. This may be dangerous, please refer to \u0027"},{"line_number":270,"context_line":"               \u0027release notes for more information.\u0027)"},{"line_number":271,"context_line":"    def online_data_migrations(self, max_count\u003dNone, ignore_state\u003dFalse):"},{"line_number":272,"context_line":"        ctxt \u003d context.get_admin_context()"},{"line_number":273,"context_line":"        if max_count is not None:"},{"line_number":274,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":3,"id":"dada55a8_d20335bd","line":271,"range":{"start_line":271,"start_character":8,"end_line":271,"end_character":30},"in_reply_to":"dada55a8_265c337c","updated":"2016-07-22 10:01:53.000000000","message":"I don\u0027t want to have Nova and Cinder have different names for the same thing. Docstring added.","commit_id":"3a3748de4d3231c1218b27abd212ba40b66de19d"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"0e41b1f7124396334d9d718361291bad78fbf0a6","unresolved":false,"context_lines":[{"line_number":271,"context_line":"    def online_data_migrations(self, max_count\u003dNone, ignore_state\u003dFalse):"},{"line_number":272,"context_line":"        ctxt \u003d context.get_admin_context()"},{"line_number":273,"context_line":"        if max_count is not None:"},{"line_number":274,"context_line":"            try:"},{"line_number":275,"context_line":"                max_count \u003d int(max_count)"},{"line_number":276,"context_line":"            except ValueError:"},{"line_number":277,"context_line":"                max_count \u003d -1"},{"line_number":278,"context_line":"            unlimited \u003d False"},{"line_number":279,"context_line":"            if max_count \u003c 1:"},{"line_number":280,"context_line":"                print(_(\u0027Must supply a positive value for max_number\u0027))"}],"source_content_type":"text/x-python","patch_set":3,"id":"dada55a8_f1e65c42","line":277,"range":{"start_line":274,"start_character":12,"end_line":277,"end_character":30},"updated":"2016-07-21 21:24:21.000000000","message":"currently when you provide incorrect value the only message you\u0027ll see is that value is not positive, also not required if you use type conversion as mentioned earlier","commit_id":"3a3748de4d3231c1218b27abd212ba40b66de19d"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"2a4a2c102bc5fbd06b6978b8d2f4ed46b82c9ff6","unresolved":false,"context_lines":[{"line_number":271,"context_line":"    def online_data_migrations(self, max_count\u003dNone, ignore_state\u003dFalse):"},{"line_number":272,"context_line":"        ctxt \u003d context.get_admin_context()"},{"line_number":273,"context_line":"        if max_count is not None:"},{"line_number":274,"context_line":"            try:"},{"line_number":275,"context_line":"                max_count \u003d int(max_count)"},{"line_number":276,"context_line":"            except ValueError:"},{"line_number":277,"context_line":"                max_count \u003d -1"},{"line_number":278,"context_line":"            unlimited \u003d False"},{"line_number":279,"context_line":"            if max_count \u003c 1:"},{"line_number":280,"context_line":"                print(_(\u0027Must supply a positive value for max_number\u0027))"}],"source_content_type":"text/x-python","patch_set":3,"id":"dada55a8_924d3dc7","line":277,"range":{"start_line":274,"start_character":12,"end_line":277,"end_character":30},"in_reply_to":"dada55a8_f1e65c42","updated":"2016-07-22 10:01:53.000000000","message":"Done","commit_id":"3a3748de4d3231c1218b27abd212ba40b66de19d"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"0e41b1f7124396334d9d718361291bad78fbf0a6","unresolved":false,"context_lines":[{"line_number":278,"context_line":"            unlimited \u003d False"},{"line_number":279,"context_line":"            if max_count \u003c 1:"},{"line_number":280,"context_line":"                print(_(\u0027Must supply a positive value for max_number\u0027))"},{"line_number":281,"context_line":"                return 127"},{"line_number":282,"context_line":"        else:"},{"line_number":283,"context_line":"            unlimited \u003d True"},{"line_number":284,"context_line":"            max_count \u003d 50"}],"source_content_type":"text/x-python","patch_set":3,"id":"dada55a8_7298aa6a","line":281,"range":{"start_line":281,"start_character":16,"end_line":281,"end_character":26},"updated":"2016-07-21 21:24:21.000000000","message":"if your intention was to end process and return error code use sys.exit otherwise I see no point in returning any value from this function","commit_id":"3a3748de4d3231c1218b27abd212ba40b66de19d"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"2a4a2c102bc5fbd06b6978b8d2f4ed46b82c9ff6","unresolved":false,"context_lines":[{"line_number":278,"context_line":"            unlimited \u003d False"},{"line_number":279,"context_line":"            if max_count \u003c 1:"},{"line_number":280,"context_line":"                print(_(\u0027Must supply a positive value for max_number\u0027))"},{"line_number":281,"context_line":"                return 127"},{"line_number":282,"context_line":"        else:"},{"line_number":283,"context_line":"            unlimited \u003d True"},{"line_number":284,"context_line":"            max_count \u003d 50"}],"source_content_type":"text/x-python","patch_set":3,"id":"dada55a8_72a6c954","line":281,"range":{"start_line":281,"start_character":16,"end_line":281,"end_character":26},"in_reply_to":"dada55a8_7298aa6a","updated":"2016-07-22 10:01:53.000000000","message":"Done","commit_id":"3a3748de4d3231c1218b27abd212ba40b66de19d"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"0e41b1f7124396334d9d718361291bad78fbf0a6","unresolved":false,"context_lines":[{"line_number":290,"context_line":"            if not unlimited:"},{"line_number":291,"context_line":"                break"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"        return 1 if ran else 0"},{"line_number":294,"context_line":""},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"class VersionCommands(object):"}],"source_content_type":"text/x-python","patch_set":3,"id":"dada55a8_4eae952e","line":293,"range":{"start_line":293,"start_character":8,"end_line":293,"end_character":30},"updated":"2016-07-21 21:24:21.000000000","message":"ditto","commit_id":"3a3748de4d3231c1218b27abd212ba40b66de19d"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"2a4a2c102bc5fbd06b6978b8d2f4ed46b82c9ff6","unresolved":false,"context_lines":[{"line_number":290,"context_line":"            if not unlimited:"},{"line_number":291,"context_line":"                break"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"        return 1 if ran else 0"},{"line_number":294,"context_line":""},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"class VersionCommands(object):"}],"source_content_type":"text/x-python","patch_set":3,"id":"dada55a8_d2617513","line":293,"range":{"start_line":293,"start_character":8,"end_line":293,"end_character":30},"in_reply_to":"dada55a8_4eae952e","updated":"2016-07-22 10:01:53.000000000","message":"Done","commit_id":"3a3748de4d3231c1218b27abd212ba40b66de19d"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"099b94c47b5083a5ed32a2a7f87b9a38bdbbf6d5","unresolved":false,"context_lines":[{"line_number":279,"context_line":"        if max_count is not None:"},{"line_number":280,"context_line":"            unlimited \u003d False"},{"line_number":281,"context_line":"            if max_count \u003c 1:"},{"line_number":282,"context_line":"                print(_(\u0027Must supply a positive value for max_number\u0027))"},{"line_number":283,"context_line":"                sys.exit(127)"},{"line_number":284,"context_line":"        else:"},{"line_number":285,"context_line":"            unlimited \u003d True"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5da102_99a09045","line":282,"range":{"start_line":282,"start_character":58,"end_line":282,"end_character":68},"updated":"2016-10-31 16:53:20.000000000","message":"suggest \u0027.\u0027 here for consistency","commit_id":"7b968df0b573a00cce3b908676b8003519316204"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"0b2b53508fe5ec2de42995ded063b5309127efcd","unresolved":false,"context_lines":[{"line_number":279,"context_line":"        if max_count is not None:"},{"line_number":280,"context_line":"            unlimited \u003d False"},{"line_number":281,"context_line":"            if max_count \u003c 1:"},{"line_number":282,"context_line":"                print(_(\u0027Must supply a positive value for max_number\u0027))"},{"line_number":283,"context_line":"                sys.exit(127)"},{"line_number":284,"context_line":"        else:"},{"line_number":285,"context_line":"            unlimited \u003d True"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a629dbe_4502b670","line":282,"range":{"start_line":282,"start_character":58,"end_line":282,"end_character":68},"in_reply_to":"ba5da102_99a09045","updated":"2016-11-08 13:24:53.000000000","message":"Done","commit_id":"7b968df0b573a00cce3b908676b8003519316204"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"099b94c47b5083a5ed32a2a7f87b9a38bdbbf6d5","unresolved":false,"context_lines":[{"line_number":284,"context_line":"        else:"},{"line_number":285,"context_line":"            unlimited \u003d True"},{"line_number":286,"context_line":"            max_count \u003d 50"},{"line_number":287,"context_line":"            print(_(\u0027Running batches of %i until complete\u0027) % max_count)"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"        ran \u003d None"},{"line_number":290,"context_line":"        while ran is None or ran !\u003d 0:"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba5da102_d98a08bf","line":287,"range":{"start_line":287,"start_character":57,"end_line":287,"end_character":59},"updated":"2016-10-31 16:53:20.000000000","message":"Same here.","commit_id":"7b968df0b573a00cce3b908676b8003519316204"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"0b2b53508fe5ec2de42995ded063b5309127efcd","unresolved":false,"context_lines":[{"line_number":284,"context_line":"        else:"},{"line_number":285,"context_line":"            unlimited \u003d True"},{"line_number":286,"context_line":"            max_count \u003d 50"},{"line_number":287,"context_line":"            print(_(\u0027Running batches of %i until complete\u0027) % max_count)"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"        ran \u003d None"},{"line_number":290,"context_line":"        while ran is None or ran !\u003d 0:"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a629dbe_65f97a80","line":287,"range":{"start_line":287,"start_character":57,"end_line":287,"end_character":59},"in_reply_to":"ba5da102_d98a08bf","updated":"2016-11-08 13:24:53.000000000","message":"Done","commit_id":"7b968df0b573a00cce3b908676b8003519316204"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"48eb2e57636e9deaaf892ffcca9a6544f69ff2ca","unresolved":false,"context_lines":[{"line_number":247,"context_line":""},{"line_number":248,"context_line":"    def _run_migration(self, ctxt, max_count, ignore_state):"},{"line_number":249,"context_line":"        ran \u003d 0"},{"line_number":250,"context_line":"        for migration_meth in self.online_migrations:"},{"line_number":251,"context_line":"            count \u003d max_count - ran"},{"line_number":252,"context_line":"            try:"},{"line_number":253,"context_line":"                found, done \u003d migration_meth(ctxt, count, ignore_state)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a629dbe_dfdf2167","line":250,"updated":"2016-11-09 22:42:17.000000000","message":"I made my patch dependent on your patch: https://review.openstack.org/#/c/350350/\n\nI got the following error on line 250:\n\nTypeError: \"\u0027instancemethod\u0027 object is not iterable\"","commit_id":"f1a6b3d599904ea2e992f84759a74a8421d1dc15"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"73b60aa079433c5600d9aaf6408873d23fcfc9d9","unresolved":false,"context_lines":[{"line_number":247,"context_line":""},{"line_number":248,"context_line":"    def _run_migration(self, ctxt, max_count, ignore_state):"},{"line_number":249,"context_line":"        ran \u003d 0"},{"line_number":250,"context_line":"        for migration_meth in self.online_migrations:"},{"line_number":251,"context_line":"            count \u003d max_count - ran"},{"line_number":252,"context_line":"            try:"},{"line_number":253,"context_line":"                found, done \u003d migration_meth(ctxt, count, ignore_state)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a629dbe_e996d3ee","line":250,"in_reply_to":"9a629dbe_dfdf2167","updated":"2016-11-10 14:38:10.000000000","message":"I\u0027ve commented on your patch - you need to keep self.online_migrations iterable there.","commit_id":"f1a6b3d599904ea2e992f84759a74a8421d1dc15"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"dec02884be464893545a70d46cc2fa7bbfc5929f","unresolved":false,"context_lines":[{"line_number":247,"context_line":""},{"line_number":248,"context_line":"    def _run_migration(self, ctxt, max_count, ignore_state):"},{"line_number":249,"context_line":"        ran \u003d 0"},{"line_number":250,"context_line":"        for migration_meth in self.online_migrations:"},{"line_number":251,"context_line":"            count \u003d max_count - ran"},{"line_number":252,"context_line":"            try:"},{"line_number":253,"context_line":"                found, done \u003d migration_meth(ctxt, count, ignore_state)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a629dbe_4781518e","line":250,"in_reply_to":"9a629dbe_e996d3ee","updated":"2016-11-11 03:06:18.000000000","message":"Got it.  Thanks!","commit_id":"f1a6b3d599904ea2e992f84759a74a8421d1dc15"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"839f7facc9c611da81a25ed13a932ddb458e961e","unresolved":false,"context_lines":[{"line_number":252,"context_line":"            try:"},{"line_number":253,"context_line":"                found, done \u003d migration_meth(ctxt, count, ignore_state)"},{"line_number":254,"context_line":"            except Exception:"},{"line_number":255,"context_line":"                print(_(\"Error attempting to run %(method)s\") %"},{"line_number":256,"context_line":"                      {\u0027method\u0027: migration_meth.__name__})"},{"line_number":257,"context_line":"                found \u003d done \u003d 0"},{"line_number":258,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9a629dbe_8ec9347b","line":255,"updated":"2016-11-08 22:47:23.000000000","message":"nit: dot at the end","commit_id":"f1a6b3d599904ea2e992f84759a74a8421d1dc15"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"839f7facc9c611da81a25ed13a932ddb458e961e","unresolved":false,"context_lines":[{"line_number":258,"context_line":""},{"line_number":259,"context_line":"            if found:"},{"line_number":260,"context_line":"                print(_(\u0027%(total)i rows matched query %(meth)s, %(done)i \u0027"},{"line_number":261,"context_line":"                        \u0027migrated\u0027) % {\u0027total\u0027: found,"},{"line_number":262,"context_line":"                                       \u0027meth\u0027: migration_meth.__name__,"},{"line_number":263,"context_line":"                                       \u0027done\u0027: done})"},{"line_number":264,"context_line":"            if max_count is not None:"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a629dbe_cea16cab","line":261,"updated":"2016-11-08 22:47:23.000000000","message":"nit: dot at the end","commit_id":"f1a6b3d599904ea2e992f84759a74a8421d1dc15"}],"releasenotes/notes/cinder-manage-db-online-schema-migrations-d1c0d40f26d0f033.yaml":[{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"fbe0d10231c2cd6cf441fd6cf2d622e927bd23a1","unresolved":false,"context_lines":[{"line_number":6,"context_line":"    data migrations. To achieve that he needs to perform `cinder-manage db"},{"line_number":7,"context_line":"    online-data-migrations` until there are no records to be updated. To limit"},{"line_number":8,"context_line":"    DB performance impact migrations can be performed in chunks limited by"},{"line_number":9,"context_line":"    `--max_number` option. If you intent to upgrade Cinder in a non-live manner"},{"line_number":10,"context_line":"    you can use `--force` option safely. Please note that finishing all the"},{"line_number":11,"context_line":"    Newton data migrations will be enforced by the first schema migration in"},{"line_number":12,"context_line":"    Ocata, so you won\u0027t be able to upgrade to Ocata without that."}],"source_content_type":"text/x-yaml","patch_set":1,"id":"7aa08908_0adb77ee","line":9,"range":{"start_line":9,"start_character":0,"end_line":9,"end_character":79},"updated":"2016-06-16 17:49:48.000000000","message":"I\u0027m not clear how subsequent chunks work?  In other words how we figure out what\u0027s been done in the previous chunk to pick up at the right place?","commit_id":"b525cc36c39fd2331fdc2c98acab2a0a5674272b"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"9635fc9427831599f88a0e506329d81cd4d36352","unresolved":false,"context_lines":[{"line_number":6,"context_line":"    data migrations. To achieve that he needs to perform `cinder-manage db"},{"line_number":7,"context_line":"    online-data-migrations` until there are no records to be updated. To limit"},{"line_number":8,"context_line":"    DB performance impact migrations can be performed in chunks limited by"},{"line_number":9,"context_line":"    `--max_number` option. If you intent to upgrade Cinder in a non-live manner"},{"line_number":10,"context_line":"    you can use `--force` option safely. Please note that finishing all the"},{"line_number":11,"context_line":"    Newton data migrations will be enforced by the first schema migration in"},{"line_number":12,"context_line":"    Ocata, so you won\u0027t be able to upgrade to Ocata without that."}],"source_content_type":"text/x-yaml","patch_set":1,"id":"5a9d85d2_55d24901","line":9,"range":{"start_line":9,"start_character":0,"end_line":9,"end_character":79},"in_reply_to":"7aa08908_0adb77ee","updated":"2016-06-21 13:25:31.000000000","message":"That\u0027s pretty easy - we\u0027re querying for non-migrated rows. For example in Alex\u0027s case he wants to add prefixes to message IDs, so he just queries for unprefixed ones using LIKE operator [1].\n\n[1] https://review.openstack.org/#/c/313140/7/cinder/db/sqlalchemy/api.py@4284","commit_id":"b525cc36c39fd2331fdc2c98acab2a0a5674272b"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"ae2eb0a4eda7b72d07ef0228dfcf89d696f1dbbf","unresolved":false,"context_lines":[{"line_number":7,"context_line":"    online-data-migrations` until there are no records to be updated. To limit"},{"line_number":8,"context_line":"    DB performance impact migrations can be performed in chunks limited by"},{"line_number":9,"context_line":"    `--max_number` option. If you intent to upgrade Cinder in a non-live manner"},{"line_number":10,"context_line":"    you can use `--force` option safely. Please note that finishing all the"},{"line_number":11,"context_line":"    Newton data migrations will be enforced by the first schema migration in"},{"line_number":12,"context_line":"    Ocata, so you won\u0027t be able to upgrade to Ocata without that."}],"source_content_type":"text/x-yaml","patch_set":3,"id":"dada55a8_f1ebee10","line":10,"range":{"start_line":10,"start_character":19,"end_line":10,"end_character":24},"updated":"2016-07-21 21:26:02.000000000","message":"ignore_state","commit_id":"3a3748de4d3231c1218b27abd212ba40b66de19d"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"2a4a2c102bc5fbd06b6978b8d2f4ed46b82c9ff6","unresolved":false,"context_lines":[{"line_number":7,"context_line":"    online-data-migrations` until there are no records to be updated. To limit"},{"line_number":8,"context_line":"    DB performance impact migrations can be performed in chunks limited by"},{"line_number":9,"context_line":"    `--max_number` option. If you intent to upgrade Cinder in a non-live manner"},{"line_number":10,"context_line":"    you can use `--force` option safely. Please note that finishing all the"},{"line_number":11,"context_line":"    Newton data migrations will be enforced by the first schema migration in"},{"line_number":12,"context_line":"    Ocata, so you won\u0027t be able to upgrade to Ocata without that."}],"source_content_type":"text/x-yaml","patch_set":3,"id":"dada55a8_1e08392d","line":10,"range":{"start_line":10,"start_character":19,"end_line":10,"end_character":24},"in_reply_to":"dada55a8_f1ebee10","updated":"2016-07-22 10:01:53.000000000","message":"Done","commit_id":"3a3748de4d3231c1218b27abd212ba40b66de19d"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"099b94c47b5083a5ed32a2a7f87b9a38bdbbf6d5","unresolved":false,"context_lines":[{"line_number":6,"context_line":"    data migrations. To achieve that he needs to perform `cinder-manage db"},{"line_number":7,"context_line":"    online-data-migrations` until there are no records to be updated. To limit"},{"line_number":8,"context_line":"    DB performance impact migrations can be performed in chunks limited by"},{"line_number":9,"context_line":"    `--max_number` option. If you intent to upgrade Cinder in a non-live manner"},{"line_number":10,"context_line":"    you can use `--ignore-state` option safely. Please note that finishing all"},{"line_number":11,"context_line":"    the Newton data migrations will be enforced by the first schema migration"},{"line_number":12,"context_line":"    in Ocata, so you won\u0027t be able to upgrade to Ocata without that."}],"source_content_type":"text/x-yaml","patch_set":6,"id":"ba5da102_b9ec7490","line":9,"range":{"start_line":9,"start_character":30,"end_line":9,"end_character":33},"updated":"2016-10-31 16:53:20.000000000","message":"your","commit_id":"7b968df0b573a00cce3b908676b8003519316204"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"0b2b53508fe5ec2de42995ded063b5309127efcd","unresolved":false,"context_lines":[{"line_number":6,"context_line":"    data migrations. To achieve that he needs to perform `cinder-manage db"},{"line_number":7,"context_line":"    online-data-migrations` until there are no records to be updated. To limit"},{"line_number":8,"context_line":"    DB performance impact migrations can be performed in chunks limited by"},{"line_number":9,"context_line":"    `--max_number` option. If you intent to upgrade Cinder in a non-live manner"},{"line_number":10,"context_line":"    you can use `--ignore-state` option safely. Please note that finishing all"},{"line_number":11,"context_line":"    the Newton data migrations will be enforced by the first schema migration"},{"line_number":12,"context_line":"    in Ocata, so you won\u0027t be able to upgrade to Ocata without that."}],"source_content_type":"text/x-yaml","patch_set":6,"id":"9a629dbe_85f4ce87","line":9,"range":{"start_line":9,"start_character":30,"end_line":9,"end_character":33},"in_reply_to":"ba5da102_b9ec7490","updated":"2016-11-08 13:24:53.000000000","message":"Done","commit_id":"7b968df0b573a00cce3b908676b8003519316204"}]}
