)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"24a98665d5bcf2d27584bac043315f62fa9012b0","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Fixes bug 1155066"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"This change adds a check to ensure that when a user chooses to"},{"line_number":12,"context_line":"resize thier instance to flavor that is too small,"},{"line_number":13,"context_line":"given their current disk usage, the operation fails gracefully."},{"line_number":14,"context_line":"It will leave their VM running, but in with the status of Error."},{"line_number":15,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"AAAAOH%2F%2F7Wk%3D","line":12,"updated":"2013-03-20 17:40:40.000000000","message":"s/thier/their/","commit_id":"e470c64883658297659b5838cadd5e38e1a9f7af"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b23cb5ceb90d9045de6bab52129dac88be2210f8","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Fixes bug 1155066"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"This change adds a check to ensure that when a user chooses to"},{"line_number":12,"context_line":"resize thier instance to flavor that is too small,"},{"line_number":13,"context_line":"given their current disk usage, the operation fails gracefully."},{"line_number":14,"context_line":"It will leave their VM running, but in with the status of Error."},{"line_number":15,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"AAAAOH%2F%2F6Ss%3D","line":12,"in_reply_to":"AAAAOH%2F%2F7Wk%3D","updated":"2013-03-21 08:43:43.000000000","message":"oops, good spot! stupid dyslexia.","commit_id":"e470c64883658297659b5838cadd5e38e1a9f7af"},{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"ba8a59c351c754472fa4c302c062a679fd01ec14","unresolved":false,"context_lines":[{"line_number":17,"context_line":"the server in the error state."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"The user is then free up enough space to allow the resize to"},{"line_number":20,"context_line":"happen correctly."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Change-Id: Ibad568ab3cfb9caaf4fe002572c8cda973d501a7"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"AAAAOn%2F%2Fcd4%3D","line":20,"updated":"2013-05-09 13:46:59.000000000","message":"This last sentence is missing a couple of words.","commit_id":"2607830b115a4239ef4039d261707b76bcbbab19"}],"nova/tests/compute/test_compute.py":[{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"6864415ab5ac5332e642d492836dbca7cf72b931","unresolved":false,"context_lines":[{"line_number":3092,"context_line":"    def test_resize_instance_driver_rollback(self):"},{"line_number":3093,"context_line":"        # Ensure instance status set to Running after rollback."},{"line_number":3094,"context_line":""},{"line_number":3095,"context_line":"        def throw_up(*args, **kwargs):"},{"line_number":3096,"context_line":"            raise exception.InstanceFaultRollback(test.TestingException())"},{"line_number":3097,"context_line":""},{"line_number":3098,"context_line":"        self.stubs.Set(self.compute.driver, \u0027migrate_disk_and_power_off\u0027,"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAAO3%2F%2F%2BwQ%3D","line":3095,"updated":"2013-05-15 17:05:31.000000000","message":"how...picturesque.","commit_id":"72e75dbcea66e6e4e2b0f5a931dcd647b2032ad6"}],"nova/tests/test_xenapi.py":[{"author":{"_account_id":475,"name":"Rick Harris","email":"rick.harris@rackspace.com","username":"rconradharris"},"change_message_id":"216bbe0f2cc4c5a41941405012bf06e1c074650e","unresolved":false,"context_lines":[{"line_number":1449,"context_line":"        self.stubs.Set(vm_utils, \u0027get_min_fs_size_bytes\u0027,"},{"line_number":1450,"context_line":"                            _fake_get_min_fs_size_bytes)"},{"line_number":1451,"context_line":""},{"line_number":1452,"context_line":"        self.assertRaises(exception.ResizeError,"},{"line_number":1453,"context_line":"                          conn.migrate_disk_and_power_off,"},{"line_number":1454,"context_line":"                          self.context, instance,"},{"line_number":1455,"context_line":"                          \u0027127.0.0.1\u0027, instance_type, None)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAOH%2F%2F9KA%3D","line":1452,"updated":"2013-03-19 17:10:42.000000000","message":"Should we check the `msg` attribute of the exception to make sure the correct ResizeError was raised?","commit_id":"87a96deb4893e01276df6d7d5f4b573c24b5962d"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"35f0102730eccf3d492ecb0cf2060a7ed85d0ec1","unresolved":false,"context_lines":[{"line_number":1449,"context_line":"        self.stubs.Set(vm_utils, \u0027get_min_fs_size_bytes\u0027,"},{"line_number":1450,"context_line":"                            _fake_get_min_fs_size_bytes)"},{"line_number":1451,"context_line":""},{"line_number":1452,"context_line":"        self.assertRaises(exception.ResizeError,"},{"line_number":1453,"context_line":"                          conn.migrate_disk_and_power_off,"},{"line_number":1454,"context_line":"                          self.context, instance,"},{"line_number":1455,"context_line":"                          \u0027127.0.0.1\u0027, instance_type, None)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAOH%2F%2F9BA%3D","line":1452,"in_reply_to":"AAAAOH%2F%2F9KA%3D","updated":"2013-03-19 18:17:04.000000000","message":"I wondered about that too, will do. I will update the above one to match.","commit_id":"87a96deb4893e01276df6d7d5f4b573c24b5962d"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"cb5233e01574fc1800a2eb4a84e46d0f4e4fc72a","unresolved":false,"context_lines":[{"line_number":1430,"context_line":"                \u0027127.0.0.1\u0027, instance_type, None)"},{"line_number":1431,"context_line":"            self.assertFail()"},{"line_number":1432,"context_line":"        except exception.ResizeError, e:"},{"line_number":1433,"context_line":"            self.assertTrue(\"auto_disk_config\" in str(e))"},{"line_number":1434,"context_line":""},{"line_number":1435,"context_line":"    def test_migrate_fs_too_big_to_resize_down(self):"},{"line_number":1436,"context_line":"        # Resize down should fail when filesystem min size too big for flavor."}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAOH%2F%2FzrI%3D","line":1433,"updated":"2013-03-26 19:41:38.000000000","message":"*sigh* we really should have an equivalent to assertRaisesRegexp…","commit_id":"2db0f28c3b6b6058ee7582ca2415b68ed7bd387b"}],"nova/virt/xenapi/vm_utils.py":[{"author":{"_account_id":475,"name":"Rick Harris","email":"rick.harris@rackspace.com","username":"rconradharris"},"change_message_id":"216bbe0f2cc4c5a41941405012bf06e1c074650e","unresolved":false,"context_lines":[{"line_number":745,"context_line":"    return long(re.sub(\u0027[^0-9]\u0027, \u0027\u0027, stdout))"},{"line_number":746,"context_line":""},{"line_number":747,"context_line":""},{"line_number":748,"context_line":"def _repair_filesystem(partition_path):"},{"line_number":749,"context_line":"    # Exit Code 1 \u003d File system errors corrected"},{"line_number":750,"context_line":"    #           2 \u003d File system errors corrected, system needs a reboot"},{"line_number":751,"context_line":"    utils.execute(\u0027e2fsck\u0027, \u0027-f\u0027, \u0027-y\u0027, partition_path, run_as_root\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAOH%2F%2F9KY%3D","line":748,"updated":"2013-03-19 17:10:42.000000000","message":"We use this same call in _resize_part_and_fs; in the interest of DRY, we might want to make that code call this new function.","commit_id":"87a96deb4893e01276df6d7d5f4b573c24b5962d"},{"author":{"_account_id":475,"name":"Rick Harris","email":"rick.harris@rackspace.com","username":"rconradharris"},"change_message_id":"e6cc4168d3f97209dbc2a127aeb9ed6d2f09ac3c","unresolved":false,"context_lines":[{"line_number":745,"context_line":"    return long(re.sub(\u0027[^0-9]\u0027, \u0027\u0027, stdout))"},{"line_number":746,"context_line":""},{"line_number":747,"context_line":""},{"line_number":748,"context_line":"def _repair_filesystem(partition_path):"},{"line_number":749,"context_line":"    # Exit Code 1 \u003d File system errors corrected"},{"line_number":750,"context_line":"    #           2 \u003d File system errors corrected, system needs a reboot"},{"line_number":751,"context_line":"    utils.execute(\u0027e2fsck\u0027, \u0027-f\u0027, \u0027-y\u0027, partition_path, run_as_root\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAOH%2F%2F8%2Bc%3D","line":748,"in_reply_to":"AAAAOH%2F%2F9Ao%3D","updated":"2013-03-19 18:21:04.000000000","message":"Oops, so you did. Must not have scrolled down far enough in the diff :)","commit_id":"87a96deb4893e01276df6d7d5f4b573c24b5962d"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"35f0102730eccf3d492ecb0cf2060a7ed85d0ec1","unresolved":false,"context_lines":[{"line_number":745,"context_line":"    return long(re.sub(\u0027[^0-9]\u0027, \u0027\u0027, stdout))"},{"line_number":746,"context_line":""},{"line_number":747,"context_line":""},{"line_number":748,"context_line":"def _repair_filesystem(partition_path):"},{"line_number":749,"context_line":"    # Exit Code 1 \u003d File system errors corrected"},{"line_number":750,"context_line":"    #           2 \u003d File system errors corrected, system needs a reboot"},{"line_number":751,"context_line":"    utils.execute(\u0027e2fsck\u0027, \u0027-f\u0027, \u0027-y\u0027, partition_path, run_as_root\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAOH%2F%2F9Ao%3D","line":748,"in_reply_to":"AAAAOH%2F%2F9KY%3D","updated":"2013-03-19 18:17:04.000000000","message":"I thought that is what I did? Is there another one I missed?","commit_id":"87a96deb4893e01276df6d7d5f4b573c24b5962d"},{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"24a98665d5bcf2d27584bac043315f62fa9012b0","unresolved":false,"context_lines":[{"line_number":730,"context_line":"            min_size_blocks \u003d _get_min_size_blocks(partition_path)"},{"line_number":731,"context_line":"            min_size_bytes \u003d min_size_blocks * block_size"},{"line_number":732,"context_line":"            LOG.debug(_(\"Calculated minimum filesystem size (bytes): %s\")"},{"line_number":733,"context_line":"                % min_size_bytes)"},{"line_number":734,"context_line":"            return min_size_bytes"},{"line_number":735,"context_line":"    finally:"},{"line_number":736,"context_line":"        destroy_vdi(session, snapshot_ref)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAOH%2F%2F7Ww%3D","line":733,"updated":"2013-03-20 17:40:40.000000000","message":"Should this be %d rather than %s since it has to be a number?","commit_id":"e470c64883658297659b5838cadd5e38e1a9f7af"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b23cb5ceb90d9045de6bab52129dac88be2210f8","unresolved":false,"context_lines":[{"line_number":730,"context_line":"            min_size_blocks \u003d _get_min_size_blocks(partition_path)"},{"line_number":731,"context_line":"            min_size_bytes \u003d min_size_blocks * block_size"},{"line_number":732,"context_line":"            LOG.debug(_(\"Calculated minimum filesystem size (bytes): %s\")"},{"line_number":733,"context_line":"                % min_size_bytes)"},{"line_number":734,"context_line":"            return min_size_bytes"},{"line_number":735,"context_line":"    finally:"},{"line_number":736,"context_line":"        destroy_vdi(session, snapshot_ref)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAOH%2F%2F6S0%3D","line":733,"in_reply_to":"AAAAOH%2F%2F7Ww%3D","updated":"2013-03-21 08:43:43.000000000","message":"oops, that would be more correct, yes.","commit_id":"e470c64883658297659b5838cadd5e38e1a9f7af"},{"author":{"_account_id":100,"name":"Johannes Erdfelt","email":"johannes@erdfelt.com","username":"johannes.erdfelt"},"change_message_id":"8f44b9865fd60bf9d224188a2275a31570a749b9","unresolved":false,"context_lines":[{"line_number":715,"context_line":""},{"line_number":716,"context_line":"def get_min_fs_size_bytes(session, vm_ref, block_size\u003d4096):"},{"line_number":717,"context_line":"    vdi_ref, _vm_vdi_rec \u003d get_vdi_for_vm_safely(session, vm_ref)"},{"line_number":718,"context_line":"    snapshot_ref \u003d session.call_xenapi(\u0027VDI.snapshot\u0027, vdi_ref)"},{"line_number":719,"context_line":""},{"line_number":720,"context_line":"    try:"},{"line_number":721,"context_line":"        with vdi_attached_here(session, snapshot_ref, read_only\u003dFalse) as dev:"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAOH%2F%2F3ns%3D","line":718,"updated":"2013-03-22 18:51:58.000000000","message":"Why not use snapshot_attached_here()?","commit_id":"2db0f28c3b6b6058ee7582ca2415b68ed7bd387b"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"527ec61cf65adb182c638ab20f171270617b9d2f","unresolved":false,"context_lines":[{"line_number":715,"context_line":""},{"line_number":716,"context_line":"def get_min_fs_size_bytes(session, vm_ref, block_size\u003d4096):"},{"line_number":717,"context_line":"    vdi_ref, _vm_vdi_rec \u003d get_vdi_for_vm_safely(session, vm_ref)"},{"line_number":718,"context_line":"    snapshot_ref \u003d session.call_xenapi(\u0027VDI.snapshot\u0027, vdi_ref)"},{"line_number":719,"context_line":""},{"line_number":720,"context_line":"    try:"},{"line_number":721,"context_line":"        with vdi_attached_here(session, snapshot_ref, read_only\u003dFalse) as dev:"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAOH%2F%2Fzfc%3D","line":718,"in_reply_to":"AAAAOH%2F%2F3ns%3D","updated":"2013-03-26 21:10:50.000000000","message":"hmm, it isn\u0027t quite the same use case here, but a good point. Maybe I should worry about coalesce in this case too, but after the destroy_vdi. Its a bit late for my brain to work, will have a check in the morning.","commit_id":"2db0f28c3b6b6058ee7582ca2415b68ed7bd387b"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"3e999d7450f6c296213b1a41f968919f2489ac0d","unresolved":false,"context_lines":[{"line_number":715,"context_line":""},{"line_number":716,"context_line":"def get_min_fs_size_bytes(session, vm_ref, block_size\u003d4096):"},{"line_number":717,"context_line":"    vdi_ref, _vm_vdi_rec \u003d get_vdi_for_vm_safely(session, vm_ref)"},{"line_number":718,"context_line":"    snapshot_ref \u003d session.call_xenapi(\u0027VDI.snapshot\u0027, vdi_ref)"},{"line_number":719,"context_line":""},{"line_number":720,"context_line":"    try:"},{"line_number":721,"context_line":"        with vdi_attached_here(session, snapshot_ref, read_only\u003dFalse) as dev:"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAOH%2F%2Fyr8%3D","line":718,"in_reply_to":"AAAAOH%2F%2Fzfc%3D","updated":"2013-03-27 12:01:11.000000000","message":"So, we don\u0027t need to worry about any extra leaf VHDs when we go on to perform the resize down, because the VDI is copied across to a whole new vhd chain.\n\nIn the other case, we go into an error state, and in the meantime XenSever will do the coalesce in the background. This will need attention in the next patch, when we try to revert the state of this operation.","commit_id":"2db0f28c3b6b6058ee7582ca2415b68ed7bd387b"}],"nova/virt/xenapi/vmops.py":[{"author":{"_account_id":475,"name":"Rick Harris","email":"rick.harris@rackspace.com","username":"rconradharris"},"change_message_id":"216bbe0f2cc4c5a41941405012bf06e1c074650e","unresolved":false,"context_lines":[{"line_number":923,"context_line":"        min_size_bytes \u003d vm_utils.get_min_fs_size_bytes("},{"line_number":924,"context_line":"            self._session, vm_ref)"},{"line_number":925,"context_line":"        new_bytes \u003d new_gb * (1024 * 1024 * 1024)"},{"line_number":926,"context_line":"        LOG.debug(_(\"Min fs size bytes: %s\") % min_size_bytes)"},{"line_number":927,"context_line":"        LOG.debug(_(\"New size in bytes: %s\") % new_bytes)"},{"line_number":928,"context_line":"        if min_size_bytes \u003e new_bytes:"},{"line_number":929,"context_line":"            reason \u003d _(\u0027Resize down not allowed because minimum \u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAOH%2F%2F9JY%3D","line":926,"updated":"2013-03-19 17:10:42.000000000","message":"Given how chatty our logs are, just want to double check that even in the happy-path, that these LOGs would be useful.","commit_id":"87a96deb4893e01276df6d7d5f4b573c24b5962d"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"35f0102730eccf3d492ecb0cf2060a7ed85d0ec1","unresolved":false,"context_lines":[{"line_number":923,"context_line":"        min_size_bytes \u003d vm_utils.get_min_fs_size_bytes("},{"line_number":924,"context_line":"            self._session, vm_ref)"},{"line_number":925,"context_line":"        new_bytes \u003d new_gb * (1024 * 1024 * 1024)"},{"line_number":926,"context_line":"        LOG.debug(_(\"Min fs size bytes: %s\") % min_size_bytes)"},{"line_number":927,"context_line":"        LOG.debug(_(\"New size in bytes: %s\") % new_bytes)"},{"line_number":928,"context_line":"        if min_size_bytes \u003e new_bytes:"},{"line_number":929,"context_line":"            reason \u003d _(\u0027Resize down not allowed because minimum \u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAOH%2F%2F8%2FY%3D","line":926,"in_reply_to":"AAAAOH%2F%2F9JY%3D","updated":"2013-03-19 18:17:04.000000000","message":"Hmm, I wondered about that too, I will remove them. It was just left in from my testing really.","commit_id":"87a96deb4893e01276df6d7d5f4b573c24b5962d"}]}
