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

Unified Diff: client/run_isolated.py

Issue 2267363004: Add CIPD pin reporting to swarming. (Closed) Base URL: https://chromium.googlesource.com/external/github.com/luci/luci-py@master
Patch Set: comments and some tests 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 side-by-side diff with in-line comments
Download patch
« appengine/swarming/templates/user_task.html ('K') | « client/cipd.py ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: client/run_isolated.py
diff --git a/client/run_isolated.py b/client/run_isolated.py
index a879c221e39bdbcfb91a88c15837c2e9c90cd6b8..255f81bf1ea0d437efc28e001da9070ffe8f9329 100755
--- a/client/run_isolated.py
+++ b/client/run_isolated.py
@@ -400,9 +400,10 @@ def map_and_run(
cwd = run_dir
try:
- cipd_stats = install_packages_fn(run_dir)
- if cipd_stats:
- result['stats']['cipd'] = cipd_stats
+ cipd_info = install_packages_fn(run_dir)
+ if cipd_info:
+ result['stats']['cipd'] = cipd_info['stats']
+ result['cipd_pins'] = cipd_info['pins']
if isolated_hash:
isolated_stats = result['stats'].setdefault('isolated', {})
@@ -539,7 +540,8 @@ def run_tha_test(
grace_period: number of seconds to wait between SIGTERM and SIGKILL.
extra_args: optional arguments to add to the command stated in the .isolate
file. Ignored if isolate_hash is empty.
- install_packages_fn: function (dir) => cipd_stats. Installs packages.
+ install_packages_fn: function (dir) => {"stats": cipd_stats, "pins":
+ cipd_pins}. Installs packages.
use_symlinks: create tree with symlinks instead of hardlinks.
Returns:
@@ -595,11 +597,24 @@ def run_tha_test(
def install_packages(
run_dir, packages, service_url, client_package_name,
client_version, cache_dir=None, timeout=None):
- """Installs packages. Returns stats.
+ """Installs packages. Returns stats and pins.
+
+ pins are in the form of:
+ [
+ {
+ "path": path, "package_name": package_name, "version": version,
+ },
+ ...
+ ]
+
+ such that they correspond 1:1 to all input package arguments from the command
+ line. These dictionaries make their all the way back to swarming, where they
+ become the arguments of CipdPackage.
Args:
run_dir (str): root of installation.
- packages: packages to install, dict {path: [(package_name, version)].
+ packages: packages to install, dict
+ {path: [(package_name, version, cmd_line_idx)].
service_url (str): CIPD server url, e.g.
"https://chrome-infra-packages.appspot.com."
client_package_name (str): CIPD package name of CIPD client.
@@ -617,6 +632,16 @@ def install_packages(
run_dir = os.path.abspath(run_dir)
+ all_pins = []
+ def insert_pin(path, name, version, idx):
+ if idx > len(all_pins)-1:
+ all_pins.extend([None] * (len(all_pins) - idx + 1))
+ all_pins[idx] = {
+ 'package_name': name,
+ 'version': version,
+ 'path': path,
+ }
+
get_client_start = time.time()
client_manager = cipd.get_client(
service_url, client_package_name, client_version, cache_dir,
@@ -631,19 +656,26 @@ def install_packages(
# Do not clean site_root before installation because it may contain other
# site roots.
file_path.ensure_tree(site_root, 0770)
- client.ensure(
- site_root, packages,
+ pins = client.ensure(
+ site_root, [(name, vers) for name, vers, _ in packages],
cache_dir=os.path.join(cache_dir, 'cipd_internal'),
timeout=timeoutfn())
+ for i, pin in enumerate(pins):
+ insert_pin(path, pin[0], pin[1], packages[i])
file_path.make_tree_files_read_only(site_root)
total_duration = time.time() - start
logging.info(
'Installing CIPD client and packages took %d seconds', total_duration)
+ assert None not in all_pins
+
return {
- 'duration': total_duration,
- 'get_client_duration': get_client_duration,
+ 'stats': {
+ 'duration': total_duration,
+ 'get_client_duration': get_client_duration,
+ },
+ 'pins': all_pins,
}
@@ -744,7 +776,7 @@ def main(args):
cipd.validate_cipd_options(parser, options)
install_packages_fn = lambda run_dir: install_packages(
- run_dir, cipd.parse_package_args(options.cipd_packages),
+ run_dir, cipd.parse_package_args(options.cipd_packages, with_index=True),
options.cipd_server, options.cipd_client_package,
options.cipd_client_version, cache_dir=options.cipd_cache)
« appengine/swarming/templates/user_task.html ('K') | « client/cipd.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698