| 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 compiled_file_system import CompiledFileSystem | 7 from compiled_file_system import CompiledFileSystem |
| 7 from environment import IsDevServer, IsReleaseServer | 8 from environment import IsDevServer, IsReleaseServer |
| 8 from github_file_system_provider import GithubFileSystemProvider | 9 from github_file_system_provider import GithubFileSystemProvider |
| 9 from host_file_system_provider import HostFileSystemProvider | 10 from host_file_system_provider import HostFileSystemProvider |
| 10 from third_party.json_schema_compiler.memoize import memoize | 11 from third_party.json_schema_compiler.memoize import memoize |
| 11 from render_servlet import RenderServlet | 12 from render_servlet import RenderServlet |
| 12 from object_store_creator import ObjectStoreCreator | 13 from object_store_creator import ObjectStoreCreator |
| 13 from server_instance import ServerInstance | 14 from server_instance import ServerInstance |
| 14 from gcs_file_system_provider import CloudStorageFileSystemProvider | 15 from gcs_file_system_provider import CloudStorageFileSystemProvider |
| 15 | 16 |
| 17 |
| 18 |
| 16 class InstanceServletRenderServletDelegate(RenderServlet.Delegate): | 19 class InstanceServletRenderServletDelegate(RenderServlet.Delegate): |
| 17 '''AppEngine instances should never need to call out to Gitiles. That should | 20 '''AppEngine instances should never need to call out to Gitiles. That should |
| 18 only ever be done by the cronjobs, which then write the result into | 21 only ever be done by the cronjobs, which then write the result into |
| 19 DataStore, which is as far as instances look. To enable this, crons can pass | 22 DataStore, which is as far as instances look. To enable this, crons can pass |
| 20 a custom (presumably online) ServerInstance into Get(). | 23 a custom (presumably online) ServerInstance into Get(). |
| 21 | 24 |
| 22 Why? Gitiles is slow and a bit flaky. Refresh jobs failing is annoying but | 25 Why? Gitiles is slow and a bit flaky. Refresh jobs failing is annoying but |
| 23 temporary. Instances failing affects users, and is really bad. | 26 temporary. Instances failing affects users, and is really bad. |
| 24 | 27 |
| 25 Anyway - to enforce this, we actually don't give instances access to | 28 Anyway - to enforce this, we actually don't give instances access to |
| 26 Gitiles. If anything is missing from datastore, it'll be a 404. If the | 29 Gitiles. If anything is missing from datastore, it'll be a 404. If the |
| 27 cronjobs don't manage to catch everything - uhoh. On the other hand, we'll | 30 cronjobs don't manage to catch everything - uhoh. On the other hand, we'll |
| 28 figure it out pretty soon, and it also means that legitimate 404s are caught | 31 figure it out pretty soon, and it also means that legitimate 404s are caught |
| 29 before a round trip to Gitiles. | 32 before a round trip to Gitiles. |
| 30 ''' | 33 ''' |
| 31 def __init__(self, delegate): | 34 def __init__(self, delegate): |
| 32 self._delegate = delegate | 35 self._delegate = delegate |
| 33 | 36 |
| 34 @memoize | 37 @memoize |
| 35 def CreateServerInstance(self): | 38 def CreateServerInstance(self): |
| 36 object_store_creator = ObjectStoreCreator(start_empty=False) | 39 object_store_creator = ObjectStoreCreator(start_empty=False) |
| 37 branch_utility = self._delegate.CreateBranchUtility(object_store_creator) | 40 branch_utility = self._delegate.CreateBranchUtility(object_store_creator) |
| 41 commit_tracker = CommitTracker(object_store_creator) |
| 38 # In production have offline=True so that we can catch cron errors. In | 42 # In production have offline=True so that we can catch cron errors. In |
| 39 # development it's annoying to have to run the cron job, so offline=False. | 43 # development it's annoying to have to run the cron job, so offline=False. |
| 40 # Note that offline=True if running on any appengine server due to | 44 # Note that offline=True if running on any appengine server due to |
| 41 # http://crbug.com/345361. | 45 # http://crbug.com/345361. |
| 42 host_file_system_provider = self._delegate.CreateHostFileSystemProvider( | 46 host_file_system_provider = self._delegate.CreateHostFileSystemProvider( |
| 43 object_store_creator, | 47 object_store_creator, |
| 44 offline=not (IsDevServer() or IsReleaseServer())) | 48 offline=not (IsDevServer() or IsReleaseServer()), |
| 49 pinned_commit=commit_tracker.Get('master').Get(), |
| 50 cache_only=True) |
| 45 github_file_system_provider = self._delegate.CreateGithubFileSystemProvider( | 51 github_file_system_provider = self._delegate.CreateGithubFileSystemProvider( |
| 46 object_store_creator) | 52 object_store_creator) |
| 47 return ServerInstance(object_store_creator, | 53 return ServerInstance(object_store_creator, |
| 48 CompiledFileSystem.Factory(object_store_creator), | 54 CompiledFileSystem.Factory(object_store_creator), |
| 49 branch_utility, | 55 branch_utility, |
| 50 host_file_system_provider, | 56 host_file_system_provider, |
| 51 github_file_system_provider, | 57 github_file_system_provider, |
| 52 CloudStorageFileSystemProvider(object_store_creator)) | 58 CloudStorageFileSystemProvider(object_store_creator)) |
| 53 | 59 |
| 54 class InstanceServlet(object): | 60 class InstanceServlet(object): |
| (...skipping 14 matching lines...) Expand all Loading... |
| 69 return GithubFileSystemProvider(object_store_creator) | 75 return GithubFileSystemProvider(object_store_creator) |
| 70 | 76 |
| 71 @staticmethod | 77 @staticmethod |
| 72 def GetConstructor(delegate_for_test=None): | 78 def GetConstructor(delegate_for_test=None): |
| 73 render_servlet_delegate = InstanceServletRenderServletDelegate( | 79 render_servlet_delegate = InstanceServletRenderServletDelegate( |
| 74 delegate_for_test or InstanceServlet.Delegate()) | 80 delegate_for_test or InstanceServlet.Delegate()) |
| 75 return lambda request: RenderServlet(request, render_servlet_delegate) | 81 return lambda request: RenderServlet(request, render_servlet_delegate) |
| 76 | 82 |
| 77 # NOTE: if this were a real Servlet it would implement a Get() method, but | 83 # NOTE: if this were a real Servlet it would implement a Get() method, but |
| 78 # GetConstructor returns an appropriate lambda function (Request -> Servlet). | 84 # GetConstructor returns an appropriate lambda function (Request -> Servlet). |
| OLD | NEW |