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
1diff --git a/httpserver.tac b/httpserver.tac
2index 8530c1a..cf1d876 100644
3--- a/httpserver.tac
4+++ b/httpserver.tac
5@@ -12,7 +12,7 @@ from twisted.application import (
6 from twisted.scripts.twistd import ServerOptions
7 from twisted.web import server
8
9-from turnip.config import TurnipConfig
10+from turnip.config import config
11 from turnip.log import RotatableFileLogObserver
12 from turnip.pack.http import SmartHTTPFrontendResource
13
14@@ -20,7 +20,6 @@ from turnip.pack.http import SmartHTTPFrontendResource
15 def getSmartHTTPService():
16 """Return a SmartHTTP frontend service."""
17
18- config = TurnipConfig()
19 smarthttp_site = server.Site(SmartHTTPFrontendResource(config))
20 return internet.TCPServer(
21 int(config.get('smart_http_port')), smarthttp_site)
22diff --git a/packbackendserver.tac b/packbackendserver.tac
23index 10602eb..191ac16 100644
24--- a/packbackendserver.tac
25+++ b/packbackendserver.tac
26@@ -18,7 +18,7 @@ from twisted.application import (
27 )
28 from twisted.scripts.twistd import ServerOptions
29
30-from turnip.config import TurnipConfig
31+from turnip.config import config
32 from turnip.log import RotatableFileLogObserver
33 from turnip.pack.git import PackBackendFactory
34 from turnip.pack.hookrpc import (
35@@ -30,7 +30,6 @@ from turnip.pack.hookrpc import (
36 def getPackBackendServices():
37 """Return PackBackendFactory and HookRPC services."""
38
39- config = TurnipConfig()
40 repo_store = config.get('repo_store')
41 pack_backend_port = int(config.get('pack_backend_port'))
42 hookrpc_handler = HookRPCHandler(
43diff --git a/packfrontendserver.tac b/packfrontendserver.tac
44index 20cbb57..1070914 100644
45--- a/packfrontendserver.tac
46+++ b/packfrontendserver.tac
47@@ -16,7 +16,7 @@ from twisted.application import (
48 )
49 from twisted.scripts.twistd import ServerOptions
50
51-from turnip.config import TurnipConfig
52+from turnip.config import config
53 from turnip.log import RotatableFileLogObserver
54 from turnip.pack.git import PackFrontendFactory
55
56@@ -24,7 +24,6 @@ from turnip.pack.git import PackFrontendFactory
57 def getPackFrontendService():
58 """Return a PackFrontend Service."""
59
60- config = TurnipConfig()
61 return internet.TCPServer(
62 int(config.get('pack_frontend_port')),
63 PackFrontendFactory(config.get('pack_virt_host'),
64diff --git a/sshserver.tac b/sshserver.tac
65index 037e60a..aaf8220 100644
66--- a/sshserver.tac
67+++ b/sshserver.tac
68@@ -15,14 +15,13 @@ import os
69 from twisted.application import service
70 from twisted.scripts.twistd import ServerOptions
71
72-from turnip.config import TurnipConfig
73+from turnip.config import config
74 from turnip.log import RotatableFileLogObserver
75 from turnip.pack.ssh import SmartSSHService
76
77
78 def getSmartSSHService():
79
80- config = TurnipConfig()
81 log_path = config.get('turnip_log_dir')
82
83 return SmartSSHService(
84diff --git a/turnip/api/views.py b/turnip/api/views.py
85index 79ff8d5..adede04 100644
86--- a/turnip/api/views.py
87+++ b/turnip/api/views.py
88@@ -10,7 +10,7 @@ from cornice.util import extract_json_data
89 from pygit2 import GitError
90 import pyramid.httpexceptions as exc
91
92-from turnip.config import TurnipConfig
93+from turnip.config import config
94 from turnip.api import store
95
96
97@@ -36,7 +36,6 @@ def validate_path(func):
98
99 class BaseAPI(object):
100 def __init__(self):
101- config = TurnipConfig()
102 self.repo_store = config.get('repo_store')
103
104
105diff --git a/turnip/config.py b/turnip/config.py
106index 2db61bc..f57b790 100644
107--- a/turnip/config.py
108+++ b/turnip/config.py
109@@ -7,15 +7,23 @@ import os
110
111 import yaml
112
113+__all__ = [
114+ 'config',
115+ ]
116+
117
118 class TurnipConfig(object):
119 """Return configuration from environment or defaults."""
120
121 def __init__(self):
122 """Load default configuration from config.yaml"""
123- config_file = open(os.path.join(
124- os.path.dirname(os.path.dirname(__file__)), 'config.yaml'))
125- self.defaults = yaml.load(config_file)
126+ config_file_path = os.path.join(
127+ os.path.dirname(os.path.dirname(__file__)), 'config.yaml')
128+ with open(config_file_path) as config_file:
129+ self.defaults = yaml.safe_load(config_file)
130
131 def get(self, key):
132 return os.getenv(key.upper()) or self.defaults.get(key.lower()) or ''
133+
134+
135+config = TurnipConfig()
136diff --git a/turnipserver.py b/turnipserver.py
137index 65967c3..8627392 100644
138--- a/turnipserver.py
139+++ b/turnipserver.py
140@@ -12,7 +12,7 @@ import os
141 from twisted.internet import reactor
142 from twisted.web import server
143
144-from turnip.config import TurnipConfig
145+from turnip.config import config
146 from turnip.pack.git import (
147 PackBackendFactory,
148 PackFrontendFactory,
149@@ -27,7 +27,6 @@ from turnip.pack.ssh import SmartSSHService
150
151 data_dir = os.path.join(
152 os.path.dirname(__file__), "turnip", "pack", "tests", "data")
153-config = TurnipConfig()
154
155 LOG_PATH = config.get('turnip_log_dir')
156 PACK_VIRT_HOST = config.get('pack_virt_host')
157diff --git a/virtserver.tac b/virtserver.tac
158index a25d1e5..e6654cd 100644
159--- a/virtserver.tac
160+++ b/virtserver.tac
161@@ -13,7 +13,7 @@ from twisted.application import (
162 )
163 from twisted.scripts.twistd import ServerOptions
164
165-from turnip.config import TurnipConfig
166+from turnip.config import config
167 from turnip.log import RotatableFileLogObserver
168 from turnip.pack.git import PackVirtFactory
169
170@@ -21,7 +21,6 @@ from turnip.pack.git import PackVirtFactory
171 def getPackVirtService():
172 """Return a PackVirt Service."""
173
174- config = TurnipConfig()
175 return internet.TCPServer(
176 int(config.get('pack_virt_port')),
177 PackVirtFactory(config.get('pack_backend_host'),

Subscribers

People subscribed via source and target branches