)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0d81e11663716076ba6a3c1da877ca9f0746c274","unresolved":false,"context_lines":[{"line_number":13,"context_line":"This change also adds a note to explain why virt_types other than"},{"line_number":14,"context_line":"qemu/kvm depend on the flushing into a \"console.log\" file as this"},{"line_number":15,"context_line":"is not immediately obvious and could be removed by mistake."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: I390879d1e08de6050c259b1bd4057b28f40d8064"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"9a629dbe_06e15f9a","line":16,"updated":"2016-11-09 19:13:40.000000000","message":"nit: I\u0027d have something like:\n\nPart of blueprint libvirt-virtlogd","commit_id":"54a400e996b7cae1bb481de6b83018b005ef2d80"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"06d0651fedadfc1fd8d705c78678226038257f39","unresolved":false,"context_lines":[{"line_number":2647,"context_line":"        return fpath"},{"line_number":2648,"context_line":""},{"line_number":2649,"context_line":"    def _get_console_output_file(self, instance, path):"},{"line_number":2650,"context_line":"        libvirt_utils.chown(path, os.getuid())"},{"line_number":2651,"context_line":""},{"line_number":2652,"context_line":"        with libvirt_utils.file_open(path, \u0027rb\u0027) as fp:"},{"line_number":2653,"context_line":"            log_data, remaining \u003d utils.last_bytes(fp,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a629dbe_67d4ec46","line":2650,"range":{"start_line":2650,"start_character":0,"end_line":2650,"end_character":46},"updated":"2016-11-09 12:08:08.000000000","message":"This wasn\u0027t originally called in the second case below. Should it be called here and should we handle r/w errors? (It\u0027s possible to open a file even if we don\u0027t own it, right?)","commit_id":"618f2bc33a2a0b7f00316b02efee23fb3acbe340"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"639959bcc81543e89f868f0dc5053e0dc2439cfa","unresolved":false,"context_lines":[{"line_number":2647,"context_line":"        return fpath"},{"line_number":2648,"context_line":""},{"line_number":2649,"context_line":"    def _get_console_output_file(self, instance, path):"},{"line_number":2650,"context_line":"        libvirt_utils.chown(path, os.getuid())"},{"line_number":2651,"context_line":""},{"line_number":2652,"context_line":"        with libvirt_utils.file_open(path, \u0027rb\u0027) as fp:"},{"line_number":2653,"context_line":"            log_data, remaining \u003d utils.last_bytes(fp,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a629dbe_b696334a","line":2650,"range":{"start_line":2650,"start_character":0,"end_line":2650,"end_character":46},"in_reply_to":"9a629dbe_67d4ec46","updated":"2016-11-09 13:09:23.000000000","message":"@Stephen: The second case below does the call in line 2707 although it creates the file in line 2644 (see mode a+). Calling the \"chown\" multiple times is not an issue. We cannot open a file if we don\u0027t own it, https://github.com/openstack/nova/commit/9a40d6e solved this a while back.","commit_id":"618f2bc33a2a0b7f00316b02efee23fb3acbe340"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d2c53f10cfc78824eba1c500ab432088962f7c1a","unresolved":false,"context_lines":[{"line_number":2647,"context_line":"        return fpath"},{"line_number":2648,"context_line":""},{"line_number":2649,"context_line":"    def _get_console_output_file(self, instance, path):"},{"line_number":2650,"context_line":"        libvirt_utils.chown(path, os.getuid())"},{"line_number":2651,"context_line":""},{"line_number":2652,"context_line":"        with libvirt_utils.file_open(path, \u0027rb\u0027) as fp:"},{"line_number":2653,"context_line":"            log_data, remaining \u003d utils.last_bytes(fp,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a629dbe_0c48b05a","line":2650,"range":{"start_line":2650,"start_character":0,"end_line":2650,"end_character":46},"in_reply_to":"9a629dbe_b696334a","updated":"2016-11-09 13:33:12.000000000","message":"Sounds fair","commit_id":"618f2bc33a2a0b7f00316b02efee23fb3acbe340"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"06d0651fedadfc1fd8d705c78678226038257f39","unresolved":false,"context_lines":[{"line_number":2649,"context_line":"    def _get_console_output_file(self, instance, path):"},{"line_number":2650,"context_line":"        libvirt_utils.chown(path, os.getuid())"},{"line_number":2651,"context_line":""},{"line_number":2652,"context_line":"        with libvirt_utils.file_open(path, \u0027rb\u0027) as fp:"},{"line_number":2653,"context_line":"            log_data, remaining \u003d utils.last_bytes(fp,"},{"line_number":2654,"context_line":"                                                   MAX_CONSOLE_BYTES)"},{"line_number":2655,"context_line":"            if remaining \u003e 0:"},{"line_number":2656,"context_line":"                LOG.info(_LI(\u0027Truncated console log returned, \u0027"},{"line_number":2657,"context_line":"                             \u0027%d bytes ignored\u0027), remaining,"},{"line_number":2658,"context_line":"                         instance\u003dinstance)"},{"line_number":2659,"context_line":"            return log_data"},{"line_number":2660,"context_line":""},{"line_number":2661,"context_line":"    def get_console_output(self, context, instance):"},{"line_number":2662,"context_line":"        guest \u003d self._host.get_guest(instance)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a629dbe_c7b05846","line":2659,"range":{"start_line":2652,"start_character":0,"end_line":2659,"end_character":27},"updated":"2016-11-09 12:08:08.000000000","message":"Out of curiosity, does the file pointer get closed when you \u0027return\u0027 from inside a context manager?","commit_id":"618f2bc33a2a0b7f00316b02efee23fb3acbe340"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d2c53f10cfc78824eba1c500ab432088962f7c1a","unresolved":false,"context_lines":[{"line_number":2649,"context_line":"    def _get_console_output_file(self, instance, path):"},{"line_number":2650,"context_line":"        libvirt_utils.chown(path, os.getuid())"},{"line_number":2651,"context_line":""},{"line_number":2652,"context_line":"        with libvirt_utils.file_open(path, \u0027rb\u0027) as fp:"},{"line_number":2653,"context_line":"            log_data, remaining \u003d utils.last_bytes(fp,"},{"line_number":2654,"context_line":"                                                   MAX_CONSOLE_BYTES)"},{"line_number":2655,"context_line":"            if remaining \u003e 0:"},{"line_number":2656,"context_line":"                LOG.info(_LI(\u0027Truncated console log returned, \u0027"},{"line_number":2657,"context_line":"                             \u0027%d bytes ignored\u0027), remaining,"},{"line_number":2658,"context_line":"                         instance\u003dinstance)"},{"line_number":2659,"context_line":"            return log_data"},{"line_number":2660,"context_line":""},{"line_number":2661,"context_line":"    def get_console_output(self, context, instance):"},{"line_number":2662,"context_line":"        guest \u003d self._host.get_guest(instance)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a629dbe_4c2aa87f","line":2659,"range":{"start_line":2652,"start_character":0,"end_line":2659,"end_character":27},"in_reply_to":"9a629dbe_42199687","updated":"2016-11-09 13:33:12.000000000","message":"I did not know that. Cheers :)","commit_id":"618f2bc33a2a0b7f00316b02efee23fb3acbe340"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"639959bcc81543e89f868f0dc5053e0dc2439cfa","unresolved":false,"context_lines":[{"line_number":2649,"context_line":"    def _get_console_output_file(self, instance, path):"},{"line_number":2650,"context_line":"        libvirt_utils.chown(path, os.getuid())"},{"line_number":2651,"context_line":""},{"line_number":2652,"context_line":"        with libvirt_utils.file_open(path, \u0027rb\u0027) as fp:"},{"line_number":2653,"context_line":"            log_data, remaining \u003d utils.last_bytes(fp,"},{"line_number":2654,"context_line":"                                                   MAX_CONSOLE_BYTES)"},{"line_number":2655,"context_line":"            if remaining \u003e 0:"},{"line_number":2656,"context_line":"                LOG.info(_LI(\u0027Truncated console log returned, \u0027"},{"line_number":2657,"context_line":"                             \u0027%d bytes ignored\u0027), remaining,"},{"line_number":2658,"context_line":"                         instance\u003dinstance)"},{"line_number":2659,"context_line":"            return log_data"},{"line_number":2660,"context_line":""},{"line_number":2661,"context_line":"    def get_console_output(self, context, instance):"},{"line_number":2662,"context_line":"        guest \u003d self._host.get_guest(instance)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a629dbe_42199687","line":2659,"range":{"start_line":2652,"start_character":0,"end_line":2659,"end_character":27},"in_reply_to":"9a629dbe_c7b05846","updated":"2016-11-09 13:09:23.000000000","message":"@Stephen: Yes, it does. The context manager \"creates\" a \"try-finally\" block and closes the file handle in the finally block before you return in the try block. What happens is basically this:\n\n    def foo():\n\ttry:\n\t\treturn \"world\"\n\tfinally:\n\t\tprint(\"hello\")\n\n    print(foo())\n\nThis prints first \"hello\" and then \"world\".","commit_id":"618f2bc33a2a0b7f00316b02efee23fb3acbe340"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"06d0651fedadfc1fd8d705c78678226038257f39","unresolved":false,"context_lines":[{"line_number":2681,"context_line":"                             instance\u003dinstance)"},{"line_number":2682,"context_line":"                    return \"\""},{"line_number":2683,"context_line":""},{"line_number":2684,"context_line":"                libvirt_utils.chown(path, os.getuid())"},{"line_number":2685,"context_line":""},{"line_number":2686,"context_line":"                return self._get_console_output_file(instance, path)"},{"line_number":2687,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9a629dbe_e792bc9e","line":2684,"range":{"start_line":2684,"start_character":0,"end_line":2684,"end_character":54},"updated":"2016-11-09 12:08:08.000000000","message":"You can remove this - it\u0027s in the called function","commit_id":"618f2bc33a2a0b7f00316b02efee23fb3acbe340"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"639959bcc81543e89f868f0dc5053e0dc2439cfa","unresolved":false,"context_lines":[{"line_number":2681,"context_line":"                             instance\u003dinstance)"},{"line_number":2682,"context_line":"                    return \"\""},{"line_number":2683,"context_line":""},{"line_number":2684,"context_line":"                libvirt_utils.chown(path, os.getuid())"},{"line_number":2685,"context_line":""},{"line_number":2686,"context_line":"                return self._get_console_output_file(instance, path)"},{"line_number":2687,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9a629dbe_568cf734","line":2684,"range":{"start_line":2684,"start_character":0,"end_line":2684,"end_character":54},"in_reply_to":"9a629dbe_e792bc9e","updated":"2016-11-09 13:09:23.000000000","message":"@Stephen: Yes, I did overlook that. Will do in ps3.","commit_id":"618f2bc33a2a0b7f00316b02efee23fb3acbe340"}]}
