)]}'
{"nova/privsep/qemu.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"8dfb2b7b74aa9cd968c81d87ed6d7c98d8e92756","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    if in_format is not None:"},{"line_number":56,"context_line":"        cmd \u003d cmd + (\u0027-f\u0027, in_format)"},{"line_number":57,"context_line":"    cmd \u003d cmd + (source, dest)"},{"line_number":58,"context_line":"    processutils.execute(*cmd)"}],"source_content_type":"text/x-python","patch_set":15,"id":"9f6a8fd7_0e2c7245","line":58,"range":{"start_line":58,"start_character":4,"end_line":58,"end_character":30},"updated":"2018-04-19 13:18:16.000000000","message":"Note to reviewers: the conversion of ProcessExecutionError to ImageUnacceptable is still in _convert_image [1].\n\n[1] https://review.openstack.org/#/c/554437/15/nova/virt/images.py@128","commit_id":"ba09e765af6f9b99de330944e6e992774d24be43"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"7a144d0db5edc824df04b1a2108191ad2b033846","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"@nova.privsep.sys_admin_pctxt.entrypoint"},{"line_number":29,"context_line":"def convert_image(source, dest, in_format, out_format, instances_path):"},{"line_number":30,"context_line":"    unprivileged_convert_image(source, dest, in_format, out_format)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"5f7c97a3_83762fa4","line":29,"range":{"start_line":29,"start_character":55,"end_line":29,"end_character":69},"updated":"2018-05-08 21:01:04.000000000","message":"Shouldn\u0027t this be passed to unprivileged_convert_image?\n\nIt looks like we\u0027re missing some test coverage -- it doesn\u0027t seem like any call of convert_image would succeed because unprivileged_convert_image expects 5 arguments and is only called with 4 here.","commit_id":"1f5a6f5734688e06fc1ea88c079cac822f534fe6"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"9913b8b8447750cd66ef6a08dccde9991d05466d","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"@nova.privsep.sys_admin_pctxt.entrypoint"},{"line_number":29,"context_line":"def convert_image(source, dest, in_format, out_format, instances_path):"},{"line_number":30,"context_line":"    unprivileged_convert_image(source, dest, in_format, out_format)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"5f7c97a3_59b9e8e6","line":29,"range":{"start_line":29,"start_character":55,"end_line":29,"end_character":69},"in_reply_to":"5f7c97a3_030e9f3a","updated":"2018-05-08 22:45:40.000000000","message":"I\u0027ve been wondering why this path wasn\u0027t taken at all during any tempest testing and from what I can tell in the code, convert_image is only run as root when the lvm image backend is configured. So I\u0027m going to try running the nova-lvm job from our experimental queue to see if that will hit this path.","commit_id":"1f5a6f5734688e06fc1ea88c079cac822f534fe6"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"88c7bd5034b715aaf845b9b06e51d2b219febfa1","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"@nova.privsep.sys_admin_pctxt.entrypoint"},{"line_number":29,"context_line":"def convert_image(source, dest, in_format, out_format, instances_path):"},{"line_number":30,"context_line":"    unprivileged_convert_image(source, dest, in_format, out_format)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"5f7c97a3_912358a7","line":29,"range":{"start_line":29,"start_character":55,"end_line":29,"end_character":69},"in_reply_to":"5f7c97a3_3874f8fd","updated":"2018-05-15 13:24:33.000000000","message":"test_fetch_raw_image didn\u0027t catch this because it calls convert_image which passes run_as_root\u003dFalse by default to _convert_image which then calls unprivileged_convert_image directly.","commit_id":"1f5a6f5734688e06fc1ea88c079cac822f534fe6"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"004a9cc766a4b2a9a7c9c7d74cf2e822144aea5c","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"@nova.privsep.sys_admin_pctxt.entrypoint"},{"line_number":29,"context_line":"def convert_image(source, dest, in_format, out_format, instances_path):"},{"line_number":30,"context_line":"    unprivileged_convert_image(source, dest, in_format, out_format)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"5f7c97a3_3874f8fd","line":29,"range":{"start_line":29,"start_character":55,"end_line":29,"end_character":69},"in_reply_to":"5f7c97a3_3ebde4d7","updated":"2018-05-10 16:53:06.000000000","message":"I don\u0027t think it\u0027s worth making nova-lvm a gating job. It\u0027s just one of the bazillions of configurations we could be testing.","commit_id":"1f5a6f5734688e06fc1ea88c079cac822f534fe6"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"446147274f8b1c932f6dc11f68bb4217a52cd331","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"@nova.privsep.sys_admin_pctxt.entrypoint"},{"line_number":29,"context_line":"def convert_image(source, dest, in_format, out_format, instances_path):"},{"line_number":30,"context_line":"    unprivileged_convert_image(source, dest, in_format, out_format)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"5f7c97a3_871dd667","line":29,"range":{"start_line":29,"start_character":55,"end_line":29,"end_character":69},"in_reply_to":"5f7c97a3_59b9e8e6","updated":"2018-05-09 02:26:06.000000000","message":"Eureka:\n\n TypeError: unprivileged_convert_image() takes exactly 5 arguments (4 given)\n\nhttp://logs.openstack.org/37/554437/18/experimental/nova-lvm/6650617/logs/screen-n-cpu.txt.gz?level\u003dTRACE#_May_08_23_12_31_210587","commit_id":"1f5a6f5734688e06fc1ea88c079cac822f534fe6"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"0ff0d2ae81dce953b494527ecdea97b14bb01ad6","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"@nova.privsep.sys_admin_pctxt.entrypoint"},{"line_number":29,"context_line":"def convert_image(source, dest, in_format, out_format, instances_path):"},{"line_number":30,"context_line":"    unprivileged_convert_image(source, dest, in_format, out_format)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"5f7c97a3_030e9f3a","line":29,"range":{"start_line":29,"start_character":55,"end_line":29,"end_character":69},"in_reply_to":"5f7c97a3_83762fa4","updated":"2018-05-08 21:17:22.000000000","message":"Good eye.","commit_id":"1f5a6f5734688e06fc1ea88c079cac822f534fe6"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"72d75b14dacf29ef0a482bd609ca45207e250586","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"@nova.privsep.sys_admin_pctxt.entrypoint"},{"line_number":29,"context_line":"def convert_image(source, dest, in_format, out_format, instances_path):"},{"line_number":30,"context_line":"    unprivileged_convert_image(source, dest, in_format, out_format)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"5f7c97a3_3ebde4d7","line":29,"range":{"start_line":29,"start_character":55,"end_line":29,"end_character":69},"in_reply_to":"5f7c97a3_871dd667","updated":"2018-05-09 12:44:48.000000000","message":"Nice one.  Is it possible and/or worthwhile to get this into a gating job, or will improved unit test coverage be sufficient?","commit_id":"1f5a6f5734688e06fc1ea88c079cac822f534fe6"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6298dac77a2b4d96ff1a32ee6d21ee6ca5d05ef9","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"@nova.privsep.sys_admin_pctxt.entrypoint"},{"line_number":29,"context_line":"def convert_image(source, dest, in_format, out_format, instances_path):"},{"line_number":30,"context_line":"    unprivileged_convert_image(source, dest, in_format, out_format)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"5f7c97a3_11a50847","line":29,"range":{"start_line":29,"start_character":55,"end_line":29,"end_character":69},"in_reply_to":"5f7c97a3_912358a7","updated":"2018-05-15 13:51:55.000000000","message":"So apparently you can\u0027t (easily) test that convert_image calls  unprivileged_convert_image correctly because if you don\u0027t mock convert_image you get a failure due to the PrivsepNoHelperFixture, but maybe the entrypoint decorator can be mocked.","commit_id":"1f5a6f5734688e06fc1ea88c079cac822f534fe6"}],"nova/privsep/utils.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"0bc450ad746fc1631f71720b28d84186789b02ff","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2018 Michael Still and Aptira"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":3,"id":"df7087c5_7df053ca","line":1,"range":{"start_line":1,"start_character":0,"end_line":1,"end_character":41},"updated":"2018-03-21 12:55:50.000000000","message":"Is this copyright notice correct given the content is an exact copy/paste from nova.utils?","commit_id":"860365c013a0941fe18f3d38e5b5c045692fdc15"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"0c0bcf7a023c49d1cd8c36be113026056221f4cf","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2018 Michael Still and Aptira"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":3,"id":"9f6a8fd7_baa88d77","line":1,"range":{"start_line":1,"start_character":0,"end_line":1,"end_character":41},"in_reply_to":"df7087c5_7df053ca","updated":"2018-04-14 21:32:52.000000000","message":"Done","commit_id":"860365c013a0941fe18f3d38e5b5c045692fdc15"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"0bc450ad746fc1631f71720b28d84186789b02ff","unresolved":false,"context_lines":[{"line_number":23,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"def supports_direct_io(dirpath):"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    if not hasattr(os, \u0027O_DIRECT\u0027):"},{"line_number":29,"context_line":"        LOG.debug(\"This python runtime does not support direct I/O\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"df7087c5_7dc93376","line":26,"range":{"start_line":26,"start_character":4,"end_line":26,"end_character":22},"updated":"2018-03-21 12:55:50.000000000","message":"Slight boo that we can\u0027t get rid of this method from nova.utils now.  Would it be Against The Rules for LibvirtDriver.disk_cachemode to use this one?","commit_id":"860365c013a0941fe18f3d38e5b5c045692fdc15"}],"nova/tests/unit/privsep/test_utils.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"0bc450ad746fc1631f71720b28d84186789b02ff","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2016 Red Hat, Inc"},{"line_number":2,"context_line":"# Copyright 2017 Rackspace Australia"},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":5,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":3,"id":"df7087c5_bd7d8b1d","line":2,"range":{"start_line":1,"start_character":0,"end_line":2,"end_character":36},"updated":"2018-03-21 12:55:50.000000000","message":"Similar question about copyright notice.  (This one\u0027s different from nova.tests.unit.test_utils *and* from nova.privsep.utils - what gives?)","commit_id":"860365c013a0941fe18f3d38e5b5c045692fdc15"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"0c0bcf7a023c49d1cd8c36be113026056221f4cf","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2016 Red Hat, Inc"},{"line_number":2,"context_line":"# Copyright 2017 Rackspace Australia"},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":5,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":3,"id":"9f6a8fd7_7abc35bb","line":2,"range":{"start_line":1,"start_character":0,"end_line":2,"end_character":36},"in_reply_to":"df7087c5_bd7d8b1d","updated":"2018-04-14 21:32:52.000000000","message":"I do not recall how I ended up with that copyright statement here. I have synced with with nova.tests.unit.test_utils.py","commit_id":"860365c013a0941fe18f3d38e5b5c045692fdc15"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"0bc450ad746fc1631f71720b28d84186789b02ff","unresolved":false,"context_lines":[{"line_number":16,"context_line":"import errno"},{"line_number":17,"context_line":"import os"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from mox3 import mox"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"import nova.privsep.utils"},{"line_number":22,"context_line":"from nova import test"}],"source_content_type":"text/x-python","patch_set":3,"id":"df7087c5_bd94ab45","line":19,"range":{"start_line":19,"start_character":0,"end_line":19,"end_character":20},"updated":"2018-03-21 12:55:50.000000000","message":"I noticed you\u0027ve been cleaning up mox in the other patches as you go.  Not here?","commit_id":"860365c013a0941fe18f3d38e5b5c045692fdc15"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"0c0bcf7a023c49d1cd8c36be113026056221f4cf","unresolved":false,"context_lines":[{"line_number":16,"context_line":"import errno"},{"line_number":17,"context_line":"import os"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from mox3 import mox"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"import nova.privsep.utils"},{"line_number":22,"context_line":"from nova import test"}],"source_content_type":"text/x-python","patch_set":3,"id":"9f6a8fd7_1ab179e2","line":19,"range":{"start_line":19,"start_character":0,"end_line":19,"end_character":20},"in_reply_to":"bf659307_dff00f00","updated":"2018-04-14 21:32:52.000000000","message":"This is gone now.","commit_id":"860365c013a0941fe18f3d38e5b5c045692fdc15"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"65cc60b7840c5269e1db9ecfb3f9419621563c06","unresolved":false,"context_lines":[{"line_number":16,"context_line":"import errno"},{"line_number":17,"context_line":"import os"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from mox3 import mox"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"import nova.privsep.utils"},{"line_number":22,"context_line":"from nova import test"}],"source_content_type":"text/x-python","patch_set":3,"id":"bf659307_dff00f00","line":19,"range":{"start_line":19,"start_character":0,"end_line":19,"end_character":20},"in_reply_to":"df7087c5_bd94ab45","updated":"2018-04-12 22:22:15.000000000","message":"This was done by rebasing on https://review.openstack.org/#/c/557883/3/nova/tests/unit/test_utils.py","commit_id":"860365c013a0941fe18f3d38e5b5c045692fdc15"}],"nova/tests/unit/test_utils.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"0bc450ad746fc1631f71720b28d84186789b02ff","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"df7087c5_5de0efcc","updated":"2018-03-21 12:55:50.000000000","message":"If we\u0027re leaving a copy of supports_direct_io in nova.utils, shouldn\u0027t we leave this copy of the test in place too?  (Though I would prefer we get rid of both.)","commit_id":"860365c013a0941fe18f3d38e5b5c045692fdc15"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"0c0bcf7a023c49d1cd8c36be113026056221f4cf","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"9f6a8fd7_3ab6bddb","in_reply_to":"df7087c5_5de0efcc","updated":"2018-04-14 21:32:52.000000000","message":"I\u0027ll remove the implementation too.","commit_id":"860365c013a0941fe18f3d38e5b5c045692fdc15"}]}
