hail
hail copied to clipboard
[batch] Type checker for dictionaries causes a 500 on failure
What happened?
I expected when I submitted a Batch job with attributes={'foo': 1}
that it would return an error telling me the values must be strings. Instead, I got a 500 error from the server.
Version
0.2.128
Relevant log output
Traceback (most recent call last):
File "/usr/local/lib/python3.9/dist-packages/aiohttp/web_protocol.py", line 452, in _handle_request
resp = await request_handler(request)
File "/usr/local/lib/python3.9/dist-packages/aiohttp/web_app.py", line 543, in _handle
resp = await handler(request)
File "/usr/local/lib/python3.9/dist-packages/aiohttp/web_middlewares.py", line 114, in impl
return await handler(request)
File "/usr/local/lib/python3.9/dist-packages/aiohttp/web_middlewares.py", line 114, in impl
return await handler(request)
File "/usr/local/lib/python3.9/dist-packages/gear/csrf.py", line 27, in check_csrf_token
return await handler(request)
File "/usr/local/lib/python3.9/dist-packages/batch/utils.py", line 19, in unavailable_if_frozen
return await handler(request)
File "/usr/local/lib/python3.9/dist-packages/gear/metrics.py", line 28, in monitor_endpoints_middleware
response = await prom_async_time(REQUEST_TIME.labels(endpoint=endpoint, verb=verb), handler(request)) # type: ignore
File "/usr/local/lib/python3.9/dist-packages/prometheus_async/aio/_decorators.py", line 55, in measure
rv = await future
File "/usr/local/lib/python3.9/dist-packages/aiohttp_session/__init__.py", line 199, in factory
response = await handler(request)
File "/usr/local/lib/python3.9/dist-packages/gear/auth.py", line 67, in wrapped
return await fun(request, userdata)
File "/usr/local/lib/python3.9/dist-packages/batch/utils.py", line 45, in wrapped
return await fun(request, *args, **kwargs)
File "/usr/local/lib/python3.9/dist-packages/batch/front_end/front_end.py", line 1531, in create_batch_fast
await _create_job_groups(db, batch_id, update_id, user, job_groups)
File "/usr/local/lib/python3.9/dist-packages/batch/front_end/front_end.py", line 961, in _create_job_groups
validate_job_groups(job_group_specs)
File "/usr/local/lib/python3.9/dist-packages/batch/front_end/validate.py", line 243, in validate_job_groups
job_group_validator.validate(f'job_groups[{i}]', job_group)
File "/usr/local/lib/python3.9/dist-packages/hailtop/utils/validate/validate.py", line 66, in validate
checker.validate(f"{name}.{k}", obj[k])
File "/usr/local/lib/python3.9/dist-packages/hailtop/utils/validate/validate.py", line 139, in validate
self.checker.validate(name, obj)
File "/usr/local/lib/python3.9/dist-packages/hailtop/utils/validate/validate.py", line 41, in validate
self.vchecker.validate(f"{name}[{k}]", v)
File "/usr/local/lib/python3.9/dist-packages/hailtop/utils/validate/validate.py", line 28, in validate
raise ValidationError(f'{name} is not {self.t}')
hailtop.utils.validate.validate.ValidationError