)]}'
{"nova/compute/manager.py":[{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"7c58e1b82363d1bd0382282e3cb7c8fdffa2ef16","unresolved":false,"context_lines":[{"line_number":4984,"context_line":"                                               disk_over_commit):"},{"line_number":4985,"context_line":"        dest_check_data \u003d self._live_migrate_destination_check("},{"line_number":4986,"context_line":"            ctxt, instance, block_migration, disk_over_commit)"},{"line_number":4987,"context_line":"        if self.compute_rpcapi.supports_new_live_migration_workflow(ctxt):"},{"line_number":4988,"context_line":"            return dest_check_data"},{"line_number":4989,"context_line":"        try:"},{"line_number":4990,"context_line":"            migrate_data \u003d self.compute_rpcapi.\\"}],"source_content_type":"text/x-python","patch_set":3,"id":"3aaa91ec_c55b2ef5","line":4987,"updated":"2016-06-22 21:19:53.000000000","message":"This is a weird construction because we\u0027re obviously on a compute that supports the new workflow. But because the source may be an older compute this check is necessary. It would be good to have a comment here explaining that this is here for upgrade purposes and this method can just retrieve and return check_dest_data at a future point.","commit_id":"99e03d4c1b3ed615c107de53ff6e67e01625a3bf"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"e07346057c87a4b62f9deefa3110c393ae913702","unresolved":false,"context_lines":[{"line_number":4984,"context_line":"                                               disk_over_commit):"},{"line_number":4985,"context_line":"        dest_check_data \u003d self._live_migrate_destination_check("},{"line_number":4986,"context_line":"            ctxt, instance, block_migration, disk_over_commit)"},{"line_number":4987,"context_line":"        if self.compute_rpcapi.supports_new_live_migration_workflow(ctxt):"},{"line_number":4988,"context_line":"            return dest_check_data"},{"line_number":4989,"context_line":"        try:"},{"line_number":4990,"context_line":"            migrate_data \u003d self.compute_rpcapi.\\"}],"source_content_type":"text/x-python","patch_set":3,"id":"3aaa91ec_1db10ae2","line":4987,"in_reply_to":"3aaa91ec_c55b2ef5","updated":"2016-06-22 22:56:02.000000000","message":"Done","commit_id":"99e03d4c1b3ed615c107de53ff6e67e01625a3bf"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"3b0fefdcf23fa0f45bedc3a9501bee65be9a35ad","unresolved":false,"context_lines":[{"line_number":5001,"context_line":"        dest_check_data \u003d self._live_migrate_destination_check("},{"line_number":5002,"context_line":"            ctxt, instance, block_migration, disk_over_commit)"},{"line_number":5003,"context_line":"        # NOTE(tdurakov): this check is used for upgrades purpose and should be"},{"line_number":5004,"context_line":"        # removed after Newton EOL. IT allows to retain workflow that used for"},{"line_number":5005,"context_line":"        # live-migration prior to this patch."},{"line_number":5006,"context_line":"        if self.compute_rpcapi.supports_new_live_migration_workflow(ctxt):"},{"line_number":5007,"context_line":"            return dest_check_data"}],"source_content_type":"text/x-python","patch_set":9,"id":"3aaa91ec_e83853d5","line":5004,"updated":"2016-06-24 16:13:37.000000000","message":"It\u0027s not actually Newton EOL when it can be removed, just after Newton is fully deployed. This check allows M-\u003eN mixed environments to work, but N-\u003eO mixed environments will work without it.","commit_id":"184afa8034c129bf2af17a37e67020dd9700b975"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"4548d6598c1f26ac43ef747f1bf235983e5aa15f","unresolved":false,"context_lines":[{"line_number":5001,"context_line":"        dest_check_data \u003d self._live_migrate_destination_check("},{"line_number":5002,"context_line":"            ctxt, instance, block_migration, disk_over_commit)"},{"line_number":5003,"context_line":"        # NOTE(tdurakov): this check is used for upgrades purpose and should be"},{"line_number":5004,"context_line":"        # removed after Newton EOL. IT allows to retain workflow that used for"},{"line_number":5005,"context_line":"        # live-migration prior to this patch."},{"line_number":5006,"context_line":"        if self.compute_rpcapi.supports_new_live_migration_workflow(ctxt):"},{"line_number":5007,"context_line":"            return dest_check_data"}],"source_content_type":"text/x-python","patch_set":9,"id":"3aaa91ec_35d3c061","line":5004,"in_reply_to":"3aaa91ec_e83853d5","updated":"2016-06-25 00:22:59.000000000","message":"Done","commit_id":"184afa8034c129bf2af17a37e67020dd9700b975"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0ba315b60be3e89164b55faea2fe735164a12f76","unresolved":false,"context_lines":[{"line_number":4984,"context_line":"                                                            block_migration,"},{"line_number":4985,"context_line":"                                                            disk_over_commit)"},{"line_number":4986,"context_line":""},{"line_number":4987,"context_line":"    def _live_migrate_destination_check(self, ctxt, instance, block_migration,"},{"line_number":4988,"context_line":"                                        disk_over_commit):"},{"line_number":4989,"context_line":"        src_compute_info \u003d obj_base.obj_to_primitive("},{"line_number":4990,"context_line":"            self._get_compute_info(ctxt, instance.host))"}],"source_content_type":"text/x-python","patch_set":11,"id":"3aaa91ec_213d14bc","line":4987,"updated":"2016-06-27 13:48:31.000000000","message":"This isn\u0027t used more than once elsewhere so why did you need to rename it?","commit_id":"0043329742fe4297ffe8724deb78b4426089e5d9"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"4208f8ea03bd1b86010509057e69bd6bf58f8739","unresolved":false,"context_lines":[{"line_number":4984,"context_line":"                                                            block_migration,"},{"line_number":4985,"context_line":"                                                            disk_over_commit)"},{"line_number":4986,"context_line":""},{"line_number":4987,"context_line":"    def _live_migrate_destination_check(self, ctxt, instance, block_migration,"},{"line_number":4988,"context_line":"                                        disk_over_commit):"},{"line_number":4989,"context_line":"        src_compute_info \u003d obj_base.obj_to_primitive("},{"line_number":4990,"context_line":"            self._get_compute_info(ctxt, instance.host))"}],"source_content_type":"text/x-python","patch_set":11,"id":"3aaa91ec_0fb90ced","line":4987,"in_reply_to":"3aaa91ec_213d14bc","updated":"2016-06-27 21:09:21.000000000","message":"It\u0027s not rename, it\u0027s split, see code below","commit_id":"0043329742fe4297ffe8724deb78b4426089e5d9"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"a25c19118dd2920c58331fc7c76060a811d0de65","unresolved":false,"context_lines":[{"line_number":4984,"context_line":"                                                            block_migration,"},{"line_number":4985,"context_line":"                                                            disk_over_commit)"},{"line_number":4986,"context_line":""},{"line_number":4987,"context_line":"    def _live_migrate_destination_check(self, ctxt, instance, block_migration,"},{"line_number":4988,"context_line":"                                        disk_over_commit):"},{"line_number":4989,"context_line":"        src_compute_info \u003d obj_base.obj_to_primitive("},{"line_number":4990,"context_line":"            self._get_compute_info(ctxt, instance.host))"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_997b837b","line":4987,"updated":"2016-06-27 22:10:22.000000000","message":"Like Matt said, I\u0027m not sure why this split was done. Not really harmful or anything, just seems kinda .. random. If you feel strongly about keeping it I\u0027m not overly opposed, but.. seems strange to me :)","commit_id":"3f1cb4015644f01592544f425263b1354f3fa1f7"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"971b1fc400ecdf3cbe4cae4549447bce1d9385d4","unresolved":false,"context_lines":[{"line_number":4984,"context_line":"                                                            block_migration,"},{"line_number":4985,"context_line":"                                                            disk_over_commit)"},{"line_number":4986,"context_line":""},{"line_number":4987,"context_line":"    def _live_migrate_destination_check(self, ctxt, instance, block_migration,"},{"line_number":4988,"context_line":"                                        disk_over_commit):"},{"line_number":4989,"context_line":"        src_compute_info \u003d obj_base.obj_to_primitive("},{"line_number":4990,"context_line":"            self._get_compute_info(ctxt, instance.host))"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_6be5eba6","line":4987,"in_reply_to":"3aaa91ec_997b837b","updated":"2016-06-28 17:44:22.000000000","message":"it\u0027s became useful in new patch set. I decided not to pass new flag but introduce new methods instead","commit_id":"3f1cb4015644f01592544f425263b1354f3fa1f7"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"85b3a46c16e883be09210473608f1f85c609d993","unresolved":false,"context_lines":[{"line_number":5005,"context_line":"        # removed in Ocata. It allows to retain workflow that used for"},{"line_number":5006,"context_line":"        # live-migration prior to this patch."},{"line_number":5007,"context_line":"        if self.compute_rpcapi.supports_new_live_migration_workflow(ctxt):"},{"line_number":5008,"context_line":"            return dest_check_data"},{"line_number":5009,"context_line":"        try:"},{"line_number":5010,"context_line":"            migrate_data \u003d self.compute_rpcapi.\\"},{"line_number":5011,"context_line":"                                check_can_live_migrate_source(ctxt, instance,"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_f3e3c631","line":5008,"updated":"2016-06-27 21:29:31.000000000","message":"So, this is using our current RPC pin to determine what or when to return. I don\u0027t think that\u0027s legit because you don\u0027t know the version pin on the other side. Meaning, you could have had your pin lifted just now, but the caller hasn\u0027t yet noticed that change. Thus they\u0027re expecting an old behavior and you\u0027re going to return a new one. IMHO, the only safe way to do this is to pass a new flag to the method indicating that you need the new behavior. Alternately, just add a new call that does the new thing. That way there\u0027s no confusion about which thing is expected, and the old call just won\u0027t be made if we\u0027re all new enough.","commit_id":"3f1cb4015644f01592544f425263b1354f3fa1f7"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"971b1fc400ecdf3cbe4cae4549447bce1d9385d4","unresolved":false,"context_lines":[{"line_number":5005,"context_line":"        # removed in Ocata. It allows to retain workflow that used for"},{"line_number":5006,"context_line":"        # live-migration prior to this patch."},{"line_number":5007,"context_line":"        if self.compute_rpcapi.supports_new_live_migration_workflow(ctxt):"},{"line_number":5008,"context_line":"            return dest_check_data"},{"line_number":5009,"context_line":"        try:"},{"line_number":5010,"context_line":"            migrate_data \u003d self.compute_rpcapi.\\"},{"line_number":5011,"context_line":"                                check_can_live_migrate_source(ctxt, instance,"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_2b02c33e","line":5008,"in_reply_to":"3aaa91ec_2ab0018b","updated":"2016-06-28 17:44:22.000000000","message":"Agreed, so instead of new flag I add 2 new methods.","commit_id":"3f1cb4015644f01592544f425263b1354f3fa1f7"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"d2d42205cb25b7b9f7e9ba5ee723879df10ce263","unresolved":false,"context_lines":[{"line_number":5005,"context_line":"        # removed in Ocata. It allows to retain workflow that used for"},{"line_number":5006,"context_line":"        # live-migration prior to this patch."},{"line_number":5007,"context_line":"        if self.compute_rpcapi.supports_new_live_migration_workflow(ctxt):"},{"line_number":5008,"context_line":"            return dest_check_data"},{"line_number":5009,"context_line":"        try:"},{"line_number":5010,"context_line":"            migrate_data \u003d self.compute_rpcapi.\\"},{"line_number":5011,"context_line":"                                check_can_live_migrate_source(ctxt, instance,"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_2ab0018b","line":5008,"in_reply_to":"3aaa91ec_f3e3c631","updated":"2016-06-28 16:51:58.000000000","message":"Yeah, we probably need to pass in a skip_remove_checks\u003dtrue, or something like that.\n\nThinking out loud... I wonder if we should create a new parallel workflow, and only switch over to that once all compute nodes are running the newest version, min_service_version should tell us when we can start using the new path. Then on major bump we drop all the old calls.","commit_id":"3f1cb4015644f01592544f425263b1354f3fa1f7"}],"nova/compute/rpcapi.py":[{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"7c58e1b82363d1bd0382282e3cb7c8fdffa2ef16","unresolved":false,"context_lines":[{"line_number":459,"context_line":"        else:"},{"line_number":460,"context_line":"            return result"},{"line_number":461,"context_line":""},{"line_number":462,"context_line":"    def check_can_live_migrate_destination_cleanup(self, ctxt, instance,"},{"line_number":463,"context_line":"                                                   migrate_data, destination):"},{"line_number":464,"context_line":"        version \u003d \u00274.13\u0027"},{"line_number":465,"context_line":"        cell_client \u003d self.get_cell_client(ctxt)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3aaa91ec_85a486b9","line":462,"updated":"2016-06-22 21:19:53.000000000","message":"I would suggest renaming this to cleanup_live_migration_destination_check as that\u0027s much more clear to me.","commit_id":"99e03d4c1b3ed615c107de53ff6e67e01625a3bf"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"e07346057c87a4b62f9deefa3110c393ae913702","unresolved":false,"context_lines":[{"line_number":459,"context_line":"        else:"},{"line_number":460,"context_line":"            return result"},{"line_number":461,"context_line":""},{"line_number":462,"context_line":"    def check_can_live_migrate_destination_cleanup(self, ctxt, instance,"},{"line_number":463,"context_line":"                                                   migrate_data, destination):"},{"line_number":464,"context_line":"        version \u003d \u00274.13\u0027"},{"line_number":465,"context_line":"        cell_client \u003d self.get_cell_client(ctxt)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3aaa91ec_fdaebe96","line":462,"in_reply_to":"3aaa91ec_85a486b9","updated":"2016-06-22 22:56:02.000000000","message":"I\u0027d prefer not to change this. virt driver has same named method, so I\u0027d prefer to stay consistent here, or I could prepare patch to driver first, that renames its method","commit_id":"99e03d4c1b3ed615c107de53ff6e67e01625a3bf"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"f449dd10833429376e08db3b86c2a5cd27bbaa74","unresolved":false,"context_lines":[{"line_number":323,"context_line":"        \u0027mitaka\u0027: \u00274.11\u0027,"},{"line_number":324,"context_line":"    }"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"    NEW_LIVE_MIGRATION_WORKFLOW_VERSION \u003d \u00274.13\u0027"},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"    def __init__(self):"},{"line_number":329,"context_line":"        super(ComputeAPI, self).__init__()"}],"source_content_type":"text/x-python","patch_set":11,"id":"3aaa91ec_7319af79","line":326,"updated":"2016-06-27 13:59:09.000000000","message":"I don\u0027t see much value in doing this, FWIW. Can we just remove it? Even though \"4.13\" is a string, it\u0027s kindof the constant. Once codified, it never needs changing (nor can it be).","commit_id":"0043329742fe4297ffe8724deb78b4426089e5d9"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"4208f8ea03bd1b86010509057e69bd6bf58f8739","unresolved":false,"context_lines":[{"line_number":323,"context_line":"        \u0027mitaka\u0027: \u00274.11\u0027,"},{"line_number":324,"context_line":"    }"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"    NEW_LIVE_MIGRATION_WORKFLOW_VERSION \u003d \u00274.13\u0027"},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"    def __init__(self):"},{"line_number":329,"context_line":"        super(ComputeAPI, self).__init__()"}],"source_content_type":"text/x-python","patch_set":11,"id":"3aaa91ec_ef92c04a","line":326,"in_reply_to":"3aaa91ec_7319af79","updated":"2016-06-27 21:09:21.000000000","message":"Done","commit_id":"0043329742fe4297ffe8724deb78b4426089e5d9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0ba315b60be3e89164b55faea2fe735164a12f76","unresolved":false,"context_lines":[{"line_number":460,"context_line":"            return result"},{"line_number":461,"context_line":""},{"line_number":462,"context_line":"    def cleanup_live_migration_destination_check(self, ctxt, instance,"},{"line_number":463,"context_line":"                                                   migrate_data, destination):"},{"line_number":464,"context_line":"        version \u003d \u00274.13\u0027"},{"line_number":465,"context_line":"        cell_client \u003d self.get_cell_client(ctxt)"},{"line_number":466,"context_line":"        cctxt \u003d cell_client.prepare(server\u003ddestination, version\u003dversion)"}],"source_content_type":"text/x-python","patch_set":11,"id":"3aaa91ec_6151dcd8","line":463,"updated":"2016-06-27 13:48:31.000000000","message":"alignment nit","commit_id":"0043329742fe4297ffe8724deb78b4426089e5d9"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"4208f8ea03bd1b86010509057e69bd6bf58f8739","unresolved":false,"context_lines":[{"line_number":460,"context_line":"            return result"},{"line_number":461,"context_line":""},{"line_number":462,"context_line":"    def cleanup_live_migration_destination_check(self, ctxt, instance,"},{"line_number":463,"context_line":"                                                   migrate_data, destination):"},{"line_number":464,"context_line":"        version \u003d \u00274.13\u0027"},{"line_number":465,"context_line":"        cell_client \u003d self.get_cell_client(ctxt)"},{"line_number":466,"context_line":"        cctxt \u003d cell_client.prepare(server\u003ddestination, version\u003dversion)"}],"source_content_type":"text/x-python","patch_set":11,"id":"3aaa91ec_8fa21c99","line":463,"in_reply_to":"3aaa91ec_6151dcd8","updated":"2016-06-27 21:09:21.000000000","message":"Done","commit_id":"0043329742fe4297ffe8724deb78b4426089e5d9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0ba315b60be3e89164b55faea2fe735164a12f76","unresolved":false,"context_lines":[{"line_number":461,"context_line":""},{"line_number":462,"context_line":"    def cleanup_live_migration_destination_check(self, ctxt, instance,"},{"line_number":463,"context_line":"                                                   migrate_data, destination):"},{"line_number":464,"context_line":"        version \u003d \u00274.13\u0027"},{"line_number":465,"context_line":"        cell_client \u003d self.get_cell_client(ctxt)"},{"line_number":466,"context_line":"        cctxt \u003d cell_client.prepare(server\u003ddestination, version\u003dversion)"},{"line_number":467,"context_line":"        return cctxt.call(ctxt, \u0027cleanup_live_migration_destination_check\u0027,"}],"source_content_type":"text/x-python","patch_set":11,"id":"3aaa91ec_216eb496","line":464,"range":{"start_line":464,"start_character":18,"end_line":464,"end_character":24},"updated":"2016-06-27 13:48:31.000000000","message":"re-use the constant?","commit_id":"0043329742fe4297ffe8724deb78b4426089e5d9"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"4208f8ea03bd1b86010509057e69bd6bf58f8739","unresolved":false,"context_lines":[{"line_number":461,"context_line":""},{"line_number":462,"context_line":"    def cleanup_live_migration_destination_check(self, ctxt, instance,"},{"line_number":463,"context_line":"                                                   migrate_data, destination):"},{"line_number":464,"context_line":"        version \u003d \u00274.13\u0027"},{"line_number":465,"context_line":"        cell_client \u003d self.get_cell_client(ctxt)"},{"line_number":466,"context_line":"        cctxt \u003d cell_client.prepare(server\u003ddestination, version\u003dversion)"},{"line_number":467,"context_line":"        return cctxt.call(ctxt, \u0027cleanup_live_migration_destination_check\u0027,"}],"source_content_type":"text/x-python","patch_set":11,"id":"3aaa91ec_2fb4c8cf","line":464,"range":{"start_line":464,"start_character":18,"end_line":464,"end_character":24},"in_reply_to":"3aaa91ec_216eb496","updated":"2016-06-27 21:09:21.000000000","message":"constant is removed, so leaving as is.","commit_id":"0043329742fe4297ffe8724deb78b4426089e5d9"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"f449dd10833429376e08db3b86c2a5cd27bbaa74","unresolved":false,"context_lines":[{"line_number":463,"context_line":"                                                   migrate_data, destination):"},{"line_number":464,"context_line":"        version \u003d \u00274.13\u0027"},{"line_number":465,"context_line":"        cell_client \u003d self.get_cell_client(ctxt)"},{"line_number":466,"context_line":"        cctxt \u003d cell_client.prepare(server\u003ddestination, version\u003dversion)"},{"line_number":467,"context_line":"        return cctxt.call(ctxt, \u0027cleanup_live_migration_destination_check\u0027,"},{"line_number":468,"context_line":"                            instance\u003dinstance, migrate_data\u003dmigrate_data)"},{"line_number":469,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"3aaa91ec_013a98e7","line":466,"updated":"2016-06-27 13:59:09.000000000","message":"You need to check the version here and fail (i.e. not make the call) if the version pin is too low to allow this.","commit_id":"0043329742fe4297ffe8724deb78b4426089e5d9"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"bef4302f56adeaffbac6b75cbf6962ad617b46b9","unresolved":false,"context_lines":[{"line_number":463,"context_line":"                                                   migrate_data, destination):"},{"line_number":464,"context_line":"        version \u003d \u00274.13\u0027"},{"line_number":465,"context_line":"        cell_client \u003d self.get_cell_client(ctxt)"},{"line_number":466,"context_line":"        cctxt \u003d cell_client.prepare(server\u003ddestination, version\u003dversion)"},{"line_number":467,"context_line":"        return cctxt.call(ctxt, \u0027cleanup_live_migration_destination_check\u0027,"},{"line_number":468,"context_line":"                            instance\u003dinstance, migrate_data\u003dmigrate_data)"},{"line_number":469,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"3aaa91ec_89e4eeac","line":466,"in_reply_to":"3aaa91ec_013a98e7","updated":"2016-06-27 14:39:08.000000000","message":"Is there a pattern for this? I don\u0027t recall seeing this for new calls before.\n\nAlso note that this is gated in conductor/tasks/live_migrate.py behind a check on the supports_new_live_migration_workflow method defined above.","commit_id":"0043329742fe4297ffe8724deb78b4426089e5d9"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"4208f8ea03bd1b86010509057e69bd6bf58f8739","unresolved":false,"context_lines":[{"line_number":463,"context_line":"                                                   migrate_data, destination):"},{"line_number":464,"context_line":"        version \u003d \u00274.13\u0027"},{"line_number":465,"context_line":"        cell_client \u003d self.get_cell_client(ctxt)"},{"line_number":466,"context_line":"        cctxt \u003d cell_client.prepare(server\u003ddestination, version\u003dversion)"},{"line_number":467,"context_line":"        return cctxt.call(ctxt, \u0027cleanup_live_migration_destination_check\u0027,"},{"line_number":468,"context_line":"                            instance\u003dinstance, migrate_data\u003dmigrate_data)"},{"line_number":469,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"3aaa91ec_104928d1","line":466,"in_reply_to":"3aaa91ec_1478fff7","updated":"2016-06-27 21:09:21.000000000","message":"Done","commit_id":"0043329742fe4297ffe8724deb78b4426089e5d9"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6b5a9c9818312a17a783943042d5630917438483","unresolved":false,"context_lines":[{"line_number":463,"context_line":"                                                   migrate_data, destination):"},{"line_number":464,"context_line":"        version \u003d \u00274.13\u0027"},{"line_number":465,"context_line":"        cell_client \u003d self.get_cell_client(ctxt)"},{"line_number":466,"context_line":"        cctxt \u003d cell_client.prepare(server\u003ddestination, version\u003dversion)"},{"line_number":467,"context_line":"        return cctxt.call(ctxt, \u0027cleanup_live_migration_destination_check\u0027,"},{"line_number":468,"context_line":"                            instance\u003dinstance, migrate_data\u003dmigrate_data)"},{"line_number":469,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"3aaa91ec_1478fff7","line":466,"in_reply_to":"3aaa91ec_89e4eeac","updated":"2016-06-27 19:56:58.000000000","message":"Yeah, we might not have any in the tree right now but we have.\n\nI know it\u0027s gated on from the caller, which means the exception should never be raised if we do everything properly, but I still think that it\u0027s the rpc layer\u0027s responsibility to check this value and do the right thing. Making the call despite the version pin is \"not right\".","commit_id":"0043329742fe4297ffe8724deb78b4426089e5d9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0ba315b60be3e89164b55faea2fe735164a12f76","unresolved":false,"context_lines":[{"line_number":465,"context_line":"        cell_client \u003d self.get_cell_client(ctxt)"},{"line_number":466,"context_line":"        cctxt \u003d cell_client.prepare(server\u003ddestination, version\u003dversion)"},{"line_number":467,"context_line":"        return cctxt.call(ctxt, \u0027cleanup_live_migration_destination_check\u0027,"},{"line_number":468,"context_line":"                            instance\u003dinstance, migrate_data\u003dmigrate_data)"},{"line_number":469,"context_line":""},{"line_number":470,"context_line":"    def check_can_live_migrate_source(self, ctxt, instance, dest_check_data):"},{"line_number":471,"context_line":"        dest_check_data_obj \u003d dest_check_data"}],"source_content_type":"text/x-python","patch_set":11,"id":"3aaa91ec_a19e24b6","line":468,"updated":"2016-06-27 13:48:31.000000000","message":"alignment nit","commit_id":"0043329742fe4297ffe8724deb78b4426089e5d9"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"4208f8ea03bd1b86010509057e69bd6bf58f8739","unresolved":false,"context_lines":[{"line_number":465,"context_line":"        cell_client \u003d self.get_cell_client(ctxt)"},{"line_number":466,"context_line":"        cctxt \u003d cell_client.prepare(server\u003ddestination, version\u003dversion)"},{"line_number":467,"context_line":"        return cctxt.call(ctxt, \u0027cleanup_live_migration_destination_check\u0027,"},{"line_number":468,"context_line":"                            instance\u003dinstance, migrate_data\u003dmigrate_data)"},{"line_number":469,"context_line":""},{"line_number":470,"context_line":"    def check_can_live_migrate_source(self, ctxt, instance, dest_check_data):"},{"line_number":471,"context_line":"        dest_check_data_obj \u003d dest_check_data"}],"source_content_type":"text/x-python","patch_set":11,"id":"3aaa91ec_5011f0ae","line":468,"in_reply_to":"3aaa91ec_a19e24b6","updated":"2016-06-27 21:09:21.000000000","message":"Done","commit_id":"0043329742fe4297ffe8724deb78b4426089e5d9"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"5c443a53d0135ad4852e98500c293acd09558343","unresolved":false,"context_lines":[{"line_number":372,"context_line":""},{"line_number":373,"context_line":"    def supports_new_live_migration_workflow(self, ctxt):"},{"line_number":374,"context_line":"        cell_client \u003d self.get_cell_client(ctxt)"},{"line_number":375,"context_line":"        return cell_client.can_send_version(\u00274.13\u0027)"},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"    # Cells overrides this"},{"line_number":378,"context_line":"    def get_client(self, target, version_cap, serializer):"}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_3450420a","line":375,"updated":"2016-06-29 09:17:22.000000000","message":"I don\u0027t think this is correct.\n\nI think you should instead check the min_service_version is high enough such that we know all the nodes are running the latest version.","commit_id":"b6517c36dae0d36f76ac7d6e0bfcf54504423699"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"08c35a8bb76f0d2a697bef54fdf1ac5d44f77a50","unresolved":false,"context_lines":[{"line_number":372,"context_line":""},{"line_number":373,"context_line":"    def supports_new_live_migration_workflow(self, ctxt):"},{"line_number":374,"context_line":"        cell_client \u003d self.get_cell_client(ctxt)"},{"line_number":375,"context_line":"        return cell_client.can_send_version(\u00274.13\u0027)"},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"    # Cells overrides this"},{"line_number":378,"context_line":"    def get_client(self, target, version_cap, serializer):"}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_4f057bc0","line":375,"in_reply_to":"3aaa91ec_3450420a","updated":"2016-06-29 09:33:10.000000000","message":"Actually, maybe this is enough.\n\nAt this point we raise the pin, we know all compute nodes should be upgraded. So it amounts to the same check.","commit_id":"b6517c36dae0d36f76ac7d6e0bfcf54504423699"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"0bf92c482cf83b3fe6431aeb54fb19d7f6b8cca4","unresolved":false,"context_lines":[{"line_number":462,"context_line":"        version \u003d \u00274.13\u0027"},{"line_number":463,"context_line":"        cell_client \u003d self.get_cell_client(ctxt)"},{"line_number":464,"context_line":"        if not cell_client.can_send_version(version):"},{"line_number":465,"context_line":"            raise exception.ServiceTooOld(thisver\u003dservice_obj.SERVICE_VERSION,"},{"line_number":466,"context_line":"                                          minver\u003d13)"},{"line_number":467,"context_line":"        cctxt \u003d cell_client.prepare(server\u003ddestination, version\u003dversion)"},{"line_number":468,"context_line":"        return cctxt.call(ctxt, \u0027live_migration_destination_check\u0027,"}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_cfa32b9d","line":465,"updated":"2016-06-29 09:36:33.000000000","message":"See ln 626, I don\u0027t think we need this extra complexity here, the system will reject this call anyways.\n\nI know ln 1116 does check, but I think its overkill.","commit_id":"b6517c36dae0d36f76ac7d6e0bfcf54504423699"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"b5574e2cd5c50a01b866cccafd5b5c63f4be9ee3","unresolved":false,"context_lines":[{"line_number":462,"context_line":"        version \u003d \u00274.13\u0027"},{"line_number":463,"context_line":"        cell_client \u003d self.get_cell_client(ctxt)"},{"line_number":464,"context_line":"        if not cell_client.can_send_version(version):"},{"line_number":465,"context_line":"            raise exception.ServiceTooOld(thisver\u003dservice_obj.SERVICE_VERSION,"},{"line_number":466,"context_line":"                                          minver\u003d13)"},{"line_number":467,"context_line":"        cctxt \u003d cell_client.prepare(server\u003ddestination, version\u003dversion)"},{"line_number":468,"context_line":"        return cctxt.call(ctxt, \u0027live_migration_destination_check\u0027,"}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_a2aeaa2b","line":465,"in_reply_to":"3aaa91ec_cfa32b9d","updated":"2016-06-29 12:43:52.000000000","message":"This was asked for by another reviewer in a previous revision.","commit_id":"b6517c36dae0d36f76ac7d6e0bfcf54504423699"}],"nova/conductor/tasks/live_migrate.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"b6238358408d4d52db4ac25822e8c98645c090c8","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        new_workflow \u003d self.compute_rpcapi.\\"},{"line_number":148,"context_line":"            supports_new_live_migration_workflow(self.context)"},{"line_number":149,"context_line":"        try:"},{"line_number":150,"context_line":"            self.migrate_data \u003d self.compute_rpcapi. \\"},{"line_number":151,"context_line":"                    check_can_live_migrate_destination("},{"line_number":152,"context_line":"                    self.context, self.instance, destination,"},{"line_number":153,"context_line":"                    self.block_migration, self.disk_over_commit)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3aaa91ec_e924d50d","line":150,"updated":"2016-06-24 17:45:22.000000000","message":"There\u0027s an extra spec before the \\\n\nAlso, I don\u0027t think this is anything more than a style-related change. Try to keep those out of patches to reduce the cognitive load on the reviewer :)","commit_id":"184afa8034c129bf2af17a37e67020dd9700b975"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"4548d6598c1f26ac43ef747f1bf235983e5aa15f","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        new_workflow \u003d self.compute_rpcapi.\\"},{"line_number":148,"context_line":"            supports_new_live_migration_workflow(self.context)"},{"line_number":149,"context_line":"        try:"},{"line_number":150,"context_line":"            self.migrate_data \u003d self.compute_rpcapi. \\"},{"line_number":151,"context_line":"                    check_can_live_migrate_destination("},{"line_number":152,"context_line":"                    self.context, self.instance, destination,"},{"line_number":153,"context_line":"                    self.block_migration, self.disk_over_commit)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3aaa91ec_95ad54eb","line":150,"in_reply_to":"3aaa91ec_e924d50d","updated":"2016-06-25 00:22:59.000000000","message":"Done","commit_id":"184afa8034c129bf2af17a37e67020dd9700b975"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"b6238358408d4d52db4ac25822e8c98645c090c8","unresolved":false,"context_lines":[{"line_number":162,"context_line":"                LOG.debug(\u0027migrate_data after checks on source host: %s\u0027,"},{"line_number":163,"context_line":"                          self.migrate_data, instance\u003dself.instance)"},{"line_number":164,"context_line":"            else:"},{"line_number":165,"context_line":"                LOG.debug(\u0027migrate_data after hosts checks is %s\u0027,"},{"line_number":166,"context_line":"                          self.migrate_data)"},{"line_number":167,"context_line":"        except messaging.MessagingTimeout:"},{"line_number":168,"context_line":"            msg \u003d _(\"Timeout while checking if we can live migrate to host: \""}],"source_content_type":"text/x-python","patch_set":9,"id":"3aaa91ec_492089f7","line":165,"updated":"2016-06-24 17:45:22.000000000","message":"How about rewording this log message to:\n\n migrate_data after both source and destination host checks (pre 4.13 behaviour): %s","commit_id":"184afa8034c129bf2af17a37e67020dd9700b975"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"4548d6598c1f26ac43ef747f1bf235983e5aa15f","unresolved":false,"context_lines":[{"line_number":162,"context_line":"                LOG.debug(\u0027migrate_data after checks on source host: %s\u0027,"},{"line_number":163,"context_line":"                          self.migrate_data, instance\u003dself.instance)"},{"line_number":164,"context_line":"            else:"},{"line_number":165,"context_line":"                LOG.debug(\u0027migrate_data after hosts checks is %s\u0027,"},{"line_number":166,"context_line":"                          self.migrate_data)"},{"line_number":167,"context_line":"        except messaging.MessagingTimeout:"},{"line_number":168,"context_line":"            msg \u003d _(\"Timeout while checking if we can live migrate to host: \""}],"source_content_type":"text/x-python","patch_set":9,"id":"3aaa91ec_757b887b","line":165,"in_reply_to":"3aaa91ec_492089f7","updated":"2016-06-25 00:22:59.000000000","message":"Done","commit_id":"184afa8034c129bf2af17a37e67020dd9700b975"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"5c443a53d0135ad4852e98500c293acd09558343","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        new_workflow \u003d self.compute_rpcapi.\\"},{"line_number":148,"context_line":"            supports_new_live_migration_workflow(self.context)"},{"line_number":149,"context_line":"        try:"},{"line_number":150,"context_line":"            if not new_workflow:"},{"line_number":151,"context_line":"                self.migrate_data \u003d self.compute_rpcapi.\\"},{"line_number":152,"context_line":"                    check_can_live_migrate_destination("},{"line_number":153,"context_line":"                    self.context, self.instance, destination,"}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_74cdaab6","line":150,"updated":"2016-06-29 09:17:22.000000000","message":"honestly, I would create a separate method for the new and old workflow, so its easy to see what is going on here.\n\nI know that means duplicating the except clause, but that seems OK.","commit_id":"b6517c36dae0d36f76ac7d6e0bfcf54504423699"}],"nova/objects/service.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"85b3a46c16e883be09210473608f1f85c609d993","unresolved":false,"context_lines":[{"line_number":80,"context_line":"    # object where the network_id value is \u0027auto\u0027 or \u0027none\u0027."},{"line_number":81,"context_line":"    {\u0027compute_rpc\u0027: \u00274.12\u0027},"},{"line_number":82,"context_line":"    # Version 13: Added cleanup_live_migration_destination_check"},{"line_number":83,"context_line":"    {\u0027compute_rpc\u0027: \u00274.13\u0027},"},{"line_number":84,"context_line":")"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_b3f5becc","line":83,"updated":"2016-06-27 21:29:31.000000000","message":"I know that there are bad examples above, but you really just need to say \"Compute RPC version 4.13\" in the comment. I keep telling people not to be detailed, but they don\u0027t listen :)\n\nIt helps to distinguish between compulsory \"because rpc\" changes from very specific behavioral ones. So, change or not, but I would just prefer this comment be simpler :)","commit_id":"3f1cb4015644f01592544f425263b1354f3fa1f7"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"971b1fc400ecdf3cbe4cae4549447bce1d9385d4","unresolved":false,"context_lines":[{"line_number":80,"context_line":"    # object where the network_id value is \u0027auto\u0027 or \u0027none\u0027."},{"line_number":81,"context_line":"    {\u0027compute_rpc\u0027: \u00274.12\u0027},"},{"line_number":82,"context_line":"    # Version 13: Added cleanup_live_migration_destination_check"},{"line_number":83,"context_line":"    {\u0027compute_rpc\u0027: \u00274.13\u0027},"},{"line_number":84,"context_line":")"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_b6a0dea6","line":83,"in_reply_to":"3aaa91ec_b3f5becc","updated":"2016-06-28 17:44:22.000000000","message":"Done","commit_id":"3f1cb4015644f01592544f425263b1354f3fa1f7"}],"nova/tests/unit/compute/test_compute_mgr.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"b6238358408d4d52db4ac25822e8c98645c090c8","unresolved":false,"context_lines":[{"line_number":1949,"context_line":"    def test_check_can_live_migrate_destination_old_workflow_success(self):"},{"line_number":1950,"context_line":"        self._test_check_can_live_migrate_destination()"},{"line_number":1951,"context_line":""},{"line_number":1952,"context_line":"    def test_check_can_live_migrate_destination_old_workflow__fail(self):"},{"line_number":1953,"context_line":"        self.assertRaises("},{"line_number":1954,"context_line":"                test.TestingException,"},{"line_number":1955,"context_line":"                self._test_check_can_live_migrate_destination,"}],"source_content_type":"text/x-python","patch_set":9,"id":"3aaa91ec_291b7dcb","line":1952,"updated":"2016-06-24 17:45:22.000000000","message":"nit: extra _ in test method name","commit_id":"184afa8034c129bf2af17a37e67020dd9700b975"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"4548d6598c1f26ac43ef747f1bf235983e5aa15f","unresolved":false,"context_lines":[{"line_number":1949,"context_line":"    def test_check_can_live_migrate_destination_old_workflow_success(self):"},{"line_number":1950,"context_line":"        self._test_check_can_live_migrate_destination()"},{"line_number":1951,"context_line":""},{"line_number":1952,"context_line":"    def test_check_can_live_migrate_destination_old_workflow__fail(self):"},{"line_number":1953,"context_line":"        self.assertRaises("},{"line_number":1954,"context_line":"                test.TestingException,"},{"line_number":1955,"context_line":"                self._test_check_can_live_migrate_destination,"}],"source_content_type":"text/x-python","patch_set":9,"id":"3aaa91ec_b56b30b6","line":1952,"in_reply_to":"3aaa91ec_291b7dcb","updated":"2016-06-25 00:22:59.000000000","message":"Done","commit_id":"184afa8034c129bf2af17a37e67020dd9700b975"}],"nova/tests/unit/conductor/tasks/test_live_migrate.py":[{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"7c58e1b82363d1bd0382282e3cb7c8fdffa2ef16","unresolved":false,"context_lines":[{"line_number":179,"context_line":"        self.task._check_requested_destination()"},{"line_number":180,"context_line":"        self.assertEqual(\"migrate_data\", self.task.migrate_data)"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    def test_check_requested_destination_with_new_workflow(self):"},{"line_number":183,"context_line":"        self.mox.StubOutWithMock(objects.Service, \u0027get_by_compute_host\u0027)"},{"line_number":184,"context_line":"        self.mox.StubOutWithMock(self.task, \u0027_get_compute_info\u0027)"},{"line_number":185,"context_line":"        self.mox.StubOutWithMock(self.task.servicegroup_api, \u0027service_is_up\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3aaa91ec_65c51a3b","line":182,"updated":"2016-06-22 21:19:53.000000000","message":"Calling this *_with_new_workflow will be odd once the old one is removed. You should rename the old one to *_old and call this test_check_requested_destination.","commit_id":"99e03d4c1b3ed615c107de53ff6e67e01625a3bf"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"e07346057c87a4b62f9deefa3110c393ae913702","unresolved":false,"context_lines":[{"line_number":179,"context_line":"        self.task._check_requested_destination()"},{"line_number":180,"context_line":"        self.assertEqual(\"migrate_data\", self.task.migrate_data)"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    def test_check_requested_destination_with_new_workflow(self):"},{"line_number":183,"context_line":"        self.mox.StubOutWithMock(objects.Service, \u0027get_by_compute_host\u0027)"},{"line_number":184,"context_line":"        self.mox.StubOutWithMock(self.task, \u0027_get_compute_info\u0027)"},{"line_number":185,"context_line":"        self.mox.StubOutWithMock(self.task.servicegroup_api, \u0027service_is_up\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3aaa91ec_7dc00e2b","line":182,"in_reply_to":"3aaa91ec_65c51a3b","updated":"2016-06-22 22:56:02.000000000","message":"Done","commit_id":"99e03d4c1b3ed615c107de53ff6e67e01625a3bf"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"7c58e1b82363d1bd0382282e3cb7c8fdffa2ef16","unresolved":false,"context_lines":[{"line_number":224,"context_line":"        self.task._check_requested_destination()"},{"line_number":225,"context_line":"        self.assertEqual(\"migrate_data_from_source\", self.task.migrate_data)"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"    def test_check_requested_destination_cleanup_with_new_workflow(self):"},{"line_number":228,"context_line":"        self.mox.StubOutWithMock(objects.Service, \u0027get_by_compute_host\u0027)"},{"line_number":229,"context_line":"        self.mox.StubOutWithMock(self.task, \u0027_get_compute_info\u0027)"},{"line_number":230,"context_line":"        self.mox.StubOutWithMock(self.task.servicegroup_api, \u0027service_is_up\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3aaa91ec_a5dd4216","line":227,"updated":"2016-06-22 21:19:53.000000000","message":"Same here.","commit_id":"99e03d4c1b3ed615c107de53ff6e67e01625a3bf"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"e07346057c87a4b62f9deefa3110c393ae913702","unresolved":false,"context_lines":[{"line_number":224,"context_line":"        self.task._check_requested_destination()"},{"line_number":225,"context_line":"        self.assertEqual(\"migrate_data_from_source\", self.task.migrate_data)"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"    def test_check_requested_destination_cleanup_with_new_workflow(self):"},{"line_number":228,"context_line":"        self.mox.StubOutWithMock(objects.Service, \u0027get_by_compute_host\u0027)"},{"line_number":229,"context_line":"        self.mox.StubOutWithMock(self.task, \u0027_get_compute_info\u0027)"},{"line_number":230,"context_line":"        self.mox.StubOutWithMock(self.task.servicegroup_api, \u0027service_is_up\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3aaa91ec_ddddc215","line":227,"in_reply_to":"3aaa91ec_a5dd4216","updated":"2016-06-22 22:56:02.000000000","message":"Done","commit_id":"99e03d4c1b3ed615c107de53ff6e67e01625a3bf"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"5c443a53d0135ad4852e98500c293acd09558343","unresolved":false,"context_lines":[{"line_number":180,"context_line":"        self.assertEqual(\"migrate_data\", self.task.migrate_data)"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    def test_check_requested_destination(self):"},{"line_number":183,"context_line":"        self.mox.StubOutWithMock(objects.Service, \u0027get_by_compute_host\u0027)"},{"line_number":184,"context_line":"        self.mox.StubOutWithMock(self.task, \u0027_get_compute_info\u0027)"},{"line_number":185,"context_line":"        self.mox.StubOutWithMock(self.task.servicegroup_api, \u0027service_is_up\u0027)"},{"line_number":186,"context_line":"        self.mox.StubOutWithMock(self.task.compute_rpcapi,"}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_346162a9","line":183,"updated":"2016-06-29 09:17:22.000000000","message":"No new tests with mox please, all new tests must use mock.","commit_id":"b6517c36dae0d36f76ac7d6e0bfcf54504423699"}]}
