From 1f4ebff97f42d9e4b8cbe370ed45a50ce0b336a1 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Mar 24 2016 11:07:33 +0000 Subject: [PATCH 1/3] Attempt to fix the error `error: [Errno 24] Too many open files` We regularly run into the error `error: [Errno 24] Too many open files` with this commit we try to fix it by making sure we always close the connections. Let's see if it help --- diff --git a/ev-server/pagure-stream-server.py b/ev-server/pagure-stream-server.py index 4ff7304..29d2934 100644 --- a/ev-server/pagure-stream-server.py +++ b/ev-server/pagure-stream-server.py @@ -139,11 +139,12 @@ def handle_client(client_reader, client_writer): "Access-Control-Allow-Origin: %s\n\n" % origin ).encode()) + connection = yield trollius.From(trollius_redis.Connection.create( + host=pagure.APP.config['REDIS_HOST'], + port=pagure.APP.config['REDIS_PORT'], + db=pagure.APP.config['REDIS_DB'])) + try: - connection = yield trollius.From(trollius_redis.Connection.create( - host=pagure.APP.config['REDIS_HOST'], - port=pagure.APP.config['REDIS_PORT'], - db=pagure.APP.config['REDIS_DB'])) # Create subscriber. subscriber = yield trollius.From(connection.start_subscribe()) @@ -160,8 +161,12 @@ def handle_client(client_reader, client_writer): client_writer.write(('data: %s\n\n' % reply.value).encode()) yield trollius.From(client_writer.drain()) - except trollius.ConnectionResetError: - pass + except trollius.ConnectionResetError as err: + log.info("ERROR: ConnectionResetError %s", err) + log.exception(err) + except Exception as err: + log.info("ERROR: Exception %s", err) + log.exception(err) finally: # Wathever happens, close the connection. connection.close() From 0694552ce79bc9b93696bccc9204fd08d9a45af5 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Mar 24 2016 11:07:33 +0000 Subject: [PATCH 2/3] Improve logging the exceptions and closing the server at the end --- diff --git a/ev-server/pagure-stream-server.py b/ev-server/pagure-stream-server.py index 29d2934..65e212a 100644 --- a/ev-server/pagure-stream-server.py +++ b/ev-server/pagure-stream-server.py @@ -162,10 +162,10 @@ def handle_client(client_reader, client_writer): yield trollius.From(client_writer.drain()) except trollius.ConnectionResetError as err: - log.info("ERROR: ConnectionResetError %s", err) + log.info("ERROR: ConnectionResetError - handle_client: %s", err) log.exception(err) except Exception as err: - log.info("ERROR: Exception %s", err) + log.info("ERROR: Exception - handle_client: %s", err) log.exception(err) finally: # Wathever happens, close the connection. @@ -217,17 +217,21 @@ def main(): loop.run_forever() except KeyboardInterrupt: pass - except trollius.ConnectionResetError: - pass - - # Close the server - SERVER.close() - if pagure.APP.config.get('EV_STATS_PORT'): - stats_server.close() - log.info("End Connection") - loop.run_until_complete(SERVER.wait_closed()) - loop.close() - log.info("End") + except trollius.ConnectionResetError as err: + log.info("ERROR: ConnectionResetError - main: %s", err) + log.exception(err) + except Exception as err: + log.info("ERROR: Exception - main: %s", err) + log.exception(err) + finally: + # Close the server + SERVER.close() + if pagure.APP.config.get('EV_STATS_PORT'): + stats_server.close() + log.info("End Connection") + loop.run_until_complete(SERVER.wait_closed()) + loop.close() + log.info("End") if __name__ == '__main__': From e89a199fb958bef8531de58c789447a77e46eb34 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Mar 24 2016 22:41:01 +0000 Subject: [PATCH 3/3] Simplify our logging on the @ralph's advice --- diff --git a/ev-server/pagure-stream-server.py b/ev-server/pagure-stream-server.py index 65e212a..746de60 100644 --- a/ev-server/pagure-stream-server.py +++ b/ev-server/pagure-stream-server.py @@ -162,11 +162,9 @@ def handle_client(client_reader, client_writer): yield trollius.From(client_writer.drain()) except trollius.ConnectionResetError as err: - log.info("ERROR: ConnectionResetError - handle_client: %s", err) - log.exception(err) + log.exception("ERROR: ConnectionResetError in handle_client") except Exception as err: - log.info("ERROR: Exception - handle_client: %s", err) - log.exception(err) + log.exception("ERROR: Exception in handle_client") finally: # Wathever happens, close the connection. connection.close() @@ -218,11 +216,9 @@ def main(): except KeyboardInterrupt: pass except trollius.ConnectionResetError as err: - log.info("ERROR: ConnectionResetError - main: %s", err) - log.exception(err) + log.exception("ERROR: ConnectionResetError in main") except Exception as err: - log.info("ERROR: Exception - main: %s", err) - log.exception(err) + log.exception("ERROR: Exception in main") finally: # Close the server SERVER.close()