Merge ~pappacena/turnip:fix-fd-leak into turnip:master

Proposed by Thiago F. Pappacena
Status: Merged
Approved by: Colin Watson
Approved revision: b931681c40b4ce78e1eab1d52efc48c1bbe444a6
Merge reported by: Otto Co-Pilot
Merged at revision: not available
Proposed branch: ~pappacena/turnip:fix-fd-leak
Merge into: turnip:master
Diff against target: 177 lines (+18/-17)
8 files modified
httpserver.tac (+1/-2)
packbackendserver.tac (+1/-2)
packfrontendserver.tac (+1/-2)
sshserver.tac (+1/-2)
turnip/api/views.py (+1/-2)
turnip/config.py (+11/-3)
turnipserver.py (+1/-2)
virtserver.tac (+1/-2)
Reviewer Review Type Date Requested Status
Colin Watson (community) Approve
Review via email: mp+379645@code.launchpad.net

Commit message

Explicitly closing config file descriptor when reading configuration.

This causes "ResourceWarning: unclosed file" messages on python3 (but it's a silent problem on python 2). Since we have a bug about too many open file descriptors, this might help to fix that. See https://bugs.launchpad.net/turnip/+bug/1683546 .

To post a comment you must log in.
Revision history for this message
Colin Watson (cjwatson) :
review: Approve
~pappacena/turnip:fix-fd-leak updated
569dcdd... by Thiago F. Pappacena

Using safe_load to read config.yml

5bf5124... by Thiago F. Pappacena

making TurnipConfig a singleton

Revision history for this message
Thiago F. Pappacena (pappacena) wrote :

cjwatson, making TurnipConfig a singleton.

~pappacena/turnip:fix-fd-leak updated
b931681... by Thiago F. Pappacena

replacing TurnipConfig usages by it's singleton

Revision history for this message
Colin Watson (cjwatson) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
diff --git a/httpserver.tac b/httpserver.tac
index 8530c1a..cf1d876 100644
--- a/httpserver.tac
+++ b/httpserver.tac
@@ -12,7 +12,7 @@ from twisted.application import (
12from twisted.scripts.twistd import ServerOptions12from twisted.scripts.twistd import ServerOptions
13from twisted.web import server13from twisted.web import server
1414
15from turnip.config import TurnipConfig15from turnip.config import config
16from turnip.log import RotatableFileLogObserver16from turnip.log import RotatableFileLogObserver
17from turnip.pack.http import SmartHTTPFrontendResource17from turnip.pack.http import SmartHTTPFrontendResource
1818
@@ -20,7 +20,6 @@ from turnip.pack.http import SmartHTTPFrontendResource
20def getSmartHTTPService():20def getSmartHTTPService():
21 """Return a SmartHTTP frontend service."""21 """Return a SmartHTTP frontend service."""
2222
23 config = TurnipConfig()
24 smarthttp_site = server.Site(SmartHTTPFrontendResource(config))23 smarthttp_site = server.Site(SmartHTTPFrontendResource(config))
25 return internet.TCPServer(24 return internet.TCPServer(
26 int(config.get('smart_http_port')), smarthttp_site)25 int(config.get('smart_http_port')), smarthttp_site)
diff --git a/packbackendserver.tac b/packbackendserver.tac
index 10602eb..191ac16 100644
--- a/packbackendserver.tac
+++ b/packbackendserver.tac
@@ -18,7 +18,7 @@ from twisted.application import (
18 )18 )
19from twisted.scripts.twistd import ServerOptions19from twisted.scripts.twistd import ServerOptions
2020
21from turnip.config import TurnipConfig21from turnip.config import config
22from turnip.log import RotatableFileLogObserver22from turnip.log import RotatableFileLogObserver
23from turnip.pack.git import PackBackendFactory23from turnip.pack.git import PackBackendFactory
24from turnip.pack.hookrpc import (24from turnip.pack.hookrpc import (
@@ -30,7 +30,6 @@ from turnip.pack.hookrpc import (
30def getPackBackendServices():30def getPackBackendServices():
31 """Return PackBackendFactory and HookRPC services."""31 """Return PackBackendFactory and HookRPC services."""
3232
33 config = TurnipConfig()
34 repo_store = config.get('repo_store')33 repo_store = config.get('repo_store')
35 pack_backend_port = int(config.get('pack_backend_port'))34 pack_backend_port = int(config.get('pack_backend_port'))
36 hookrpc_handler = HookRPCHandler(35 hookrpc_handler = HookRPCHandler(
diff --git a/packfrontendserver.tac b/packfrontendserver.tac
index 20cbb57..1070914 100644
--- a/packfrontendserver.tac
+++ b/packfrontendserver.tac
@@ -16,7 +16,7 @@ from twisted.application import (
16 )16 )
17from twisted.scripts.twistd import ServerOptions17from twisted.scripts.twistd import ServerOptions
1818
19from turnip.config import TurnipConfig19from turnip.config import config
20from turnip.log import RotatableFileLogObserver20from turnip.log import RotatableFileLogObserver
21from turnip.pack.git import PackFrontendFactory21from turnip.pack.git import PackFrontendFactory
2222
@@ -24,7 +24,6 @@ from turnip.pack.git import PackFrontendFactory
24def getPackFrontendService():24def getPackFrontendService():
25 """Return a PackFrontend Service."""25 """Return a PackFrontend Service."""
2626
27 config = TurnipConfig()
28 return internet.TCPServer(27 return internet.TCPServer(
29 int(config.get('pack_frontend_port')),28 int(config.get('pack_frontend_port')),
30 PackFrontendFactory(config.get('pack_virt_host'),29 PackFrontendFactory(config.get('pack_virt_host'),
diff --git a/sshserver.tac b/sshserver.tac
index 037e60a..aaf8220 100644
--- a/sshserver.tac
+++ b/sshserver.tac
@@ -15,14 +15,13 @@ import os
15from twisted.application import service15from twisted.application import service
16from twisted.scripts.twistd import ServerOptions16from twisted.scripts.twistd import ServerOptions
1717
18from turnip.config import TurnipConfig18from turnip.config import config
19from turnip.log import RotatableFileLogObserver19from turnip.log import RotatableFileLogObserver
20from turnip.pack.ssh import SmartSSHService20from turnip.pack.ssh import SmartSSHService
2121
2222
23def getSmartSSHService():23def getSmartSSHService():
2424
25 config = TurnipConfig()
26 log_path = config.get('turnip_log_dir')25 log_path = config.get('turnip_log_dir')
2726
28 return SmartSSHService(27 return SmartSSHService(
diff --git a/turnip/api/views.py b/turnip/api/views.py
index 79ff8d5..adede04 100644
--- a/turnip/api/views.py
+++ b/turnip/api/views.py
@@ -10,7 +10,7 @@ from cornice.util import extract_json_data
10from pygit2 import GitError10from pygit2 import GitError
11import pyramid.httpexceptions as exc11import pyramid.httpexceptions as exc
1212
13from turnip.config import TurnipConfig13from turnip.config import config
14from turnip.api import store14from turnip.api import store
1515
1616
@@ -36,7 +36,6 @@ def validate_path(func):
3636
37class BaseAPI(object):37class BaseAPI(object):
38 def __init__(self):38 def __init__(self):
39 config = TurnipConfig()
40 self.repo_store = config.get('repo_store')39 self.repo_store = config.get('repo_store')
4140
4241
diff --git a/turnip/config.py b/turnip/config.py
index 2db61bc..f57b790 100644
--- a/turnip/config.py
+++ b/turnip/config.py
@@ -7,15 +7,23 @@ import os
77
8import yaml8import yaml
99
10__all__ = [
11 'config',
12 ]
13
1014
11class TurnipConfig(object):15class TurnipConfig(object):
12 """Return configuration from environment or defaults."""16 """Return configuration from environment or defaults."""
1317
14 def __init__(self):18 def __init__(self):
15 """Load default configuration from config.yaml"""19 """Load default configuration from config.yaml"""
16 config_file = open(os.path.join(20 config_file_path = os.path.join(
17 os.path.dirname(os.path.dirname(__file__)), 'config.yaml'))21 os.path.dirname(os.path.dirname(__file__)), 'config.yaml')
18 self.defaults = yaml.load(config_file)22 with open(config_file_path) as config_file:
23 self.defaults = yaml.safe_load(config_file)
1924
20 def get(self, key):25 def get(self, key):
21 return os.getenv(key.upper()) or self.defaults.get(key.lower()) or ''26 return os.getenv(key.upper()) or self.defaults.get(key.lower()) or ''
27
28
29config = TurnipConfig()
diff --git a/turnipserver.py b/turnipserver.py
index 65967c3..8627392 100644
--- a/turnipserver.py
+++ b/turnipserver.py
@@ -12,7 +12,7 @@ import os
12from twisted.internet import reactor12from twisted.internet import reactor
13from twisted.web import server13from twisted.web import server
1414
15from turnip.config import TurnipConfig15from turnip.config import config
16from turnip.pack.git import (16from turnip.pack.git import (
17 PackBackendFactory,17 PackBackendFactory,
18 PackFrontendFactory,18 PackFrontendFactory,
@@ -27,7 +27,6 @@ from turnip.pack.ssh import SmartSSHService
2727
28data_dir = os.path.join(28data_dir = os.path.join(
29 os.path.dirname(__file__), "turnip", "pack", "tests", "data")29 os.path.dirname(__file__), "turnip", "pack", "tests", "data")
30config = TurnipConfig()
3130
32LOG_PATH = config.get('turnip_log_dir')31LOG_PATH = config.get('turnip_log_dir')
33PACK_VIRT_HOST = config.get('pack_virt_host')32PACK_VIRT_HOST = config.get('pack_virt_host')
diff --git a/virtserver.tac b/virtserver.tac
index a25d1e5..e6654cd 100644
--- a/virtserver.tac
+++ b/virtserver.tac
@@ -13,7 +13,7 @@ from twisted.application import (
13 )13 )
14from twisted.scripts.twistd import ServerOptions14from twisted.scripts.twistd import ServerOptions
1515
16from turnip.config import TurnipConfig16from turnip.config import config
17from turnip.log import RotatableFileLogObserver17from turnip.log import RotatableFileLogObserver
18from turnip.pack.git import PackVirtFactory18from turnip.pack.git import PackVirtFactory
1919
@@ -21,7 +21,6 @@ from turnip.pack.git import PackVirtFactory
21def getPackVirtService():21def getPackVirtService():
22 """Return a PackVirt Service."""22 """Return a PackVirt Service."""
2323
24 config = TurnipConfig()
25 return internet.TCPServer(24 return internet.TCPServer(
26 int(config.get('pack_virt_port')),25 int(config.get('pack_virt_port')),
27 PackVirtFactory(config.get('pack_backend_host'),26 PackVirtFactory(config.get('pack_backend_host'),

Subscribers

People subscribed via source and target branches