)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"3659f9e5d30e169ab00d610473750936e75e204a","unresolved":false,"context_lines":[{"line_number":14,"context_line":"safe_destroy_vdis and added unit tests to ensure the error from"},{"line_number":15,"context_line":"destroy_vdi does not mask the real issue."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Fixes bug 1246276"},{"line_number":18,"context_line":"Change-Id: Ib02f93ab1086f077d3d00e5ca915a26f90552c85"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"AAAAT3%2F%2Fyxk%3D","line":17,"updated":"2013-12-31 13:31:57.000000000","message":"nit: s/Fixes bug 1246276/Closes-Bug: #1246276","commit_id":"07c77689f7ea294dcb87db9285be994e4c9ac5b9"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"4f47de71c872526c3a67d2e6036457122b005a66","unresolved":false,"context_lines":[{"line_number":14,"context_line":"safe_destroy_vdis and added unit tests to ensure the error from"},{"line_number":15,"context_line":"destroy_vdi does not mask the real issue."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Fixes bug 1246276"},{"line_number":18,"context_line":"Change-Id: Ib02f93ab1086f077d3d00e5ca915a26f90552c85"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"AAAAT3%2F%2FsCk%3D","line":17,"in_reply_to":"AAAAT3%2F%2Fyxk%3D","updated":"2014-01-03 13:32:06.000000000","message":"Yeah, I meant to do that last time, oops, thanks for the reminder.","commit_id":"07c77689f7ea294dcb87db9285be994e4c9ac5b9"}],"nova/tests/virt/xenapi/test_vm_utils.py":[{"author":{"_account_id":688,"name":"Sandy Walsh","email":"sandy.walsh@rackspace.com","username":"sandy-walsh"},"change_message_id":"a4a479db292a8139dfe2420f5d91242bfbbc1371","unresolved":false,"context_lines":[{"line_number":204,"context_line":""},{"line_number":205,"context_line":"        instance \u003d {\"uuid\": \"asdf\"}"},{"line_number":206,"context_line":"        self.assertRaises(test.TestingException,"},{"line_number":207,"context_line":"                          vm_utils.generate_configdrive,"},{"line_number":208,"context_line":"                          \u0027session\u0027, instance, \u0027vm_ref\u0027, \u0027userdevice\u0027,"},{"line_number":209,"context_line":"                          \u0027nw_info\u0027)"},{"line_number":210,"context_line":"        mock_destroy.assert_called_once_with(\u0027session\u0027, \u0027vdi_ref\u0027)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAU3%2F%2FdI4%3D","line":207,"updated":"2014-02-26 14:48:15.000000000","message":"Why not just have pure unit tests for destroy_vdi and safe_destroy_vdis vs having to go through generate_configdrive?\n\nMakes following/maintaining the tests easier.","commit_id":"832904d92279f75877e69effad282e228fef602e"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"33bcb5c899c4a4735047a9fd49d4ec73325ccecb","unresolved":false,"context_lines":[{"line_number":204,"context_line":""},{"line_number":205,"context_line":"        instance \u003d {\"uuid\": \"asdf\"}"},{"line_number":206,"context_line":"        self.assertRaises(test.TestingException,"},{"line_number":207,"context_line":"                          vm_utils.generate_configdrive,"},{"line_number":208,"context_line":"                          \u0027session\u0027, instance, \u0027vm_ref\u0027, \u0027userdevice\u0027,"},{"line_number":209,"context_line":"                          \u0027nw_info\u0027)"},{"line_number":210,"context_line":"        mock_destroy.assert_called_once_with(\u0027session\u0027, \u0027vdi_ref\u0027)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAVX%2F%2F5cA%3D","line":207,"in_reply_to":"AAAAU3%2F%2FdI4%3D","updated":"2014-02-27 14:32:37.000000000","message":"We do have tests for that already.\n\nThe only reason I added this test here is because I have changed logic in generate_configdrive.\n\nI don\u0027t like the test names here, but this seemed locally consistent.","commit_id":"832904d92279f75877e69effad282e228fef602e"}],"nova/virt/xenapi/vm_utils.py":[{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"ef0e2f59a57206287e47e355b10571c1057eda1f","unresolved":false,"context_lines":[{"line_number":460,"context_line":"            destroy_vdi(session, vdi_ref)"},{"line_number":461,"context_line":"        except volume_utils.StorageError:"},{"line_number":462,"context_line":"            msg \u003d _(\"Ignoring error while destroying VDI: %s\") % vdi_ref"},{"line_number":463,"context_line":"            LOG.debug(msg)"},{"line_number":464,"context_line":""},{"line_number":465,"context_line":""},{"line_number":466,"context_line":"def create_vdi(session, sr_ref, instance, name_label, disk_type, virtual_size,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2BouE%3D","line":463,"updated":"2013-11-22 06:54:41.000000000","message":"It\u0027s not clear to me why you want to hide the error in the logs. I get that we don\u0027t want to hide the error we raise back to the API/user, but this is separate, right?","commit_id":"fde8d966104abb86ac59150771c2e33e9d53e691"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"18dcf5264674374cd04c21aa413c53e806f10a36","unresolved":false,"context_lines":[{"line_number":1410,"context_line":"        _check_vdi_size(context, session, instance, vdis[\u0027root\u0027][\u0027uuid\u0027])"},{"line_number":1411,"context_line":"    except Exception:"},{"line_number":1412,"context_line":"        with excutils.save_and_reraise_exception():"},{"line_number":1413,"context_line":"            for key in vdis:"},{"line_number":1414,"context_line":"                vdi \u003d vdis[key]"},{"line_number":1415,"context_line":"                vdi_uuid \u003d vdi[\u0027uuid\u0027]"},{"line_number":1416,"context_line":"                vdi_ref \u003d session.call_xenapi(\u0027VDI.get_by_uuid\u0027, vdi_uuid)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F96dM%3D","side":"PARENT","line":1413,"updated":"2013-12-04 15:15:39.000000000","message":"There\u0027s no explanation for why this changed.  You\u0027ve gone from destroying all the vdis to just the root vdi if I understand this correctly.  Is that intentional, and if so why?","commit_id":"6a1667424a12b192402276ee81eb26a87bbb08f8"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"911b3a913809c985be6af164e3e40bc030ba62bd","unresolved":false,"context_lines":[{"line_number":1410,"context_line":"        _check_vdi_size(context, session, instance, vdis[\u0027root\u0027][\u0027uuid\u0027])"},{"line_number":1411,"context_line":"    except Exception:"},{"line_number":1412,"context_line":"        with excutils.save_and_reraise_exception():"},{"line_number":1413,"context_line":"            for key in vdis:"},{"line_number":1414,"context_line":"                vdi \u003d vdis[key]"},{"line_number":1415,"context_line":"                vdi_uuid \u003d vdi[\u0027uuid\u0027]"},{"line_number":1416,"context_line":"                vdi_ref \u003d session.call_xenapi(\u0027VDI.get_by_uuid\u0027, vdi_uuid)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F9Ir4%3D","side":"PARENT","line":1413,"in_reply_to":"AAAATn%2F959M%3D","updated":"2013-12-16 13:31:29.000000000","message":"Hmm, so I think vids will only ever contain the root vdi, but I would rather restore this original logic for the moment.","commit_id":"6a1667424a12b192402276ee81eb26a87bbb08f8"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"2b23066ee43bc03b5b9dca7fe47e206707ba9a3d","unresolved":false,"context_lines":[{"line_number":1410,"context_line":"        _check_vdi_size(context, session, instance, vdis[\u0027root\u0027][\u0027uuid\u0027])"},{"line_number":1411,"context_line":"    except Exception:"},{"line_number":1412,"context_line":"        with excutils.save_and_reraise_exception():"},{"line_number":1413,"context_line":"            for key in vdis:"},{"line_number":1414,"context_line":"                vdi \u003d vdis[key]"},{"line_number":1415,"context_line":"                vdi_uuid \u003d vdi[\u0027uuid\u0027]"},{"line_number":1416,"context_line":"                vdi_ref \u003d session.call_xenapi(\u0027VDI.get_by_uuid\u0027, vdi_uuid)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F959M%3D","side":"PARENT","line":1413,"in_reply_to":"AAAATn%2F96dM%3D","updated":"2013-12-04 16:50:16.000000000","message":"Ouch, total cut and paste fail, thank you!","commit_id":"6a1667424a12b192402276ee81eb26a87bbb08f8"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"3659f9e5d30e169ab00d610473750936e75e204a","unresolved":false,"context_lines":[{"line_number":1420,"context_line":"        with excutils.save_and_reraise_exception():"},{"line_number":1421,"context_line":"            msg \u003d _(\"Error while checking vdi size\")"},{"line_number":1422,"context_line":"            LOG.debug(msg, instance\u003dinstance, exc_info\u003dTrue)"},{"line_number":1423,"context_line":"            for vdi in vdis.values():"},{"line_number":1424,"context_line":"                vdi_uuid \u003d vdi[\u0027uuid\u0027]"},{"line_number":1425,"context_line":"                vdi_ref \u003d session.call_xenapi(\u0027VDI.get_by_uuid\u0027, vdi_uuid)"},{"line_number":1426,"context_line":"                safe_destroy_vdis(session, [vdi_ref])"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2FywM%3D","line":1423,"updated":"2013-12-31 13:31:57.000000000","message":"safe_destroy_vdis seems to work with a list, what do you think about using a list of vdi?\n\nsomething like:\nvdis \u003d [session.call_xenapi(\u0027VDI.get_by_uuid\u0027, vdi[\u0027uuid\u0027]) \n                for vdi in vdis.values()]\nsafe_destroy_vdis(session, vdis)","commit_id":"07c77689f7ea294dcb87db9285be994e4c9ac5b9"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"4f47de71c872526c3a67d2e6036457122b005a66","unresolved":false,"context_lines":[{"line_number":1420,"context_line":"        with excutils.save_and_reraise_exception():"},{"line_number":1421,"context_line":"            msg \u003d _(\"Error while checking vdi size\")"},{"line_number":1422,"context_line":"            LOG.debug(msg, instance\u003dinstance, exc_info\u003dTrue)"},{"line_number":1423,"context_line":"            for vdi in vdis.values():"},{"line_number":1424,"context_line":"                vdi_uuid \u003d vdi[\u0027uuid\u0027]"},{"line_number":1425,"context_line":"                vdi_ref \u003d session.call_xenapi(\u0027VDI.get_by_uuid\u0027, vdi_uuid)"},{"line_number":1426,"context_line":"                safe_destroy_vdis(session, [vdi_ref])"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAT3%2F%2FsCw%3D","line":1423,"in_reply_to":"AAAAT3%2F%2FywM%3D","updated":"2014-01-03 13:32:06.000000000","message":"I didn\u0027t want to change the behaviour any more than I am doing, could do this in a follow up change.","commit_id":"07c77689f7ea294dcb87db9285be994e4c9ac5b9"},{"author":{"_account_id":2835,"name":"Brian Elliott","email":"bdelliott@gmail.com","username":"belliott"},"change_message_id":"fd1dc96ceb326f8a887692596c24640039091093","unresolved":false,"context_lines":[{"line_number":508,"context_line":"    except session.XenAPI.Failure:"},{"line_number":509,"context_line":"        msg \u003d _(\"Unable to destroy VDI %s\") % vdi_ref"},{"line_number":510,"context_line":"        LOG.error(msg)"},{"line_number":511,"context_line":"        LOG.debug(msg, exc_info\u003dTrue)"},{"line_number":512,"context_line":"        raise volume_utils.StorageError(msg)"},{"line_number":513,"context_line":""},{"line_number":514,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAU3%2F%2FywE%3D","line":511,"updated":"2014-02-24 19:03:04.000000000","message":"I think you may have to save the above exception tuple and pass it in here.  The above LOG.error statement might change the greenthread and wipe it out.","commit_id":"832904d92279f75877e69effad282e228fef602e"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"33bcb5c899c4a4735047a9fd49d4ec73325ccecb","unresolved":false,"context_lines":[{"line_number":508,"context_line":"    except session.XenAPI.Failure:"},{"line_number":509,"context_line":"        msg \u003d _(\"Unable to destroy VDI %s\") % vdi_ref"},{"line_number":510,"context_line":"        LOG.error(msg)"},{"line_number":511,"context_line":"        LOG.debug(msg, exc_info\u003dTrue)"},{"line_number":512,"context_line":"        raise volume_utils.StorageError(msg)"},{"line_number":513,"context_line":""},{"line_number":514,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAVX%2F%2F5dk%3D","line":511,"in_reply_to":"AAAAU3%2F%2FckE%3D","updated":"2014-02-27 14:32:37.000000000","message":"cunning, I like that, thanks.","commit_id":"832904d92279f75877e69effad282e228fef602e"},{"author":{"_account_id":2835,"name":"Brian Elliott","email":"bdelliott@gmail.com","username":"belliott"},"change_message_id":"c076165fab890b3d7710601b69c0c319dfee1cd7","unresolved":false,"context_lines":[{"line_number":508,"context_line":"    except session.XenAPI.Failure:"},{"line_number":509,"context_line":"        msg \u003d _(\"Unable to destroy VDI %s\") % vdi_ref"},{"line_number":510,"context_line":"        LOG.error(msg)"},{"line_number":511,"context_line":"        LOG.debug(msg, exc_info\u003dTrue)"},{"line_number":512,"context_line":"        raise volume_utils.StorageError(msg)"},{"line_number":513,"context_line":""},{"line_number":514,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAU3%2F%2FckE%3D","line":511,"in_reply_to":"AAAAU3%2F%2FdHY%3D","updated":"2014-02-26 15:43:42.000000000","message":"People have been trying to squash extra traceback noise from the logs.\n\nProbably a more kosher version here would be:\n\nexc_info \u003d LOG.isEnabledFor(logging.DEBUG)\n\nLOG.error(msg, exc_info\u003dexc_info)\n\nThat avoids the double logging of msg.","commit_id":"832904d92279f75877e69effad282e228fef602e"},{"author":{"_account_id":688,"name":"Sandy Walsh","email":"sandy.walsh@rackspace.com","username":"sandy-walsh"},"change_message_id":"f6396f68adef30094035b1b7828abca41cc8390a","unresolved":false,"context_lines":[{"line_number":508,"context_line":"    except session.XenAPI.Failure:"},{"line_number":509,"context_line":"        msg \u003d _(\"Unable to destroy VDI %s\") % vdi_ref"},{"line_number":510,"context_line":"        LOG.error(msg)"},{"line_number":511,"context_line":"        LOG.debug(msg, exc_info\u003dTrue)"},{"line_number":512,"context_line":"        raise volume_utils.StorageError(msg)"},{"line_number":513,"context_line":""},{"line_number":514,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAU3%2F%2FdHY%3D","line":511,"in_reply_to":"AAAAU3%2F%2FywE%3D","updated":"2014-02-26 14:49:42.000000000","message":"could we not just put the exc_info\u003dTrue in the .error() call and remove the .debug()? Is that bad form?","commit_id":"832904d92279f75877e69effad282e228fef602e"}]}
