)]}'
{"nova/privsep/libvirt.py":[{"author":{"_account_id":12898,"name":"Tony Breeds","email":"tony@bakeyournoodle.com","username":"tonyb"},"change_message_id":"678be387805cd8736366190c674e8e0b831f3b15","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    # NOTE(mikal): this is implemented in this contrived manner because you"},{"line_number":30,"context_line":"    # can\u0027t mock a decorator in python (they\u0027re loaded at file parse time,"},{"line_number":31,"context_line":"    # and the mock happens later)."},{"line_number":32,"context_line":"    with open(path) as f:"},{"line_number":33,"context_line":"        return _last_bytes_inner(f, num)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"ff346bd7_abe2b09e","line":32,"range":{"start_line":32,"start_character":14,"end_line":32,"end_character":18},"updated":"2017-07-27 05:01:47.000000000","message":"I think this should have a mode\u003d\u0027rb\u0027 to match the previous implementation and ensure that we\u0027re concatenating bytes not mixing bytes and str ?\n\nIn fact that is probably the source of the failures with the non-zero seek from the end.  Not the writefile() path I was patching.","commit_id":"ab598573623a14a28525089a562d54af6096ee10"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"eb1de40134b74558b4dd81a3cde40d61c7a56e34","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    # NOTE(mikal): this is implemented in this contrived manner because you"},{"line_number":30,"context_line":"    # can\u0027t mock a decorator in python (they\u0027re loaded at file parse time,"},{"line_number":31,"context_line":"    # and the mock happens later)."},{"line_number":32,"context_line":"    with open(path) as f:"},{"line_number":33,"context_line":"        return _last_bytes_inner(f, num)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"df3967d1_170281b5","line":32,"range":{"start_line":32,"start_character":14,"end_line":32,"end_character":18},"in_reply_to":"ff346bd7_abe2b09e","updated":"2017-07-31 05:01:03.000000000","message":"Done in a later patch.","commit_id":"ab598573623a14a28525089a562d54af6096ee10"}],"nova/tests/unit/virt/libvirt/test_driver.py":[{"author":{"_account_id":12898,"name":"Tony Breeds","email":"tony@bakeyournoodle.com","username":"tonyb"},"change_message_id":"61d8ed418a9f71cff34e2b9d5e161fcf342c70db","unresolved":false,"context_lines":[{"line_number":11443,"context_line":""},{"line_number":11444,"context_line":"    @mock.patch(\u0027nova.virt.libvirt.host.Host.get_domain\u0027)"},{"line_number":11445,"context_line":"    @mock.patch.object(libvirt_guest.Guest, \u0027get_xml_desc\u0027)"},{"line_number":11446,"context_line":"    @mock.patch(\u0027nova.privsep.dac_admin.chown\u0027)"},{"line_number":11447,"context_line":"    def test_get_console_output_logrotate(self, mock_chown, mock_get_xml,"},{"line_number":11448,"context_line":"                                          get_domain):"},{"line_number":11449,"context_line":"        fake_libvirt_utils.files[\u0027console.log\u0027] \u003d b\u0027uvwxyz\u0027"}],"source_content_type":"text/x-python","patch_set":13,"id":"ff346bd7_86f80149","line":11446,"range":{"start_line":11446,"start_character":4,"end_line":11446,"end_character":47},"updated":"2017-07-27 05:33:46.000000000","message":"I think this is dangling now.","commit_id":"ab598573623a14a28525089a562d54af6096ee10"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"eb1de40134b74558b4dd81a3cde40d61c7a56e34","unresolved":false,"context_lines":[{"line_number":11443,"context_line":""},{"line_number":11444,"context_line":"    @mock.patch(\u0027nova.virt.libvirt.host.Host.get_domain\u0027)"},{"line_number":11445,"context_line":"    @mock.patch.object(libvirt_guest.Guest, \u0027get_xml_desc\u0027)"},{"line_number":11446,"context_line":"    @mock.patch(\u0027nova.privsep.dac_admin.chown\u0027)"},{"line_number":11447,"context_line":"    def test_get_console_output_logrotate(self, mock_chown, mock_get_xml,"},{"line_number":11448,"context_line":"                                          get_domain):"},{"line_number":11449,"context_line":"        fake_libvirt_utils.files[\u0027console.log\u0027] \u003d b\u0027uvwxyz\u0027"}],"source_content_type":"text/x-python","patch_set":13,"id":"df3967d1_17f041c9","line":11446,"range":{"start_line":11446,"start_character":4,"end_line":11446,"end_character":47},"in_reply_to":"ff346bd7_86f80149","updated":"2017-07-31 05:01:03.000000000","message":"Done","commit_id":"ab598573623a14a28525089a562d54af6096ee10"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":12898,"name":"Tony Breeds","email":"tony@bakeyournoodle.com","username":"tonyb"},"change_message_id":"678be387805cd8736366190c674e8e0b831f3b15","unresolved":false,"context_lines":[{"line_number":2898,"context_line":"        # flush of that pty device into the \"console.log\" file to ensure"},{"line_number":2899,"context_line":"        # that a series of \"get_console_output\" calls return the complete"},{"line_number":2900,"context_line":"        # content even after rebooting a guest."},{"line_number":2901,"context_line":"        # NOTE(tonyb): We don\u0027t really need this to be binary but text files"},{"line_number":2902,"context_line":"        # in python3 only support seeking from the beginning of the file.  So"},{"line_number":2903,"context_line":"        # we force the file to binary."},{"line_number":2904,"context_line":"        dac_admin.writefile(console_log, \u0027a+b\u0027, data.encode(\u0027utf-8\u0027))"},{"line_number":2905,"context_line":"        return self._get_console_output_file(instance, console_log)"},{"line_number":2906,"context_line":""},{"line_number":2907,"context_line":"    def get_host_ip_addr(self):"}],"source_content_type":"text/x-python","patch_set":13,"id":"ff346bd7_e6146d46","line":2904,"range":{"start_line":2901,"start_character":0,"end_line":2904,"end_character":69},"updated":"2017-07-27 05:01:47.000000000","message":"I *think* the comment here is wrong based on my comment in nova/privsep/libvirt.py  The old _append_file worked on py3 so we can probably make this the simple:\n\n dac_admin.writefile(console_log, \u0027a+\u0027, data)\n\nIt used to be","commit_id":"ab598573623a14a28525089a562d54af6096ee10"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"eb1de40134b74558b4dd81a3cde40d61c7a56e34","unresolved":false,"context_lines":[{"line_number":2898,"context_line":"        # flush of that pty device into the \"console.log\" file to ensure"},{"line_number":2899,"context_line":"        # that a series of \"get_console_output\" calls return the complete"},{"line_number":2900,"context_line":"        # content even after rebooting a guest."},{"line_number":2901,"context_line":"        # NOTE(tonyb): We don\u0027t really need this to be binary but text files"},{"line_number":2902,"context_line":"        # in python3 only support seeking from the beginning of the file.  So"},{"line_number":2903,"context_line":"        # we force the file to binary."},{"line_number":2904,"context_line":"        dac_admin.writefile(console_log, \u0027a+b\u0027, data.encode(\u0027utf-8\u0027))"},{"line_number":2905,"context_line":"        return self._get_console_output_file(instance, console_log)"},{"line_number":2906,"context_line":""},{"line_number":2907,"context_line":"    def get_host_ip_addr(self):"}],"source_content_type":"text/x-python","patch_set":13,"id":"df3967d1_371ea50c","line":2904,"range":{"start_line":2901,"start_character":0,"end_line":2904,"end_character":69},"in_reply_to":"ff346bd7_e6146d46","updated":"2017-07-31 05:01:03.000000000","message":"Done","commit_id":"ab598573623a14a28525089a562d54af6096ee10"}]}
