| 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
|
| index eb8c0642a7a67ccf66f876cd8f9d379da6115f47..b85ace4343fa03cb28a9f9b30af2a230f0074f82 100644
|
| --- a/chrome/common/extensions/docs/server2/refresh_servlet.py
|
| +++ b/chrome/common/extensions/docs/server2/refresh_servlet.py
|
| @@ -5,8 +5,9 @@
|
| import traceback
|
|
|
| from app_yaml_helper import AppYamlHelper
|
| -from appengine_wrappers import IsDeadlineExceededError, logservice
|
| +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
|
| @@ -17,15 +18,20 @@ 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')
|
|
|
|
|
| +def _UpdateMasterCommit(object_store_creator, commit):
|
| + commit_tracker = CommitTracker(object_store_creator)
|
| + return commit_tracker.Set('master', commit)
|
| +
|
| +
|
| class RefreshServlet(Servlet):
|
| '''Servlet which refreshes a single data source.
|
| '''
|
| @@ -86,15 +92,34 @@ class RefreshServlet(Servlet):
|
| commit = None
|
|
|
| server_instance = self._CreateServerInstance(commit)
|
| + refresh_tracker = RefreshTracker(server_instance.object_store_creator)
|
| +
|
| success = True
|
| + success_message = 'Success'
|
| try:
|
| if source_name == 'platform_bundle':
|
| data_source = server_instance.platform_bundle
|
| elif source_name == 'content_providers':
|
| data_source = server_instance.content_providers
|
| + elif source_name == 'instance_master':
|
| + data_source = _InstanceMasterCommitUpdater(commit)
|
| else:
|
| data_source = CreateDataSource(source_name, server_instance)
|
|
|
| + # If the data source defines subtasks and none was provided, do the nice
|
| + # thing and queue up the defined subtasks instead of just failing.
|
| + if source_path is None:
|
| + refresh_paths = data_source.GetRefreshPaths()
|
| + if len(refresh_paths) > 1:
|
| + queue = taskqueue.Queue()
|
| + tasks = ['/_refresh/%s/%s' % (source_name, path)
|
| + for path in refresh_paths]
|
| + for task in tasks:
|
| + queue.add(taskqueue.Task(url=task, params={'commit': commit}))
|
| + success_message = 'Enqueued tasks: %s' % tasks
|
| + # The finally clause really handles the return.
|
| + return
|
| +
|
| class_name = data_source.__class__.__name__
|
| refresh_future = data_source.Refresh(source_path)
|
| assert isinstance(refresh_future, Future), (
|
| @@ -102,6 +127,15 @@ class RefreshServlet(Servlet):
|
| timer = Timer()
|
| try:
|
| refresh_future.Get()
|
| +
|
| + def resolve(refresh_complete):
|
| + if refresh_complete:
|
| + return _UpdateMasterCommit(
|
| + server_instance.object_store_creator, commit)
|
| + return None
|
| + refresh_tracker.MarkTaskComplete(commit, '_refresh/%s/%s' % (
|
| + source_name, path)).Get()
|
| + refresh_tracker.GetRefreshComplete(commit).Then(resolve).Get()
|
| except Exception as e:
|
| _log.error('%s: error %s' % (class_name, traceback.format_exc()))
|
| success = False
|
| @@ -119,7 +153,7 @@ class RefreshServlet(Servlet):
|
| raise
|
| finally:
|
| _log.info('finished (%s)', 'success' if success else 'FAILED')
|
| - return (Response.Ok('Success') if success else
|
| + return (Response.Ok(success_message) if success else
|
| Response.InternalError('Failure'))
|
|
|
| def _CreateServerInstance(self, commit):
|
|
|