test car models: fix random hanging (#1055)

* debug print

* unlogger doesn't need fcamera.hevc

* only need the rlog

* tiemout for log downloading

* try again after timeout

old-commit-hash: 30dffb486a
commatwo_master
Adeeb 5 years ago committed by GitHub
parent 2e8e73de2f
commit e3cb9b937c
  1. 20
      selfdrive/test/test_car_models.py
  2. 5
      tools/replay/unlogger.py

@ -38,13 +38,17 @@ def wait_for_sockets(socks, timeout=10.0):
recvd.append(s) recvd.append(s)
return recvd return recvd
def get_route_logs(route_name): def get_route_log(route_name):
for log_f in ["rlog.bz2", "fcamera.hevc"]: log_path = os.path.join("/tmp", "%s--0--%s" % (route_name.replace("|", "_"), "rlog.bz2"))
log_path = os.path.join("/tmp", "%s--0--%s" % (route_name.replace("|", "_"), log_f))
if not os.path.isfile(log_path): if not os.path.isfile(log_path):
log_url = "https://commadataci.blob.core.windows.net/openpilotci/%s/0/%s" % (route_name.replace("|", "/"), log_f) log_url = "https://commadataci.blob.core.windows.net/openpilotci/%s/0/%s" % (route_name.replace("|", "/"), "rlog.bz2")
r = requests.get(log_url)
# if request fails, try again once and let it throw exception if fails again
try:
r = requests.get(log_url, timeout=15)
except:
r = requests.get(log_url, timeout=15)
if r.status_code == 200: if r.status_code == 200:
with open(log_path, "wb") as f: with open(log_path, "wb") as f:
@ -490,7 +494,9 @@ if __name__ == "__main__":
results = {} results = {}
for route, checks in routes.items(): for route, checks in routes.items():
if route not in non_public_routes: if route not in non_public_routes:
get_route_logs(route) print("GETTING ROUTE LOGS")
get_route_log(route)
print("DONE GETTING ROUTE LOGS")
elif "UNLOGGER_PATH" not in os.environ: elif "UNLOGGER_PATH" not in os.environ:
continue continue
@ -512,7 +518,7 @@ if __name__ == "__main__":
unlogger_cmd = [os.path.join(BASEDIR, os.environ['UNLOGGER_PATH']), route] unlogger_cmd = [os.path.join(BASEDIR, os.environ['UNLOGGER_PATH']), route]
else: else:
unlogger_cmd = [os.path.join(BASEDIR, 'tools/replay/unlogger.py'), route, '/tmp'] unlogger_cmd = [os.path.join(BASEDIR, 'tools/replay/unlogger.py'), route, '/tmp']
unlogger = subprocess.Popen(unlogger_cmd + ['--disable', 'frame,plan,pathPlan,liveLongitudinalMpc,radarState,controlsState,liveTracks,liveMpc,sendcan,carState,carControl,carEvents,carParams', '--no-interactive'], preexec_fn=os.setsid) unlogger = subprocess.Popen(unlogger_cmd + ['--disable', 'frame,encodeIdx,plan,pathPlan,liveLongitudinalMpc,radarState,controlsState,liveTracks,liveMpc,sendcan,carState,carControl,carEvents,carParams', '--no-interactive'], preexec_fn=os.setsid)
print("Check sockets") print("Check sockets")
extra_socks = [] extra_socks = []

@ -68,7 +68,7 @@ class UnloggerWorker(object):
while True: while True:
while poller.poll(0.) or route is None: while poller.poll(0.) or route is None:
cookie, cmd = commands_socket.recv_pyobj() cookie, cmd = commands_socket.recv_pyobj()
route = self._process_commands(cmd, route) route = self._process_commands(cmd, route, pub_types)
# **** get message **** # **** get message ****
self._read_logs(cookie, pub_types) self._read_logs(cookie, pub_types)
@ -121,7 +121,7 @@ class UnloggerWorker(object):
data_socket.send_pyobj((cookie, typ, msg.logMonoTime, route_time), flags=zmq.SNDMORE) data_socket.send_pyobj((cookie, typ, msg.logMonoTime, route_time), flags=zmq.SNDMORE)
data_socket.send(smsg.to_bytes(), copy=False) data_socket.send(smsg.to_bytes(), copy=False)
def _process_commands(self, cmd, route): def _process_commands(self, cmd, route, pub_types):
seek_to = None seek_to = None
if route is None or (isinstance(cmd, SetRoute) and route.name != cmd.name): if route is None or (isinstance(cmd, SetRoute) and route.name != cmd.name):
seek_to = cmd.start_time seek_to = cmd.start_time
@ -129,6 +129,7 @@ class UnloggerWorker(object):
self._lr = MultiLogIterator(route.log_paths(), wraparound=True) self._lr = MultiLogIterator(route.log_paths(), wraparound=True)
if self._frame_reader is not None: if self._frame_reader is not None:
self._frame_reader.close() self._frame_reader.close()
if "frame" in pub_types or "encodeIdx" in pub_types:
# reset frames for a route # reset frames for a route
self._frame_id_lookup = {} self._frame_id_lookup = {}
self._frame_reader = RouteFrameReader( self._frame_reader = RouteFrameReader(

Loading…
Cancel
Save