diff --git a/deluge/core/alertmanager.py b/deluge/core/alertmanager.py index 1e3c7007d..303f3af8e 100644 --- a/deluge/core/alertmanager.py +++ b/deluge/core/alertmanager.py @@ -1,42 +1,17 @@ -# -# alertmanager.py +# -*- coding: utf-8 -*- # # Copyright (C) 2007-2009 Andrew Resch # -# Deluge is free software. -# -# You may redistribute it and/or modify it under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 3 of the License, or (at your option) -# any later version. -# -# deluge is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with deluge. If not, write to: -# The Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor -# Boston, MA 02110-1301, USA. -# -# In addition, as a special exception, the copyright holders give -# permission to link the code of portions of this program with the OpenSSL -# library. -# You must obey the GNU General Public License in all respects for all of -# the code used other than OpenSSL. If you modify file(s) with this -# exception, you may extend this exception to your version of the file(s), -# but you are not obligated to do so. If you do not wish to do so, delete -# this exception statement from your version. If you delete this exception -# statement from all source files in the program, then also delete it here. +# This file is part of Deluge and is licensed under GNU General Public License 3.0, or later, with +# the additional special exception to link portions of this program with the OpenSSL library. +# See LICENSE for more details. # """ The AlertManager handles all the libtorrent alerts. -This should typically only be used by the Core. Plugins should utilize the +This should typically only be used by the Core. Plugins should utilize the `:mod:EventManager` for similar functionality. """ @@ -53,10 +28,14 @@ log = logging.getLogger(__name__) class AlertManager(component.Component): def __init__(self): - log.debug("AlertManager initialized..") + log.debug("AlertManager init...") component.Component.__init__(self, "AlertManager", interval=0.3) self.session = component.get("Core").session + # Increase the alert queue size so that alerts don't get lost. + self.alert_queue_size = 10000 + self.set_alert_queue_size(self.alert_queue_size) + self.session.set_alert_mask( lt.alert.category_t.error_notification | lt.alert.category_t.port_mapping_notification | @@ -120,6 +99,15 @@ class AlertManager(component.Component): away and waited to return before processing the next alert """ alerts = self.session.pop_alerts() + if not alerts: + return + + num_alerts = len(alerts) + if log.isEnabledFor(logging.DEBUG): + log.debug("Alerts queued: %s", num_alerts) + if num_alerts > 0.9 * self.alert_queue_size: + log.warning("Warning total alerts queued, %s, passes 90%% of queue size.", num_alerts) + # Loop through all alerts in the queue for alert in alerts: alert_type = type(alert).__name__ @@ -133,3 +121,10 @@ class AlertManager(component.Component): self.delayed_calls.append(reactor.callLater(0, handler, alert)) else: handler(alert) + + def set_alert_queue_size(self, queue_size): + log.info("Alert Queue Size set to %s", queue_size) + self.alert_queue_size = queue_size + settings = self.session.get_settings() + settings["alert_queue_size"] = self.alert_queue_size + self.session.set_settings(settings) diff --git a/deluge/core/core.py b/deluge/core/core.py index 7c2a71ff9..c8e0c9a79 100644 --- a/deluge/core/core.py +++ b/deluge/core/core.py @@ -88,25 +88,17 @@ class Core(component.Component): # Load the session state if available self.__load_session_state() - ## Set Session settings ## + ## Set session settings ## settings = self.session.get_settings() - - # User agent settings["user_agent"] = "Deluge/%(deluge_version)s libtorrent/%(lt_version)s" % { 'deluge_version': deluge.common.get_version(), 'lt_version': self.get_libtorrent_version().rpartition(".")[0] } - - # Increase the alert queue size so that alerts don't get lost. - settings["alert_queue_size"] = 10000 - # On Windows OS set the disk I/O read/write to bypass OS cache if deluge.common.windows_check(): settings["disk_io_write_mode"] = lt.io_buffer_mode_t.disable_os_cache settings["disk_io_read_mode"] = lt.io_buffer_mode_t.disable_os_cache - self.session.set_settings(settings) - ## End Set Session settings ## ## libtorrent plugins ## # Allows peers to download the metadata from the swarm directly