Jim MacArthur pushed to branch jmac/remote_execution_client at BuildStream / buildstream
Commits:
-
538005da
by Jim MacArthur at 2018-08-17T16:52:29Z
-
23a4b933
by Jim MacArthur at 2018-08-17T16:53:35Z
-
31210bb3
by Jim MacArthur at 2018-08-17T16:59:27Z
-
8fa4a79d
by Jim MacArthur at 2018-08-17T16:59:39Z
-
69224585
by Jim MacArthur at 2018-08-17T16:59:49Z
4 changed files:
- buildstream/_loader/loadelement.py
- buildstream/data/projectconfig.yaml
- buildstream/element.py
- buildstream/sandbox/_sandboxremote.py
Changes:
| ... | ... | @@ -70,7 +70,7 @@ class LoadElement(): |
| 70 | 70 |
_yaml.node_validate(self.node, [
|
| 71 | 71 |
'kind', 'depends', 'sources', 'sandbox',
|
| 72 | 72 |
'variables', 'environment', 'environment-nocache',
|
| 73 |
- 'config', 'public', 'description',
|
|
| 73 |
+ 'config', 'public', 'description', 'remote-execution'
|
|
| 74 | 74 |
])
|
| 75 | 75 |
|
| 76 | 76 |
# Extract the Dependencies
|
| ... | ... | @@ -208,3 +208,6 @@ shell: |
| 208 | 208 |
# Command to run when `bst shell` does not provide a command
|
| 209 | 209 |
#
|
| 210 | 210 |
command: [ 'sh', '-i' ]
|
| 211 |
+ |
|
| 212 |
+remote-execution:
|
|
| 213 |
+ url: ""
|
|
| \ No newline at end of file |
| ... | ... | @@ -2126,7 +2126,7 @@ class Element(Plugin): |
| 2126 | 2126 |
project = self._get_project()
|
| 2127 | 2127 |
platform = Platform.get_platform()
|
| 2128 | 2128 |
|
| 2129 |
- if self.__remote_execution_url is not None and self.BST_VIRTUAL_DIRECTORY:
|
|
| 2129 |
+ if self.__remote_execution_url and self.BST_VIRTUAL_DIRECTORY:
|
|
| 2130 | 2130 |
if not self.__artifacts.has_push_remotes(element=self):
|
| 2131 | 2131 |
# Give an early warning if remote execution will not work
|
| 2132 | 2132 |
raise ElementError("Artifact {} is configured to use remote execution but has no push remotes. "
|
| ... | ... | @@ -54,7 +54,7 @@ class SandboxRemote(Sandbox): |
| 54 | 54 |
if m is None:
|
| 55 | 55 |
raise SandboxError("Configured remote URL '{}' does not match the expected layout. " +
|
| 56 | 56 |
"It should be of the form <protocol>://<domain name>:<port>."
|
| 57 |
- .format(server_url))
|
|
| 57 |
+ .format(self.server_url))
|
|
| 58 | 58 |
|
| 59 | 59 |
|
| 60 | 60 |
def _get_cascache(self):
|
| ... | ... | @@ -107,13 +107,15 @@ class SandboxRemote(Sandbox): |
| 107 | 107 |
action_digest=action_digest,
|
| 108 | 108 |
skip_cache_lookup=True)
|
| 109 | 109 |
|
| 110 |
+ |
|
| 110 | 111 |
operation_iterator = stub.Execute(request)
|
| 111 |
- if operation_iterator.code() != grpc.StatusCode.OK:
|
|
| 112 |
- raise SandboxError("GRPC Execute failed; is the remote system connected?")
|
|
| 113 |
- for operation in operation_iterator:
|
|
| 114 |
- if operation.done:
|
|
| 115 |
- break
|
|
| 116 |
- # TODO: Do we need a sleep here?
|
|
| 112 |
+ with self._get_context().timed_activity("Waiting for the remote build to complete"):
|
|
| 113 |
+ # It is advantageous to check operation_iterator.code() is grpc.StatusCode.OK here,
|
|
| 114 |
+ # which will check the server is actually contactable. However, calling it when the
|
|
| 115 |
+ # server is available seems to cause .code() to hang forever.
|
|
| 116 |
+ for operation in operation_iterator:
|
|
| 117 |
+ if operation.done:
|
|
| 118 |
+ break
|
|
| 117 | 119 |
return operation
|
| 118 | 120 |
|
| 119 | 121 |
def process_job_output(self, output_directories, output_files):
|
