OLD | NEW |
1 # Copyright 2013 The Chromium Authors. All rights reserved. | 1 # Copyright 2013 The Chromium Authors. All rights reserved. |
2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
4 | 4 |
5 import logging | 5 import logging |
6 import posixpath | 6 import posixpath |
7 import traceback | 7 import traceback |
8 | 8 |
9 from app_yaml_helper import AppYamlHelper | 9 from app_yaml_helper import AppYamlHelper |
10 from appengine_wrappers import IsDeadlineExceededError, logservice | 10 from appengine_wrappers import IsDeadlineExceededError, logservice |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
89 self._delegate = delegate_for_test or CronServlet.Delegate() | 89 self._delegate = delegate_for_test or CronServlet.Delegate() |
90 | 90 |
91 class Delegate(object): | 91 class Delegate(object): |
92 '''CronServlet's runtime dependencies. Override for testing. | 92 '''CronServlet's runtime dependencies. Override for testing. |
93 ''' | 93 ''' |
94 def CreateBranchUtility(self, object_store_creator): | 94 def CreateBranchUtility(self, object_store_creator): |
95 return BranchUtility.Create(object_store_creator) | 95 return BranchUtility.Create(object_store_creator) |
96 | 96 |
97 def CreateHostFileSystemProvider(self, | 97 def CreateHostFileSystemProvider(self, |
98 object_store_creator, | 98 object_store_creator, |
99 max_trunk_revision=None): | 99 pinned_commit=None): |
100 return HostFileSystemProvider(object_store_creator, | 100 return HostFileSystemProvider(object_store_creator, pinned_commit) |
101 max_trunk_revision=max_trunk_revision) | |
102 | 101 |
103 def CreateGithubFileSystemProvider(self, object_store_creator): | 102 def CreateGithubFileSystemProvider(self, object_store_creator): |
104 return GithubFileSystemProvider(object_store_creator) | 103 return GithubFileSystemProvider(object_store_creator) |
105 | 104 |
106 def CreateGCSFileSystemProvider(self, object_store_creator): | 105 def CreateGCSFileSystemProvider(self, object_store_creator): |
107 return CloudStorageFileSystemProvider(object_store_creator) | 106 return CloudStorageFileSystemProvider(object_store_creator) |
108 | 107 |
109 def GetAppVersion(self): | 108 def GetAppVersion(self): |
110 return GetAppVersion() | 109 return GetAppVersion() |
111 | 110 |
(...skipping 21 matching lines...) Expand all Loading... |
133 # little wasteful, but hopefully rendering is really fast (if it isn't we | 132 # little wasteful, but hopefully rendering is really fast (if it isn't we |
134 # have a problem). | 133 # have a problem). |
135 _cronlog.info('starting') | 134 _cronlog.info('starting') |
136 | 135 |
137 # This is returned every time RenderServlet wants to create a new | 136 # This is returned every time RenderServlet wants to create a new |
138 # ServerInstance. | 137 # ServerInstance. |
139 # | 138 # |
140 # TODO(kalman): IMPORTANT. This sometimes throws an exception, breaking | 139 # TODO(kalman): IMPORTANT. This sometimes throws an exception, breaking |
141 # everything. Need retry logic at the fetcher level. | 140 # everything. Need retry logic at the fetcher level. |
142 server_instance = self._GetSafeServerInstance() | 141 server_instance = self._GetSafeServerInstance() |
143 trunk_fs = server_instance.host_file_system_provider.GetTrunk() | 142 trunk_fs = server_instance.host_file_system_provider.GetMaster() |
144 | 143 |
145 def render(path): | 144 def render(path): |
146 request = Request(path, self._request.host, self._request.headers) | 145 request = Request(path, self._request.host, self._request.headers) |
147 delegate = _SingletonRenderServletDelegate(server_instance) | 146 delegate = _SingletonRenderServletDelegate(server_instance) |
148 return RenderServlet(request, delegate).Get() | 147 return RenderServlet(request, delegate).Get() |
149 | 148 |
150 def request_files_in_dir(path, prefix='', strip_ext=None): | 149 def request_files_in_dir(path, prefix='', strip_ext=None): |
151 '''Requests every file found under |path| in this host file system, with | 150 '''Requests every file found under |path| in this host file system, with |
152 a request prefix of |prefix|. |strip_ext| is an optional list of file | 151 a request prefix of |prefix|. |strip_ext| is an optional list of file |
153 extensions that should be stripped from paths before requesting. | 152 extensions that should be stripped from paths before requesting. |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
255 return server_instance_near_head | 254 return server_instance_near_head |
256 | 255 |
257 # The version in app.yaml is greater than the currently running app's. | 256 # The version in app.yaml is greater than the currently running app's. |
258 # The safe version is the one before it changed. | 257 # The safe version is the one before it changed. |
259 safe_revision = app_yaml_handler.GetFirstRevisionGreaterThan( | 258 safe_revision = app_yaml_handler.GetFirstRevisionGreaterThan( |
260 delegate.GetAppVersion()) - 1 | 259 delegate.GetAppVersion()) - 1 |
261 | 260 |
262 _cronlog.info('app version %s is out of date, safe is %s', | 261 _cronlog.info('app version %s is out of date, safe is %s', |
263 delegate.GetAppVersion(), safe_revision) | 262 delegate.GetAppVersion(), safe_revision) |
264 | 263 |
| 264 # XXX(rockot): wat do? |
265 return self._CreateServerInstance(safe_revision) | 265 return self._CreateServerInstance(safe_revision) |
266 | 266 |
267 def _GetMostRecentRevision(self): | 267 def _GetMostRecentRevision(self): |
268 '''Gets the revision of the most recent patch submitted to the host file | 268 '''Gets the revision of the most recent patch submitted to the host file |
269 system. This is similar to HEAD but it's a concrete revision so won't | 269 system. This is similar to HEAD but it's a concrete revision so won't |
270 change as the cron runs. | 270 change as the cron runs. |
271 ''' | 271 ''' |
272 head_fs = ( | 272 head_fs = ( |
273 self._CreateServerInstance(None).host_file_system_provider.GetTrunk()) | 273 self._CreateServerInstance(None).host_file_system_provider.GetMaster()) |
274 return head_fs.Stat('').version | 274 return head_fs.GetCommitID().Get() |
275 | 275 |
276 def _CreateServerInstance(self, revision): | 276 def _CreateServerInstance(self, commit): |
277 '''Creates a ServerInstance pinned to |revision|, or HEAD if None. | 277 '''Creates a ServerInstance pinned to |commit|, or HEAD if None. |
278 NOTE: If passed None it's likely that during the cron run patches will be | 278 NOTE: If passed None it's likely that during the cron run patches will be |
279 submitted at HEAD, which may change data underneath the cron run. | 279 submitted at HEAD, which may change data underneath the cron run. |
280 ''' | 280 ''' |
281 object_store_creator = ObjectStoreCreator(start_empty=True) | 281 object_store_creator = ObjectStoreCreator(start_empty=True) |
282 branch_utility = self._delegate.CreateBranchUtility(object_store_creator) | 282 branch_utility = self._delegate.CreateBranchUtility(object_store_creator) |
283 host_file_system_provider = self._delegate.CreateHostFileSystemProvider( | 283 host_file_system_provider = self._delegate.CreateHostFileSystemProvider( |
284 object_store_creator, max_trunk_revision=revision) | 284 object_store_creator, pinned_commit=commit) |
285 github_file_system_provider = self._delegate.CreateGithubFileSystemProvider( | 285 github_file_system_provider = self._delegate.CreateGithubFileSystemProvider( |
286 object_store_creator) | 286 object_store_creator) |
287 gcs_file_system_provider = self._delegate.CreateGCSFileSystemProvider( | 287 gcs_file_system_provider = self._delegate.CreateGCSFileSystemProvider( |
288 object_store_creator) | 288 object_store_creator) |
289 return ServerInstance(object_store_creator, | 289 return ServerInstance(object_store_creator, |
290 CompiledFileSystem.Factory(object_store_creator), | 290 CompiledFileSystem.Factory(object_store_creator), |
291 branch_utility, | 291 branch_utility, |
292 host_file_system_provider, | 292 host_file_system_provider, |
293 github_file_system_provider, | 293 github_file_system_provider, |
294 gcs_file_system_provider) | 294 gcs_file_system_provider) |
OLD | NEW |