conda-incubator/conda-store

[CI] Verbose flag `-vv` cannot be passed as pytest parameter to the current tests

peytondmurray opened this issue · 2 comments

Context

Currently celery workers get passed any command line args you pass to pytest, making it impossible to see verbose output. This issue is to track work required to change this.

Value and/or benefit

We can't debug effectively unless we can get verbose output.

Anything else?

No response

I added the following lines to my python 3.10's argparse.py:2174:

import traceback
traceback.print_stack()

When running pytest tests/test_app_api.py::test_conda_store_register_environment_workflow -svv I get the following traceback from the affected celery worker:

File "/home/pdmurray/.pyenv/versions/miniconda3-latest/envs/conda-store-server-dev/lib/python3.10/threading.py", line 973, in _bootstrap
    self._bootstrap_inner()
  File "/home/pdmurray/.pyenv/versions/miniconda3-latest/envs/conda-store-server-dev/lib/python3.10/threading.py", line 1016, in _bootstrap_inner
    self.run()
  File "/home/pdmurray/.pyenv/versions/miniconda3-latest/envs/conda-store-server-dev/lib/python3.10/threading.py", line 953, in run
    self._target(*self._args, **self._kwargs)
  File "/home/pdmurray/.pyenv/versions/miniconda3-latest/envs/conda-store-server-dev/lib/python3.10/site-packages/celery/contrib/testing/worker.py", line 73, in start
    return super().start()
  File "/home/pdmurray/.pyenv/versions/miniconda3-latest/envs/conda-store-server-dev/lib/python3.10/site-packages/celery/worker/worker.py", line 202, in start
    self.blueprint.start(self)
  File "/home/pdmurray/.pyenv/versions/miniconda3-latest/envs/conda-store-server-dev/lib/python3.10/site-packages/celery/bootsteps.py", line 116, in start
    step.start(parent)
  File "/home/pdmurray/.pyenv/versions/miniconda3-latest/envs/conda-store-server-dev/lib/python3.10/site-packages/celery/bootsteps.py", line 365, in start
    return self.obj.start()
  File "/home/pdmurray/.pyenv/versions/miniconda3-latest/envs/conda-store-server-dev/lib/python3.10/site-packages/celery/worker/consumer/consumer.py", line 340, in start
    blueprint.start(self)
  File "/home/pdmurray/.pyenv/versions/miniconda3-latest/envs/conda-store-server-dev/lib/python3.10/site-packages/celery/bootsteps.py", line 116, in start
    step.start(parent)
  File "/home/pdmurray/.pyenv/versions/miniconda3-latest/envs/conda-store-server-dev/lib/python3.10/site-packages/celery/worker/consumer/consumer.py", line 746, in start
    c.loop(*c.loop_args())
  File "/home/pdmurray/.pyenv/versions/miniconda3-latest/envs/conda-store-server-dev/lib/python3.10/site-packages/celery/worker/loops.py", line 130, in synloop
    connection.drain_events(timeout=2.0)
  File "/home/pdmurray/.pyenv/versions/miniconda3-latest/envs/conda-store-server-dev/lib/python3.10/site-packages/kombu/connection.py", line 341, in drain_events
    return self.transport.drain_events(self.connection, **kwargs)
  File "/home/pdmurray/.pyenv/versions/miniconda3-latest/envs/conda-store-server-dev/lib/python3.10/site-packages/kombu/transport/virtual/base.py", line 997, in drain_events
    get(self._deliver, timeout=timeout)
  File "/home/pdmurray/.pyenv/versions/miniconda3-latest/envs/conda-store-server-dev/lib/python3.10/site-packages/kombu/utils/scheduling.py", line 55, in get
    return self.fun(resource, callback, **kwargs)
  File "/home/pdmurray/.pyenv/versions/miniconda3-latest/envs/conda-store-server-dev/lib/python3.10/site-packages/kombu/transport/virtual/base.py", line 1035, in _drain_channel
    return channel.drain_events(callback=callback, timeout=timeout)
  File "/home/pdmurray/.pyenv/versions/miniconda3-latest/envs/conda-store-server-dev/lib/python3.10/site-packages/kombu/transport/virtual/base.py", line 754, in drain_events
    return self._poll(self.cycle, callback, timeout=timeout)
  File "/home/pdmurray/.pyenv/versions/miniconda3-latest/envs/conda-store-server-dev/lib/python3.10/site-packages/kombu/transport/virtual/base.py", line 414, in _poll
    return cycle.get(callback)
  File "/home/pdmurray/.pyenv/versions/miniconda3-latest/envs/conda-store-server-dev/lib/python3.10/site-packages/kombu/utils/scheduling.py", line 55, in get
    return self.fun(resource, callback, **kwargs)
  File "/home/pdmurray/.pyenv/versions/miniconda3-latest/envs/conda-store-server-dev/lib/python3.10/site-packages/kombu/transport/virtual/base.py", line 418, in _get_and_deliver
    callback(message, queue)
  File "/home/pdmurray/.pyenv/versions/miniconda3-latest/envs/conda-store-server-dev/lib/python3.10/site-packages/kombu/transport/virtual/base.py", line 1017, in _deliver
    callback(message)
  File "/home/pdmurray/.pyenv/versions/miniconda3-latest/envs/conda-store-server-dev/lib/python3.10/site-packages/kombu/transport/virtual/base.py", line 639, in _callback
    return callback(message)
  File "/home/pdmurray/.pyenv/versions/miniconda3-latest/envs/conda-store-server-dev/lib/python3.10/site-packages/kombu/messaging.py", line 656, in _receive_callback
    return on_m(message) if on_m else self.receive(decoded, message)
  File "/home/pdmurray/.pyenv/versions/miniconda3-latest/envs/conda-store-server-dev/lib/python3.10/site-packages/celery/worker/consumer/consumer.py", line 685, in on_task_received
    strategy(
  File "/home/pdmurray/.pyenv/versions/miniconda3-latest/envs/conda-store-server-dev/lib/python3.10/site-packages/celery/worker/strategy.py", line 207, in task_message_handler
    handle(req)
  File "/home/pdmurray/.pyenv/versions/miniconda3-latest/envs/conda-store-server-dev/lib/python3.10/site-packages/celery/worker/worker.py", line 225, in _process_task
    req.execute_using_pool(self.pool)
  File "/home/pdmurray/.pyenv/versions/miniconda3-latest/envs/conda-store-server-dev/lib/python3.10/site-packages/celery/worker/request.py", line 754, in execute_using_pool
    result = apply_async(
  File "/home/pdmurray/.pyenv/versions/miniconda3-latest/envs/conda-store-server-dev/lib/python3.10/site-packages/celery/concurrency/base.py", line 153, in apply_async
    return self.on_apply(target, args, kwargs,
  File "/home/pdmurray/.pyenv/versions/miniconda3-latest/envs/conda-store-server-dev/lib/python3.10/site-packages/celery/concurrency/base.py", line 30, in apply_target
    ret = target(*args, **kwargs)
  File "/home/pdmurray/.pyenv/versions/miniconda3-latest/envs/conda-store-server-dev/lib/python3.10/site-packages/celery/app/trace.py", line 630, in trace_task_ret
    R, I, T, Rstr = trace_task(app.tasks[name],
  File "/home/pdmurray/.pyenv/versions/miniconda3-latest/envs/conda-store-server-dev/lib/python3.10/site-packages/celery/app/trace.py", line 586, in trace_task
    return task.__trace__(uuid, args, kwargs, request)
  File "/home/pdmurray/.pyenv/versions/miniconda3-latest/envs/conda-store-server-dev/lib/python3.10/site-packages/celery/app/trace.py", line 453, in trace_task
    R = retval = fun(*args, **kwargs)
  File "/home/pdmurray/Desktop/workspace/conda-store/conda-store-server/conda_store_server/_internal/worker/tasks.py", line 104, in task_update_storage_metrics
    conda_store = self.worker.conda_store
  File "/home/pdmurray/Desktop/workspace/conda-store/conda-store-server/conda_store_server/_internal/worker/tasks.py", line 51, in worker
    self._worker.initialize()
  File "/home/pdmurray/.pyenv/versions/miniconda3-latest/envs/conda-store-server-dev/lib/python3.10/site-packages/traitlets/config/application.py", line 118, in inner
    return method(app, *args, **kwargs)
  File "/home/pdmurray/Desktop/workspace/conda-store/conda-store-server/conda_store_server/_internal/worker/app.py", line 63, in initialize
    super().initialize(*args, **kwargs)
  File "/home/pdmurray/.pyenv/versions/miniconda3-latest/envs/conda-store-server-dev/lib/python3.10/site-packages/traitlets/config/application.py", line 118, in inner
    return method(app, *args, **kwargs)
  File "/home/pdmurray/.pyenv/versions/miniconda3-latest/envs/conda-store-server-dev/lib/python3.10/site-packages/traitlets/config/application.py", line 465, in initialize
    self.parse_command_line(argv)
  File "/home/pdmurray/.pyenv/versions/miniconda3-latest/envs/conda-store-server-dev/lib/python3.10/site-packages/traitlets/config/application.py", line 118, in inner
    return method(app, *args, **kwargs)
  File "/home/pdmurray/.pyenv/versions/miniconda3-latest/envs/conda-store-server-dev/lib/python3.10/site-packages/traitlets/config/application.py", line 881, in parse_command_line
    self.cli_config = deepcopy(loader.load_config())
  File "/home/pdmurray/.pyenv/versions/miniconda3-latest/envs/conda-store-server-dev/lib/python3.10/site-packages/traitlets/config/loader.py", line 895, in load_config
    self._parse_args(argv)
  File "/home/pdmurray/.pyenv/versions/miniconda3-latest/envs/conda-store-server-dev/lib/python3.10/site-packages/traitlets/config/loader.py", line 954, in _parse_args
    self.parsed_data = self.parser.parse_args(to_parse)
  File "/home/pdmurray/.pyenv/versions/miniconda3-latest/envs/conda-store-server-dev/lib/python3.10/argparse.py", line 1833, in parse_args
    args, argv = self.parse_known_args(args, namespace)
  File "/home/pdmurray/.pyenv/versions/miniconda3-latest/envs/conda-store-server-dev/lib/python3.10/site-packages/traitlets/config/loader.py", line 790, in parse_known_args
    return super().parse_known_args(args, namespace)
  File "/home/pdmurray/.pyenv/versions/miniconda3-latest/envs/conda-store-server-dev/lib/python3.10/argparse.py", line 1866, in parse_known_args
    namespace, args = self._parse_known_args(args, namespace)
  File "/home/pdmurray/.pyenv/versions/miniconda3-latest/envs/conda-store-server-dev/lib/python3.10/argparse.py", line 2079, in _parse_known_args
    start_index = consume_optional(start_index)
  File "/home/pdmurray/.pyenv/versions/miniconda3-latest/envs/conda-store-server-dev/lib/python3.10/argparse.py", line 2009, in consume_optional
    arg_count = match_argument(action, selected_patterns)
  File "/home/pdmurray/.pyenv/versions/miniconda3-latest/envs/conda-store-server-dev/lib/python3.10/argparse.py", line 2175, in _match_argument
    traceback.print_stack()

I don't think we're passing these arguments on purpose to the celery task, but traitlets allows for configuration variables to be set from the command line, and it automatically parses command line args. I think we can explicitly pass an empty argv to Application.initialize to prevent this.