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..b91c29ab83f9e661b320e95d4f354305928c7974 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,12 +18,12 @@ 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') |
@@ -86,15 +87,32 @@ class RefreshServlet(Servlet): |
commit = None |
server_instance = self._CreateServerInstance(commit) |
+ commit_tracker = CommitTracker(server_instance.object_store_creator) |
+ refresh_tracker = RefreshTracker(server_instance.object_store_creator) |
+ |
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 |
+ elif source_name == 'instance_master': |
+ 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.
|
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})) |
+ 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
|
+ |
class_name = data_source.__class__.__name__ |
refresh_future = data_source.Refresh(source_path) |
assert isinstance(refresh_future, Future), ( |
@@ -102,6 +120,14 @@ class RefreshServlet(Servlet): |
timer = Timer() |
try: |
refresh_future.Get() |
+ |
+ def resolve(refresh_complete): |
+ if refresh_complete: |
+ return commit_tracker.Set('master', commit) |
+ return None |
+ |
+ 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
|
+ 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.
|
except Exception as e: |
_log.error('%s: error %s' % (class_name, traceback.format_exc())) |
success = False |