hail icon indicating copy to clipboard operation
hail copied to clipboard

[batch] Type checker for dictionaries causes a 500 on failure

Open jigold opened this issue 4 months ago • 0 comments

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

jigold avatar Feb 23 '24 14:02 jigold