Show More
@@ -28,7 +28,7 b' from rhodecode.config import utils' | |||
|
28 | 28 | |
|
29 | 29 | from rhodecode.lib.utils import load_rcextensions |
|
30 | 30 | from rhodecode.lib.utils2 import str2bool |
|
31 |
from rhodecode.lib.vcs import connect_vcs |
|
|
31 | from rhodecode.lib.vcs import connect_vcs | |
|
32 | 32 | |
|
33 | 33 | log = logging.getLogger(__name__) |
|
34 | 34 | |
@@ -69,15 +69,6 b' def load_pyramid_environment(global_conf' | |||
|
69 | 69 | # initialize vcs client and optionally run the server if enabled |
|
70 | 70 | vcs_server_uri = settings['vcs.server'] |
|
71 | 71 | vcs_server_enabled = settings['vcs.server.enable'] |
|
72 | start_server = ( | |
|
73 | settings['vcs.start_server'] and | |
|
74 | not int(os.environ.get('RC_VCSSERVER_TEST_DISABLE', '0'))) | |
|
75 | ||
|
76 | if vcs_server_enabled and start_server: | |
|
77 | log.info("Starting vcsserver") | |
|
78 | start_vcs_server(server_and_port=vcs_server_uri, | |
|
79 | protocol=utils.get_vcs_server_protocol(settings), | |
|
80 | log_level=settings['vcs.server.log_level']) | |
|
81 | 72 | |
|
82 | 73 | utils.configure_vcs(settings) |
|
83 | 74 |
@@ -111,63 +111,6 b' def connect_vcs(server_and_port, protoco' | |||
|
111 | 111 | raise Exception('Invalid vcs server protocol "{}"'.format(protocol)) |
|
112 | 112 | |
|
113 | 113 | |
|
114 | # TODO: johbo: This function should be moved into our test suite, there is | |
|
115 | # no reason to support starting the vcsserver in Enterprise itself. | |
|
116 | def start_vcs_server(server_and_port, protocol, log_level=None): | |
|
117 | """ | |
|
118 | Starts the vcs server in a subprocess. | |
|
119 | """ | |
|
120 | log.info('Starting VCSServer as a sub process with %s protocol', protocol) | |
|
121 | if protocol == 'http': | |
|
122 | return _start_http_vcs_server(server_and_port, log_level) | |
|
123 | else: | |
|
124 | raise Exception('Invalid vcs server protocol "{}"'.format(protocol)) | |
|
125 | ||
|
126 | ||
|
127 | def _start_http_vcs_server(server_and_port, log_level=None): | |
|
128 | # TODO: mikhail: shutdown if an http server already runs | |
|
129 | ||
|
130 | host, port = server_and_port.rsplit(":", 1) | |
|
131 | args = [ | |
|
132 | 'pserve', 'rhodecode/tests/vcsserver_http.ini', | |
|
133 | 'http_port=%s' % (port, ), 'http_host=%s' % (host, )] | |
|
134 | proc = subprocess32.Popen(args) | |
|
135 | ||
|
136 | def cleanup_server_process(): | |
|
137 | proc.kill() | |
|
138 | atexit.register(cleanup_server_process) | |
|
139 | ||
|
140 | server = create_vcsserver_proxy(server_and_port, protocol='http') | |
|
141 | _wait_until_vcs_server_is_reachable(server) | |
|
142 | ||
|
143 | ||
|
144 | def _wait_until_vcs_server_is_reachable(server, timeout=40): | |
|
145 | begin = time.time() | |
|
146 | while (time.time() - begin) < timeout: | |
|
147 | try: | |
|
148 | server.ping() | |
|
149 | return | |
|
150 | except (VCSCommunicationError, pycurl.error): | |
|
151 | log.debug('VCSServer not started yet, retry to connect.') | |
|
152 | time.sleep(0.5) | |
|
153 | raise Exception( | |
|
154 | 'Starting the VCSServer failed or took more than {} ' | |
|
155 | 'seconds.'.format(timeout)) | |
|
156 | ||
|
157 | ||
|
158 | def _try_to_shutdown_running_server(server_and_port, protocol): | |
|
159 | server = create_vcsserver_proxy(server_and_port, protocol) | |
|
160 | try: | |
|
161 | server.shutdown() | |
|
162 | except pycurl.error: | |
|
163 | return | |
|
164 | ||
|
165 | # TODO: Not sure why this is important, but without it the following start | |
|
166 | # of the server fails. | |
|
167 | server = create_vcsserver_proxy(server_and_port, protocol) | |
|
168 | server.ping() | |
|
169 | ||
|
170 | ||
|
171 | 114 | def create_vcsserver_proxy(server_and_port, protocol): |
|
172 | 115 | if protocol == 'http': |
|
173 | 116 | return _create_vcsserver_proxy_http(server_and_port) |
General Comments 0
You need to be logged in to leave comments.
Login now