Raoul Hidalgo Charman pushed to branch raoul/smarter-bot-calls at BuildGrid / buildgrid
Commits:
-
ec339213
by Raoul Hidalgo Charman at 2018-11-05T14:46:46Z
3 changed files:
Changes:
... | ... | @@ -54,3 +54,5 @@ class Bot: |
54 | 54 |
"""
|
55 | 55 |
while True:
|
56 | 56 |
self._bot_session.update_bot_session()
|
57 |
+ # If you get rid of this it breaks when actually executing commands
|
|
58 |
+ await asyncio.sleep(1)
|
... | ... | @@ -21,7 +21,10 @@ Interface to grpc |
21 | 21 |
"""
|
22 | 22 |
|
23 | 23 |
import logging
|
24 |
+from ..utils import timeout
|
|
25 |
+from ..settings import INTERVAL_BUFFER
|
|
24 | 26 |
|
27 |
+import grpc
|
|
25 | 28 |
from buildgrid._protos.google.devtools.remoteworkers.v1test2 import bots_pb2, bots_pb2_grpc
|
26 | 29 |
|
27 | 30 |
|
... | ... | @@ -45,4 +48,15 @@ class BotInterface: |
45 | 48 |
request = bots_pb2.UpdateBotSessionRequest(name=bot_session.name,
|
46 | 49 |
bot_session=bot_session,
|
47 | 50 |
update_mask=update_mask)
|
48 |
- return self._stub.UpdateBotSession(request, timeout=self._interval)
|
|
51 |
+ try:
|
|
52 |
+ with timeout(30):
|
|
53 |
+ return self._stub.UpdateBotSession(
|
|
54 |
+ request, timeout=self._interval + INTERVAL_BUFFER)
|
|
55 |
+ except grpc.StatusCode.DEADLINE_EXCEEDED:
|
|
56 |
+ self.logger.info("Server didn't respond")
|
|
57 |
+ return None
|
|
58 |
+ except TimeoutError:
|
|
59 |
+ self.logger.info("server didn't respond")
|
|
60 |
+ except Exception as e:
|
|
61 |
+ self.logger.info("Some error: {}".format(e))
|
|
62 |
+ |
... | ... | @@ -16,6 +16,8 @@ |
16 | 16 |
from operator import attrgetter
|
17 | 17 |
import os
|
18 | 18 |
import socket
|
19 |
+from contextlib import contextmanager
|
|
20 |
+import signal
|
|
19 | 21 |
|
20 | 22 |
from buildgrid.settings import HASH
|
21 | 23 |
from buildgrid._protos.build.bazel.remote.execution.v2 import remote_execution_pb2
|
... | ... | @@ -208,3 +210,15 @@ def output_directory_maker(directory_path, working_path, tree_digest): |
208 | 210 |
output_directory.path = os.path.relpath(directory_path, start=working_path)
|
209 | 211 |
|
210 | 212 |
return output_directory
|
213 |
+ |
|
214 |
+ |
|
215 |
+@contextmanager
|
|
216 |
+def timeout(seconds):
|
|
217 |
+ def raise_timeout(x, y):
|
|
218 |
+ raise TimeoutError
|
|
219 |
+ signal.signal(signal.SIGALRM, raise_timeout)
|
|
220 |
+ signal.alarm(seconds)
|
|
221 |
+ try:
|
|
222 |
+ yield
|
|
223 |
+ finally:
|
|
224 |
+ signal.alarm(0)
|