)]}'
{"nova/compute/manager.py":[{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"1fdd3b3c2323b4f95e5480a529bd8c9eb077e7a0","unresolved":false,"context_lines":[{"line_number":4847,"context_line":"            # and use the status field to denote when the accounting has been"},{"line_number":4848,"context_line":"            # done on source/destination. For now, this is just here for status"},{"line_number":4849,"context_line":"            # reporting"},{"line_number":4850,"context_line":"            migration.status \u003d \u0027preparing\u0027"},{"line_number":4851,"context_line":"            migration.save()"},{"line_number":4852,"context_line":""},{"line_number":4853,"context_line":"        # Create a local copy since we\u0027ll be modifying the dictionary"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa32b979_2e89d726","line":4850,"updated":"2015-06-15 19:42:55.000000000","message":"It\u0027s unfortunate that we don\u0027t have constants defined for the statuses like we do for vm/task state.","commit_id":"5b59a285aa32a3f00551dcce988cca62c2eda11f"},{"author":{"_account_id":10795,"name":"Rajesh Tailor","email":"tailor.rajesh88@gmail.com","username":"rajeshtailor"},"change_message_id":"46b746693a31e243191a056ae1504748e045d33c","unresolved":false,"context_lines":[{"line_number":4871,"context_line":"                LOG.exception(_LE(\u0027Pre live migration failed at %s\u0027),"},{"line_number":4872,"context_line":"                              dest, instance\u003dinstance)"},{"line_number":4873,"context_line":"                if migration:"},{"line_number":4874,"context_line":"                    migration.status \u003d \u0027failed\u0027"},{"line_number":4875,"context_line":"                    migration.save()"},{"line_number":4876,"context_line":"                self._rollback_live_migration(context, instance, dest,"},{"line_number":4877,"context_line":"                                              block_migration, migrate_data)"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa32b979_3a4c159d","line":4874,"updated":"2015-06-25 09:24:39.000000000","message":"Hi Dan,\n\nIMO the migration status should be set to \u0027error\u0027 on live-migration failure. The same convention is followed in resize, revert-resize and confirm-resize operations.","commit_id":"2da9a49e42cad7ee1af9323ffd3e44087f511888"},{"author":{"_account_id":10795,"name":"Rajesh Tailor","email":"tailor.rajesh88@gmail.com","username":"rajeshtailor"},"change_message_id":"46b746693a31e243191a056ae1504748e045d33c","unresolved":false,"context_lines":[{"line_number":4895,"context_line":"                    migration.save()"},{"line_number":4896,"context_line":""},{"line_number":4897,"context_line":"        if migration:"},{"line_number":4898,"context_line":"            migration.status \u003d \u0027complete\u0027"},{"line_number":4899,"context_line":"            migration.save()"},{"line_number":4900,"context_line":""},{"line_number":4901,"context_line":"    def _live_migration_cleanup_flags(self, block_migration, migrate_data):"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa32b979_5a1d5971","line":4898,"updated":"2015-06-25 09:24:39.000000000","message":"Hi Dan,\n\nIMO this is not the right place to set migration status to \u0027complete\u0027 as, the driver.live_migration call initiates another greenthread which executes driver._live_migration with respective callbacks for post_live_migration and rollback_live_migration.\n\nIn this case, if live-migration fails after giving call to driver.live_migration, then the migration status should not be set to \u0027complete\u0027 as migration has not completed and failed in-between.","commit_id":"2da9a49e42cad7ee1af9323ffd3e44087f511888"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"11459ed6bc9cff85b643c067b482873dbfcbefa7","unresolved":false,"context_lines":[{"line_number":4895,"context_line":"                    migration.save()"},{"line_number":4896,"context_line":""},{"line_number":4897,"context_line":"        if migration:"},{"line_number":4898,"context_line":"            migration.status \u003d \u0027complete\u0027"},{"line_number":4899,"context_line":"            migration.save()"},{"line_number":4900,"context_line":""},{"line_number":4901,"context_line":"    def _live_migration_cleanup_flags(self, block_migration, migrate_data):"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa32b979_17c1dce3","line":4898,"in_reply_to":"fa32b979_5a1d5971","updated":"2015-06-25 13:35:26.000000000","message":"Yep, this should really be \"started\" here and the marking of completion should probably be in _post_live_migration or something.","commit_id":"2da9a49e42cad7ee1af9323ffd3e44087f511888"},{"author":{"_account_id":642,"name":"Matt Dietz","email":"matthew.dietz@gmail.com","username":"cerberus"},"change_message_id":"dfe20c3642a8345a081beb0f7a361d04ce65f9f7","unresolved":false,"context_lines":[{"line_number":4879,"context_line":""},{"line_number":4880,"context_line":"        if migration:"},{"line_number":4881,"context_line":"            migration.status \u003d \u0027running\u0027"},{"line_number":4882,"context_line":"            migration.save()"},{"line_number":4883,"context_line":""},{"line_number":4884,"context_line":"        migrate_data[\u0027migration\u0027] \u003d migration"},{"line_number":4885,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba3cc151_126e9fc9","line":4882,"updated":"2015-06-29 14:50:26.000000000","message":"This could use a helper method in this class or one on the object, like update_status() that sets the property and saves it for you.\n\nBut it\u0027s not a big deal","commit_id":"2f4e64a7cf81de4a22fe2fc4210b1f795b1a3db4"},{"author":{"_account_id":10795,"name":"Rajesh Tailor","email":"tailor.rajesh88@gmail.com","username":"rajeshtailor"},"change_message_id":"a5371a92aa499a44e07d9451beb237ce437923e0","unresolved":false,"context_lines":[{"line_number":5165,"context_line":""},{"line_number":5166,"context_line":"        self._notify_about_instance_usage(context, instance,"},{"line_number":5167,"context_line":"                                          \"live_migration._rollback.end\")"},{"line_number":5168,"context_line":"        if migration:"},{"line_number":5169,"context_line":"            migration.status \u003d \u0027error\u0027"},{"line_number":5170,"context_line":"            migration.save()"},{"line_number":5171,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"ba3cc151_f5b9baed","line":5168,"updated":"2015-06-29 05:50:37.000000000","message":"Migration status will never be set to \u0027error\u0027 by this code block and its status will be in \u0027running\u0027 forever, if instance gets deleted just before executing below code snippet from _live_migration method of nova/virt/libvirt/driver.py module.\n\nguest \u003d self._host.get_guest(instance)","commit_id":"2f4e64a7cf81de4a22fe2fc4210b1f795b1a3db4"},{"author":{"_account_id":642,"name":"Matt Dietz","email":"matthew.dietz@gmail.com","username":"cerberus"},"change_message_id":"dfe20c3642a8345a081beb0f7a361d04ce65f9f7","unresolved":false,"context_lines":[{"line_number":5165,"context_line":""},{"line_number":5166,"context_line":"        self._notify_about_instance_usage(context, instance,"},{"line_number":5167,"context_line":"                                          \"live_migration._rollback.end\")"},{"line_number":5168,"context_line":"        if migration:"},{"line_number":5169,"context_line":"            migration.status \u003d \u0027error\u0027"},{"line_number":5170,"context_line":"            migration.save()"},{"line_number":5171,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"ba3cc151_12ca1fa2","line":5168,"in_reply_to":"ba3cc151_39cf0eb2","updated":"2015-06-29 14:50:26.000000000","message":"Sounds like an edge case. What if we added a bug and got past this one so  that exact issue could be targeted in a follow-up?","commit_id":"2f4e64a7cf81de4a22fe2fc4210b1f795b1a3db4"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"388d362ca86112668508fbfc946b6ab40b841d90","unresolved":false,"context_lines":[{"line_number":5165,"context_line":""},{"line_number":5166,"context_line":"        self._notify_about_instance_usage(context, instance,"},{"line_number":5167,"context_line":"                                          \"live_migration._rollback.end\")"},{"line_number":5168,"context_line":"        if migration:"},{"line_number":5169,"context_line":"            migration.status \u003d \u0027error\u0027"},{"line_number":5170,"context_line":"            migration.save()"},{"line_number":5171,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"ba3cc151_39cf0eb2","line":5168,"in_reply_to":"ba3cc151_f5b9baed","updated":"2015-06-29 13:55:31.000000000","message":"Yep, this is true. What do you propose?\n\nHonestly, I\u0027m really just trying to get this patch in so that the one after can be merged. It is the subject of the blueprint and the important one. Adding the migration object for live migration was just to establish parity between the migration routines for now. This does make it better, but is probably not sufficient for the full user experience. Luckily os-migrations is currently admin-only.","commit_id":"2f4e64a7cf81de4a22fe2fc4210b1f795b1a3db4"}],"nova/compute/resource_tracker.py":[{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"f690e312e04bf4a36ca5fea5a09289be1e34bd5d","unresolved":false,"context_lines":[{"line_number":475,"context_line":"        # records as well and do something smart. However, ignore"},{"line_number":476,"context_line":"        # those for now to avoid them being included in below calculations."},{"line_number":477,"context_line":"        migrations \u003d [migration for migration in migrations"},{"line_number":478,"context_line":"                      if migration.migration_type in (\u0027resize\u0027, \u0027migrate\u0027)]"},{"line_number":479,"context_line":""},{"line_number":480,"context_line":"        self._update_usage_from_migrations(context, migrations)"},{"line_number":481,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"7a016987_67ae6f82","line":478,"updated":"2015-06-01 13:55:15.000000000","message":"I do not understand why you don\u0027t include live-migrate her,e can you five me some information?","commit_id":"e79d174ce9a3116d0de840be63bdf44cb8124472"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"2278b7bb9d7299e1645ddf55a73c01a3510c7eac","unresolved":false,"context_lines":[{"line_number":475,"context_line":"        # records as well and do something smart. However, ignore"},{"line_number":476,"context_line":"        # those for now to avoid them being included in below calculations."},{"line_number":477,"context_line":"        migrations \u003d [migration for migration in migrations"},{"line_number":478,"context_line":"                      if migration.migration_type in (\u0027resize\u0027, \u0027migrate\u0027)]"},{"line_number":479,"context_line":""},{"line_number":480,"context_line":"        self._update_usage_from_migrations(context, migrations)"},{"line_number":481,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"7a016987_bd423aa9","line":478,"in_reply_to":"7a016987_67ae6f82","updated":"2015-06-01 14:38:55.000000000","message":"I think the comment covers it, but if you can think of something else to say there, I will.\n\nIf we don\u0027t exclude the new migration record types here, we will change the usage calculations below. Changing those to properly handle what resource reports for a live migration or an evacuation is outside the scope of this specific set of patches, so this filter just ensures that we\u0027re not changing that part right now.","commit_id":"e79d174ce9a3116d0de840be63bdf44cb8124472"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"845e2b409b16061e25c74b15772c1373d80489cb","unresolved":false,"context_lines":[{"line_number":475,"context_line":"        # records as well and do something smart. However, ignore"},{"line_number":476,"context_line":"        # those for now to avoid them being included in below calculations."},{"line_number":477,"context_line":"        migrations \u003d [migration for migration in migrations"},{"line_number":478,"context_line":"                      if migration.migration_type in (\u0027resize\u0027, \u0027migrate\u0027)]"},{"line_number":479,"context_line":""},{"line_number":480,"context_line":"        self._update_usage_from_migrations(context, migrations)"},{"line_number":481,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"7a016987_dd561629","line":478,"in_reply_to":"7a016987_bd423aa9","updated":"2015-06-01 14:46:09.000000000","message":"It does yes. Actually since it was a NOTE and not a TODO I did not get in a first time you just pass it for now.","commit_id":"e79d174ce9a3116d0de840be63bdf44cb8124472"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"1f0bcd62cf5ba2a2c2cddfc8ea56afd7d7f1d005","unresolved":false,"context_lines":[{"line_number":475,"context_line":"        # records as well and do something smart. However, ignore"},{"line_number":476,"context_line":"        # those for now to avoid them being included in below calculations."},{"line_number":477,"context_line":"        migrations \u003d [migration for migration in migrations"},{"line_number":478,"context_line":"                      if migration.migration_type in (\u0027resize\u0027, \u0027migrate\u0027)]"},{"line_number":479,"context_line":""},{"line_number":480,"context_line":"        self._update_usage_from_migrations(context, migrations)"},{"line_number":481,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3afb71cf_65d3bd39","line":478,"in_reply_to":"7a016987_dd561629","updated":"2015-06-05 17:53:04.000000000","message":"Ah, fair enough. I didn\u0027t make it a TODO, because I don\u0027t want TODO it myself :D\n\nBut, I can change that if I rebase this (and remember).","commit_id":"e79d174ce9a3116d0de840be63bdf44cb8124472"}],"nova/compute/rpcapi.py":[{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"1fdd3b3c2323b4f95e5480a529bd8c9eb077e7a0","unresolved":false,"context_lines":[{"line_number":535,"context_line":"        args \u003d {\u0027migration\u0027: migration}"},{"line_number":536,"context_line":"        version \u003d \u00274.1\u0027"},{"line_number":537,"context_line":"        if not self.client.can_send_version(version):"},{"line_number":538,"context_line":"            migration.status \u003d \u0027what-to-do\u0027"},{"line_number":539,"context_line":"            migration.save()"},{"line_number":540,"context_line":"            del args[\u0027migration\u0027]"},{"line_number":541,"context_line":"            version \u003d \u00274.0\u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa32b979_eee8cf7e","line":538,"updated":"2015-06-15 19:42:55.000000000","message":"This isn\u0027t really necessary right?  In this scenario some of the fine grained status updates from the compute are lost, but conductor will still handle the overall complete/failed updates.","commit_id":"5b59a285aa32a3f00551dcce988cca62c2eda11f"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"3d5cf6ab91012715f9c2fa99c0c96315b1beec47","unresolved":false,"context_lines":[{"line_number":535,"context_line":"        args \u003d {\u0027migration\u0027: migration}"},{"line_number":536,"context_line":"        version \u003d \u00274.1\u0027"},{"line_number":537,"context_line":"        if not self.client.can_send_version(version):"},{"line_number":538,"context_line":"            migration.status \u003d \u0027what-to-do\u0027"},{"line_number":539,"context_line":"            migration.save()"},{"line_number":540,"context_line":"            del args[\u0027migration\u0027]"},{"line_number":541,"context_line":"            version \u003d \u00274.0\u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_ab0b8b7c","line":538,"updated":"2015-06-22 15:23:19.000000000","message":"could you explain the meaning of this?","commit_id":"5ce6908b1cf24de6b06edade4da654c68311a3af"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"adaccb78b160f4d6f33e567a7af372196834ac09","unresolved":false,"context_lines":[{"line_number":536,"context_line":"        version \u003d \u00274.1\u0027"},{"line_number":537,"context_line":"        if not self.client.can_send_version(version):"},{"line_number":538,"context_line":"            migration.status \u003d \u0027what-to-do\u0027"},{"line_number":539,"context_line":"            migration.save()"},{"line_number":540,"context_line":"            del args[\u0027migration\u0027]"},{"line_number":541,"context_line":"            version \u003d \u00274.0\u0027"},{"line_number":542,"context_line":"        cctxt \u003d self.client.prepare(server\u003dhost, version\u003dversion)"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa32b979_153cd0c6","line":539,"updated":"2015-06-23 20:05:01.000000000","message":"I still think this is unnecessary.  Some fine grained status updates will be missed which is okay, and if a marker is desired here there\u0027s probably something better to use.  Perhaps \u0027backwards-compat\u0027 or \u0027legacy-update\u0027, I dunno.","commit_id":"2da9a49e42cad7ee1af9323ffd3e44087f511888"}],"nova/conductor/manager.py":[{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"1f412d9134921510c5d38c15754f524d9146442c","unresolved":false,"context_lines":[{"line_number":630,"context_line":"        migration.instance_uuid \u003d instance.uuid"},{"line_number":631,"context_line":"        migration.source_compute \u003d instance.host"},{"line_number":632,"context_line":"        migration.migration_type \u003d \u0027live-migration\u0027"},{"line_number":633,"context_line":"        migration.create()"},{"line_number":634,"context_line":""},{"line_number":635,"context_line":"        try:"},{"line_number":636,"context_line":"            live_migrate.execute(context, instance, destination,"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a016987_2ba704a8","line":633,"updated":"2015-05-25 11:47:24.000000000","message":"I don\u0027t think this is a good place to do it - it really needs to be done on the destination host under the COMPUTE_RESOURCE_SEMAPHORE lock - I suggest using the rt context manager approach for this too.\n\ncheck_can_live_migrate_destination seems to be the correct place to do it from a cursory glance. Leaving it here is obviously racy and even though it is not really making the situation any worse since now we don\u0027t even account for resources when live migrating - it _seems_ that doing the right thing is not really that much harder - so we should definitely not accept this.\n\nThe only thing we need to be careful about is rolling back the migration, and also handling the failure to claim resources properly in the live migration workflow.","commit_id":"1ad389b120e52d3a5e2457a49188918a6ff41129"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"a63f37d75c370c9f2054ce264e0fda9d525c1802","unresolved":false,"context_lines":[{"line_number":630,"context_line":"        migration.instance_uuid \u003d instance.uuid"},{"line_number":631,"context_line":"        migration.source_compute \u003d instance.host"},{"line_number":632,"context_line":"        migration.migration_type \u003d \u0027live-migration\u0027"},{"line_number":633,"context_line":"        migration.create()"},{"line_number":634,"context_line":""},{"line_number":635,"context_line":"        try:"},{"line_number":636,"context_line":"            live_migrate.execute(context, instance, destination,"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a016987_baef121c","line":633,"in_reply_to":"7a016987_2ba704a8","updated":"2015-05-29 15:24:13.000000000","message":"I\u0027m not sure why this has anything to do with resource accounting. The only reason I\u0027m adding this for live migration is so that there is a record of it happening in the os-migrations list for an instance. Are you saying that there is some other process that will list migrations and potentially be confused by the fact that this exists? If so, we should probably make that ignore non-resize/cold-migrate migration records I think.","commit_id":"1ad389b120e52d3a5e2457a49188918a6ff41129"}]}
