Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 # Copyright 2014 The Chromium Authors. All rights reserved. | 1 # Copyright 2014 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 traceback | 5 import traceback |
| 6 | 6 |
| 7 from app_yaml_helper import AppYamlHelper | 7 from app_yaml_helper import AppYamlHelper |
| 8 from appengine_wrappers import IsDeadlineExceededError, logservice | 8 from appengine_wrappers import IsDeadlineExceededError, logservice, taskqueue |
| 9 from branch_utility import BranchUtility | 9 from branch_utility import BranchUtility |
| 10 from commit_tracker import CommitTracker | |
| 10 from compiled_file_system import CompiledFileSystem | 11 from compiled_file_system import CompiledFileSystem |
| 11 from custom_logger import CustomLogger | 12 from custom_logger import CustomLogger |
| 12 from data_source_registry import CreateDataSource | 13 from data_source_registry import CreateDataSource |
| 13 from environment import GetAppVersion | 14 from environment import GetAppVersion |
| 14 from file_system import IsFileSystemThrottledError | 15 from file_system import IsFileSystemThrottledError |
| 15 from future import Future | 16 from future import Future |
| 16 from gcs_file_system_provider import CloudStorageFileSystemProvider | 17 from gcs_file_system_provider import CloudStorageFileSystemProvider |
| 17 from github_file_system_provider import GithubFileSystemProvider | 18 from github_file_system_provider import GithubFileSystemProvider |
| 18 from host_file_system_provider import HostFileSystemProvider | 19 from host_file_system_provider import HostFileSystemProvider |
| 19 from object_store_creator import ObjectStoreCreator | 20 from object_store_creator import ObjectStoreCreator |
| 21 from refresh_tracker import RefreshTracker | |
| 20 from server_instance import ServerInstance | 22 from server_instance import ServerInstance |
| 21 from servlet import Servlet, Request, Response | 23 from servlet import Servlet, Request, Response |
| 22 from timer import Timer, TimerClosure | 24 from timer import Timer, TimerClosure |
| 23 | 25 |
| 24 | 26 |
| 25 | |
| 26 _log = CustomLogger('refresh') | 27 _log = CustomLogger('refresh') |
| 27 | 28 |
| 28 | 29 |
| 29 class RefreshServlet(Servlet): | 30 class RefreshServlet(Servlet): |
| 30 '''Servlet which refreshes a single data source. | 31 '''Servlet which refreshes a single data source. |
| 31 ''' | 32 ''' |
| 32 def __init__(self, request, delegate_for_test=None): | 33 def __init__(self, request, delegate_for_test=None): |
| 33 Servlet.__init__(self, request) | 34 Servlet.__init__(self, request) |
| 34 self._delegate = delegate_for_test or RefreshServlet.Delegate() | 35 self._delegate = delegate_for_test or RefreshServlet.Delegate() |
| 35 | 36 |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 79 (source_name, '' if source_path is None else '[%s]' % source_path)) | 80 (source_name, '' if source_path is None else '[%s]' % source_path)) |
| 80 | 81 |
| 81 if 'commit' in self._request.arguments: | 82 if 'commit' in self._request.arguments: |
| 82 commit = self._request.arguments['commit'] | 83 commit = self._request.arguments['commit'] |
| 83 else: | 84 else: |
| 84 _log.warning('No commit given; refreshing from master. ' | 85 _log.warning('No commit given; refreshing from master. ' |
| 85 'This is probably NOT what you want.') | 86 'This is probably NOT what you want.') |
| 86 commit = None | 87 commit = None |
| 87 | 88 |
| 88 server_instance = self._CreateServerInstance(commit) | 89 server_instance = self._CreateServerInstance(commit) |
| 90 commit_tracker = CommitTracker(server_instance.object_store_creator) | |
| 91 refresh_tracker = RefreshTracker(server_instance.object_store_creator) | |
| 92 | |
| 89 success = True | 93 success = True |
| 90 try: | 94 try: |
| 91 if source_name == 'platform_bundle': | 95 if source_name == 'platform_bundle': |
| 92 data_source = server_instance.platform_bundle | 96 data_source = server_instance.platform_bundle |
| 93 elif source_name == 'content_providers': | 97 elif source_name == 'content_providers': |
| 94 data_source = server_instance.content_providers | 98 data_source = server_instance.content_providers |
| 99 elif source_name == 'instance_master': | |
| 100 data_source = _InstanceMasterCommitUpdater(commit) | |
|
not at google - send to devlin
2014/10/24 00:04:51
I don't see _InstanceMasterCommitUpdater anywhere?
Ken Rockot(use gerrit already)
2014/10/24 21:26:54
Oops. Yeah this is old dead code. Removed.
| |
| 95 else: | 101 else: |
| 96 data_source = CreateDataSource(source_name, server_instance) | 102 data_source = CreateDataSource(source_name, server_instance) |
| 97 | 103 |
| 104 # If the data source defines subtasks and none was provided, do the nice | |
| 105 # thing and queue up the defined subtasks instead of just failing. | |
| 106 if source_path is None: | |
| 107 refresh_paths = data_source.GetRefreshPaths() | |
| 108 if len(refresh_paths) > 1: | |
| 109 queue = taskqueue.Queue() | |
| 110 tasks = ['/_refresh/%s/%s' % (source_name, path) | |
| 111 for path in refresh_paths] | |
| 112 for task in tasks: | |
| 113 queue.add(taskqueue.Task(url=task, params={'commit': commit})) | |
| 114 return | |
|
not at google - send to devlin
2014/10/24 00:04:51
What happens if source_path is None but there are
Ken Rockot(use gerrit already)
2014/10/24 21:26:54
This works just fine (when source_path is None it
| |
| 115 | |
| 98 class_name = data_source.__class__.__name__ | 116 class_name = data_source.__class__.__name__ |
| 99 refresh_future = data_source.Refresh(source_path) | 117 refresh_future = data_source.Refresh(source_path) |
| 100 assert isinstance(refresh_future, Future), ( | 118 assert isinstance(refresh_future, Future), ( |
| 101 '%s.Refresh() did not return a Future' % class_name) | 119 '%s.Refresh() did not return a Future' % class_name) |
| 102 timer = Timer() | 120 timer = Timer() |
| 103 try: | 121 try: |
| 104 refresh_future.Get() | 122 refresh_future.Get() |
| 123 | |
| 124 def resolve(refresh_complete): | |
| 125 if refresh_complete: | |
| 126 return commit_tracker.Set('master', commit) | |
| 127 return None | |
| 128 | |
| 129 refresh_tracker.MarkTaskComplete(commit, path).Get() | |
|
not at google - send to devlin
2014/10/24 00:04:51
Use Then() not Get()?
You could even go so far as
Ken Rockot(use gerrit already)
2014/10/24 21:26:54
Neat. I'm all for chaining futures of you're down
not at google - send to devlin
2014/10/24 23:36:07
I think the Python creators are against anonymous
| |
| 130 refresh_tracker.GetRefreshComplete(commit).Then(resolve).Get() | |
|
not at google - send to devlin
2014/10/24 00:04:52
You should mention how this relates to cron servle
Ken Rockot(use gerrit already)
2014/10/24 21:26:54
Done.
| |
| 105 except Exception as e: | 131 except Exception as e: |
| 106 _log.error('%s: error %s' % (class_name, traceback.format_exc())) | 132 _log.error('%s: error %s' % (class_name, traceback.format_exc())) |
| 107 success = False | 133 success = False |
| 108 if IsFileSystemThrottledError(e): | 134 if IsFileSystemThrottledError(e): |
| 109 return Response.ThrottledError('Throttled') | 135 return Response.ThrottledError('Throttled') |
| 110 raise | 136 raise |
| 111 finally: | 137 finally: |
| 112 _log.info('Refreshing %s took %s' % | 138 _log.info('Refreshing %s took %s' % |
| 113 (class_name, timer.Stop().FormatElapsed())) | 139 (class_name, timer.Stop().FormatElapsed())) |
| 114 | 140 |
| (...skipping 19 matching lines...) Expand all Loading... | |
| 134 github_file_system_provider = self._delegate.CreateGithubFileSystemProvider( | 160 github_file_system_provider = self._delegate.CreateGithubFileSystemProvider( |
| 135 object_store_creator) | 161 object_store_creator) |
| 136 gcs_file_system_provider = self._delegate.CreateGCSFileSystemProvider( | 162 gcs_file_system_provider = self._delegate.CreateGCSFileSystemProvider( |
| 137 object_store_creator) | 163 object_store_creator) |
| 138 return ServerInstance(object_store_creator, | 164 return ServerInstance(object_store_creator, |
| 139 CompiledFileSystem.Factory(object_store_creator), | 165 CompiledFileSystem.Factory(object_store_creator), |
| 140 branch_utility, | 166 branch_utility, |
| 141 host_file_system_provider, | 167 host_file_system_provider, |
| 142 github_file_system_provider, | 168 github_file_system_provider, |
| 143 gcs_file_system_provider) | 169 gcs_file_system_provider) |
| OLD | NEW |