)]}'
{"gear/__init__.py":[{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"8ab638be87b68b17eaaa51ba08798f1e5968b736","unresolved":false,"context_lines":[{"line_number":2761,"context_line":"    :arg int tcp_keepintvl: Interval in seconds between TCP keepalives"},{"line_number":2762,"context_line":"    :arg int tcp_keepcnt: Count of TCP keepalives to send before disconnect"},{"line_number":2763,"context_line":"    :arg bool use_epoll: If epoll should be used (needs to be also supported"},{"line_number":2764,"context_line":"        by the OS)"},{"line_number":2765,"context_line":"    \"\"\""},{"line_number":2766,"context_line":""},{"line_number":2767,"context_line":"    def __init__(self, port\u003d4730, ssl_key\u003dNone, ssl_cert\u003dNone, ssl_ca\u003dNone,"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_e84c6b9f","line":2764,"updated":"2019-10-09 15:10:04.000000000","message":"Can we make selection automatic?","commit_id":"cc0978db66e37e3d5f16396d5279fbf5c97567a4"},{"author":{"_account_id":30637,"name":"Jan Kubovy","email":"jan.kubovy@bmw.de","username":"kubovy"},"change_message_id":"355ebdf116562842943027e856e9eb88866b569b","unresolved":false,"context_lines":[{"line_number":2761,"context_line":"    :arg int tcp_keepintvl: Interval in seconds between TCP keepalives"},{"line_number":2762,"context_line":"    :arg int tcp_keepcnt: Count of TCP keepalives to send before disconnect"},{"line_number":2763,"context_line":"    :arg bool use_epoll: If epoll should be used (needs to be also supported"},{"line_number":2764,"context_line":"        by the OS)"},{"line_number":2765,"context_line":"    \"\"\""},{"line_number":2766,"context_line":""},{"line_number":2767,"context_line":"    def __init__(self, port\u003d4730, ssl_key\u003dNone, ssl_cert\u003dNone, ssl_ca\u003dNone,"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_106d57cb","line":2764,"in_reply_to":"3fa7e38b_e84c6b9f","updated":"2019-10-11 04:39:14.000000000","message":"Yes, it is automatic. Only for testing on systems with epoll support we are want to execute tests with and without epoll (full coverage). On systems without epoll those tests will be skipped (see TestFunctional). We have an additional check to turn epoll off in case we want to use it (use_epoll\u003dTrue) but it is not available (see line 2716).","commit_id":"cc0978db66e37e3d5f16396d5279fbf5c97567a4"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"8ab638be87b68b17eaaa51ba08798f1e5968b736","unresolved":false,"context_lines":[{"line_number":2838,"context_line":"        self.poller.register(self.wake_read, self.poller.POLL_IN"},{"line_number":2839,"context_line":"                             | self.poller.POLL_ERR"},{"line_number":2840,"context_line":"                             | self.poller.POLL_HUP"},{"line_number":2841,"context_line":"                             | self.poller.POLL_EDGE)"},{"line_number":2842,"context_line":""},{"line_number":2843,"context_line":"        if server_id:"},{"line_number":2844,"context_line":"            self.log \u003d logging.getLogger(\"gear.Server.%s\" % (self.client_id,))"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_0852273c","line":2841,"updated":"2019-10-09 15:10:04.000000000","message":"Can we put \u0027read_bitmask\u0027 on the poller and keep that convenience?","commit_id":"cc0978db66e37e3d5f16396d5279fbf5c97567a4"},{"author":{"_account_id":30637,"name":"Jan Kubovy","email":"jan.kubovy@bmw.de","username":"kubovy"},"change_message_id":"355ebdf116562842943027e856e9eb88866b569b","unresolved":false,"context_lines":[{"line_number":2838,"context_line":"        self.poller.register(self.wake_read, self.poller.POLL_IN"},{"line_number":2839,"context_line":"                             | self.poller.POLL_ERR"},{"line_number":2840,"context_line":"                             | self.poller.POLL_HUP"},{"line_number":2841,"context_line":"                             | self.poller.POLL_EDGE)"},{"line_number":2842,"context_line":""},{"line_number":2843,"context_line":"        if server_id:"},{"line_number":2844,"context_line":"            self.log \u003d logging.getLogger(\"gear.Server.%s\" % (self.client_id,))"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_a6b9ad15","line":2841,"in_reply_to":"3fa7e38b_0852273c","updated":"2019-10-11 04:39:14.000000000","message":"What do you mean by that?","commit_id":"cc0978db66e37e3d5f16396d5279fbf5c97567a4"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"e9157208cca8f947ec6ed5727c54e85c9ee2e6c0","unresolved":false,"context_lines":[{"line_number":2838,"context_line":"        self.poller.register(self.wake_read, self.poller.POLL_IN"},{"line_number":2839,"context_line":"                             | self.poller.POLL_ERR"},{"line_number":2840,"context_line":"                             | self.poller.POLL_HUP"},{"line_number":2841,"context_line":"                             | self.poller.POLL_EDGE)"},{"line_number":2842,"context_line":""},{"line_number":2843,"context_line":"        if server_id:"},{"line_number":2844,"context_line":"            self.log \u003d logging.getLogger(\"gear.Server.%s\" % (self.client_id,))"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_f9af187a","line":2841,"in_reply_to":"3fa7e38b_a6b9ad15","updated":"2019-10-14 17:10:03.000000000","message":"I believe James means to keep using a variable that defines the bitmask we want rather than explicitly writing out the bitmask here. The old code did this via a defined read_bitmask value.","commit_id":"cc0978db66e37e3d5f16396d5279fbf5c97567a4"},{"author":{"_account_id":30637,"name":"Jan Kubovy","email":"jan.kubovy@bmw.de","username":"kubovy"},"change_message_id":"721dcb7eb0faf525c6d6ac0a3a9289640217a69f","unresolved":false,"context_lines":[{"line_number":2838,"context_line":"        self.poller.register(self.wake_read, self.poller.POLL_IN"},{"line_number":2839,"context_line":"                             | self.poller.POLL_ERR"},{"line_number":2840,"context_line":"                             | self.poller.POLL_HUP"},{"line_number":2841,"context_line":"                             | self.poller.POLL_EDGE)"},{"line_number":2842,"context_line":""},{"line_number":2843,"context_line":"        if server_id:"},{"line_number":2844,"context_line":"            self.log \u003d logging.getLogger(\"gear.Server.%s\" % (self.client_id,))"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_42974c46","line":2841,"in_reply_to":"3fa7e38b_f9af187a","updated":"2019-10-15 06:47:35.000000000","message":"Ah ok, got it :)","commit_id":"cc0978db66e37e3d5f16396d5279fbf5c97567a4"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"8ab638be87b68b17eaaa51ba08798f1e5968b736","unresolved":false,"context_lines":[{"line_number":2938,"context_line":"                self.readFromConnection(conn)"},{"line_number":2939,"context_line":"                self.writeToConnection(conn)"},{"line_number":2940,"context_line":"        except socket.error as e:"},{"line_number":2941,"context_line":"            self.log.exception(\u0027socket.error\u0027)"},{"line_number":2942,"context_line":"            if e.errno \u003d\u003d errno.ECONNRESET:"},{"line_number":2943,"context_line":"                self.log.debug(\"Connection reset by peer: %s\" % (conn,))"},{"line_number":2944,"context_line":"                self._lostConnection(conn)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_a842f366","line":2941,"updated":"2019-10-09 15:10:04.000000000","message":"This should be logged by doPollLoop after it\u0027s raised.","commit_id":"cc0978db66e37e3d5f16396d5279fbf5c97567a4"},{"author":{"_account_id":30637,"name":"Jan Kubovy","email":"jan.kubovy@bmw.de","username":"kubovy"},"change_message_id":"355ebdf116562842943027e856e9eb88866b569b","unresolved":false,"context_lines":[{"line_number":2938,"context_line":"                self.readFromConnection(conn)"},{"line_number":2939,"context_line":"                self.writeToConnection(conn)"},{"line_number":2940,"context_line":"        except socket.error as e:"},{"line_number":2941,"context_line":"            self.log.exception(\u0027socket.error\u0027)"},{"line_number":2942,"context_line":"            if e.errno \u003d\u003d errno.ECONNRESET:"},{"line_number":2943,"context_line":"                self.log.debug(\"Connection reset by peer: %s\" % (conn,))"},{"line_number":2944,"context_line":"                self._lostConnection(conn)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_66c2d55b","line":2941,"in_reply_to":"3fa7e38b_a842f366","updated":"2019-10-11 04:39:14.000000000","message":"Done","commit_id":"cc0978db66e37e3d5f16396d5279fbf5c97567a4"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"8ab638be87b68b17eaaa51ba08798f1e5968b736","unresolved":false,"context_lines":[{"line_number":2945,"context_line":"                return"},{"line_number":2946,"context_line":"            raise"},{"line_number":2947,"context_line":"        except DisconnectError:"},{"line_number":2948,"context_line":"            self.log.exception(\u0027DisconnectError\u0027)"},{"line_number":2949,"context_line":"            # Our inner method says we should quietly drop"},{"line_number":2950,"context_line":"            # this connection"},{"line_number":2951,"context_line":"            self._lostConnection(conn)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_c8472f77","line":2948,"updated":"2019-10-09 15:10:04.000000000","message":"This is an expected exception that we shouldn\u0027t log (but if you wanted to log it at debug level, that would be okay).","commit_id":"cc0978db66e37e3d5f16396d5279fbf5c97567a4"},{"author":{"_account_id":30637,"name":"Jan Kubovy","email":"jan.kubovy@bmw.de","username":"kubovy"},"change_message_id":"355ebdf116562842943027e856e9eb88866b569b","unresolved":false,"context_lines":[{"line_number":2945,"context_line":"                return"},{"line_number":2946,"context_line":"            raise"},{"line_number":2947,"context_line":"        except DisconnectError:"},{"line_number":2948,"context_line":"            self.log.exception(\u0027DisconnectError\u0027)"},{"line_number":2949,"context_line":"            # Our inner method says we should quietly drop"},{"line_number":2950,"context_line":"            # this connection"},{"line_number":2951,"context_line":"            self._lostConnection(conn)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_e667a5e8","line":2948,"in_reply_to":"3fa7e38b_c8472f77","updated":"2019-10-11 04:39:14.000000000","message":"Done","commit_id":"cc0978db66e37e3d5f16396d5279fbf5c97567a4"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"8ab638be87b68b17eaaa51ba08798f1e5968b736","unresolved":false,"context_lines":[{"line_number":2967,"context_line":"        # No need to get the lock since this is called within the poll"},{"line_number":2968,"context_line":"        # loop and therefore the list in guaranteed never to shrink."},{"line_number":2969,"context_line":"        connections \u003d self.active_connections[:]"},{"line_number":2970,"context_line":"        self.log.debug(\u0027Connections: %s\u0027, connections)"},{"line_number":2971,"context_line":"        for conn in connections:"},{"line_number":2972,"context_line":"            self._processPollEvent(conn, self.poller.POLL_IN"},{"line_number":2973,"context_line":"                                   | self.poller.POLL_OUT)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_68607b02","line":2970,"updated":"2019-10-09 15:10:04.000000000","message":"Is this log entry worth the overhead if we have 2k connections?","commit_id":"cc0978db66e37e3d5f16396d5279fbf5c97567a4"},{"author":{"_account_id":30637,"name":"Jan Kubovy","email":"jan.kubovy@bmw.de","username":"kubovy"},"change_message_id":"355ebdf116562842943027e856e9eb88866b569b","unresolved":false,"context_lines":[{"line_number":2967,"context_line":"        # No need to get the lock since this is called within the poll"},{"line_number":2968,"context_line":"        # loop and therefore the list in guaranteed never to shrink."},{"line_number":2969,"context_line":"        connections \u003d self.active_connections[:]"},{"line_number":2970,"context_line":"        self.log.debug(\u0027Connections: %s\u0027, connections)"},{"line_number":2971,"context_line":"        for conn in connections:"},{"line_number":2972,"context_line":"            self._processPollEvent(conn, self.poller.POLL_IN"},{"line_number":2973,"context_line":"                                   | self.poller.POLL_OUT)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_a65d2d16","line":2970,"in_reply_to":"3fa7e38b_68607b02","updated":"2019-10-11 04:39:14.000000000","message":"Done","commit_id":"cc0978db66e37e3d5f16396d5279fbf5c97567a4"}],"gear/tests/test_functional.py":[{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"8ab638be87b68b17eaaa51ba08798f1e5968b736","unresolved":false,"context_lines":[{"line_number":127,"context_line":"        for jobcount in range(2):"},{"line_number":128,"context_line":"            job \u003d gear.Job(b\u0027test\u0027, b\u0027testdata\u0027)"},{"line_number":129,"context_line":"            if not self.use_epoll:"},{"line_number":130,"context_line":"                _wait_for_connection(self.server)"},{"line_number":131,"context_line":"            self.client.submitJob(job)"},{"line_number":132,"context_line":"            self.assertNotEqual(job.handle, None)"},{"line_number":133,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_885db748","line":130,"updated":"2019-10-09 15:10:04.000000000","message":"Why do you call this only if using epoll?  I can\u0027t see that there should be any difference in this functionality.","commit_id":"cc0978db66e37e3d5f16396d5279fbf5c97567a4"},{"author":{"_account_id":30637,"name":"Jan Kubovy","email":"jan.kubovy@bmw.de","username":"kubovy"},"change_message_id":"355ebdf116562842943027e856e9eb88866b569b","unresolved":false,"context_lines":[{"line_number":127,"context_line":"        for jobcount in range(2):"},{"line_number":128,"context_line":"            job \u003d gear.Job(b\u0027test\u0027, b\u0027testdata\u0027)"},{"line_number":129,"context_line":"            if not self.use_epoll:"},{"line_number":130,"context_line":"                _wait_for_connection(self.server)"},{"line_number":131,"context_line":"            self.client.submitJob(job)"},{"line_number":132,"context_line":"            self.assertNotEqual(job.handle, None)"},{"line_number":133,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_12fa3074","line":130,"in_reply_to":"3fa7e38b_885db748","updated":"2019-10-11 04:39:14.000000000","message":"Done","commit_id":"cc0978db66e37e3d5f16396d5279fbf5c97567a4"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"8ab638be87b68b17eaaa51ba08798f1e5968b736","unresolved":false,"context_lines":[{"line_number":187,"context_line":"class TestFunctionalText(tests.BaseTestCase):"},{"line_number":188,"context_line":"    scenarios \u003d ["},{"line_number":189,"context_line":"        (\u0027with_epoll\u0027, dict(ssl\u003dFalse, use_epoll\u003dTrue)),"},{"line_number":190,"context_line":"        (\u0027without_epoll\u0027, dict(ssl\u003dTrue, use_epoll\u003dFalse)),"},{"line_number":191,"context_line":"    ]"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"    def setUp(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_2856032c","line":190,"updated":"2019-10-09 15:10:04.000000000","message":"Did you mean to change ssl between the two scenarios?","commit_id":"cc0978db66e37e3d5f16396d5279fbf5c97567a4"},{"author":{"_account_id":30637,"name":"Jan Kubovy","email":"jan.kubovy@bmw.de","username":"kubovy"},"change_message_id":"355ebdf116562842943027e856e9eb88866b569b","unresolved":false,"context_lines":[{"line_number":187,"context_line":"class TestFunctionalText(tests.BaseTestCase):"},{"line_number":188,"context_line":"    scenarios \u003d ["},{"line_number":189,"context_line":"        (\u0027with_epoll\u0027, dict(ssl\u003dFalse, use_epoll\u003dTrue)),"},{"line_number":190,"context_line":"        (\u0027without_epoll\u0027, dict(ssl\u003dTrue, use_epoll\u003dFalse)),"},{"line_number":191,"context_line":"    ]"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"    def setUp(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_26adbd9a","line":190,"in_reply_to":"3fa7e38b_2856032c","updated":"2019-10-11 04:39:14.000000000","message":"Done","commit_id":"cc0978db66e37e3d5f16396d5279fbf5c97567a4"}]}
