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

Side by Side Diff: scripts/slave/recipe_modules/goma/api.py

Issue 2237403002: Add cloudtail start/stop in recipe_modules/goma (Closed) Base URL: https://chromium.googlesource.com/chromium/tools/build.git@master
Patch Set: generate *.json Created 4 years, 4 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 2015 The Chromium Authors. All rights reserved. 1 # Copyright 2015 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 from recipe_engine import recipe_api 5 from recipe_engine import recipe_api
6 6
7 class GomaApi(recipe_api.RecipeApi): 7 class GomaApi(recipe_api.RecipeApi):
8 """GomaApi contains helper functions for using goma.""" 8 """GomaApi contains helper functions for using goma."""
9 9
10 def __init__(self, **kwargs): 10 def __init__(self, **kwargs):
11 super(GomaApi, self).__init__(**kwargs) 11 super(GomaApi, self).__init__(**kwargs)
12 self._goma_dir = None 12 self._goma_dir = None
13 self._goma_started = False 13 self._goma_started = False
14 14
15 self._goma_ctl_env = {} 15 self._goma_ctl_env = {}
16 self._cloudtail_pid = None
16 17
17 @property 18 @property
18 def service_account_json_path(self): 19 def service_account_json_path(self):
19 if self.m.platform.is_win: 20 if self.m.platform.is_win:
20 return 'C:\\creds\\service_accounts\\service-account-goma-client.json' 21 return 'C:\\creds\\service_accounts\\service-account-goma-client.json'
21 return '/creds/service_accounts/service-account-goma-client.json' 22 return '/creds/service_accounts/service-account-goma-client.json'
22 23
24 @property
25 def cloudtail_path(self):
26 if self.m.platform.is_win:
27 return 'C:\\infra-tools\\cloudtail'
28 return '/opt/infra-tools/cloudtail'
29
23 def ensure_goma(self, canary=False): 30 def ensure_goma(self, canary=False):
24 with self.m.step.nest('ensure_goma'): 31 with self.m.step.nest('ensure_goma'):
25 with self.m.step.context({'infra_step': True}): 32 with self.m.step.context({'infra_step': True}):
26 try: 33 try:
27 self.m.cipd.set_service_account_credentials( 34 self.m.cipd.set_service_account_credentials(
28 self.service_account_json_path) 35 self.service_account_json_path)
29 36
30 self.m.cipd.install_client() 37 self.m.cipd.install_client()
31 goma_package = ('infra_internal/goma/client/%s' % 38 goma_package = ('infra_internal/goma/client/%s' %
32 self.m.cipd.platform_suffix()) 39 self.m.cipd.platform_suffix())
33 # For Windows there's only 64-bit goma client. 40 # For Windows there's only 64-bit goma client.
34 if self.m.platform.is_win: 41 if self.m.platform.is_win:
35 goma_package = goma_package.replace('386', 'amd64') 42 goma_package = goma_package.replace('386', 'amd64')
36 ref='release' 43 ref='release'
37 if canary: 44 if canary:
38 ref='candidate' 45 ref='candidate'
39 self._goma_dir = self.m.path['cache'].join('cipd', 'goma') 46 self._goma_dir = self.m.path['cache'].join('cipd', 'goma')
40 self.m.cipd.ensure(self._goma_dir, {goma_package: ref}) 47 self.m.cipd.ensure(self._goma_dir, {goma_package: ref})
48
49 # TODO(tikuta) download cloudtail from cipd here
50
51
41 return self._goma_dir 52 return self._goma_dir
42 except self.m.step.StepFailure: 53 except self.m.step.StepFailure:
43 # TODO(phajdan.jr): make failures fatal after experiment. 54 # TODO(phajdan.jr): make failures fatal after experiment.
44 return None 55 return None
45 56
46 @property 57 @property
47 def goma_ctl(self): 58 def goma_ctl(self):
48 return self.m.path.join(self._goma_dir, 'goma_ctl.py') 59 return self.m.path.join(self._goma_dir, 'goma_ctl.py')
49 60
50 @property 61 @property
51 def build_data_dir(self): 62 def build_data_dir(self):
52 return self.m.properties.get('build_data_dir') 63 return self.m.properties.get('build_data_dir')
53 64
65 def start_cloudtail(self):
ukai 2016/08/16 05:46:06 doc string? _start_cloudtail, if it is not expect
tikuta 2016/08/16 06:04:04 Done.
66 assert self._cloudtail_pid is None
67
68 step_result = self.m.python(
ukai 2016/08/16 05:46:06 when it failed, stop goma?
tikuta 2016/08/16 06:04:04 Done.
69 name='start cloudtail',
70 script=self.resource('cloudtail_utils.py'),
71 args=['--start-cloudtail',
72 '--cloudtail-path', self.cloudtail_path],
73 env=self._goma_ctl_env,
74 stdout=self.m.raw_io.output())
75
76 self._cloudtail_pid = step_result.stdout
77
78 def stop_cloudtail(self):
ukai 2016/08/16 05:46:06 doc string? _stop_cloudtail?
tikuta 2016/08/16 06:04:04 Done.
79 assert self._cloudtail_pid is not None
shinyak 2016/08/16 05:48:39 If start_cloudtail failed, this assert can be trig
tikuta 2016/08/16 06:04:04 I missed the location to reflect the comment about
80
81 try:
82 self.m.python(
83 name='stop cloudtail',
84 script=self.resource('cloudtail_utils.py'),
85 args=['--killed-pid', self._cloudtail_pid],
86 infra_step=True)
87 except self.m.step.InfraFailure as e: # pragma: no cover
88 self.m.python(
89 name='stop_goma (cloudtail start failure)',
ukai 2016/08/16 05:46:07 cloudtail stop failure?
tikuta 2016/08/16 06:04:04 Done.
90 script=self.goma_ctl,
91 args=['stop'], env=self._goma_ctl_env)
92 raise e
93
94 self._cloudtail_pid = None
95
54 def start(self, env=None, **kwargs): 96 def start(self, env=None, **kwargs):
55 """Start goma compiler_proxy. 97 """Start goma compiler_proxy.
56 98
57 A user MUST execute ensure_goma beforehand. 99 A user MUST execute ensure_goma beforehand.
58 It is user's responsibility to handle failure of starting compiler_proxy. 100 It is user's responsibility to handle failure of starting compiler_proxy.
59 """ 101 """
60 assert self._goma_dir 102 assert self._goma_dir
61 assert not self._goma_started 103 assert not self._goma_started
62 104
63 if self.build_data_dir: 105 if self.build_data_dir:
(...skipping 23 matching lines...) Expand all
87 self.m.python( 129 self.m.python(
88 name='stop_goma (start failure)', 130 name='stop_goma (start failure)',
89 script=self.goma_ctl, 131 script=self.goma_ctl,
90 args=['stop'], env=self._goma_ctl_env, **kwargs) 132 args=['stop'], env=self._goma_ctl_env, **kwargs)
91 except self.m.step.StepFailure: 133 except self.m.step.StepFailure:
92 upload_logs_name = 'upload_goma_start_and_stop_failed_logs' 134 upload_logs_name = 'upload_goma_start_and_stop_failed_logs'
93 135
94 self.upload_logs(name=upload_logs_name) 136 self.upload_logs(name=upload_logs_name)
95 raise e 137 raise e
96 138
139 self.start_cloudtail()
140
97 def stop(self, ninja_log_outdir=None, ninja_log_compiler=None, 141 def stop(self, ninja_log_outdir=None, ninja_log_compiler=None,
98 ninja_log_command=None, ninja_log_exit_status=None, **kwargs): 142 ninja_log_command=None, ninja_log_exit_status=None, **kwargs):
99 """Stop goma compiler_proxy. 143 """Stop goma compiler_proxy.
100 144
101 A user MUST execute start beforehand. 145 A user MUST execute start beforehand.
102 It is user's responsibility to handle failure of stopping compiler_proxy. 146 It is user's responsibility to handle failure of stopping compiler_proxy.
103 """ 147 """
104 assert self._goma_dir 148 assert self._goma_dir
105 assert self._goma_started 149 assert self._goma_started
106 self.m.python( 150 self.m.python(
107 name='stop_goma', 151 name='stop_goma',
108 script=self.goma_ctl, 152 script=self.goma_ctl,
109 args=['stop'], env=self._goma_ctl_env, **kwargs) 153 args=['stop'], env=self._goma_ctl_env, **kwargs)
110 154
155 self.stop_cloudtail()
111 self.upload_logs(ninja_log_outdir, ninja_log_compiler, ninja_log_command, 156 self.upload_logs(ninja_log_outdir, ninja_log_compiler, ninja_log_command,
112 ninja_log_exit_status) 157 ninja_log_exit_status)
113 158
114 self._goma_started = False 159 self._goma_started = False
115 self._goma_ctl_env = {} 160 self._goma_ctl_env = {}
116 161
117 def upload_logs(self, ninja_log_outdir=None, ninja_log_compiler=None, 162 def upload_logs(self, ninja_log_outdir=None, ninja_log_compiler=None,
118 ninja_log_command=None, ninja_log_exit_status=None, 163 ninja_log_command=None, ninja_log_exit_status=None,
119 name=None): 164 name=None):
120 args = [ 165 args = [
(...skipping 19 matching lines...) Expand all
140 self._goma_ctl_env['GOMACTL_CRASH_REPORT_ID_FILE'], 185 self._goma_ctl_env['GOMACTL_CRASH_REPORT_ID_FILE'],
141 '--build-data-dir', self.build_data_dir, 186 '--build-data-dir', self.build_data_dir,
142 ]) 187 ])
143 188
144 self.m.python( 189 self.m.python(
145 name=name or 'upload_log', 190 name=name or 'upload_log',
146 script=self.package_repo_resource( 191 script=self.package_repo_resource(
147 'scripts', 'slave', 'upload_goma_logs.py'), 192 'scripts', 'slave', 'upload_goma_logs.py'),
148 args=args 193 args=args
149 ) 194 )
OLDNEW
« no previous file with comments | « scripts/slave/recipe_modules/goma/__init__.py ('k') | scripts/slave/recipe_modules/goma/example.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698