)]}'
{"zuul/ansible/base/callback/zuul_stream.py":[{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"2ff7c3eed9b61095b17a6c7d5a84b38ec5b4bb4a","unresolved":false,"context_lines":[{"line_number":268,"context_line":"                    # Don\u0027t try to stream from loops"},{"line_number":269,"context_line":"                    continue"},{"line_number":270,"context_line":"                if play_vars[host].get(\u0027ansible_connection\u0027) in (\u0027kubectl\u0027, ):"},{"line_number":271,"context_line":"                    # Don\u0027t try to stream from kubectl connection"},{"line_number":272,"context_line":"                    ip \u003d \u0027127.0.0.1\u0027"},{"line_number":273,"context_line":"                    port \u003d play_vars[host][\u0027zuul\u0027][\u0027resources\u0027]["},{"line_number":274,"context_line":"                        inventory_hostname][\u0027stream_port\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"1fa4df85_89c68b16","line":271,"updated":"2020-02-24 20:48:20.000000000","message":"Done.","commit_id":"b8dc4c4a6dd06557e3517f5dd7b5b69e6acd3647"},{"author":{"_account_id":9311,"name":"Tristan Cacqueray","email":"tdecacqu@redhat.com","username":"tristanC"},"change_message_id":"7b08e5187241c4c93e7b9e4e42cf59234a339688","unresolved":false,"context_lines":[{"line_number":268,"context_line":"                    # Don\u0027t try to stream from loops"},{"line_number":269,"context_line":"                    continue"},{"line_number":270,"context_line":"                if play_vars[host].get(\u0027ansible_connection\u0027) in (\u0027kubectl\u0027, ):"},{"line_number":271,"context_line":"                    # Don\u0027t try to stream from kubectl connection"},{"line_number":272,"context_line":"                    ip \u003d \u0027127.0.0.1\u0027"},{"line_number":273,"context_line":"                    port \u003d play_vars[host][\u0027zuul\u0027][\u0027resources\u0027]["},{"line_number":274,"context_line":"                        inventory_hostname][\u0027stream_port\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"1fa4df85_5b5939fc","line":271,"range":{"start_line":271,"start_character":20,"end_line":271,"end_character":65},"updated":"2020-02-24 18:21:32.000000000","message":"the comment could be updated too.","commit_id":"b8dc4c4a6dd06557e3517f5dd7b5b69e6acd3647"}],"zuul/executor/server.py":[{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"0dfe774d666cb247c2aea2639d842d04ae047362","unresolved":false,"context_lines":[{"line_number":318,"context_line":"        self.port \u003d None"},{"line_number":319,"context_line":"        self.fwd \u003d None"},{"line_number":320,"context_line":"        self.log \u003d get_annotated_logger("},{"line_number":321,"context_line":"            logging.getLogger(\"zuul.ExecutorServer\"),"},{"line_number":322,"context_line":"            zuul_event_id, build\u003dbuild)"},{"line_number":323,"context_line":"        self.kubeconfig \u003d kubeconfig"},{"line_number":324,"context_line":"        self.context \u003d context"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_b30b6621","line":321,"updated":"2020-02-22 00:26:11.000000000","message":"I think we should really only have one log line from this, and that\u0027s the last one (on line 356).  The others I meant to remove after getting the subprocess working.","commit_id":"ff8a9542e21c2ce88469734b3689b4213a007187"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"9d326bf7f791fb51e69ec317be78150827b3dad7","unresolved":false,"context_lines":[{"line_number":318,"context_line":"        self.port \u003d None"},{"line_number":319,"context_line":"        self.fwd \u003d None"},{"line_number":320,"context_line":"        self.log \u003d get_annotated_logger("},{"line_number":321,"context_line":"            logging.getLogger(\"zuul.ExecutorServer\"),"},{"line_number":322,"context_line":"            zuul_event_id, build\u003dbuild)"},{"line_number":323,"context_line":"        self.kubeconfig \u003d kubeconfig"},{"line_number":324,"context_line":"        self.context \u003d context"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_907420cf","line":321,"range":{"start_line":321,"start_character":36,"end_line":321,"end_character":50},"updated":"2020-02-22 00:20:59.000000000","message":"Nit, it would be good to have a KubeFwd specific logger. That way it is clear what the context of the log lines is.","commit_id":"ff8a9542e21c2ce88469734b3689b4213a007187"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"0dfe774d666cb247c2aea2639d842d04ae047362","unresolved":false,"context_lines":[{"line_number":328,"context_line":"    def start(self):"},{"line_number":329,"context_line":"        if self.fwd:"},{"line_number":330,"context_line":"            return"},{"line_number":331,"context_line":"        self.log.info(\"starting forward\")"},{"line_number":332,"context_line":"        with open(\u0027/dev/null\u0027, \u0027r+\u0027) as devnull:"},{"line_number":333,"context_line":"            fwd \u003d subprocess.Popen("},{"line_number":334,"context_line":"                [\u0027kubectl\u0027, \u0027--kubeconfig\u003d%s\u0027 % self.kubeconfig,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_d306221a","line":331,"updated":"2020-02-22 00:26:11.000000000","message":"This log line is poorly formatted, and is not necessary.","commit_id":"ff8a9542e21c2ce88469734b3689b4213a007187"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"0dfe774d666cb247c2aea2639d842d04ae047362","unresolved":false,"context_lines":[{"line_number":342,"context_line":"                 stderr\u003dsubprocess.STDOUT,"},{"line_number":343,"context_line":"                 stdin\u003ddevnull)"},{"line_number":344,"context_line":"        line \u003d fwd.stdout.readline().decode(\u0027utf8\u0027)"},{"line_number":345,"context_line":"        self.log.info(line)"},{"line_number":346,"context_line":"        m \u003d re.match(\u0027^Forwarding from 127.0.0.1:(\\d+) -\u003e 19885\u0027, line)"},{"line_number":347,"context_line":"        if m:"},{"line_number":348,"context_line":"            self.port \u003d m.group(1)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_7315ee3d","line":345,"updated":"2020-02-22 00:26:11.000000000","message":"This log line should be altered or removed.","commit_id":"ff8a9542e21c2ce88469734b3689b4213a007187"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"2ff7c3eed9b61095b17a6c7d5a84b38ec5b4bb4a","unresolved":false,"context_lines":[{"line_number":348,"context_line":"            self.port \u003d m.group(1)"},{"line_number":349,"context_line":"        else:"},{"line_number":350,"context_line":"            try:"},{"line_number":351,"context_line":"                self.fwd.kill()"},{"line_number":352,"context_line":"            except Exception:"},{"line_number":353,"context_line":"                pass"},{"line_number":354,"context_line":"            raise Exception(\"Unable to start kubectl port forward\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"1fa4df85_a9cb471c","line":351,"updated":"2020-02-24 20:48:20.000000000","message":"If self.fwd is None, then line 345 would have raised that exception.  That\u0027s fine.  When this method raises an exception, the job fails.  I think that\u0027s the correct response (the executor is broken).\n\nThe main point here is just to raise an exception in the case that we *did* run kubectl but we *did not* get a port.","commit_id":"b8dc4c4a6dd06557e3517f5dd7b5b69e6acd3647"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"d9653a95c922081266b9ba4e9a0d731ff01968b5","unresolved":false,"context_lines":[{"line_number":348,"context_line":"            self.port \u003d m.group(1)"},{"line_number":349,"context_line":"        else:"},{"line_number":350,"context_line":"            try:"},{"line_number":351,"context_line":"                self.fwd.kill()"},{"line_number":352,"context_line":"            except Exception:"},{"line_number":353,"context_line":"                pass"},{"line_number":354,"context_line":"            raise Exception(\"Unable to start kubectl port forward\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"1fa4df85_445b9a86","line":351,"updated":"2020-02-24 21:51:20.000000000","message":"Oooh.  Fixed.","commit_id":"b8dc4c4a6dd06557e3517f5dd7b5b69e6acd3647"},{"author":{"_account_id":9311,"name":"Tristan Cacqueray","email":"tdecacqu@redhat.com","username":"tristanC"},"change_message_id":"7b08e5187241c4c93e7b9e4e42cf59234a339688","unresolved":false,"context_lines":[{"line_number":348,"context_line":"            self.port \u003d m.group(1)"},{"line_number":349,"context_line":"        else:"},{"line_number":350,"context_line":"            try:"},{"line_number":351,"context_line":"                self.fwd.kill()"},{"line_number":352,"context_line":"            except Exception:"},{"line_number":353,"context_line":"                pass"},{"line_number":354,"context_line":"            raise Exception(\"Unable to start kubectl port forward\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"1fa4df85_9bd25134","line":351,"range":{"start_line":351,"start_character":16,"end_line":351,"end_character":21},"updated":"2020-02-24 18:21:32.000000000","message":"it seems like this will also raises an attribute error, None does not have a kill function.","commit_id":"b8dc4c4a6dd06557e3517f5dd7b5b69e6acd3647"},{"author":{"_account_id":9311,"name":"Tristan Cacqueray","email":"tdecacqu@redhat.com","username":"tristanC"},"change_message_id":"56bb7d7899edfeca7f5186c87e4cc475652c83bc","unresolved":false,"context_lines":[{"line_number":348,"context_line":"            self.port \u003d m.group(1)"},{"line_number":349,"context_line":"        else:"},{"line_number":350,"context_line":"            try:"},{"line_number":351,"context_line":"                self.fwd.kill()"},{"line_number":352,"context_line":"            except Exception:"},{"line_number":353,"context_line":"                pass"},{"line_number":354,"context_line":"            raise Exception(\"Unable to start kubectl port forward\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"1fa4df85_64b6d6dc","line":351,"in_reply_to":"1fa4df85_a9cb471c","updated":"2020-02-24 21:38:28.000000000","message":"I don\u0027t understand, L345 does not uses `self.fwd`.","commit_id":"b8dc4c4a6dd06557e3517f5dd7b5b69e6acd3647"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"2ff7c3eed9b61095b17a6c7d5a84b38ec5b4bb4a","unresolved":false,"context_lines":[{"line_number":360,"context_line":"        if self.fwd:"},{"line_number":361,"context_line":"            self.fwd.kill()"},{"line_number":362,"context_line":"            self.fwd.wait()"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":""},{"line_number":365,"context_line":"class JobDirPlaybook(object):"},{"line_number":366,"context_line":"    def __init__(self, root):"}],"source_content_type":"text/x-python","patch_set":2,"id":"1fa4df85_49d093ca","line":363,"updated":"2020-02-24 20:48:20.000000000","message":"This is modeled on SshAgent above, which does not have one.  Adding one would probably be an improvement to both, however, I think the code is solid enough that there is no code path that does not call stop().","commit_id":"b8dc4c4a6dd06557e3517f5dd7b5b69e6acd3647"},{"author":{"_account_id":9311,"name":"Tristan Cacqueray","email":"tdecacqu@redhat.com","username":"tristanC"},"change_message_id":"7b08e5187241c4c93e7b9e4e42cf59234a339688","unresolved":false,"context_lines":[{"line_number":360,"context_line":"        if self.fwd:"},{"line_number":361,"context_line":"            self.fwd.kill()"},{"line_number":362,"context_line":"            self.fwd.wait()"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":""},{"line_number":365,"context_line":"class JobDirPlaybook(object):"},{"line_number":366,"context_line":"    def __init__(self, root):"}],"source_content_type":"text/x-python","patch_set":2,"id":"1fa4df85_fb17c5ec","line":363,"updated":"2020-02-24 18:21:32.000000000","message":"not sure what happens if this get garbage collected, but shouldn\u0027t the object also implements a __del__ function?","commit_id":"b8dc4c4a6dd06557e3517f5dd7b5b69e6acd3647"},{"author":{"_account_id":3099,"name":"David Shrewsbury","email":"dshrewsb@redhat.com","username":"dshrews"},"change_message_id":"30aa4bd7c94446e10fcd89d45076421729563a3f","unresolved":false,"context_lines":[{"line_number":1951,"context_line":"                                  context\u003ddata[\u0027context_name\u0027],"},{"line_number":1952,"context_line":"                                  namespace\u003ddata[\u0027namespace\u0027],"},{"line_number":1953,"context_line":"                                  pod\u003ddata[\u0027pod\u0027])"},{"line_number":1954,"context_line":"                    fwd.start()"},{"line_number":1955,"context_line":"                    self.port_forwards.append(fwd)"},{"line_number":1956,"context_line":"                    all_vars[\u0027zuul\u0027][\u0027resources\u0027]["},{"line_number":1957,"context_line":"                        node[\u0027name\u0027][0]][\u0027stream_port\u0027] \u003d fwd.port"}],"source_content_type":"text/x-python","patch_set":5,"id":"1fa4df85_a124ae0e","line":1954,"range":{"start_line":1954,"start_character":20,"end_line":1954,"end_character":31},"updated":"2020-02-25 17:08:47.000000000","message":"If we\u0027re unable to successfully start the fwd and an exception is raised, do we want to totally bail out or try to continue? I ask because I\u0027m failing to see any exception handling for that case here or higher up the call stack, so I\u0027m guessing this would do the former.","commit_id":"b25a8f0c0849b5d4f565e12e48d17193012abb11"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"4c64bb0137a1176fd89d440c4e4a6598743f97e5","unresolved":false,"context_lines":[{"line_number":1951,"context_line":"                                  context\u003ddata[\u0027context_name\u0027],"},{"line_number":1952,"context_line":"                                  namespace\u003ddata[\u0027namespace\u0027],"},{"line_number":1953,"context_line":"                                  pod\u003ddata[\u0027pod\u0027])"},{"line_number":1954,"context_line":"                    fwd.start()"},{"line_number":1955,"context_line":"                    self.port_forwards.append(fwd)"},{"line_number":1956,"context_line":"                    all_vars[\u0027zuul\u0027][\u0027resources\u0027]["},{"line_number":1957,"context_line":"                        node[\u0027name\u0027][0]][\u0027stream_port\u0027] \u003d fwd.port"}],"source_content_type":"text/x-python","patch_set":5,"id":"1fa4df85_21675e50","line":1954,"updated":"2020-02-25 17:10:56.000000000","message":"Yes, it fails the job completely.  I think that\u0027s appropriate (I think I would consider the executor broken in that case).","commit_id":"b25a8f0c0849b5d4f565e12e48d17193012abb11"}]}
