-
-
Notifications
You must be signed in to change notification settings - Fork 164
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat: provide affordance for OCIImage actions to reserve more resourc…
…es (#650)
- Loading branch information
Showing
5 changed files
with
113 additions
and
15 deletions.
There are no files selected for viewing
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,89 @@ | ||
"""Utilities for rules that expose resource_set on ctx.actions.run[_shell] | ||
Workaround for https://github.com/bazelbuild/bazel/issues/15187 | ||
Vendored from https://github.com/aspect-build/bazel-lib/blob/cc956d8589c866339f81637037435366c25f582b/lib/resource_sets.bzl | ||
Note, this workaround only provides some fixed values for either CPU or Memory. | ||
Rule authors who are ALSO the BUILD author might know better, and can | ||
write custom resource_set functions for use within their own repository. | ||
This seems to be the use case that Google engineers imagined. | ||
""" | ||
|
||
resource_set_values = [ | ||
"cpu_2", | ||
"cpu_4", | ||
"default", | ||
"mem_512m", | ||
"mem_1g", | ||
"mem_2g", | ||
"mem_4g", | ||
"mem_8g", | ||
"mem_16g", | ||
"mem_32g", | ||
] | ||
|
||
def _resource_set_cpu_2(_, __): | ||
return {"cpu": 2} | ||
|
||
def _resource_set_cpu_4(_, __): | ||
return {"cpu": 4} | ||
|
||
def _resource_set_mem_512m(_, __): | ||
return {"memory": 512} | ||
|
||
def _resource_set_mem_1g(_, __): | ||
return {"memory": 1024} | ||
|
||
def _resource_set_mem_2g(_, __): | ||
return {"memory": 2048} | ||
|
||
def _resource_set_mem_4g(_, __): | ||
return {"memory": 4096} | ||
|
||
def _resource_set_mem_8g(_, __): | ||
return {"memory": 8192} | ||
|
||
def _resource_set_mem_16g(_, __): | ||
return {"memory": 16384} | ||
|
||
def _resource_set_mem_32g(_, __): | ||
return {"memory": 32768} | ||
|
||
# buildifier: disable=function-docstring | ||
def resource_set(attr): | ||
if attr.resource_set == "cpu_2": | ||
return _resource_set_cpu_2 | ||
if attr.resource_set == "cpu_4": | ||
return _resource_set_cpu_4 | ||
if attr.resource_set == "default": | ||
return None | ||
if attr.resource_set == "mem_512m": | ||
return _resource_set_mem_512m | ||
if attr.resource_set == "mem_1g": | ||
return _resource_set_mem_1g | ||
if attr.resource_set == "mem_2g": | ||
return _resource_set_mem_2g | ||
if attr.resource_set == "mem_4g": | ||
return _resource_set_mem_4g | ||
if attr.resource_set == "mem_8g": | ||
return _resource_set_mem_8g | ||
if attr.resource_set == "mem_16g": | ||
return _resource_set_mem_16g | ||
if attr.resource_set == "mem_32g": | ||
return _resource_set_mem_32g | ||
fail("unknown resource set", attr.resource_set) | ||
|
||
resource_set_attr = { | ||
"resource_set": attr.string( | ||
doc = """A predefined function used as the resource_set for actions. | ||
Used with --experimental_action_resource_set to reserve more RAM/CPU, preventing Bazel overscheduling resource-intensive actions. | ||
By default, Bazel allocates 1 CPU and 250M of RAM. | ||
https://github.com/bazelbuild/bazel/blob/058f943037e21710837eda9ca2f85b5f8538c8c5/src/main/java/com/google/devtools/build/lib/actions/AbstractAction.java#L77 | ||
""", | ||
default = "default", | ||
values = resource_set_values, | ||
), | ||
} |