)]}'
{"nova/virt/xenapi/vmops.py":[{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"fcfb4dc89bfa5f6ca69d3aa5dddabc4250adadf5","unresolved":false,"context_lines":[{"line_number":1239,"context_line":"            with vm_utils.snapshot_attached_here(self._session, instance,"},{"line_number":1240,"context_line":"                    vm_ref, label, str(userdevice)) as chain_vdi_uuids:"},{"line_number":1241,"context_line":""},{"line_number":1242,"context_line":"                # remember active vdi, we will migrate these later,"},{"line_number":1243,"context_line":"                vdi_ref, vm_vdi_rec \u003d vm_utils.get_vdi_for_vm_safely("},{"line_number":1244,"context_line":"                        self._session, vm_ref, str(userdevice))"},{"line_number":1245,"context_line":"                active_uuid \u003d vm_vdi_rec[\u0027uuid\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f96bb07_6e10a6a9","line":1242,"range":{"start_line":1242,"start_character":66,"end_line":1242,"end_character":67},"updated":"2018-01-23 10:20:11.000000000","message":"Not neeeded ,?","commit_id":"157f56c2f8573a2c33de80a8e2e8aeb02a8e8397"},{"author":{"_account_id":18020,"name":"Brooks Kaminski","email":"bhkaminski@gmail.com","username":"bhkaminski1"},"change_message_id":"680bd001bf7845ccb11a9db48666117488af28d6","unresolved":false,"context_lines":[{"line_number":1239,"context_line":"            with vm_utils.snapshot_attached_here(self._session, instance,"},{"line_number":1240,"context_line":"                    vm_ref, label, str(userdevice)) as chain_vdi_uuids:"},{"line_number":1241,"context_line":""},{"line_number":1242,"context_line":"                # remember active vdi, we will migrate these later,"},{"line_number":1243,"context_line":"                vdi_ref, vm_vdi_rec \u003d vm_utils.get_vdi_for_vm_safely("},{"line_number":1244,"context_line":"                        self._session, vm_ref, str(userdevice))"},{"line_number":1245,"context_line":"                active_uuid \u003d vm_vdi_rec[\u0027uuid\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f93b717_5a984b69","line":1242,"range":{"start_line":1242,"start_character":66,"end_line":1242,"end_character":67},"in_reply_to":"7f96bb07_6e10a6a9","updated":"2018-01-25 08:09:17.000000000","message":"Done","commit_id":"157f56c2f8573a2c33de80a8e2e8aeb02a8e8397"},{"author":{"_account_id":18020,"name":"Brooks Kaminski","email":"bhkaminski@gmail.com","username":"bhkaminski1"},"change_message_id":"1be8b7488cab149ea3531f631e496688236e957c","unresolved":false,"context_lines":[{"line_number":1239,"context_line":"            with vm_utils.snapshot_attached_here(self._session, instance,"},{"line_number":1240,"context_line":"                    vm_ref, label, str(userdevice)) as chain_vdi_uuids:"},{"line_number":1241,"context_line":""},{"line_number":1242,"context_line":"                # remember active vdi, we will migrate these later,"},{"line_number":1243,"context_line":"                vdi_ref, vm_vdi_rec \u003d vm_utils.get_vdi_for_vm_safely("},{"line_number":1244,"context_line":"                        self._session, vm_ref, str(userdevice))"},{"line_number":1245,"context_line":"                active_uuid \u003d vm_vdi_rec[\u0027uuid\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f96bb07_2e1ffe70","line":1242,"range":{"start_line":1242,"start_character":66,"end_line":1242,"end_character":67},"in_reply_to":"7f96bb07_6e10a6a9","updated":"2018-01-24 02:40:51.000000000","message":"Haha my bad, I originally put an extended comment here.  Removed that and left the comma. Will fix this tomorrow and recommit for approval.","commit_id":"157f56c2f8573a2c33de80a8e2e8aeb02a8e8397"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"acfbfc7ec31299b0040a94d018d9d8bbf9e7e256","unresolved":false,"context_lines":[{"line_number":1206,"context_line":"            if number_of_chains \u003e 1:"},{"line_number":1207,"context_line":"                remaining_chains \u003d ephemeral_chains[1:]"},{"line_number":1208,"context_line":""},{"line_number":1209,"context_line":"            # ephemeral_disk_index changed to use integers here rather than"},{"line_number":1210,"context_line":"            # feeding from active_vdi_chains.  This allows us to avoid the"},{"line_number":1211,"context_line":"            # snapshot/migration of volume backed vdis, and still increment"},{"line_number":1212,"context_line":"            # properly. This value is now obtained directly from the optional"},{"line_number":1213,"context_line":"            # variable argument. This variable allows for us to accurately walk"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f93b717_3e1d050f","line":1210,"range":{"start_line":1209,"start_character":35,"end_line":1210,"end_character":44},"updated":"2018-01-26 15:29:19.000000000","message":"Nit: This is super context, but I think these change comments are best the git commit message. I fear that after this merges they will just be a bit confusing, best leave this info in the history I think.","commit_id":"ca061a63cfbf75dc55f9a25966bcebf69f64a283"},{"author":{"_account_id":18020,"name":"Brooks Kaminski","email":"bhkaminski@gmail.com","username":"bhkaminski1"},"change_message_id":"5e7d9879933c8c8134b953a5cdb887f6427c0068","unresolved":false,"context_lines":[{"line_number":1206,"context_line":"            if number_of_chains \u003e 1:"},{"line_number":1207,"context_line":"                remaining_chains \u003d ephemeral_chains[1:]"},{"line_number":1208,"context_line":""},{"line_number":1209,"context_line":"            # ephemeral_disk_index changed to use integers here rather than"},{"line_number":1210,"context_line":"            # feeding from active_vdi_chains.  This allows us to avoid the"},{"line_number":1211,"context_line":"            # snapshot/migration of volume backed vdis, and still increment"},{"line_number":1212,"context_line":"            # properly. This value is now obtained directly from the optional"},{"line_number":1213,"context_line":"            # variable argument. This variable allows for us to accurately walk"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f93b717_a66d7e99","line":1210,"range":{"start_line":1209,"start_character":35,"end_line":1210,"end_character":44},"in_reply_to":"5f93b717_3e1d050f","updated":"2018-01-27 01:52:00.000000000","message":"Done","commit_id":"ca061a63cfbf75dc55f9a25966bcebf69f64a283"},{"author":{"_account_id":18020,"name":"Brooks Kaminski","email":"bhkaminski@gmail.com","username":"bhkaminski1"},"change_message_id":"17efcaa3b5d618acc825e80a60906a1d8dfb72c6","unresolved":false,"context_lines":[{"line_number":1206,"context_line":"            if number_of_chains \u003e 1:"},{"line_number":1207,"context_line":"                remaining_chains \u003d ephemeral_chains[1:]"},{"line_number":1208,"context_line":""},{"line_number":1209,"context_line":"            # ephemeral_disk_index changed to use integers here rather than"},{"line_number":1210,"context_line":"            # feeding from active_vdi_chains.  This allows us to avoid the"},{"line_number":1211,"context_line":"            # snapshot/migration of volume backed vdis, and still increment"},{"line_number":1212,"context_line":"            # properly. This value is now obtained directly from the optional"},{"line_number":1213,"context_line":"            # variable argument. This variable allows for us to accurately walk"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f93b717_ef91259b","line":1210,"range":{"start_line":1209,"start_character":35,"end_line":1210,"end_character":44},"in_reply_to":"5f93b717_3e1d050f","updated":"2018-01-26 15:34:20.000000000","message":"I think you\u0027re correct here for sure,  I will trim this down so it\u0027s in git history tonight","commit_id":"ca061a63cfbf75dc55f9a25966bcebf69f64a283"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"acfbfc7ec31299b0040a94d018d9d8bbf9e7e256","unresolved":false,"context_lines":[{"line_number":1219,"context_line":"            # ensure that they are not volume backed, as these VDIs can not be"},{"line_number":1220,"context_line":"            # handled in this way. If the VDI is volume backed, just increment"},{"line_number":1221,"context_line":"            # and continue the recursion."},{"line_number":1222,"context_line":"            if volume_utils.is_volume_backed(self._session, vm_ref,"},{"line_number":1223,"context_line":"                                             userdevice):"},{"line_number":1224,"context_line":"                ephemeral_disk_index \u003d ephemeral_disk_index + 1"},{"line_number":1225,"context_line":"                # This is recursive to simplify the taking and cleaning up"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f93b717_beecb529","line":1222,"updated":"2018-01-26 15:29:19.000000000","message":"Just an idea...\n\nWould it be simpler to trim the list to non-volume disks here:\nhttps://github.com/openstack/nova/blob/c531b7905f5a9f8a5bfa355a2047d04032cbf847/nova/virt/xenapi/vmops.py#L1245\n\nThen re-name the param to local_ephemeral_chains or something like that?\n\nIts just with two recursive exits and one non-recursive exit, this gets kinda confusing.","commit_id":"ca061a63cfbf75dc55f9a25966bcebf69f64a283"},{"author":{"_account_id":18020,"name":"Brooks Kaminski","email":"bhkaminski@gmail.com","username":"bhkaminski1"},"change_message_id":"5e7d9879933c8c8134b953a5cdb887f6427c0068","unresolved":false,"context_lines":[{"line_number":1219,"context_line":"            # ensure that they are not volume backed, as these VDIs can not be"},{"line_number":1220,"context_line":"            # handled in this way. If the VDI is volume backed, just increment"},{"line_number":1221,"context_line":"            # and continue the recursion."},{"line_number":1222,"context_line":"            if volume_utils.is_volume_backed(self._session, vm_ref,"},{"line_number":1223,"context_line":"                                             userdevice):"},{"line_number":1224,"context_line":"                ephemeral_disk_index \u003d ephemeral_disk_index + 1"},{"line_number":1225,"context_line":"                # This is recursive to simplify the taking and cleaning up"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f93b717_863162a5","line":1222,"in_reply_to":"5f93b717_beecb529","updated":"2018-01-27 01:52:00.000000000","message":"I decided to leave this one as it is currently, as implementing this would actually require more overhead into the first called method.  The idea is solid, however the way that the userdevice is already configured within _process_ephemeral_chains allows for us to simply pass the vm_ref and userdevice.  Should we move this into the previous method we will have to pull the userdevice off of the VDI chains that are gathered again, and double up on resource pulling.  The second recursive exit is not the most ideal I think, but ss this an acceptable solution for you, sir?","commit_id":"ca061a63cfbf75dc55f9a25966bcebf69f64a283"},{"author":{"_account_id":18020,"name":"Brooks Kaminski","email":"bhkaminski@gmail.com","username":"bhkaminski1"},"change_message_id":"17efcaa3b5d618acc825e80a60906a1d8dfb72c6","unresolved":false,"context_lines":[{"line_number":1219,"context_line":"            # ensure that they are not volume backed, as these VDIs can not be"},{"line_number":1220,"context_line":"            # handled in this way. If the VDI is volume backed, just increment"},{"line_number":1221,"context_line":"            # and continue the recursion."},{"line_number":1222,"context_line":"            if volume_utils.is_volume_backed(self._session, vm_ref,"},{"line_number":1223,"context_line":"                                             userdevice):"},{"line_number":1224,"context_line":"                ephemeral_disk_index \u003d ephemeral_disk_index + 1"},{"line_number":1225,"context_line":"                # This is recursive to simplify the taking and cleaning up"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f93b717_4fc13980","line":1222,"in_reply_to":"5f93b717_beecb529","updated":"2018-01-26 15:34:20.000000000","message":"Not too bad, it would indeed clean this up and need less recursion jokes to explain it.  Will look into it tonight as well.","commit_id":"ca061a63cfbf75dc55f9a25966bcebf69f64a283"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"133aa263dff731cca12fd0231f86867699015644","unresolved":false,"context_lines":[{"line_number":1214,"context_line":"            # and continue the recursion."},{"line_number":1215,"context_line":"            if volume_utils.is_volume_backed(self._session, vm_ref,"},{"line_number":1216,"context_line":"                                             userdevice):"},{"line_number":1217,"context_line":"                ephemeral_disk_index \u003d ephemeral_disk_index + 1"},{"line_number":1218,"context_line":"                # This is recursive to simplify the taking and cleaning up"},{"line_number":1219,"context_line":"                # of all the ephemeral disk snapshots"},{"line_number":1220,"context_line":"                return _process_ephemeral_chain_recursive(remaining_chains,"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f93b717_6fc71098","line":1217,"updated":"2018-01-30 10:37:59.000000000","message":"nit: since there are two entry points for that recursive method, I\u0027d directly call it below with ephemeral_disk_index+1 on L1222","commit_id":"f80a92ae287308125ddaefcdc2a244752c8ecbcd"},{"author":{"_account_id":18020,"name":"Brooks Kaminski","email":"bhkaminski@gmail.com","username":"bhkaminski1"},"change_message_id":"85ab8c39a513a6f8980a159d5f655d9a07830fe3","unresolved":false,"context_lines":[{"line_number":1214,"context_line":"            # and continue the recursion."},{"line_number":1215,"context_line":"            if volume_utils.is_volume_backed(self._session, vm_ref,"},{"line_number":1216,"context_line":"                                             userdevice):"},{"line_number":1217,"context_line":"                ephemeral_disk_index \u003d ephemeral_disk_index + 1"},{"line_number":1218,"context_line":"                # This is recursive to simplify the taking and cleaning up"},{"line_number":1219,"context_line":"                # of all the ephemeral disk snapshots"},{"line_number":1220,"context_line":"                return _process_ephemeral_chain_recursive(remaining_chains,"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f93b717_4169c41e","line":1217,"in_reply_to":"5f93b717_6fc71098","updated":"2018-01-30 17:15:47.000000000","message":"Addressed this with the refactor of the method overall,  Just 1 entrypoint now.","commit_id":"f80a92ae287308125ddaefcdc2a244752c8ecbcd"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"133aa263dff731cca12fd0231f86867699015644","unresolved":false,"context_lines":[{"line_number":1228,"context_line":"            # - or, if all disks are migrated, we power down and complete"},{"line_number":1229,"context_line":"            #   the migration but copying the diffs since all the snapshots"},{"line_number":1230,"context_line":"            #   were taken"},{"line_number":1231,"context_line":""},{"line_number":1232,"context_line":"            with vm_utils.snapshot_attached_here(self._session, instance,"},{"line_number":1233,"context_line":"                    vm_ref, label, str(userdevice)) as chain_vdi_uuids:"},{"line_number":1234,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"5f93b717_4fba540a","line":1231,"updated":"2018-01-30 10:37:59.000000000","message":"unnecessary","commit_id":"f80a92ae287308125ddaefcdc2a244752c8ecbcd"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"133aa263dff731cca12fd0231f86867699015644","unresolved":false,"context_lines":[{"line_number":1254,"context_line":"                          instance\u003dinstance)"},{"line_number":1255,"context_line":"                # This is recursive to simplify the taking and cleaning up"},{"line_number":1256,"context_line":"                # of all the ephemeral disk snapshots"},{"line_number":1257,"context_line":"                return _process_ephemeral_chain_recursive(remaining_chains,"},{"line_number":1258,"context_line":"                                                          active_vdi_uuids,"},{"line_number":1259,"context_line":"                                                          ephemeral_disk_index)"},{"line_number":1260,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"5f93b717_8ff7fcd3","line":1257,"updated":"2018-01-30 10:37:59.000000000","message":"here you don\u0027t really need to call that recursion within the contextmanager, right?\n\nIf so, I\u0027d simplify that recursion method by doing a pseudocode like this :\n\n def _process_ephemeral_chain_recursive(*args, **kwargs):\n  # calculate the chain and get the current device number\n  if not volume_utils.is_vol_backed(myvol):\n   # do the snapshot\n  # iterate on next volume anyway\n  return _process_ephemeral_chain_recursive(*args, **kwargs)","commit_id":"f80a92ae287308125ddaefcdc2a244752c8ecbcd"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"f992a2e0a9ea1366e7df978c5ca06bf972005460","unresolved":false,"context_lines":[{"line_number":1254,"context_line":"                          instance\u003dinstance)"},{"line_number":1255,"context_line":"                # This is recursive to simplify the taking and cleaning up"},{"line_number":1256,"context_line":"                # of all the ephemeral disk snapshots"},{"line_number":1257,"context_line":"                return _process_ephemeral_chain_recursive(remaining_chains,"},{"line_number":1258,"context_line":"                                                          active_vdi_uuids,"},{"line_number":1259,"context_line":"                                                          ephemeral_disk_index)"},{"line_number":1260,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"bf659307_7324855e","line":1257,"in_reply_to":"5f93b717_2164b849","updated":"2018-04-03 12:25:34.000000000","message":"Uh, oh. I think we do need the context manager here... There is something about how we need to keep the snapshots attached to stop them being cleaned up underneath the work that is being doing for the copying.","commit_id":"f80a92ae287308125ddaefcdc2a244752c8ecbcd"},{"author":{"_account_id":18020,"name":"Brooks Kaminski","email":"bhkaminski@gmail.com","username":"bhkaminski1"},"change_message_id":"85ab8c39a513a6f8980a159d5f655d9a07830fe3","unresolved":false,"context_lines":[{"line_number":1254,"context_line":"                          instance\u003dinstance)"},{"line_number":1255,"context_line":"                # This is recursive to simplify the taking and cleaning up"},{"line_number":1256,"context_line":"                # of all the ephemeral disk snapshots"},{"line_number":1257,"context_line":"                return _process_ephemeral_chain_recursive(remaining_chains,"},{"line_number":1258,"context_line":"                                                          active_vdi_uuids,"},{"line_number":1259,"context_line":"                                                          ephemeral_disk_index)"},{"line_number":1260,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"5f93b717_2164b849","line":1257,"in_reply_to":"5f93b717_8ff7fcd3","updated":"2018-01-30 17:15:47.000000000","message":"Love this idea for its simplicity.  Done.","commit_id":"f80a92ae287308125ddaefcdc2a244752c8ecbcd"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"38804367a1e266ec493204521ec3ac355a8d3e69","unresolved":false,"context_lines":[{"line_number":1221,"context_line":"                #   the migration but copying the diffs since all the snapshots"},{"line_number":1222,"context_line":"                #   were taken"},{"line_number":1223,"context_line":""},{"line_number":1224,"context_line":"                with vm_utils.snapshot_attached_here(self._session, instance,"},{"line_number":1225,"context_line":"                            vm_ref, label, str(userdevice)) as chain_vdi_uuids:"},{"line_number":1226,"context_line":""},{"line_number":1227,"context_line":"                    # remember active vdi, we will migrate these later"}],"source_content_type":"text/x-python","patch_set":8,"id":"bf659307_33efede9","line":1224,"updated":"2018-04-03 12:27:09.000000000","message":"Does this work, I was fairly sure this does some deleting of vdis that means we don\u0027t want to detach until all the migrate work of the chain is done? If we don\u0027t I think the chain starts to change underneath the system, in certain edge cases.\n\nI might be remembering this wrongly, I would check with Bob.","commit_id":"eefb20e4658e17f91fa76b74fef6ff899babe51b"},{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"81fe9e993bdc08116fb09cd01f7febee7a7615cb","unresolved":false,"context_lines":[{"line_number":1221,"context_line":"                #   the migration but copying the diffs since all the snapshots"},{"line_number":1222,"context_line":"                #   were taken"},{"line_number":1223,"context_line":""},{"line_number":1224,"context_line":"                with vm_utils.snapshot_attached_here(self._session, instance,"},{"line_number":1225,"context_line":"                            vm_ref, label, str(userdevice)) as chain_vdi_uuids:"},{"line_number":1226,"context_line":""},{"line_number":1227,"context_line":"                    # remember active vdi, we will migrate these later"}],"source_content_type":"text/x-python","patch_set":8,"id":"bf659307_cc513338","line":1224,"in_reply_to":"bf659307_33efede9","updated":"2018-04-03 14:19:59.000000000","message":"TBH that was pre-existing code, so I didn\u0027t review it.  This is in the resizing up case (i.e. not live migrate) - it seems to be code you wrote for this case?\n\nI think this is safe in this case because we don\u0027t support newer than the XenServer LTSR (7.1) currently, and leaf coalescing on EXT3 SRs (which is the only place where this resizing-up feature can be used) is not enabled.\nTherefore even though the snapshot is deleted, the thin leaf will not be coalesced during the final copy","commit_id":"eefb20e4658e17f91fa76b74fef6ff899babe51b"},{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"8d8c3c9d8b3e0292575f26410311bcec28463322","unresolved":false,"context_lines":[{"line_number":1221,"context_line":"                #   the migration but copying the diffs since all the snapshots"},{"line_number":1222,"context_line":"                #   were taken"},{"line_number":1223,"context_line":""},{"line_number":1224,"context_line":"                with vm_utils.snapshot_attached_here(self._session, instance,"},{"line_number":1225,"context_line":"                            vm_ref, label, str(userdevice)) as chain_vdi_uuids:"},{"line_number":1226,"context_line":""},{"line_number":1227,"context_line":"                    # remember active vdi, we will migrate these later"}],"source_content_type":"text/x-python","patch_set":8,"id":"bf659307_8f3762e4","line":1224,"in_reply_to":"bf659307_71d8b37e","updated":"2018-04-06 10:23:20.000000000","message":"Taking the snapshot waits for some coalescing (e.g. earlier in the chain) to complete.  IMO this probably still isn\u0027t quite right, but it\u0027s better than it was.  What we *should* do is create a VDI snapshot attached to all VDIs we want to preserve, then wait for all other VDIs to disappear.\n\nAnyway - EXT3 leaf coaleasing was first enabled in XenServer 7.3.  Prior to that it was always disabled, which is why the leaf is always present outside of the with clause.","commit_id":"eefb20e4658e17f91fa76b74fef6ff899babe51b"},{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"9bc3db3222865dad7eab401087d9f2cb1186d89f","unresolved":false,"context_lines":[{"line_number":1221,"context_line":"                #   the migration but copying the diffs since all the snapshots"},{"line_number":1222,"context_line":"                #   were taken"},{"line_number":1223,"context_line":""},{"line_number":1224,"context_line":"                with vm_utils.snapshot_attached_here(self._session, instance,"},{"line_number":1225,"context_line":"                            vm_ref, label, str(userdevice)) as chain_vdi_uuids:"},{"line_number":1226,"context_line":""},{"line_number":1227,"context_line":"                    # remember active vdi, we will migrate these later"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_0e069a1e","line":1224,"in_reply_to":"bf659307_8f3762e4","updated":"2018-05-10 11:55:05.000000000","message":"Are you happy with this approach now?","commit_id":"eefb20e4658e17f91fa76b74fef6ff899babe51b"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"262b649fa31bd9cb5c632aef4ae562c4153d9a71","unresolved":false,"context_lines":[{"line_number":1221,"context_line":"                #   the migration but copying the diffs since all the snapshots"},{"line_number":1222,"context_line":"                #   were taken"},{"line_number":1223,"context_line":""},{"line_number":1224,"context_line":"                with vm_utils.snapshot_attached_here(self._session, instance,"},{"line_number":1225,"context_line":"                            vm_ref, label, str(userdevice)) as chain_vdi_uuids:"},{"line_number":1226,"context_line":""},{"line_number":1227,"context_line":"                    # remember active vdi, we will migrate these later"}],"source_content_type":"text/x-python","patch_set":8,"id":"bf659307_71d8b37e","line":1224,"in_reply_to":"bf659307_cc513338","updated":"2018-04-06 08:28:40.000000000","message":"I don\u0027t know why it happened, we certainly used to see things fail due to missing VHDs before this change. Unsure quite why that happened.\n\nWhen did leaf coalescing get turned off vs on?","commit_id":"eefb20e4658e17f91fa76b74fef6ff899babe51b"}],"nova/virt/xenapi/volume_utils.py":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"133aa263dff731cca12fd0231f86867699015644","unresolved":false,"context_lines":[{"line_number":351,"context_line":"    return False"},{"line_number":352,"context_line":""},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"def is_volume_backed(session, vm_ref, user_device):"},{"line_number":355,"context_line":"    \"\"\"Determine if a given VBD user_device is a volume.\"\"\""},{"line_number":356,"context_line":"    vbd_ref \u003d find_vbd_by_number(session, vm_ref, user_device)"},{"line_number":357,"context_line":"    vbd_other_config \u003d session.VBD.get_other_config(vbd_ref)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f93b717_aff0b8fe","line":354,"updated":"2018-01-30 10:37:59.000000000","message":"That\u0027s very similar to _is_booted_from_volume() above, with the slight exception that you check any device number, not only root.\n\nWhy couldn\u0027t you just extend the above method and pass a kwarg like user_device\u003d0 ?\n\nIn general, we try to avoid duplicate code as the codebase maintenance is higher since there could be regressions on some place and some not.","commit_id":"f80a92ae287308125ddaefcdc2a244752c8ecbcd"},{"author":{"_account_id":18020,"name":"Brooks Kaminski","email":"bhkaminski@gmail.com","username":"bhkaminski1"},"change_message_id":"85ab8c39a513a6f8980a159d5f655d9a07830fe3","unresolved":false,"context_lines":[{"line_number":351,"context_line":"    return False"},{"line_number":352,"context_line":""},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"def is_volume_backed(session, vm_ref, user_device):"},{"line_number":355,"context_line":"    \"\"\"Determine if a given VBD user_device is a volume.\"\"\""},{"line_number":356,"context_line":"    vbd_ref \u003d find_vbd_by_number(session, vm_ref, user_device)"},{"line_number":357,"context_line":"    vbd_other_config \u003d session.VBD.get_other_config(vbd_ref)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f93b717_617400ff","line":354,"in_reply_to":"5f93b717_aff0b8fe","updated":"2018-01-30 17:15:47.000000000","message":"Done","commit_id":"f80a92ae287308125ddaefcdc2a244752c8ecbcd"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"133aa263dff731cca12fd0231f86867699015644","unresolved":false,"context_lines":[{"line_number":355,"context_line":"    \"\"\"Determine if a given VBD user_device is a volume.\"\"\""},{"line_number":356,"context_line":"    vbd_ref \u003d find_vbd_by_number(session, vm_ref, user_device)"},{"line_number":357,"context_line":"    vbd_other_config \u003d session.VBD.get_other_config(vbd_ref)"},{"line_number":358,"context_line":"    if vbd_other_config.get(\u0027osvol\u0027, False):"},{"line_number":359,"context_line":"        return True"},{"line_number":360,"context_line":"    return False"},{"line_number":361,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"5f93b717_6fde306e","line":358,"range":{"start_line":358,"start_character":37,"end_line":358,"end_character":42},"updated":"2018-01-30 10:37:59.000000000","message":"nit : by default, get() returns False","commit_id":"f80a92ae287308125ddaefcdc2a244752c8ecbcd"},{"author":{"_account_id":18020,"name":"Brooks Kaminski","email":"bhkaminski@gmail.com","username":"bhkaminski1"},"change_message_id":"85ab8c39a513a6f8980a159d5f655d9a07830fe3","unresolved":false,"context_lines":[{"line_number":355,"context_line":"    \"\"\"Determine if a given VBD user_device is a volume.\"\"\""},{"line_number":356,"context_line":"    vbd_ref \u003d find_vbd_by_number(session, vm_ref, user_device)"},{"line_number":357,"context_line":"    vbd_other_config \u003d session.VBD.get_other_config(vbd_ref)"},{"line_number":358,"context_line":"    if vbd_other_config.get(\u0027osvol\u0027, False):"},{"line_number":359,"context_line":"        return True"},{"line_number":360,"context_line":"    return False"},{"line_number":361,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"5f93b717_a16e882c","line":358,"range":{"start_line":358,"start_character":37,"end_line":358,"end_character":42},"in_reply_to":"5f93b717_6fde306e","updated":"2018-01-30 17:15:47.000000000","message":"Since this isn\u0027t part of my code I don\u0027t want to expand the scope of my own commit here but will note it to adjust in a nitcommit if that is acceptable for the project readability.","commit_id":"f80a92ae287308125ddaefcdc2a244752c8ecbcd"}]}
