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 from branch_utility import BranchUtility | 5 from branch_utility import BranchUtility |
6 from commit_tracker import CommitTracker | 6 from commit_tracker import CommitTracker |
7 from compiled_file_system import CompiledFileSystem | 7 from compiled_file_system import CompiledFileSystem |
8 from environment import IsDevServer, IsReleaseServer | 8 from environment import IsDevServer, IsReleaseServer |
9 from github_file_system_provider import GithubFileSystemProvider | |
10 from host_file_system_provider import HostFileSystemProvider | 9 from host_file_system_provider import HostFileSystemProvider |
11 from third_party.json_schema_compiler.memoize import memoize | 10 from third_party.json_schema_compiler.memoize import memoize |
12 from render_servlet import RenderServlet | 11 from render_servlet import RenderServlet |
13 from object_store_creator import ObjectStoreCreator | 12 from object_store_creator import ObjectStoreCreator |
14 from server_instance import ServerInstance | 13 from server_instance import ServerInstance |
15 from gcs_file_system_provider import CloudStorageFileSystemProvider | 14 from gcs_file_system_provider import CloudStorageFileSystemProvider |
16 | 15 |
17 | 16 |
17 _DEVSERVER_DATASTORE_FILE = 'SERVER_DATA' | |
Ken Rockot(use gerrit already)
2015/05/26 00:26:24
oops - removing this
| |
18 | |
19 | |
18 class InstanceServletRenderServletDelegate(RenderServlet.Delegate): | 20 class InstanceServletRenderServletDelegate(RenderServlet.Delegate): |
19 '''AppEngine instances should never need to call out to Gitiles. That should | 21 '''AppEngine instances should never need to call out to Gitiles. That should |
20 only ever be done by the cronjobs, which then write the result into | 22 only ever be done by the cronjobs, which then write the result into |
21 DataStore, which is as far as instances look. To enable this, crons can pass | 23 DataStore, which is as far as instances look. To enable this, crons can pass |
22 a custom (presumably online) ServerInstance into Get(). | 24 a custom (presumably online) ServerInstance into Get(). |
23 | 25 |
24 Why? Gitiles is slow and a bit flaky. Refresh jobs failing is annoying but | 26 Why? Gitiles is slow and a bit flaky. Refresh jobs failing is annoying but |
25 temporary. Instances failing affects users, and is really bad. | 27 temporary. Instances failing affects users, and is really bad. |
26 | 28 |
27 Anyway - to enforce this, we actually don't give instances access to | 29 Anyway - to enforce this, we actually don't give instances access to |
(...skipping 12 matching lines...) Expand all Loading... | |
40 commit_tracker = CommitTracker(object_store_creator) | 42 commit_tracker = CommitTracker(object_store_creator) |
41 # In production have offline=True so that we can catch cron errors. In | 43 # In production have offline=True so that we can catch cron errors. In |
42 # development it's annoying to have to run the cron job, so offline=False. | 44 # development it's annoying to have to run the cron job, so offline=False. |
43 # Note that offline=True if running on any appengine server due to | 45 # Note that offline=True if running on any appengine server due to |
44 # http://crbug.com/345361. | 46 # http://crbug.com/345361. |
45 host_file_system_provider = self._delegate.CreateHostFileSystemProvider( | 47 host_file_system_provider = self._delegate.CreateHostFileSystemProvider( |
46 object_store_creator, | 48 object_store_creator, |
47 offline=not (IsDevServer() or IsReleaseServer()), | 49 offline=not (IsDevServer() or IsReleaseServer()), |
48 pinned_commit=commit_tracker.Get('master').Get(), | 50 pinned_commit=commit_tracker.Get('master').Get(), |
49 cache_only=True) | 51 cache_only=True) |
50 github_file_system_provider = self._delegate.CreateGithubFileSystemProvider( | |
51 object_store_creator) | |
52 return ServerInstance(object_store_creator, | 52 return ServerInstance(object_store_creator, |
53 CompiledFileSystem.Factory(object_store_creator), | 53 CompiledFileSystem.Factory(object_store_creator), |
54 branch_utility, | 54 branch_utility, |
55 host_file_system_provider, | 55 host_file_system_provider, |
56 github_file_system_provider, | |
57 CloudStorageFileSystemProvider(object_store_creator)) | 56 CloudStorageFileSystemProvider(object_store_creator)) |
58 | 57 |
59 class InstanceServlet(object): | 58 class InstanceServlet(object): |
60 '''Servlet for running on normal AppEngine instances. | 59 '''Servlet for running on normal AppEngine instances. |
61 Create this via GetConstructor() so that cache state can be shared amongst | 60 Create this via GetConstructor() so that cache state can be shared amongst |
62 them via the memoizing Delegate. | 61 them via the memoizing Delegate. |
63 ''' | 62 ''' |
64 class Delegate(object): | 63 class Delegate(object): |
65 '''Allow runtime dependencies to be overriden for testing. | 64 '''Allow runtime dependencies to be overriden for testing. |
66 ''' | 65 ''' |
67 def CreateBranchUtility(self, object_store_creator): | 66 def CreateBranchUtility(self, object_store_creator): |
68 return BranchUtility.Create(object_store_creator) | 67 return BranchUtility.Create(object_store_creator) |
69 | 68 |
70 def CreateHostFileSystemProvider(self, object_store_creator, **optargs): | 69 def CreateHostFileSystemProvider(self, object_store_creator, **optargs): |
71 return HostFileSystemProvider(object_store_creator, **optargs) | 70 return HostFileSystemProvider(object_store_creator, **optargs) |
72 | 71 |
73 def CreateGithubFileSystemProvider(self, object_store_creator): | 72 def CreateGithubFileSystemProvider(self, object_store_creator): |
74 return GithubFileSystemProvider(object_store_creator) | 73 return GithubFileSystemProvider(object_store_creator) |
75 | 74 |
76 @staticmethod | 75 @staticmethod |
77 def GetConstructor(delegate_for_test=None): | 76 def GetConstructor(delegate_for_test=None): |
78 render_servlet_delegate = InstanceServletRenderServletDelegate( | 77 render_servlet_delegate = InstanceServletRenderServletDelegate( |
79 delegate_for_test or InstanceServlet.Delegate()) | 78 delegate_for_test or InstanceServlet.Delegate()) |
80 return lambda request: RenderServlet(request, render_servlet_delegate) | 79 return lambda request: RenderServlet(request, render_servlet_delegate) |
81 | 80 |
82 # NOTE: if this were a real Servlet it would implement a Get() method, but | 81 # NOTE: if this were a real Servlet it would implement a Get() method, but |
83 # GetConstructor returns an appropriate lambda function (Request -> Servlet). | 82 # GetConstructor returns an appropriate lambda function (Request -> Servlet). |
OLD | NEW |