Index: chrome/common/extensions/docs/server2/refresh_servlet.py |
diff --git a/chrome/common/extensions/docs/server2/refresh_servlet.py b/chrome/common/extensions/docs/server2/refresh_servlet.py |
deleted file mode 100644 |
index 3c8d4e3390aa064dd17692f06aa4775eda44ac8c..0000000000000000000000000000000000000000 |
--- a/chrome/common/extensions/docs/server2/refresh_servlet.py |
+++ /dev/null |
@@ -1,163 +0,0 @@ |
-# Copyright 2014 The Chromium Authors. All rights reserved. |
-# Use of this source code is governed by a BSD-style license that can be |
-# found in the LICENSE file. |
- |
-import traceback |
- |
-from app_yaml_helper import AppYamlHelper |
-from appengine_wrappers import IsDeadlineExceededError, logservice, taskqueue |
-from branch_utility import BranchUtility |
-from commit_tracker import CommitTracker |
-from compiled_file_system import CompiledFileSystem |
-from custom_logger import CustomLogger |
-from data_source_registry import CreateDataSource |
-from environment import GetAppVersion |
-from file_system import IsFileSystemThrottledError |
-from future import Future |
-from gcs_file_system_provider import CloudStorageFileSystemProvider |
-from github_file_system_provider import GithubFileSystemProvider |
-from host_file_system_provider import HostFileSystemProvider |
-from object_store_creator import ObjectStoreCreator |
-from refresh_tracker import RefreshTracker |
-from server_instance import ServerInstance |
-from servlet import Servlet, Request, Response |
-from timer import Timer, TimerClosure |
- |
- |
-_log = CustomLogger('refresh') |
- |
- |
-class RefreshServlet(Servlet): |
- '''Servlet which refreshes a single data source. |
- ''' |
- def __init__(self, request, delegate_for_test=None): |
- Servlet.__init__(self, request) |
- self._delegate = delegate_for_test or RefreshServlet.Delegate() |
- |
- class Delegate(object): |
- '''RefreshServlet's runtime dependencies. Override for testing. |
- ''' |
- def CreateBranchUtility(self, object_store_creator): |
- return BranchUtility.Create(object_store_creator) |
- |
- def CreateHostFileSystemProvider(self, |
- object_store_creator, |
- pinned_commit=None): |
- return HostFileSystemProvider(object_store_creator, |
- pinned_commit=pinned_commit) |
- |
- def CreateGithubFileSystemProvider(self, object_store_creator): |
- return GithubFileSystemProvider(object_store_creator) |
- |
- def CreateGCSFileSystemProvider(self, object_store_creator): |
- return CloudStorageFileSystemProvider(object_store_creator) |
- |
- def GetAppVersion(self): |
- return GetAppVersion() |
- |
- def Get(self): |
- # Manually flush logs at the end of the run. However, sometimes |
- # even that isn't enough, which is why in this file we use the |
- # custom logger and make it flush the log every time its used. |
- logservice.AUTOFLUSH_ENABLED = False |
- try: |
- return self._GetImpl() |
- except BaseException: |
- _log.error('Caught top-level exception! %s', traceback.format_exc()) |
- finally: |
- logservice.flush() |
- |
- def _GetImpl(self): |
- path = self._request.path.strip('/') |
- parts = self._request.path.split('/', 1) |
- source_name = parts[0] |
- if len(parts) == 2: |
- source_path = parts[1] |
- else: |
- source_path = None |
- |
- _log.info('starting refresh of %s DataSource %s' % |
- (source_name, '' if source_path is None else '[%s]' % source_path)) |
- |
- if 'commit' in self._request.arguments: |
- commit = self._request.arguments['commit'] |
- else: |
- _log.warning('No commit given; refreshing from master. ' |
- 'This is probably NOT what you want.') |
- commit = None |
- |
- server_instance = self._CreateServerInstance(commit) |
- commit_tracker = CommitTracker(server_instance.object_store_creator) |
- refresh_tracker = RefreshTracker(server_instance.object_store_creator) |
- |
- # If no commit was given, use the ID of the last cached master commit. |
- # This allows sources external to the chromium repository to be updated |
- # independently from individual refresh cycles. |
- if commit is None: |
- commit = commit_tracker.Get('master').Get() |
- |
- success = True |
- try: |
- if source_name == 'platform_bundle': |
- data_source = server_instance.platform_bundle |
- elif source_name == 'content_providers': |
- data_source = server_instance.content_providers |
- else: |
- data_source = CreateDataSource(source_name, server_instance) |
- |
- class_name = data_source.__class__.__name__ |
- refresh_future = data_source.Refresh(source_path) |
- assert isinstance(refresh_future, Future), ( |
- '%s.Refresh() did not return a Future' % class_name) |
- timer = Timer() |
- try: |
- refresh_future.Get() |
- |
- # Mark this (commit, task) pair as completed and then see if this |
- # concludes the full cache refresh. The list of tasks required to |
- # complete a cache refresh is registered (and keyed on commit ID) by the |
- # CronServlet before kicking off all the refresh tasks. |
- (refresh_tracker.MarkTaskComplete(commit, path) |
- .Then(lambda _: refresh_tracker.GetRefreshComplete(commit)) |
- .Then(lambda is_complete: |
- commit_tracker.Set('master', commit) if is_complete else None) |
- .Get()) |
- except Exception as e: |
- _log.error('%s: error %s' % (class_name, traceback.format_exc())) |
- success = False |
- if IsFileSystemThrottledError(e): |
- return Response.ThrottledError('Throttled') |
- raise |
- finally: |
- _log.info('Refreshing %s took %s' % |
- (class_name, timer.Stop().FormatElapsed())) |
- |
- except: |
- success = False |
- # This should never actually happen. |
- _log.error('uncaught error: %s' % traceback.format_exc()) |
- raise |
- finally: |
- _log.info('finished (%s)', 'success' if success else 'FAILED') |
- return (Response.Ok('Success') if success else |
- Response.InternalError('Failure')) |
- |
- def _CreateServerInstance(self, commit): |
- '''Creates a ServerInstance pinned to |commit|, or HEAD if None. |
- NOTE: If passed None it's likely that during the cron run patches will be |
- submitted at HEAD, which may change data underneath the cron run. |
- ''' |
- object_store_creator = ObjectStoreCreator(start_empty=True) |
- branch_utility = self._delegate.CreateBranchUtility(object_store_creator) |
- host_file_system_provider = self._delegate.CreateHostFileSystemProvider( |
- object_store_creator, pinned_commit=commit) |
- github_file_system_provider = self._delegate.CreateGithubFileSystemProvider( |
- object_store_creator) |
- gcs_file_system_provider = self._delegate.CreateGCSFileSystemProvider( |
- object_store_creator) |
- return ServerInstance(object_store_creator, |
- CompiledFileSystem.Factory(object_store_creator), |
- branch_utility, |
- host_file_system_provider, |
- github_file_system_provider, |
- gcs_file_system_provider) |