Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(183)

Side by Side Diff: chrome/common/extensions/docs/server2/refresh_servlet.py

Issue 660383002: Docserver: Persist stat cache for versioned file systems (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698