)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8430,"name":"Christopher Lefelhocz","email":"christopher.lefelhoc@rackspace.com","username":"leif"},"change_message_id":"bbefc64917b5f4565aeaa8d26477fb11a2db23e7","unresolved":false,"context_lines":[{"line_number":12,"context_line":"salvage data."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"This changes the xenapi driver to attach the original local disks"},{"line_number":15,"context_line":"during rescue so the user can rescue all of their data."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"DocImpact"},{"line_number":18,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"baada198_ce52a711","line":15,"updated":"2014-07-24 14:42:48.000000000","message":"My understanding is that the driver consistency got resolved through a blueprint.  We should not that in the commit and reference the blueprint.","commit_id":"14a59294de2fc48296b0271756458a9824051d52"}],"nova/tests/virt/xenapi/test_xenapi.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"06695ae9e32fd3fc34202bbd881f39a6eaf6f861","unresolved":false,"context_lines":[{"line_number":1233,"context_line":""},{"line_number":1234,"context_line":"        xenapi_fake.create_vbd(vm_ref, swap_vdi_ref, userdevice\u003d1)"},{"line_number":1235,"context_line":"        xenapi_fake.create_vbd(vm_ref, root_vdi_ref, userdevice\u003d0)"},{"line_number":1236,"context_line":"        xenapi_fake.create_vbd(vm_ref, eph_vdi_ref, userdevice\u003d4)"},{"line_number":1237,"context_line":""},{"line_number":1238,"context_line":"        conn \u003d xenapi_conn.XenAPIDriver(fake.FakeVirtAPI(), False)"},{"line_number":1239,"context_line":"        image_meta \u003d {\u0027id\u0027: IMAGE_VHD,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F%2F3Jk%3D","line":1236,"updated":"2014-03-13 10:05:02.000000000","message":"Might be good to add two ephemeral disks here, just to confirm it works with multiple ephemeral disks.","commit_id":"0797076ef43e7481cf0633a05e6d1d2e9f4bdee9"},{"author":{"_account_id":100,"name":"Johannes Erdfelt","email":"johannes@erdfelt.com","username":"johannes.erdfelt"},"change_message_id":"00338e8ba3a581a360630be4ec6019e84a9b2a18","unresolved":false,"context_lines":[{"line_number":1233,"context_line":""},{"line_number":1234,"context_line":"        xenapi_fake.create_vbd(vm_ref, swap_vdi_ref, userdevice\u003d1)"},{"line_number":1235,"context_line":"        xenapi_fake.create_vbd(vm_ref, root_vdi_ref, userdevice\u003d0)"},{"line_number":1236,"context_line":"        xenapi_fake.create_vbd(vm_ref, eph_vdi_ref, userdevice\u003d4)"},{"line_number":1237,"context_line":""},{"line_number":1238,"context_line":"        conn \u003d xenapi_conn.XenAPIDriver(fake.FakeVirtAPI(), False)"},{"line_number":1239,"context_line":"        image_meta \u003d {\u0027id\u0027: IMAGE_VHD,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F%2FSwA%3D","line":1236,"in_reply_to":"AAAAWH%2F%2F3Jk%3D","updated":"2014-03-18 20:37:31.000000000","message":"Done","commit_id":"0797076ef43e7481cf0633a05e6d1d2e9f4bdee9"},{"author":{"_account_id":8430,"name":"Christopher Lefelhocz","email":"christopher.lefelhoc@rackspace.com","username":"leif"},"change_message_id":"8cd00d55339148db86cf81c80d823b1a7f0f01bf","unresolved":false,"context_lines":[{"line_number":1269,"context_line":"            vdi_refs.append(xenapi_fake.get_record(\u0027VBD\u0027, vbd_ref)[\u0027VDI\u0027])"},{"line_number":1270,"context_line":"        self.assertNotIn(swap_vdi_ref, vdi_refs)"},{"line_number":1271,"context_line":"        self.assertIn(root_vdi_ref, vdi_refs)"},{"line_number":1272,"context_line":"        self.assertIn(eph1_vdi_ref, vdi_refs)"},{"line_number":1273,"context_line":"        self.assertIn(eph2_vdi_ref, vdi_refs)"},{"line_number":1274,"context_line":"        self.assertNotIn(vol_vdi_ref, vdi_refs)"},{"line_number":1275,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAWH%2F9sag%3D","line":1272,"updated":"2014-04-02 19:00:35.000000000","message":"We\u0027re checking that the vdi_refs are in place, but we should probably check that the empheral disks are attached at the same spot as well.  Even in the rescue case, if I have to determine that the disk attachments changed (and what was what) I would have hard time/be error prone to make a mistake.","commit_id":"9b1b6ec78a17ee158b84e7a4d0267fcadc25ea8a"}],"nova/virt/xenapi/vmops.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"06695ae9e32fd3fc34202bbd881f39a6eaf6f861","unresolved":false,"context_lines":[{"line_number":526,"context_line":"            msg \u003d _(\"Failed to spawn, rolling back\")"},{"line_number":527,"context_line":"            undo_mgr.rollback_and_reraise(msg\u003dmsg, instance\u003dinstance)"},{"line_number":528,"context_line":""},{"line_number":529,"context_line":"    def _attach_orig_disks(self, instance, vm_ref):"},{"line_number":530,"context_line":"        orig_vm_ref \u003d vm_utils.lookup(self._session, instance[\u0027name\u0027])"},{"line_number":531,"context_line":"        orig_vdi_refs \u003d self._find_vdi_refs(orig_vm_ref)"},{"line_number":532,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F%2F3Kc%3D","line":529,"updated":"2014-03-13 10:05:02.000000000","message":"can we add some unit tests for this method?","commit_id":"0797076ef43e7481cf0633a05e6d1d2e9f4bdee9"},{"author":{"_account_id":100,"name":"Johannes Erdfelt","email":"johannes@erdfelt.com","username":"johannes.erdfelt"},"change_message_id":"00338e8ba3a581a360630be4ec6019e84a9b2a18","unresolved":false,"context_lines":[{"line_number":526,"context_line":"            msg \u003d _(\"Failed to spawn, rolling back\")"},{"line_number":527,"context_line":"            undo_mgr.rollback_and_reraise(msg\u003dmsg, instance\u003dinstance)"},{"line_number":528,"context_line":""},{"line_number":529,"context_line":"    def _attach_orig_disks(self, instance, vm_ref):"},{"line_number":530,"context_line":"        orig_vm_ref \u003d vm_utils.lookup(self._session, instance[\u0027name\u0027])"},{"line_number":531,"context_line":"        orig_vdi_refs \u003d self._find_vdi_refs(orig_vm_ref)"},{"line_number":532,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F%2FSxE%3D","line":529,"in_reply_to":"AAAAWH%2F%2F3Kc%3D","updated":"2014-03-18 20:37:31.000000000","message":"This already has a unit test. nova/tests/virt/xenapi/test_vmops.py:SpawnTestCase.test_attach_orig_disks","commit_id":"0797076ef43e7481cf0633a05e6d1d2e9f4bdee9"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"06695ae9e32fd3fc34202bbd881f39a6eaf6f861","unresolved":false,"context_lines":[{"line_number":533,"context_line":"        # Attach original root disk"},{"line_number":534,"context_line":"        root_vdi_ref \u003d orig_vdi_refs.get(DEVICE_ROOT)"},{"line_number":535,"context_line":"        if not root_vdi_ref:"},{"line_number":536,"context_line":"            raise exception.NotFound(_(\"Unable to find root VBD/VDI for VM\"))"},{"line_number":537,"context_line":""},{"line_number":538,"context_line":"        vbd_ref \u003d vm_utils.create_vbd(self._session, vm_ref, root_vdi_ref,"},{"line_number":539,"context_line":"                                      DEVICE_RESCUE, bootable\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F%2F3Jg%3D","line":536,"updated":"2014-03-13 10:05:02.000000000","message":"in particular, I don\u0027t see a unit test for this case. Maybe its covered by an existing one, but its nice to add some specific unit tests while we are in this code.","commit_id":"0797076ef43e7481cf0633a05e6d1d2e9f4bdee9"},{"author":{"_account_id":100,"name":"Johannes Erdfelt","email":"johannes@erdfelt.com","username":"johannes.erdfelt"},"change_message_id":"00338e8ba3a581a360630be4ec6019e84a9b2a18","unresolved":false,"context_lines":[{"line_number":533,"context_line":"        # Attach original root disk"},{"line_number":534,"context_line":"        root_vdi_ref \u003d orig_vdi_refs.get(DEVICE_ROOT)"},{"line_number":535,"context_line":"        if not root_vdi_ref:"},{"line_number":536,"context_line":"            raise exception.NotFound(_(\"Unable to find root VBD/VDI for VM\"))"},{"line_number":537,"context_line":""},{"line_number":538,"context_line":"        vbd_ref \u003d vm_utils.create_vbd(self._session, vm_ref, root_vdi_ref,"},{"line_number":539,"context_line":"                                      DEVICE_RESCUE, bootable\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F%2FSw4%3D","line":536,"in_reply_to":"AAAAWH%2F%2F3Jg%3D","updated":"2014-03-18 20:37:31.000000000","message":"I guess it could be tested, but why? I\u0027m trying to figure out what value testing this particular failure would provide.","commit_id":"0797076ef43e7481cf0633a05e6d1d2e9f4bdee9"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"06695ae9e32fd3fc34202bbd881f39a6eaf6f861","unresolved":false,"context_lines":[{"line_number":1259,"context_line":"                process_change(location, change)"},{"line_number":1260,"context_line":"        update_meta()"},{"line_number":1261,"context_line":""},{"line_number":1262,"context_line":"    def _find_vdi_refs(self, vm_ref):"},{"line_number":1263,"context_line":"        \"\"\"Find and return the root and ephemeral vdi refs for a VM.\"\"\""},{"line_number":1264,"context_line":"        if not vm_ref:"},{"line_number":1265,"context_line":"            return {}"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F%2F3KA%3D","line":1262,"updated":"2014-03-13 10:05:02.000000000","message":"There is quite a change here, would be good to add some explicit unit tests for this method.","commit_id":"0797076ef43e7481cf0633a05e6d1d2e9f4bdee9"},{"author":{"_account_id":100,"name":"Johannes Erdfelt","email":"johannes@erdfelt.com","username":"johannes.erdfelt"},"change_message_id":"00338e8ba3a581a360630be4ec6019e84a9b2a18","unresolved":false,"context_lines":[{"line_number":1259,"context_line":"                process_change(location, change)"},{"line_number":1260,"context_line":"        update_meta()"},{"line_number":1261,"context_line":""},{"line_number":1262,"context_line":"    def _find_vdi_refs(self, vm_ref):"},{"line_number":1263,"context_line":"        \"\"\"Find and return the root and ephemeral vdi refs for a VM.\"\"\""},{"line_number":1264,"context_line":"        if not vm_ref:"},{"line_number":1265,"context_line":"            return {}"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F%2FSwE%3D","line":1262,"in_reply_to":"AAAAWH%2F%2F3KA%3D","updated":"2014-03-18 20:37:31.000000000","message":"It is implicitly tested as a result of testing rescues. What value do you think adding explicit tests would bring?","commit_id":"0797076ef43e7481cf0633a05e6d1d2e9f4bdee9"},{"author":{"_account_id":688,"name":"Sandy Walsh","email":"sandy.walsh@rackspace.com","username":"sandy-walsh"},"change_message_id":"cc9ca816beca4c554075d7aa4e304034ebfaa0a9","unresolved":false,"context_lines":[{"line_number":533,"context_line":"        # Attach original root disk"},{"line_number":534,"context_line":"        root_vdi_ref \u003d orig_vdi_refs.get(DEVICE_ROOT)"},{"line_number":535,"context_line":"        if not root_vdi_ref:"},{"line_number":536,"context_line":"            raise exception.NotFound(_(\"Unable to find root VBD/VDI for VM\"))"},{"line_number":537,"context_line":""},{"line_number":538,"context_line":"        vbd_ref \u003d vm_utils.create_vbd(self._session, vm_ref, root_vdi_ref,"},{"line_number":539,"context_line":"                                      DEVICE_RESCUE, bootable\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F95Es%3D","line":536,"updated":"2014-04-01 11:47:35.000000000","message":"Should we raise on this? Is the rescue more important than having access to the original disk?","commit_id":"3fa78c199b3db719e7276df68efe6f78c34e2118"},{"author":{"_account_id":100,"name":"Johannes Erdfelt","email":"johannes@erdfelt.com","username":"johannes.erdfelt"},"change_message_id":"cb8291f99e66a658c5d5f1713775ce6d7332e14b","unresolved":false,"context_lines":[{"line_number":533,"context_line":"        # Attach original root disk"},{"line_number":534,"context_line":"        root_vdi_ref \u003d orig_vdi_refs.get(DEVICE_ROOT)"},{"line_number":535,"context_line":"        if not root_vdi_ref:"},{"line_number":536,"context_line":"            raise exception.NotFound(_(\"Unable to find root VBD/VDI for VM\"))"},{"line_number":537,"context_line":""},{"line_number":538,"context_line":"        vbd_ref \u003d vm_utils.create_vbd(self._session, vm_ref, root_vdi_ref,"},{"line_number":539,"context_line":"                                      DEVICE_RESCUE, bootable\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F91IA%3D","line":536,"in_reply_to":"AAAAWH%2F91MQ%3D","updated":"2014-04-01 20:19:21.000000000","message":"Yes, it uses the original image and the same networking (IP addresses).\n\nIsn\u0027t the whole point of rescue to get to your data? The only data that I can see that is useful is your disks.\n\nMaybe there is an argument we should still allow access to the ephemeral disks if the root disk can\u0027t be attached for some reason, but that seems out of scope of this particular patch.\n\nFWIW, this exception isn\u0027t new, it just moved from below up to here.","commit_id":"3fa78c199b3db719e7276df68efe6f78c34e2118"},{"author":{"_account_id":688,"name":"Sandy Walsh","email":"sandy.walsh@rackspace.com","username":"sandy-walsh"},"change_message_id":"e6576fd7cf1f2482d6e05deac01a239dac18b417","unresolved":false,"context_lines":[{"line_number":533,"context_line":"        # Attach original root disk"},{"line_number":534,"context_line":"        root_vdi_ref \u003d orig_vdi_refs.get(DEVICE_ROOT)"},{"line_number":535,"context_line":"        if not root_vdi_ref:"},{"line_number":536,"context_line":"            raise exception.NotFound(_(\"Unable to find root VBD/VDI for VM\"))"},{"line_number":537,"context_line":""},{"line_number":538,"context_line":"        vbd_ref \u003d vm_utils.create_vbd(self._session, vm_ref, root_vdi_ref,"},{"line_number":539,"context_line":"                                      DEVICE_RESCUE, bootable\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F91MQ%3D","line":536,"in_reply_to":"AAAAWH%2F93eA%3D","updated":"2014-04-01 20:05:58.000000000","message":"Doesn\u0027t rescue keep the same networking?","commit_id":"3fa78c199b3db719e7276df68efe6f78c34e2118"},{"author":{"_account_id":100,"name":"Johannes Erdfelt","email":"johannes@erdfelt.com","username":"johannes.erdfelt"},"change_message_id":"74b63fa849d53be68f040ea2074d7048afdc00ba","unresolved":false,"context_lines":[{"line_number":533,"context_line":"        # Attach original root disk"},{"line_number":534,"context_line":"        root_vdi_ref \u003d orig_vdi_refs.get(DEVICE_ROOT)"},{"line_number":535,"context_line":"        if not root_vdi_ref:"},{"line_number":536,"context_line":"            raise exception.NotFound(_(\"Unable to find root VBD/VDI for VM\"))"},{"line_number":537,"context_line":""},{"line_number":538,"context_line":"        vbd_ref \u003d vm_utils.create_vbd(self._session, vm_ref, root_vdi_ref,"},{"line_number":539,"context_line":"                                      DEVICE_RESCUE, bootable\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F93eA%3D","line":536,"in_reply_to":"AAAAWH%2F95Es%3D","updated":"2014-04-01 15:04:22.000000000","message":"What\u0027s the use of rescue mode if you can\u0027t get to the original data? What are you rescuing?","commit_id":"3fa78c199b3db719e7276df68efe6f78c34e2118"},{"author":{"_account_id":688,"name":"Sandy Walsh","email":"sandy.walsh@rackspace.com","username":"sandy-walsh"},"change_message_id":"cc9ca816beca4c554075d7aa4e304034ebfaa0a9","unresolved":false,"context_lines":[{"line_number":635,"context_line":"                                   DEVICE_SWAP, name_label, swap_mb)"},{"line_number":636,"context_line":""},{"line_number":637,"context_line":"        ephemeral_gb \u003d flavor[\u0027ephemeral_gb\u0027]"},{"line_number":638,"context_line":"        if not rescue and ephemeral_gb:"},{"line_number":639,"context_line":"            ephemeral_vdis \u003d vdis.get(\u0027ephemerals\u0027)"},{"line_number":640,"context_line":"            if ephemeral_vdis:"},{"line_number":641,"context_line":"                # attach existing (migrated) ephemeral disks"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F95Eg%3D","line":638,"updated":"2014-04-01 11:47:35.000000000","message":"perhaps a comment to say that ephemeral disks will be added elsewhere (_attach_orig_disks)?","commit_id":"3fa78c199b3db719e7276df68efe6f78c34e2118"},{"author":{"_account_id":100,"name":"Johannes Erdfelt","email":"johannes@erdfelt.com","username":"johannes.erdfelt"},"change_message_id":"74b63fa849d53be68f040ea2074d7048afdc00ba","unresolved":false,"context_lines":[{"line_number":635,"context_line":"                                   DEVICE_SWAP, name_label, swap_mb)"},{"line_number":636,"context_line":""},{"line_number":637,"context_line":"        ephemeral_gb \u003d flavor[\u0027ephemeral_gb\u0027]"},{"line_number":638,"context_line":"        if not rescue and ephemeral_gb:"},{"line_number":639,"context_line":"            ephemeral_vdis \u003d vdis.get(\u0027ephemerals\u0027)"},{"line_number":640,"context_line":"            if ephemeral_vdis:"},{"line_number":641,"context_line":"                # attach existing (migrated) ephemeral disks"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F93aQ%3D","line":638,"in_reply_to":"AAAAWH%2F95Eg%3D","updated":"2014-04-01 15:04:22.000000000","message":"Will do","commit_id":"3fa78c199b3db719e7276df68efe6f78c34e2118"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"c4691debcd2d9dd803d1b11ff16769f2c8df552e","unresolved":false,"context_lines":[{"line_number":1265,"context_line":"            return {}"},{"line_number":1266,"context_line":""},{"line_number":1267,"context_line":"        vdi_refs \u003d {}"},{"line_number":1268,"context_line":"        for vbd_ref in self._session.call_xenapi(\"VM.get_VBDs\", vm_ref):"},{"line_number":1269,"context_line":"            vbd \u003d self._session.call_xenapi(\"VBD.get_record\", vbd_ref)"},{"line_number":1270,"context_line":"            vdi_refs[vbd[\u0027userdevice\u0027]] \u003d vbd[\u0027VDI\u0027]"},{"line_number":1271,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F96bg%3D","line":1268,"updated":"2014-04-01 08:48:19.000000000","message":"This will include some volumes that might be attached after the ephemeral disks. If it were attached where we put the old root disk, then clearly we can\u0027t attach it in the same place here.\n\nIts probably a good idea to give the rescue VM all the volumes the original VM had, where possible, but maybe it needs a bit more thought, so we should avoid doing that here.\n\nI think we still use the os_vol hack to detect volumes.","commit_id":"3fa78c199b3db719e7276df68efe6f78c34e2118"},{"author":{"_account_id":100,"name":"Johannes Erdfelt","email":"johannes@erdfelt.com","username":"johannes.erdfelt"},"change_message_id":"74b63fa849d53be68f040ea2074d7048afdc00ba","unresolved":false,"context_lines":[{"line_number":1265,"context_line":"            return {}"},{"line_number":1266,"context_line":""},{"line_number":1267,"context_line":"        vdi_refs \u003d {}"},{"line_number":1268,"context_line":"        for vbd_ref in self._session.call_xenapi(\"VM.get_VBDs\", vm_ref):"},{"line_number":1269,"context_line":"            vbd \u003d self._session.call_xenapi(\"VBD.get_record\", vbd_ref)"},{"line_number":1270,"context_line":"            vdi_refs[vbd[\u0027userdevice\u0027]] \u003d vbd[\u0027VDI\u0027]"},{"line_number":1271,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F93cs%3D","line":1268,"in_reply_to":"AAAAWH%2F96bg%3D","updated":"2014-04-01 15:04:22.000000000","message":"Good catch. I really dislike the way we use the userdevice to identify disks in some cases and then we have hacks like osvol for other cases.\n\nI\u0027ll get this fixed up.","commit_id":"3fa78c199b3db719e7276df68efe6f78c34e2118"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"c4691debcd2d9dd803d1b11ff16769f2c8df552e","unresolved":false,"context_lines":[{"line_number":1329,"context_line":""},{"line_number":1330,"context_line":"        # Don\u0027t destroy any VDIs belonging to the original VM"},{"line_number":1331,"context_line":"        orig_vdi_refs \u003d self._find_vdi_refs(original_vm_ref)"},{"line_number":1332,"context_line":"        vdi_refs \u003d set(vdi_refs) - set(orig_vdi_refs.values())"},{"line_number":1333,"context_line":""},{"line_number":1334,"context_line":"        vm_utils.safe_destroy_vdis(self._session, vdi_refs)"},{"line_number":1335,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F96ag%3D","line":1332,"updated":"2014-04-01 08:48:19.000000000","message":"Just need care incase this includes/excludes volumes, but I think its cool in the current case.","commit_id":"3fa78c199b3db719e7276df68efe6f78c34e2118"},{"author":{"_account_id":100,"name":"Johannes Erdfelt","email":"johannes@erdfelt.com","username":"johannes.erdfelt"},"change_message_id":"74b63fa849d53be68f040ea2074d7048afdc00ba","unresolved":false,"context_lines":[{"line_number":1329,"context_line":""},{"line_number":1330,"context_line":"        # Don\u0027t destroy any VDIs belonging to the original VM"},{"line_number":1331,"context_line":"        orig_vdi_refs \u003d self._find_vdi_refs(original_vm_ref)"},{"line_number":1332,"context_line":"        vdi_refs \u003d set(vdi_refs) - set(orig_vdi_refs.values())"},{"line_number":1333,"context_line":""},{"line_number":1334,"context_line":"        vm_utils.safe_destroy_vdis(self._session, vdi_refs)"},{"line_number":1335,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F93as%3D","line":1332,"in_reply_to":"AAAAWH%2F96ag%3D","updated":"2014-04-01 15:04:22.000000000","message":"I was trying to be as pessimistic as possible. Since it\u0027s a set, we can safely ensure that all of the original VDIs never get deleted here, which is what we want.\n\nI think I\u0027ll keep this logic (to be really safe we don\u0027t delete original disks) and filter ephemeral disks when attaching them.","commit_id":"3fa78c199b3db719e7276df68efe6f78c34e2118"},{"author":{"_account_id":8430,"name":"Christopher Lefelhocz","email":"christopher.lefelhoc@rackspace.com","username":"leif"},"change_message_id":"8cd00d55339148db86cf81c80d823b1a7f0f01bf","unresolved":false,"context_lines":[{"line_number":1261,"context_line":"                process_change(location, change)"},{"line_number":1262,"context_line":"        update_meta()"},{"line_number":1263,"context_line":""},{"line_number":1264,"context_line":"    def _find_vdi_refs(self, vm_ref, exclude_volumes\u003dFalse):"},{"line_number":1265,"context_line":"        \"\"\"Find and return the root and ephemeral vdi refs for a VM.\"\"\""},{"line_number":1266,"context_line":"        if not vm_ref:"},{"line_number":1267,"context_line":"            return {}"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAWH%2F9sTE%3D","line":1264,"updated":"2014-04-02 19:00:35.000000000","message":"This looks to be duplicating lookup_vm_vdis for the most part at this point.  Probably worth having one function to handle this, but that could be done at a later point.","commit_id":"9b1b6ec78a17ee158b84e7a4d0267fcadc25ea8a"}]}
