)]}'
{"nova/conf/workarounds.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"dfae85bfe6103e72faae968b4c23f567fb545128","unresolved":false,"context_lines":[{"line_number":165,"context_line":"by a built-in log rotation. It also removes the mutually exclusivity of"},{"line_number":166,"context_line":"\"serial console\" and \"get console output\"."},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"Unfortunately, an (assumed) issue in Qemu prevents the logging of the"},{"line_number":169,"context_line":"boot messages of the guest *unless* the connection to the char device is"},{"line_number":170,"context_line":"already established. Because this is still under investigation, the"},{"line_number":171,"context_line":"enabled of that feature must be explicitly set here."},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"For more information, refer to the bug report:"}],"source_content_type":"text/x-python","patch_set":16,"id":"1aa78d24_69904044","line":170,"range":{"start_line":168,"start_character":0,"end_line":170,"end_character":20},"updated":"2016-07-05 15:28:51.000000000","message":"Given this, if the user needs to have a serial console opened shouldn\u0027t we be calling out related/dependent config options for this workaround?","commit_id":"8c97e16a637b53a937c8bac3fe4bc902eec989e3"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"1266d2af044eb803a0467e96248e4514b0a9049d","unresolved":false,"context_lines":[{"line_number":165,"context_line":"by a built-in log rotation. It also removes the mutually exclusivity of"},{"line_number":166,"context_line":"\"serial console\" and \"get console output\"."},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"Unfortunately, an (assumed) issue in Qemu prevents the logging of the"},{"line_number":169,"context_line":"boot messages of the guest *unless* the connection to the char device is"},{"line_number":170,"context_line":"already established. Because this is still under investigation, the"},{"line_number":171,"context_line":"enabled of that feature must be explicitly set here."},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"For more information, refer to the bug report:"}],"source_content_type":"text/x-python","patch_set":16,"id":"1aa78d24_004b1d2b","line":170,"range":{"start_line":168,"start_character":0,"end_line":170,"end_character":20},"in_reply_to":"1aa78d24_69904044","updated":"2016-07-06 12:05:43.000000000","message":"@Matt: It\u0027s not solely based on the \"serial console\" feature (\u003d tcp device). A \"char device\" can also be the pty device which is usually used on x86. IOW, I don\u0027t need to enable \"serial console\" to make use of \"virtlogd\". That was my reasoning to not mention the serial console config options here. The issue in Qemu is under bug triage [1], it makes sense to mention that bug report here.\n\nReferences:\n[1] https://bugs.launchpad.net/qemu/+bug/1599214","commit_id":"8c97e16a637b53a937c8bac3fe4bc902eec989e3"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"8763d5a96e01ffdd40d134d7b8b5c05cacf57bcb","unresolved":false,"context_lines":[{"line_number":167,"context_line":""},{"line_number":168,"context_line":"Unfortunately, an (assumed) issue in Qemu prevents the logging of the"},{"line_number":169,"context_line":"boot messages of the guest *unless* the connection to the char device is"},{"line_number":170,"context_line":"already established. Because this is still under investigation, the"},{"line_number":171,"context_line":"enabled of that feature must be explicitly set here."},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"For more information, refer to the bug report:"}],"source_content_type":"text/x-python","patch_set":16,"id":"1aa78d24_1a1d78bd","line":170,"in_reply_to":"1aa78d24_69904044","updated":"2016-07-05 16:03:50.000000000","message":"Yes","commit_id":"8c97e16a637b53a937c8bac3fe4bc902eec989e3"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"d7064165160484d829b1cd9155be8305b38ae480","unresolved":false,"context_lines":[{"line_number":2689,"context_line":"                         remaining, instance\u003dinstance)"},{"line_number":2690,"context_line":"            return log_data"},{"line_number":2691,"context_line":""},{"line_number":2692,"context_line":"    def _get_virtlogd_output(self, tree, instance):"},{"line_number":2693,"context_line":"        if not self._host.has_min_version(MIN_LIBVIRT_VIRTLOGD,"},{"line_number":2694,"context_line":"                                          MIN_QEMU_VIRTLOGD):"},{"line_number":2695,"context_line":"            return \"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"3aaa91ec_fed08955","line":2692,"updated":"2016-06-22 16:00:36.000000000","message":"I still need to test with virtlogd. but if I can make small comment you should to create new module libvirt/virtlogd.py and put the code related inside + split it with some smaller methods and test them in test_virtlogd.py","commit_id":"7751f79c6920da8142846bc11d11e4aa6dc027a4"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"bdcb8a0ab04f169e0518cd176608ef0dbd4f7ce7","unresolved":false,"context_lines":[{"line_number":2707,"context_line":"        log_dir \u003d os.path.dirname(logd_file)"},{"line_number":2708,"context_line":"        libvirt_utils.chown(log_dir, os.getuid())"},{"line_number":2709,"context_line":"        # find all rotated log files by pattern"},{"line_number":2710,"context_line":"        pattern \u003d logd_file.replace(\"logd.log\", \"logd*.log\")"},{"line_number":2711,"context_line":"        files \u003d glob.glob(pattern)"},{"line_number":2712,"context_line":""},{"line_number":2713,"context_line":"        if len(files) \u003c\u003d 0:"}],"source_content_type":"text/x-python","patch_set":6,"id":"3aaa91ec_b2815850","line":2710,"range":{"start_line":2710,"start_character":49,"end_line":2710,"end_character":58},"updated":"2016-06-21 16:38:17.000000000","message":"A first functional test shows that the files will be named like this example:\n    instance-00000005-logd.log\n    instance-00000005-logd.log.0\n    instance-00000005-logd.log.1\n    instance-00000005-logd.log.2","commit_id":"7751f79c6920da8142846bc11d11e4aa6dc027a4"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"e20537dd7b44d2f64b94d4d896de9d1511be8679","unresolved":false,"context_lines":[{"line_number":2711,"context_line":"        files \u003d glob.glob(pattern)"},{"line_number":2712,"context_line":""},{"line_number":2713,"context_line":"        if len(files) \u003c\u003d 0:"},{"line_number":2714,"context_line":"            LOG.info("},{"line_number":2715,"context_line":"                _LI(\u0027Instance is configured with a logd file, but the \u0027"},{"line_number":2716,"context_line":"                    \u0027backing file is not (yet?) present\u0027), instance\u003dinstance)"},{"line_number":2717,"context_line":"            return \"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"3aaa91ec_f28120fd","line":2714,"range":{"start_line":2714,"start_character":12,"end_line":2714,"end_character":21},"updated":"2016-06-21 16:48:25.000000000","message":"I added these INFO logs (this one and the others at the end) to be somewhat consistent with the logging in the method above at line 2645. Personally, I would have chosen logging at the DEBUG level.","commit_id":"7751f79c6920da8142846bc11d11e4aa6dc027a4"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"bdcb8a0ab04f169e0518cd176608ef0dbd4f7ce7","unresolved":false,"context_lines":[{"line_number":4283,"context_line":"                                      MIN_QEMU_VIRTLOGD):"},{"line_number":4284,"context_line":"            char_devices \u003d [dev for dev in char_devices if dev.type !\u003d \"file\"]"},{"line_number":4285,"context_line":"            log \u003d vconfig.LibvirtConfigGuestCharDeviceLog()"},{"line_number":4286,"context_line":"            log.file \u003d \"/var/log/libvirt/qemu/%s-logd.log\" % instance.name"},{"line_number":4287,"context_line":"            char_devices[0].log \u003d log"},{"line_number":4288,"context_line":""},{"line_number":4289,"context_line":"        guest.devices.extend(char_devices)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3aaa91ec_724b705a","line":4286,"updated":"2016-06-21 16:38:17.000000000","message":"I\u0027m not sure anymore if this really should be the path we should use here. My first functional test shows an issue when glob tries to find those files (see line 2711).","commit_id":"7751f79c6920da8142846bc11d11e4aa6dc027a4"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"e20537dd7b44d2f64b94d4d896de9d1511be8679","unresolved":false,"context_lines":[{"line_number":4283,"context_line":"                                      MIN_QEMU_VIRTLOGD):"},{"line_number":4284,"context_line":"            char_devices \u003d [dev for dev in char_devices if dev.type !\u003d \"file\"]"},{"line_number":4285,"context_line":"            log \u003d vconfig.LibvirtConfigGuestCharDeviceLog()"},{"line_number":4286,"context_line":"            log.file \u003d \"/var/log/libvirt/qemu/%s-logd.log\" % instance.name"},{"line_number":4287,"context_line":"            char_devices[0].log \u003d log"},{"line_number":4288,"context_line":""},{"line_number":4289,"context_line":"        guest.devices.extend(char_devices)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3aaa91ec_72f2509c","line":4286,"in_reply_to":"3aaa91ec_724b705a","updated":"2016-06-21 16:48:25.000000000","message":"Another functional test I did uses the instance path (where the \"libvirt.xml\" file lives, for example), and this did work (the file wrapping was successful). Maybe my information where to store the logd file is outdated?","commit_id":"7751f79c6920da8142846bc11d11e4aa6dc027a4"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"812ab34ac8dea8d5a676de89959ed3fbbfdfe1cd","unresolved":false,"context_lines":[{"line_number":2672,"context_line":"                pty \u003d source_node.get(\"path\")"},{"line_number":2673,"context_line":"                if not pty:"},{"line_number":2674,"context_line":"                    continue"},{"line_number":2675,"context_line":"                break"},{"line_number":2676,"context_line":"        else:"},{"line_number":2677,"context_line":"            raise exception.ConsoleNotAvailable()"},{"line_number":2678,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_25c3e4ee","line":2675,"updated":"2016-06-23 15:17:11.000000000","message":"I tend to think this block of code is fairly pointless - we should just drop this, and instead simply check of console_log exists on disk or not.","commit_id":"20b228d54f2933d53969818c1159725c36c32b8d"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"2d950c6310449fa6d97f9d1c20975c1a36b38dc4","unresolved":false,"context_lines":[{"line_number":2672,"context_line":"                pty \u003d source_node.get(\"path\")"},{"line_number":2673,"context_line":"                if not pty:"},{"line_number":2674,"context_line":"                    continue"},{"line_number":2675,"context_line":"                break"},{"line_number":2676,"context_line":"        else:"},{"line_number":2677,"context_line":"            raise exception.ConsoleNotAvailable()"},{"line_number":2678,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_9d66484f","line":2675,"in_reply_to":"3aaa91ec_25c3e4ee","updated":"2016-06-24 07:51:45.000000000","message":"@danpb: I don\u0027t exactly understand what you mean. Are you  talking about the \"if console_types.get(\u0027pty\u0027)\" block? It\u0027s still necessary below in line 2682 where the pty content gets added to the \"console.log\" file, isn\u0027t it?","commit_id":"20b228d54f2933d53969818c1159725c36c32b8d"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"fc9174f30f98ca7374759eea0ad07fdf0419a172","unresolved":false,"context_lines":[{"line_number":2672,"context_line":"                pty \u003d source_node.get(\"path\")"},{"line_number":2673,"context_line":"                if not pty:"},{"line_number":2674,"context_line":"                    continue"},{"line_number":2675,"context_line":"                break"},{"line_number":2676,"context_line":"        else:"},{"line_number":2677,"context_line":"            raise exception.ConsoleNotAvailable()"},{"line_number":2678,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_7feb45dc","line":2675,"in_reply_to":"3aaa91ec_9d66484f","updated":"2016-06-27 09:22:06.000000000","message":"As discussed in IRC [1], I\u0027ll prepend a change which gets rid of this logic.\n\n[1] http://eavesdrop.openstack.org/irclogs/%23openstack-nova/%23openstack-nova.2016-06-27.log.html#t2016-06-27T08:19:34","commit_id":"20b228d54f2933d53969818c1159725c36c32b8d"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"198438b804a0a181b68208bd519dc5fea1c6f252","unresolved":false,"context_lines":[{"line_number":2689,"context_line":"                         remaining, instance\u003dinstance)"},{"line_number":2690,"context_line":"            return log_data"},{"line_number":2691,"context_line":""},{"line_number":2692,"context_line":"    def _get_virtlogd_output(self, tree, instance):"},{"line_number":2693,"context_line":"        if not self._host.has_min_version(MIN_LIBVIRT_VIRTLOGD,"},{"line_number":2694,"context_line":"                                          MIN_QEMU_VIRTLOGD):"},{"line_number":2695,"context_line":"            return \"\""}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_7e2c7202","line":2692,"updated":"2016-06-23 09:57:15.000000000","message":"What about a new modules libvirt/virtlogd.py (test_virtlogd.py) to put here all related code instead of that big method which mix several processes ?","commit_id":"20b228d54f2933d53969818c1159725c36c32b8d"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"2d3e2d9ce04f9dd55e4b6544deb8a6ff8dd28b60","unresolved":false,"context_lines":[{"line_number":2689,"context_line":"                         remaining, instance\u003dinstance)"},{"line_number":2690,"context_line":"            return log_data"},{"line_number":2691,"context_line":""},{"line_number":2692,"context_line":"    def _get_virtlogd_output(self, tree, instance):"},{"line_number":2693,"context_line":"        if not self._host.has_min_version(MIN_LIBVIRT_VIRTLOGD,"},{"line_number":2694,"context_line":"                                          MIN_QEMU_VIRTLOGD):"},{"line_number":2695,"context_line":"            return \"\""}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_a00d1492","line":2692,"in_reply_to":"3aaa91ec_7e2c7202","updated":"2016-06-23 11:31:09.000000000","message":"Could make sense. I still have to check the behavior when a live-migration to an older compute node is done. I guess there will be code needed for that. I\u0027ll give it some thoughts.","commit_id":"20b228d54f2933d53969818c1159725c36c32b8d"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"812ab34ac8dea8d5a676de89959ed3fbbfdfe1cd","unresolved":false,"context_lines":[{"line_number":2716,"context_line":"        # The name of these rotated files could be \"virtlogd.log9\" and"},{"line_number":2717,"context_line":"        # \"virtlogd.log.10\" which makes a sort by name invalid. That\u0027s why"},{"line_number":2718,"context_line":"        # we sort by last modification date."},{"line_number":2719,"context_line":"        files.sort(key\u003dos.path.getmtime)"},{"line_number":2720,"context_line":""},{"line_number":2721,"context_line":"        # do the chown *after* the sort, otherwise the chown influences"},{"line_number":2722,"context_line":"        # the modification time of the file."}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_451a707e","line":2719,"updated":"2016-06-23 15:17:11.000000000","message":"Parsing XML, globbing and sorting is rather overly complicated IMHO.\n\nWe already know what path we should have - self._get_console_log_path().\n\nWe should simply read that file, and then if we need more, append \".0\" to the filename and see if it exists, and read that. Then append \".1\", etc, etc.\n\nWe should not actually need to have a separate method from the non-virtlogd codepath - the existing codepath could simply check for multiple files with .N suffix","commit_id":"20b228d54f2933d53969818c1159725c36c32b8d"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"2d950c6310449fa6d97f9d1c20975c1a36b38dc4","unresolved":false,"context_lines":[{"line_number":2716,"context_line":"        # The name of these rotated files could be \"virtlogd.log9\" and"},{"line_number":2717,"context_line":"        # \"virtlogd.log.10\" which makes a sort by name invalid. That\u0027s why"},{"line_number":2718,"context_line":"        # we sort by last modification date."},{"line_number":2719,"context_line":"        files.sort(key\u003dos.path.getmtime)"},{"line_number":2720,"context_line":""},{"line_number":2721,"context_line":"        # do the chown *after* the sort, otherwise the chown influences"},{"line_number":2722,"context_line":"        # the modification time of the file."}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_bd2d0448","line":2719,"in_reply_to":"3aaa91ec_451a707e","updated":"2016-06-24 07:51:45.000000000","message":"Yeah, would make things a lot simpler. PS9 will have that.","commit_id":"20b228d54f2933d53969818c1159725c36c32b8d"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"812ab34ac8dea8d5a676de89959ed3fbbfdfe1cd","unresolved":false,"context_lines":[{"line_number":4287,"context_line":"        # at log file rotation and prevents a floodding of the host."},{"line_number":4288,"context_line":"        # That\u0027s the reason why we replace the \"older\" log file device here."},{"line_number":4289,"context_line":"        if self._host.has_min_version(MIN_LIBVIRT_VIRTLOGD,"},{"line_number":4290,"context_line":"                                      MIN_QEMU_VIRTLOGD):"},{"line_number":4291,"context_line":"            char_devices \u003d [dev for dev in char_devices if dev.type !\u003d \"file\"]"},{"line_number":4292,"context_line":"            log \u003d vconfig.LibvirtConfigGuestCharDeviceLog()"},{"line_number":4293,"context_line":"            path \u003d os.path.join(libvirt_utils.get_instance_path(instance),"}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_c5978046","line":4290,"updated":"2016-06-23 15:17:11.000000000","message":"We need to filter virt_type in (qemu, kvm), since this code path currently runs for all virt drivers and so this version check may end up comparing out min qemu version against xen or parallels by mistake !","commit_id":"20b228d54f2933d53969818c1159725c36c32b8d"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"2d950c6310449fa6d97f9d1c20975c1a36b38dc4","unresolved":false,"context_lines":[{"line_number":4287,"context_line":"        # at log file rotation and prevents a floodding of the host."},{"line_number":4288,"context_line":"        # That\u0027s the reason why we replace the \"older\" log file device here."},{"line_number":4289,"context_line":"        if self._host.has_min_version(MIN_LIBVIRT_VIRTLOGD,"},{"line_number":4290,"context_line":"                                      MIN_QEMU_VIRTLOGD):"},{"line_number":4291,"context_line":"            char_devices \u003d [dev for dev in char_devices if dev.type !\u003d \"file\"]"},{"line_number":4292,"context_line":"            log \u003d vconfig.LibvirtConfigGuestCharDeviceLog()"},{"line_number":4293,"context_line":"            path \u003d os.path.join(libvirt_utils.get_instance_path(instance),"}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_5de22030","line":4290,"in_reply_to":"3aaa91ec_c5978046","updated":"2016-06-24 07:51:45.000000000","message":"True, will do that in ps9","commit_id":"20b228d54f2933d53969818c1159725c36c32b8d"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"812ab34ac8dea8d5a676de89959ed3fbbfdfe1cd","unresolved":false,"context_lines":[{"line_number":4291,"context_line":"            char_devices \u003d [dev for dev in char_devices if dev.type !\u003d \"file\"]"},{"line_number":4292,"context_line":"            log \u003d vconfig.LibvirtConfigGuestCharDeviceLog()"},{"line_number":4293,"context_line":"            path \u003d os.path.join(libvirt_utils.get_instance_path(instance),"},{"line_number":4294,"context_line":"                                \"virtlogd.log\")"},{"line_number":4295,"context_line":"            log.file \u003d path"},{"line_number":4296,"context_line":"            char_devices[0].log \u003d log"},{"line_number":4297,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_8580d8f8","line":4294,"updated":"2016-06-23 15:17:11.000000000","message":"Why aren\u0027t you just using self._get_console_log_path() here - whether we use virtlogd or have QEMU directly writing the logfile is really irrelevant from POV of file naming.","commit_id":"20b228d54f2933d53969818c1159725c36c32b8d"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"2d950c6310449fa6d97f9d1c20975c1a36b38dc4","unresolved":false,"context_lines":[{"line_number":4291,"context_line":"            char_devices \u003d [dev for dev in char_devices if dev.type !\u003d \"file\"]"},{"line_number":4292,"context_line":"            log \u003d vconfig.LibvirtConfigGuestCharDeviceLog()"},{"line_number":4293,"context_line":"            path \u003d os.path.join(libvirt_utils.get_instance_path(instance),"},{"line_number":4294,"context_line":"                                \"virtlogd.log\")"},{"line_number":4295,"context_line":"            log.file \u003d path"},{"line_number":4296,"context_line":"            char_devices[0].log \u003d log"},{"line_number":4297,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_ddcc50bd","line":4294,"in_reply_to":"3aaa91ec_8580d8f8","updated":"2016-06-24 07:51:45.000000000","message":"True, will do that in ps9","commit_id":"20b228d54f2933d53969818c1159725c36c32b8d"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"0fbdcb7827cb8a634acd15894bf2c4e25e3df522","unresolved":false,"context_lines":[{"line_number":4248,"context_line":"            char_devices \u003d [dev for dev in char_devices if dev.type !\u003d \"file\"]"},{"line_number":4249,"context_line":"            log \u003d vconfig.LibvirtConfigGuestCharDeviceLog()"},{"line_number":4250,"context_line":"            log.file \u003d self._get_console_log_path(instance)"},{"line_number":4251,"context_line":"            char_devices[0].log \u003d log"},{"line_number":4252,"context_line":""},{"line_number":4253,"context_line":"        guest.devices.extend(char_devices)"},{"line_number":4254,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"3aaa91ec_39098b2d","line":4251,"updated":"2016-06-28 13:22:53.000000000","message":"I know I +2\u0027d this earlier, but re-reading I\u0027m not sure we\u0027ve done the right thing now.\n\nWith this code we have\n\n a. A \u003cconsole type\u003d\"pty\"\u003e / \u003cserial type\u003dpty\u003e\n b. Either\n       - One or more \u003cserial type\u003dtcp\u003e devices, with logfile \n    Or\n       - A \u003cserial type\u003dfile\u003e\n\nI thought the intention was that we stop having duplicated consoles. eg we\u0027d end up with\n\nEither\n\n - One or more \u003cserial type\u003dtcp\u003e devices, with logfile set\n\nOr\n\n - A \u003cconsole type\u003d\"pty\"\u003e / \u003cserial type\u003dpty\u003e  with logfile set\n\n\nIOW, there is no reason we want to continue to have a \u003cconsole type\u003dpty\u003e if we have serial consoles enabled, and if we have \u003cconsole type\u003dpty\u003e we should log from that, not add a second serial for logging.\n\nie, we stop having multiple serial devices for QEMU, and just have one that is used for both recording boot log messages and providing the interactive console.","commit_id":"ee510ff183c0c17ad84b7a04dc15d5ac00ad645d"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"b6288766f621acd5ed06aa0cd40c88bb4a5b4211","unresolved":false,"context_lines":[{"line_number":4248,"context_line":"            char_devices \u003d [dev for dev in char_devices if dev.type !\u003d \"file\"]"},{"line_number":4249,"context_line":"            log \u003d vconfig.LibvirtConfigGuestCharDeviceLog()"},{"line_number":4250,"context_line":"            log.file \u003d self._get_console_log_path(instance)"},{"line_number":4251,"context_line":"            char_devices[0].log \u003d log"},{"line_number":4252,"context_line":""},{"line_number":4253,"context_line":"        guest.devices.extend(char_devices)"},{"line_number":4254,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"3aaa91ec_fc6d27cd","line":4251,"in_reply_to":"3aaa91ec_39098b2d","updated":"2016-06-28 16:06:08.000000000","message":"True, the current PS still creates multiple devices, for example a tcp + pty device if the serial console is enabled. The next PS will change that and ensure in the unit test that only *one* device gets created (which is then used for the logfile).","commit_id":"ee510ff183c0c17ad84b7a04dc15d5ac00ad645d"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"68bfc426c98a55f545a6ba2ebfc7d76251cd3e02","unresolved":false,"context_lines":[{"line_number":2656,"context_line":"                # that\u0027s why we *prepend* the log data."},{"line_number":2657,"context_line":"                log_data \u003d read_log_data + log_data"},{"line_number":2658,"context_line":"                bytes_to_read -\u003d len(read_log_data)"},{"line_number":2659,"context_line":"            if bytes_to_read \u003e 0:"},{"line_number":2660,"context_line":"                path \u003d console_log + \".\" + str(i)"},{"line_number":2661,"context_line":"                i +\u003d 1"},{"line_number":2662,"context_line":"        return log_data"}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_f43cb0c9","line":2659,"updated":"2016-06-30 12:58:25.000000000","message":"This condition can be remove, you already do it in the loop-while and path should always be incremented at the end of the loop to avoid rereading same file.","commit_id":"65a9a553a628354341de6d5023642d0d1d358b56"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"accc3c68350519bc3f59d3650cd381ad4a5aff79","unresolved":false,"context_lines":[{"line_number":2656,"context_line":"                # that\u0027s why we *prepend* the log data."},{"line_number":2657,"context_line":"                log_data \u003d read_log_data + log_data"},{"line_number":2658,"context_line":"                bytes_to_read -\u003d len(read_log_data)"},{"line_number":2659,"context_line":"            if bytes_to_read \u003e 0:"},{"line_number":2660,"context_line":"                path \u003d console_log + \".\" + str(i)"},{"line_number":2661,"context_line":"                i +\u003d 1"},{"line_number":2662,"context_line":"        return log_data"}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_3ed56ee4","line":2659,"in_reply_to":"3aaa91ec_f43cb0c9","updated":"2016-06-30 15:18:44.000000000","message":"@sahid: Yep, less IFs are better. Will do that for PS16 (I\u0027ve overlooked this comment for ps14+15).","commit_id":"65a9a553a628354341de6d5023642d0d1d358b56"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"8763d5a96e01ffdd40d134d7b8b5c05cacf57bcb","unresolved":false,"context_lines":[{"line_number":4322,"context_line":"        # for the boot messages of the guest. \"virtlogd\" does a better job"},{"line_number":4323,"context_line":"        # at log file rotation and prevents a floodding of the host."},{"line_number":4324,"context_line":"        # That\u0027s the reason why we replace the \"older\" log file device here."},{"line_number":4325,"context_line":"        if (CONF.workarounds.enable_virtlogd and"},{"line_number":4326,"context_line":"                virt_type in (\"qemu\", \"kvm\") and"},{"line_number":4327,"context_line":"                self._host.has_min_version(MIN_LIBVIRT_VIRTLOGD,"},{"line_number":4328,"context_line":"                                           MIN_QEMU_VIRTLOGD)):"}],"source_content_type":"text/x-python","patch_set":16,"id":"1aa78d24_facb4c51","line":4325,"updated":"2016-07-05 16:03:50.000000000","message":"We should to have a condition where virtlogd is enable and serial console. If serial console is not enable when the workaround is we should log a warning message.","commit_id":"8c97e16a637b53a937c8bac3fe4bc902eec989e3"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"355ee79e6552c284fb768fdb1547b69b0a74e51d","unresolved":false,"context_lines":[{"line_number":4322,"context_line":"        # for the boot messages of the guest. \"virtlogd\" does a better job"},{"line_number":4323,"context_line":"        # at log file rotation and prevents a floodding of the host."},{"line_number":4324,"context_line":"        # That\u0027s the reason why we replace the \"older\" log file device here."},{"line_number":4325,"context_line":"        if (CONF.workarounds.enable_virtlogd and"},{"line_number":4326,"context_line":"                virt_type in (\"qemu\", \"kvm\") and"},{"line_number":4327,"context_line":"                self._host.has_min_version(MIN_LIBVIRT_VIRTLOGD,"},{"line_number":4328,"context_line":"                                           MIN_QEMU_VIRTLOGD)):"}],"source_content_type":"text/x-python","patch_set":16,"id":"1aa78d24_f5d61126","line":4325,"in_reply_to":"1aa78d24_346008a5","updated":"2016-07-08 11:02:03.000000000","message":"@sahid: I used \"workarounds\" as a means to get it merged, knowing that it would only be partially useful to the ops due to [1]. As the code didn\u0027t make it past the feature freeze for Newton, I will pause the work on it until Ocata opens. I hope Qemu has fixed the issue [2] until then, so that the workaround here is not necessary anymore.\n\n[1] https://bugs.launchpad.net/nova/+bug/1597789\n[2] https://bugs.launchpad.net/qemu/+bug/1599214","commit_id":"8c97e16a637b53a937c8bac3fe4bc902eec989e3"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"382eecb3c067f8fb8457ddd3d8c28e8b46b515bc","unresolved":false,"context_lines":[{"line_number":4322,"context_line":"        # for the boot messages of the guest. \"virtlogd\" does a better job"},{"line_number":4323,"context_line":"        # at log file rotation and prevents a floodding of the host."},{"line_number":4324,"context_line":"        # That\u0027s the reason why we replace the \"older\" log file device here."},{"line_number":4325,"context_line":"        if (CONF.workarounds.enable_virtlogd and"},{"line_number":4326,"context_line":"                virt_type in (\"qemu\", \"kvm\") and"},{"line_number":4327,"context_line":"                self._host.has_min_version(MIN_LIBVIRT_VIRTLOGD,"},{"line_number":4328,"context_line":"                                           MIN_QEMU_VIRTLOGD)):"}],"source_content_type":"text/x-python","patch_set":16,"id":"1aa78d24_346008a5","line":4325,"in_reply_to":"1aa78d24_4072454a","updated":"2016-07-06 16:59:02.000000000","message":"Oh sorry I only tested with serial console enabled, but still, we should to verify if one of these options are correctly configured and log a message for operators in the other way.","commit_id":"8c97e16a637b53a937c8bac3fe4bc902eec989e3"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"1266d2af044eb803a0467e96248e4514b0a9049d","unresolved":false,"context_lines":[{"line_number":4322,"context_line":"        # for the boot messages of the guest. \"virtlogd\" does a better job"},{"line_number":4323,"context_line":"        # at log file rotation and prevents a floodding of the host."},{"line_number":4324,"context_line":"        # That\u0027s the reason why we replace the \"older\" log file device here."},{"line_number":4325,"context_line":"        if (CONF.workarounds.enable_virtlogd and"},{"line_number":4326,"context_line":"                virt_type in (\"qemu\", \"kvm\") and"},{"line_number":4327,"context_line":"                self._host.has_min_version(MIN_LIBVIRT_VIRTLOGD,"},{"line_number":4328,"context_line":"                                           MIN_QEMU_VIRTLOGD)):"}],"source_content_type":"text/x-python","patch_set":16,"id":"1aa78d24_4072454a","line":4325,"in_reply_to":"1aa78d24_facb4c51","updated":"2016-07-06 12:05:43.000000000","message":"@sahid: The \"virtlogd\" feature can be used on pty char devices too [1]:\n\n    \"Regardless of the type, character devices can have an\n    optional log file associated with them.\"\n\nBased on that I think the conditional you proposed isn\u0027t needed.\n\nReferences:\n[1] https://libvirt.org/formatdomain.html#elementsConsole","commit_id":"8c97e16a637b53a937c8bac3fe4bc902eec989e3"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"5d013874b8c7c35613cf0d9f2c86b65844aa3fdc","unresolved":false,"context_lines":[{"line_number":314,"context_line":""},{"line_number":315,"context_line":"# Use the \"logd\" backend for handling stdout/stderr from QEMU processes."},{"line_number":316,"context_line":"MIN_LIBVIRT_VIRTLOGD \u003d (1, 3, 3)"},{"line_number":317,"context_line":"MIN_QEMU_VIRTLOGD \u003d (2, 7, 0)"},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"# perf events support"},{"line_number":320,"context_line":"MIN_LIBVIRT_PERF_VERSION \u003d (2, 0, 0)"}],"source_content_type":"text/x-python","patch_set":24,"id":"1a95cdbc_69ba3ee3","line":317,"range":{"start_line":317,"start_character":0,"end_line":317,"end_character":29},"updated":"2016-10-05 15:10:36.000000000","message":"That\u0027s the version which fixed https://bugs.launchpad.net/qemu/+bug/1599214","commit_id":"ad3fab1d91545dc144c28c3882cae6df4f410ccb"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2b8bd803ba81b3691629b71649a0b49d1040a726","unresolved":false,"context_lines":[{"line_number":2625,"context_line":"        else:"},{"line_number":2626,"context_line":"            return \u0027\u0027"},{"line_number":2627,"context_line":""},{"line_number":2628,"context_line":"    def _get_console_output_file(self, instance):"},{"line_number":2629,"context_line":"        console_log \u003d self._get_console_log_path(instance)"},{"line_number":2630,"context_line":"        if not os.path.exists(console_log):"},{"line_number":2631,"context_line":"            return \u0027\u0027"},{"line_number":2632,"context_line":""},{"line_number":2633,"context_line":"        bytes_to_read \u003d MAX_CONSOLE_BYTES"},{"line_number":2634,"context_line":"        log_data \u003d \"\"  # The last N read bytes"},{"line_number":2635,"context_line":"        i \u003d 0  # in case there is a log rotation (like \"virtlogd\")"},{"line_number":2636,"context_line":"        path \u003d console_log"},{"line_number":2637,"context_line":"        while bytes_to_read \u003e 0 and os.path.exists(path):"},{"line_number":2638,"context_line":"            libvirt_utils.chown(path, os.getuid())"},{"line_number":2639,"context_line":"            with libvirt_utils.file_open(path, \u0027rb\u0027) as fp:"},{"line_number":2640,"context_line":"                read_log_data, _ \u003d utils.last_bytes(fp, bytes_to_read)"},{"line_number":2641,"context_line":"                # We need the log file content in chronological order,"},{"line_number":2642,"context_line":"                # that\u0027s why we *prepend* the log data."},{"line_number":2643,"context_line":"                log_data \u003d read_log_data + log_data"},{"line_number":2644,"context_line":"                bytes_to_read -\u003d len(read_log_data)"},{"line_number":2645,"context_line":"                path \u003d console_log + \".\" + str(i)"},{"line_number":2646,"context_line":"                i +\u003d 1"},{"line_number":2647,"context_line":"        return log_data"},{"line_number":2648,"context_line":""},{"line_number":2649,"context_line":"    def _get_console_output_pty(self, instance):"},{"line_number":2650,"context_line":"        guest \u003d self._host.get_guest(instance)"}],"source_content_type":"text/x-python","patch_set":24,"id":"fa6399be_539ff702","line":2647,"range":{"start_line":2628,"start_character":4,"end_line":2647,"end_character":23},"updated":"2016-10-11 15:29:34.000000000","message":"If you wanted to keep this change smaller, you could break this out into a dependent separate change to handle log rotation. Before adding virtlogd support it would functionally be the same since console.log.0 or whatever wouldn\u0027t exist. Just a suggestion.","commit_id":"ad3fab1d91545dc144c28c3882cae6df4f410ccb"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"3566f3734ede378cbc3301968d4b6aca39dcf56f","unresolved":false,"context_lines":[{"line_number":2625,"context_line":"        else:"},{"line_number":2626,"context_line":"            return \u0027\u0027"},{"line_number":2627,"context_line":""},{"line_number":2628,"context_line":"    def _get_console_output_file(self, instance):"},{"line_number":2629,"context_line":"        console_log \u003d self._get_console_log_path(instance)"},{"line_number":2630,"context_line":"        if not os.path.exists(console_log):"},{"line_number":2631,"context_line":"            return \u0027\u0027"},{"line_number":2632,"context_line":""},{"line_number":2633,"context_line":"        bytes_to_read \u003d MAX_CONSOLE_BYTES"},{"line_number":2634,"context_line":"        log_data \u003d \"\"  # The last N read bytes"},{"line_number":2635,"context_line":"        i \u003d 0  # in case there is a log rotation (like \"virtlogd\")"},{"line_number":2636,"context_line":"        path \u003d console_log"},{"line_number":2637,"context_line":"        while bytes_to_read \u003e 0 and os.path.exists(path):"},{"line_number":2638,"context_line":"            libvirt_utils.chown(path, os.getuid())"},{"line_number":2639,"context_line":"            with libvirt_utils.file_open(path, \u0027rb\u0027) as fp:"},{"line_number":2640,"context_line":"                read_log_data, _ \u003d utils.last_bytes(fp, bytes_to_read)"},{"line_number":2641,"context_line":"                # We need the log file content in chronological order,"},{"line_number":2642,"context_line":"                # that\u0027s why we *prepend* the log data."},{"line_number":2643,"context_line":"                log_data \u003d read_log_data + log_data"},{"line_number":2644,"context_line":"                bytes_to_read -\u003d len(read_log_data)"},{"line_number":2645,"context_line":"                path \u003d console_log + \".\" + str(i)"},{"line_number":2646,"context_line":"                i +\u003d 1"},{"line_number":2647,"context_line":"        return log_data"},{"line_number":2648,"context_line":""},{"line_number":2649,"context_line":"    def _get_console_output_pty(self, instance):"},{"line_number":2650,"context_line":"        guest \u003d self._host.get_guest(instance)"}],"source_content_type":"text/x-python","patch_set":24,"id":"fa6399be_31319b0c","line":2647,"range":{"start_line":2628,"start_character":4,"end_line":2647,"end_character":23},"in_reply_to":"fa6399be_539ff702","updated":"2016-10-11 17:05:29.000000000","message":"Done. Reading log-rotated files is split out into change Ica2c91ad309df8e66433fe0c7fe2b799a23c0096.","commit_id":"ad3fab1d91545dc144c28c3882cae6df4f410ccb"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"83d053c9d2b19871c0adc9aba2710e14d6b49374","unresolved":false,"context_lines":[{"line_number":4012,"context_line":"            raise exception.SerialPortNumberLimitExceeded("},{"line_number":4013,"context_line":"                allowed\u003dALLOWED_QEMU_SERIAL_PORTS, virt_type\u003dvirt_type)"},{"line_number":4014,"context_line":""},{"line_number":4015,"context_line":"    def _create_serial_console_devices(self, guest, instance, flavor,"},{"line_number":4016,"context_line":"                                       image_meta):"},{"line_number":4017,"context_line":"        guest_arch \u003d libvirt_utils.get_arch(image_meta)"},{"line_number":4018,"context_line":"        serial_devices \u003d []"}],"source_content_type":"text/x-python","patch_set":24,"id":"fa6399be_33360304","line":4015,"range":{"start_line":4015,"start_character":45,"end_line":4015,"end_character":50},"updated":"2016-10-11 15:36:47.000000000","message":"This parameter is no longer used here. You could also probably split this into a separate change if you wanted.","commit_id":"ad3fab1d91545dc144c28c3882cae6df4f410ccb"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2b8bd803ba81b3691629b71649a0b49d1040a726","unresolved":false,"context_lines":[{"line_number":4298,"context_line":""},{"line_number":4299,"context_line":"        # NOTE: The \"virtlogd\" feature is able to replace the log file device"},{"line_number":4300,"context_line":"        # for the boot messages of the guest. \"virtlogd\" does a better job"},{"line_number":4301,"context_line":"        # at log file rotation and prevents a floodding of the host."},{"line_number":4302,"context_line":"        # That\u0027s the reason why we replace the \"older\" log file device here."},{"line_number":4303,"context_line":"        if (virt_type in (\"qemu\", \"kvm\") and"},{"line_number":4304,"context_line":"            self._host.has_min_version(MIN_LIBVIRT_VIRTLOGD,"}],"source_content_type":"text/x-python","patch_set":24,"id":"fa6399be_d3fce740","line":4301,"range":{"start_line":4301,"start_character":46,"end_line":4301,"end_character":55},"updated":"2016-10-11 15:29:34.000000000","message":"flooding","commit_id":"ad3fab1d91545dc144c28c3882cae6df4f410ccb"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"7a866d1c9a735a1c0d557920fcaca2f91fcde343","unresolved":false,"context_lines":[{"line_number":4309,"context_line":"                                dev.type !\u003d \"pty\"]"},{"line_number":4310,"context_line":"            log \u003d vconfig.LibvirtConfigGuestCharDeviceLog()"},{"line_number":4311,"context_line":"            log.file \u003d self._get_console_log_path(instance)"},{"line_number":4312,"context_line":"            char_devices[0].log \u003d log"},{"line_number":4313,"context_line":""},{"line_number":4314,"context_line":"        guest.devices.extend(char_devices)"},{"line_number":4315,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"fa6399be_36b6fcdc","line":4312,"updated":"2016-10-11 12:18:47.000000000","message":"I really don\u0027t like the way this method constructs all the char devices, and then re-processes the char_devices array, throwing away what we already created and putting in new stuff instead.  It makes it incredibly hard to understand what the final configuration is for the guests.\n\nIt is even worse because half of the magic is hidden in the _create_serial_console_devices method.\n\n\nI would like to see the _create_consoles + _create_serial_console_devices first merged into one method, so we can clearly see the current logic. Then as another patch refactor the code to the new desired pattern.\n\nThe end result is that when virtlogd is available, we should have a single console device added to the guest, instead of two.","commit_id":"ad3fab1d91545dc144c28c3882cae6df4f410ccb"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"000ca9dfb05b080871bbe6e359b7687834c74b9c","unresolved":false,"context_lines":[{"line_number":4309,"context_line":"                                dev.type !\u003d \"pty\"]"},{"line_number":4310,"context_line":"            log \u003d vconfig.LibvirtConfigGuestCharDeviceLog()"},{"line_number":4311,"context_line":"            log.file \u003d self._get_console_log_path(instance)"},{"line_number":4312,"context_line":"            char_devices[0].log \u003d log"},{"line_number":4313,"context_line":""},{"line_number":4314,"context_line":"        guest.devices.extend(char_devices)"},{"line_number":4315,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"fa6399be_b014ccf5","line":4312,"in_reply_to":"fa6399be_36b6fcdc","updated":"2016-10-11 14:23:35.000000000","message":"@danpb: Okay, will do that for ps25. The pseudocode as I have it in mind right now is this:\n\n    def create_consoles(guest_cfg):\n        if host_supports_virtlogd():\n            guest_cfg.add_device(create_logd_device())\n        else:\n            if CONF.serial_console.enabled:\n                guest_cfg.add_devices(create_tcp_devices())\n            else:\n                guest_cfg.add_device(create_file_device())\n            guest_cfg.add_device(create_pty_device())","commit_id":"ad3fab1d91545dc144c28c3882cae6df4f410ccb"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"3566f3734ede378cbc3301968d4b6aca39dcf56f","unresolved":false,"context_lines":[{"line_number":4309,"context_line":"                                dev.type !\u003d \"pty\"]"},{"line_number":4310,"context_line":"            log \u003d vconfig.LibvirtConfigGuestCharDeviceLog()"},{"line_number":4311,"context_line":"            log.file \u003d self._get_console_log_path(instance)"},{"line_number":4312,"context_line":"            char_devices[0].log \u003d log"},{"line_number":4313,"context_line":""},{"line_number":4314,"context_line":"        guest.devices.extend(char_devices)"},{"line_number":4315,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"fa6399be_42d55b41","line":4312,"in_reply_to":"fa6399be_36b6fcdc","updated":"2016-10-11 17:05:29.000000000","message":"The merge of all \"console device creation\" logic is done in change I5436d51ab0528055cebdcec29f0feef10311cf83.","commit_id":"ad3fab1d91545dc144c28c3882cae6df4f410ccb"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"025e932296b94a3d94f682f3a3ee21efe049d755","unresolved":false,"context_lines":[{"line_number":4309,"context_line":"                                dev.type !\u003d \"pty\"]"},{"line_number":4310,"context_line":"            log \u003d vconfig.LibvirtConfigGuestCharDeviceLog()"},{"line_number":4311,"context_line":"            log.file \u003d self._get_console_log_path(instance)"},{"line_number":4312,"context_line":"            char_devices[0].log \u003d log"},{"line_number":4313,"context_line":""},{"line_number":4314,"context_line":"        guest.devices.extend(char_devices)"},{"line_number":4315,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"fa6399be_fd00dcac","line":4312,"in_reply_to":"fa6399be_9d13605c","updated":"2016-10-11 14:38:20.000000000","message":"@danpb: Yep, I think we\u0027re on the same page here. I\u0027ll push that asap.","commit_id":"ad3fab1d91545dc144c28c3882cae6df4f410ccb"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"8aa1052e58f5347d876af1afeab02c9e44b75202","unresolved":false,"context_lines":[{"line_number":4309,"context_line":"                                dev.type !\u003d \"pty\"]"},{"line_number":4310,"context_line":"            log \u003d vconfig.LibvirtConfigGuestCharDeviceLog()"},{"line_number":4311,"context_line":"            log.file \u003d self._get_console_log_path(instance)"},{"line_number":4312,"context_line":"            char_devices[0].log \u003d log"},{"line_number":4313,"context_line":""},{"line_number":4314,"context_line":"        guest.devices.extend(char_devices)"},{"line_number":4315,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"fa6399be_9d13605c","line":4312,"in_reply_to":"fa6399be_b014ccf5","updated":"2016-10-11 14:33:17.000000000","message":"You still need the if CONF.serial_console.enabled code block for the virtlogd codepath\n\nI think i\u0027d go for something more like\n\n  if CONF.serial_console.enabled:\n      ...add TCP based serial console ports...\n      if supports virtlogd\n          ...set logfile attribute on first port...\n  else:\n      ...add file based serial port...\n      if supports virtlogd\n          ...set logfile attribute on port...\n\n  if not supports virtlogd\n     ...add pty device...","commit_id":"ad3fab1d91545dc144c28c3882cae6df4f410ccb"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"859fde625e21600798f61c9b786211f0a37d92b8","unresolved":false,"context_lines":[{"line_number":4267,"context_line":"                else:"},{"line_number":4268,"context_line":"                    consolelog \u003d vconfig.LibvirtConfigGuestSerial()"},{"line_number":4269,"context_line":"                consolelog.type \u003d \"file\""},{"line_number":4270,"context_line":"                consolelog.source_path \u003d self._get_console_log_path(instance)"},{"line_number":4271,"context_line":"                guest.add_device(consolelog)"},{"line_number":4272,"context_line":"            if caps.host.cpu.arch in (arch.S390, arch.S390X):"},{"line_number":4273,"context_line":"                consolepty \u003d vconfig.LibvirtConfigGuestConsole()"}],"source_content_type":"text/x-python","patch_set":25,"id":"fa6399be_1d2d6c46","side":"PARENT","line":4270,"range":{"start_line":4270,"start_character":41,"end_line":4270,"end_character":77},"updated":"2016-10-12 09:53:16.000000000","message":"I moved that up as it makes testing a little easier.","commit_id":"62891546ca2d36120233ebc7369825f3abf2648a"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"859fde625e21600798f61c9b786211f0a37d92b8","unresolved":false,"context_lines":[{"line_number":4238,"context_line":"        else:"},{"line_number":4239,"context_line":"            guest.os_boot_dev \u003d blockinfo.get_boot_order(disk_info)"},{"line_number":4240,"context_line":""},{"line_number":4241,"context_line":"    def _create_consoles(self, virt_type, guest, log_path, flavor, image_meta,"},{"line_number":4242,"context_line":"                         caps):"},{"line_number":4243,"context_line":"        if virt_type in (\"qemu\", \"kvm\"):"},{"line_number":4244,"context_line":"            # Create the serial console char devices"}],"source_content_type":"text/x-python","patch_set":25,"id":"fa6399be_bd1c8014","line":4241,"range":{"start_line":4241,"start_character":49,"end_line":4241,"end_character":57},"updated":"2016-10-12 09:53:16.000000000","message":"(see left) I moved that out of this method to make tests easier.","commit_id":"8f34f6496d83700741d5e5ad1bc4edfd2e19399a"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"859fde625e21600798f61c9b786211f0a37d92b8","unresolved":false,"context_lines":[{"line_number":4298,"context_line":"            consolepty.type \u003d \"pty\""},{"line_number":4299,"context_line":"            if not (self._is_virtlogd_available() and"},{"line_number":4300,"context_line":"                            virt_type in (\"qemu\", \"kvm\")):"},{"line_number":4301,"context_line":"                guest.add_device(consolepty)"},{"line_number":4302,"context_line":""},{"line_number":4303,"context_line":"    def _cpu_config_to_vcpu_model(self, cpu_config, vcpu_model):"},{"line_number":4304,"context_line":"        \"\"\"Update VirtCPUModel object according to libvirt CPU config."}],"source_content_type":"text/x-python","patch_set":25,"id":"fa6399be_3dbeb0d4","line":4301,"updated":"2016-10-12 09:53:16.000000000","message":"libvirt-xen for example would still need this pty device.","commit_id":"8f34f6496d83700741d5e5ad1bc4edfd2e19399a"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"a2def89c026230a72afa83e6179951c8d09e99b0","unresolved":false,"context_lines":[{"line_number":4284,"context_line":"                    consolelog.target_type \u003d \"sclplm\""},{"line_number":4285,"context_line":"                else:"},{"line_number":4286,"context_line":"                    consolelog \u003d vconfig.LibvirtConfigGuestSerial()"},{"line_number":4287,"context_line":"                consolelog.type \u003d \"file\""},{"line_number":4288,"context_line":"                if self._is_virtlogd_available():"},{"line_number":4289,"context_line":"                    log \u003d vconfig.LibvirtConfigGuestCharDeviceLog()"},{"line_number":4290,"context_line":"                    log.file \u003d log_path"}],"source_content_type":"text/x-python","patch_set":26,"id":"fa6399be_4d72c47d","line":4287,"updated":"2016-10-19 10:35:48.000000000","message":"This console is setup to log to a file.","commit_id":"ceda0380de0a3a83739cc4c1784eb6569e465a35"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"a2def89c026230a72afa83e6179951c8d09e99b0","unresolved":false,"context_lines":[{"line_number":4288,"context_line":"                if self._is_virtlogd_available():"},{"line_number":4289,"context_line":"                    log \u003d vconfig.LibvirtConfigGuestCharDeviceLog()"},{"line_number":4290,"context_line":"                    log.file \u003d log_path"},{"line_number":4291,"context_line":"                    consolelog.log \u003d log"},{"line_number":4292,"context_line":"                else:"},{"line_number":4293,"context_line":"                    consolelog.source_path \u003d log_path"},{"line_number":4294,"context_line":"                guest.add_device(consolelog)"}],"source_content_type":"text/x-python","patch_set":26,"id":"fa6399be_6df4e8ce","line":4291,"updated":"2016-10-19 10:35:48.000000000","message":"You\u0027re now telling it to log to a second file. This doesn\u0027t make sense. You want to attach the log file to the \u0027consolepty\u0027 and skip \u0027consolelog\u0027 entirely","commit_id":"ceda0380de0a3a83739cc4c1784eb6569e465a35"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"62162e7dfd8cc08e77d8d742ee58f5ddc80a64ec","unresolved":false,"context_lines":[{"line_number":4288,"context_line":"                if self._is_virtlogd_available():"},{"line_number":4289,"context_line":"                    log \u003d vconfig.LibvirtConfigGuestCharDeviceLog()"},{"line_number":4290,"context_line":"                    log.file \u003d log_path"},{"line_number":4291,"context_line":"                    consolelog.log \u003d log"},{"line_number":4292,"context_line":"                else:"},{"line_number":4293,"context_line":"                    consolelog.source_path \u003d log_path"},{"line_number":4294,"context_line":"                guest.add_device(consolelog)"}],"source_content_type":"text/x-python","patch_set":26,"id":"fa6399be_10446372","line":4291,"in_reply_to":"fa6399be_6df4e8ce","updated":"2016-10-19 13:01:29.000000000","message":"yeah, you\u0027re right. Don\u0027t know what I thought here. ps27 will fix this.","commit_id":"ceda0380de0a3a83739cc4c1784eb6569e465a35"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"1230578df510bac9f9eb16bb934f48c357813b97","unresolved":false,"context_lines":[{"line_number":4296,"context_line":"            if self._is_virtlogd_available():"},{"line_number":4297,"context_line":"                log \u003d vconfig.LibvirtConfigGuestCharDeviceLog()"},{"line_number":4298,"context_line":"                log.file \u003d log_path"},{"line_number":4299,"context_line":"                consolepty.log \u003d log"},{"line_number":4300,"context_line":"        else:"},{"line_number":4301,"context_line":"            consolepty \u003d vconfig.LibvirtConfigGuestConsole()"},{"line_number":4302,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"ba5da102_461f7a5a","line":4299,"updated":"2016-11-03 14:43:00.000000000","message":"I still don\u0027t believe this logic is right yet. You\u0027re still creating an extra console with type\u003dpty, when  CONF.serial_console.enabled \u003d\u003d true, and adding a log file to it. So we\u0027re getting 2 consoles both with logfile pointing to the same path.","commit_id":"94a1776e230c8d6e09d1decf308b68de3a45a9c3"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"7b71e1ddeb836242e32edea5e5916b29b9461770","unresolved":false,"context_lines":[{"line_number":4296,"context_line":"            if self._is_virtlogd_available():"},{"line_number":4297,"context_line":"                log \u003d vconfig.LibvirtConfigGuestCharDeviceLog()"},{"line_number":4298,"context_line":"                log.file \u003d log_path"},{"line_number":4299,"context_line":"                consolepty.log \u003d log"},{"line_number":4300,"context_line":"        else:"},{"line_number":4301,"context_line":"            consolepty \u003d vconfig.LibvirtConfigGuestConsole()"},{"line_number":4302,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"9a629dbe_fd9d5f5a","line":4299,"in_reply_to":"ba5da102_461f7a5a","updated":"2016-11-07 09:45:17.000000000","message":"@danpb: It gets created but not added due to line 4305. I agree that the logic is messed up, there are too many conditionals. The cases and results as I understand them right now are like this:\n\ncase | is serial | has       | is qemu | resulting \n     | enabled?  | virtlogd? | or kvm? | devices\n--------------------------------------------------\n   1 |        no |        no |     no  | pty*\n   2 |        no |        no |     yes | file + pty\n   3 |        no |       yes |      no | see case 1\n   4 |        no |       yes |     yes | pty with logd\n   5 |       yes |        no |      no | see case 1\n   6 |       yes |        no |     yes | tcp\n   7 |       yes |       yes |      no | see case 1\n   8 |       yes |       yes |     yes | tcp with logd\n\n   * exception: virt_type \"parallels\" doesn\u0027t create a device\n\nIs that understanding correct? If you like, I can also add another change before introducing virtlogd which makes the current flow easier to understand.","commit_id":"94a1776e230c8d6e09d1decf308b68de3a45a9c3"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"76864217b7d10b8c130c0680e3fc5011463aa207","unresolved":false,"context_lines":[{"line_number":4372,"context_line":"                consolepty \u003d vconfig.LibvirtConfigGuestConsole()"},{"line_number":4373,"context_line":"                consolepty.target_type \u003d \"sclp\""},{"line_number":4374,"context_line":"            else:"},{"line_number":4375,"context_line":"                consolepty \u003d vconfig.LibvirtConfigGuestSerial()"},{"line_number":4376,"context_line":"            if (self._is_virtlogd_available() and"},{"line_number":4377,"context_line":"                    not CONF.serial_console.enabled):"},{"line_number":4378,"context_line":"                log \u003d vconfig.LibvirtConfigGuestCharDeviceLog()"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a629dbe_01675b4d","line":4375,"updated":"2016-11-10 15:54:47.000000000","message":"I still believe these 5 lines need to be indented one level further, and the guest.add_device moved to here.","commit_id":"04f4945976c5ea69e99006b2a6d70ac5078a230f"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"76864217b7d10b8c130c0680e3fc5011463aa207","unresolved":false,"context_lines":[{"line_number":4377,"context_line":"                    not CONF.serial_console.enabled):"},{"line_number":4378,"context_line":"                log \u003d vconfig.LibvirtConfigGuestCharDeviceLog()"},{"line_number":4379,"context_line":"                log.file \u003d log_path"},{"line_number":4380,"context_line":"                consolepty.log \u003d log"},{"line_number":4381,"context_line":"        else:"},{"line_number":4382,"context_line":"            consolepty \u003d vconfig.LibvirtConfigGuestConsole()"},{"line_number":4383,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"9a629dbe_6156575d","line":4380,"updated":"2016-11-10 15:54:47.000000000","message":"If these were indented one level further too, then you don\u0027t need the repeated check on CONF.serial_consoe.enabled.","commit_id":"04f4945976c5ea69e99006b2a6d70ac5078a230f"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"def5d8f26af28d005af5d63a0b21c3ac8a1af078","unresolved":false,"context_lines":[{"line_number":4377,"context_line":"                    not CONF.serial_console.enabled):"},{"line_number":4378,"context_line":"                log \u003d vconfig.LibvirtConfigGuestCharDeviceLog()"},{"line_number":4379,"context_line":"                log.file \u003d log_path"},{"line_number":4380,"context_line":"                consolepty.log \u003d log"},{"line_number":4381,"context_line":"        else:"},{"line_number":4382,"context_line":"            consolepty \u003d vconfig.LibvirtConfigGuestConsole()"},{"line_number":4383,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"9a629dbe_8acc49bc","line":4380,"in_reply_to":"9a629dbe_432793c9","updated":"2016-11-11 08:03:45.000000000","message":"@danpb: The current mutually exclusive relationship between tcp and file is an issue, I agree with that. I once tried to lift that, but that would have resulted in having 1 serial device more, which could hit the upper limit of 4 serial devices in a qemu/kvm guest after a rebuild is triggered. That would have been a breaking change.\nDo I understand you correctly that you suggest to alter this patch to have \"tcp + file\" instead of \"tcp + pty\" in case 6? That would benefit setups which don\u0027t yet have the hypervisor version for virtlogd, but would introduce an additional behavior change. I can also do that change in a follow up patch, whatever is easier to review for people (I tend to the latter approach).","commit_id":"04f4945976c5ea69e99006b2a6d70ac5078a230f"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"4406cf44e6e8bc2df57afed8befd645befd56bb5","unresolved":false,"context_lines":[{"line_number":4377,"context_line":"                    not CONF.serial_console.enabled):"},{"line_number":4378,"context_line":"                log \u003d vconfig.LibvirtConfigGuestCharDeviceLog()"},{"line_number":4379,"context_line":"                log.file \u003d log_path"},{"line_number":4380,"context_line":"                consolepty.log \u003d log"},{"line_number":4381,"context_line":"        else:"},{"line_number":4382,"context_line":"            consolepty \u003d vconfig.LibvirtConfigGuestConsole()"},{"line_number":4383,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"9a629dbe_c84bc085","line":4380,"in_reply_to":"9a629dbe_6156575d","updated":"2016-11-10 17:51:02.000000000","message":"@danpb: I tried your suggestions locally and 3 unit tests failed. Apparently this would break case 6 of the table above, which should state \"tcp + pty\" as resulting device. I think I\u0027d need your advice here if I should update the table above or do the change in behavior.","commit_id":"04f4945976c5ea69e99006b2a6d70ac5078a230f"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"5c463b1d46a7c24a01ed16f981628316f4931e8c","unresolved":false,"context_lines":[{"line_number":4377,"context_line":"                    not CONF.serial_console.enabled):"},{"line_number":4378,"context_line":"                log \u003d vconfig.LibvirtConfigGuestCharDeviceLog()"},{"line_number":4379,"context_line":"                log.file \u003d log_path"},{"line_number":4380,"context_line":"                consolepty.log \u003d log"},{"line_number":4381,"context_line":"        else:"},{"line_number":4382,"context_line":"            consolepty \u003d vconfig.LibvirtConfigGuestConsole()"},{"line_number":4383,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"9a629dbe_432793c9","line":4380,"in_reply_to":"9a629dbe_c84bc085","updated":"2016-11-10 18:19:54.000000000","message":"Case 6 should actually state  tcp + file, so I think that\u0027s actually broken even with this version here.","commit_id":"04f4945976c5ea69e99006b2a6d70ac5078a230f"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"66096a532f943efe75b5c9188e832afe9a083e6e","unresolved":false,"context_lines":[{"line_number":4359,"context_line":""},{"line_number":4360,"context_line":"    def _create_consoles(self, virt_type, guest, instance, flavor, image_meta,"},{"line_number":4361,"context_line":"                         caps):"},{"line_number":4362,"context_line":"        # NOTE(markus_z): Beware! Below are so many conditionals that it is"},{"line_number":4363,"context_line":"        # easy to lose track. Use this chart to figure out your case:"},{"line_number":4364,"context_line":"        #"},{"line_number":4365,"context_line":"        # case | is serial | has       | is qemu | resulting"}],"source_content_type":"text/x-python","patch_set":33,"id":"3a71b18c_5aac3835","line":4362,"updated":"2016-12-02 17:28:34.000000000","message":"ahahah :)","commit_id":"cea8035126a6768d33c6fc5c413dbd35ae4e0cf8"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"66096a532f943efe75b5c9188e832afe9a083e6e","unresolved":false,"context_lines":[{"line_number":4412,"context_line":"                    console.listen_port \u003d ("},{"line_number":4413,"context_line":"                        serial_console.acquire_port("},{"line_number":4414,"context_line":"                            console.listen_host))"},{"line_number":4415,"context_line":"                    if port \u003d\u003d 0 and self._is_virtlogd_available():"},{"line_number":4416,"context_line":"                        log \u003d vconfig.LibvirtConfigGuestCharDeviceLog()"},{"line_number":4417,"context_line":"                        log.file \u003d log_path"},{"line_number":4418,"context_line":"                        console.log \u003d log"}],"source_content_type":"text/x-python","patch_set":33,"id":"3a71b18c_00609200","line":4415,"updated":"2016-12-02 17:28:34.000000000","message":"Hum I\u0027m not sure to understand that point, so you attach the log file in the serial port 0, but which data are you going to get from this console ?","commit_id":"cea8035126a6768d33c6fc5c413dbd35ae4e0cf8"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"ee1cd00cbfaca52ece27c513473c3a3e00679095","unresolved":false,"context_lines":[{"line_number":4412,"context_line":"                    console.listen_port \u003d ("},{"line_number":4413,"context_line":"                        serial_console.acquire_port("},{"line_number":4414,"context_line":"                            console.listen_host))"},{"line_number":4415,"context_line":"                    if port \u003d\u003d 0 and self._is_virtlogd_available():"},{"line_number":4416,"context_line":"                        log \u003d vconfig.LibvirtConfigGuestCharDeviceLog()"},{"line_number":4417,"context_line":"                        log.file \u003d log_path"},{"line_number":4418,"context_line":"                        console.log \u003d log"}],"source_content_type":"text/x-python","patch_set":33,"id":"3a71b18c_5fc95525","line":4415,"in_reply_to":"3a71b18c_00609200","updated":"2016-12-05 11:52:24.000000000","message":"@sahid: The serial console on port 0 is the console which gets the boot log messages. If `num_ports` \u003e 1, then the serial consoles on port 1 and above won\u0027t get those boot messages. That why this line checks for the `port\u003d\u003d0`. Be aware that this is *not* the serial console port (default 10000-20000).","commit_id":"cea8035126a6768d33c6fc5c413dbd35ae4e0cf8"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"a65fab41c07b970c2a9e74c4539b2a7c19f5824b","unresolved":false,"context_lines":[{"line_number":4438,"context_line":"                consolepty.target_type \u003d \"sclp\""},{"line_number":4439,"context_line":"            else:"},{"line_number":4440,"context_line":"                consolepty \u003d vconfig.LibvirtConfigGuestSerial()"},{"line_number":4441,"context_line":"            if (self._is_virtlogd_available() and"},{"line_number":4442,"context_line":"                    not CONF.serial_console.enabled):"},{"line_number":4443,"context_line":"                log \u003d vconfig.LibvirtConfigGuestCharDeviceLog()"},{"line_number":4444,"context_line":"                log.file \u003d log_path"}],"source_content_type":"text/x-python","patch_set":33,"id":"3a71b18c_65968240","line":4441,"updated":"2016-12-05 12:38:40.000000000","message":"why isn\u0027t this the else: else: up a few lines?","commit_id":"cea8035126a6768d33c6fc5c413dbd35ae4e0cf8"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"5dc4558345cc568148db242b4b5a5d00d79d8bb5","unresolved":false,"context_lines":[{"line_number":4438,"context_line":"                consolepty.target_type \u003d \"sclp\""},{"line_number":4439,"context_line":"            else:"},{"line_number":4440,"context_line":"                consolepty \u003d vconfig.LibvirtConfigGuestSerial()"},{"line_number":4441,"context_line":"            if (self._is_virtlogd_available() and"},{"line_number":4442,"context_line":"                    not CONF.serial_console.enabled):"},{"line_number":4443,"context_line":"                log \u003d vconfig.LibvirtConfigGuestCharDeviceLog()"},{"line_number":4444,"context_line":"                log.file \u003d log_path"}],"source_content_type":"text/x-python","patch_set":33,"id":"3a71b18c_47c87574","line":4441,"in_reply_to":"3a71b18c_65968240","updated":"2016-12-06 12:33:28.000000000","message":"@Sean: Here\u0027s my counter-proposal, maybe that one is easier to review: https://review.openstack.org/#/c/407450/","commit_id":"cea8035126a6768d33c6fc5c413dbd35ae4e0cf8"}]}
