Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[CT-3085] [Bug] dbt retry doesn't unpack resource-type #8575

Closed
2 tasks done
kevin-chao opened this issue Sep 6, 2023 · 4 comments · Fixed by #8665
Closed
2 tasks done

[CT-3085] [Bug] dbt retry doesn't unpack resource-type #8575

kevin-chao opened this issue Sep 6, 2023 · 4 comments · Fixed by #8665
Assignees
Labels
bug Something isn't working retry

Comments

@kevin-chao
Copy link

kevin-chao commented Sep 6, 2023

Is this a new bug in dbt-core?

  • I believe this is a new bug in dbt-core
  • I have searched the existing issues, and I could not find an existing issue for this bug

Current Behavior

When using dbt retry after using dbt build with a resource-type specified, dbt will warn of a BadParameter since the resource-type from the previous run is returned as a string of a list.

Expected Behavior

When using dbt retry in conjunction with a dbt build with a resource-type specified, it would run the appropriate nodes without a parameter issue. It would run whether I had a single resource-type specified or multiple resource-types specified.

Steps To Reproduce

  1. Create a model / tests that will error out

some_model.sql

select null as id

some_model.yml

version: 2

models:
  - name: some_model
    columns:
      - name: id
        tests:
          - not_null
  1. Invoke dbt build -s some_model --resource-type all (optionally, --resource-type model test)
  2. Invoke dbt retry to see failure
    -- On the happy path
  3. Invoke dbt build -s some_model
  4. Invoke dbt retry to see proper flow

Relevant log output

A stripped down log with multiple resource types

➜ dbt build -s stg_google_ads__account_history --resource-type seed model test                        
18:23:30  Running with dbt=1.6.1
18:23:30  Registered adapter: snowflake=1.6.2
18:23:31  Unable to do partial parsing because config vars, config profile, or config target have changed
18:24:00  Found 2356 models, 59 snapshots, 2095 tests, 87 seeds, 4 operations, 1744 sources, 0 exposures, 0 metrics, 961 macros, 0 groups, 0 semantic models
18:24:00  
18:24:04  
18:24:07  
18:24:07  Concurrency: 4 threads (target='snowflake_dev')
18:24:07  
18:24:07  1 of 2 START sql view model staging.stg_google_ads__account_history ............ [RUN]
18:24:08  1 of 2 OK created sql view model staging.stg_google_ads__account_history ....... [SUCCESS 1 in 0.86s]
18:24:08  2 of 2 START test not_null_stg_google_ads__account_history_account_id .......... [RUN]
18:24:09  2 of 2 FAIL 1 not_null_stg_google_ads__account_history_account_id .............. [FAIL 1 in 0.94s]
18:24:09  
18:24:09  Finished running 1 view model, 1 test, 4 hooks in 0 hours 0 minutes and 8.38 seconds (8.38s).
18:24:09  
18:24:09  Completed with 1 error and 0 warnings:
18:24:09  
18:24:09  Failure in test not_null_stg_google_ads__account_history_account_id (models/staging/adwords/src_adwords.yml)
18:24:09    Got 1 result, configured to fail if != 0
18:24:09  
18:24:09    compiled Code at target/compiled/ramp_dbt/models/staging/adwords/src_adwords.yml/not_null_stg_google_ads__account_history_account_id.sql
18:24:09  
18:24:09  Done. PASS=1 WARN=0 ERROR=1 SKIP=0 TOTAL=2


➜ dbt retry                                                                   
18:25:04  Running with dbt=1.6.1
18:25:04  Registered adapter: snowflake=1.6.2
18:25:07  Encountered an error:
"['seed', 'model', 'test']" is not one of 'metric', 'source', 'analysis', 'model', 'test', 'exposure', 'snapshot', 'seed', 'default', 'all'.
18:25:07  Traceback (most recent call last):
  File "/Users/kevin/Library/Caches/pypoetry/virtualenvs/dbt-YSAPFX2U-py3.9/lib/python3.9/site-packages/dbt/cli/requires.py", line 87, in wrapper
    result, success = func(*args, **kwargs)
  File "/Users/kevin/Library/Caches/pypoetry/virtualenvs/dbt-YSAPFX2U-py3.9/lib/python3.9/site-packages/dbt/cli/requires.py", line 72, in wrapper
    return func(*args, **kwargs)
  File "/Users/kevin/Library/Caches/pypoetry/virtualenvs/dbt-YSAPFX2U-py3.9/lib/python3.9/site-packages/dbt/cli/requires.py", line 143, in wrapper
    return func(*args, **kwargs)
  File "/Users/kevin/Library/Caches/pypoetry/virtualenvs/dbt-YSAPFX2U-py3.9/lib/python3.9/site-packages/dbt/cli/requires.py", line 172, in wrapper
    return func(*args, **kwargs)
  File "/Users/kevin/Library/Caches/pypoetry/virtualenvs/dbt-YSAPFX2U-py3.9/lib/python3.9/site-packages/dbt/cli/requires.py", line 219, in wrapper
    return func(*args, **kwargs)
  File "/Users/kevin/Library/Caches/pypoetry/virtualenvs/dbt-YSAPFX2U-py3.9/lib/python3.9/site-packages/dbt/cli/requires.py", line 259, in wrapper
    return func(*args, **kwargs)
  File "/Users/kevin/Library/Caches/pypoetry/virtualenvs/dbt-YSAPFX2U-py3.9/lib/python3.9/site-packages/dbt/cli/main.py", line 609, in retry
    results = task.run()
  File "/Users/kevin/Library/Caches/pypoetry/virtualenvs/dbt-YSAPFX2U-py3.9/lib/python3.9/site-packages/dbt/task/retry.py", line 94, in run
    retry_flags = Flags.from_dict(cli_command, self.previous_args)
  File "/Users/kevin/Library/Caches/pypoetry/virtualenvs/dbt-YSAPFX2U-py3.9/lib/python3.9/site-packages/dbt/cli/flags.py", line 293, in from_dict
    ctx = args_to_context(command_arg_list)
  File "/Users/kevin/Library/Caches/pypoetry/virtualenvs/dbt-YSAPFX2U-py3.9/lib/python3.9/site-packages/dbt/cli/flags.py", line 69, in args_to_context
    sub_command_ctx = sub_command.make_context(sub_command_name, args)
  File "/Users/kevin/Library/Caches/pypoetry/virtualenvs/dbt-YSAPFX2U-py3.9/lib/python3.9/site-packages/click/core.py", line 943, in make_context
    self.parse_args(ctx, args)
  File "/Users/kevin/Library/Caches/pypoetry/virtualenvs/dbt-YSAPFX2U-py3.9/lib/python3.9/site-packages/click/core.py", line 1408, in parse_args
    value, args = param.handle_parse_result(ctx, opts, args)
  File "/Users/kevin/Library/Caches/pypoetry/virtualenvs/dbt-YSAPFX2U-py3.9/lib/python3.9/site-packages/click/core.py", line 2400, in handle_parse_result
    value = self.process_value(ctx, value)
  File "/Users/kevin/Library/Caches/pypoetry/virtualenvs/dbt-YSAPFX2U-py3.9/lib/python3.9/site-packages/click/core.py", line 2356, in process_value
    value = self.type_cast_value(ctx, value)
  File "/Users/kevin/Library/Caches/pypoetry/virtualenvs/dbt-YSAPFX2U-py3.9/lib/python3.9/site-packages/dbt/cli/options.py", line 72, in type_cast_value
    value = super(MultiOption, self).type_cast_value(ctx, value)
  File "/Users/kevin/Library/Caches/pypoetry/virtualenvs/dbt-YSAPFX2U-py3.9/lib/python3.9/site-packages/click/core.py", line 2342, in type_cast_value
    return tuple(convert(x) for x in check_iter(value))
  File "/Users/kevin/Library/Caches/pypoetry/virtualenvs/dbt-YSAPFX2U-py3.9/lib/python3.9/site-packages/click/core.py", line 2342, in <genexpr>
    return tuple(convert(x) for x in check_iter(value))
  File "/Users/kevin/Library/Caches/pypoetry/virtualenvs/dbt-YSAPFX2U-py3.9/lib/python3.9/site-packages/click/core.py", line 2316, in convert
    return self.type(value, param=self, ctx=ctx)
  File "/Users/kevin/Library/Caches/pypoetry/virtualenvs/dbt-YSAPFX2U-py3.9/lib/python3.9/site-packages/click/types.py", line 83, in __call__
    return self.convert(value, param, ctx)
  File "/Users/kevin/Library/Caches/pypoetry/virtualenvs/dbt-YSAPFX2U-py3.9/lib/python3.9/site-packages/dbt/cli/option_types.py", line 60, in convert
    super().convert(value_item, param, ctx)
  File "/Users/kevin/Library/Caches/pypoetry/virtualenvs/dbt-YSAPFX2U-py3.9/lib/python3.9/site-packages/click/types.py", line 296, in convert
    self.fail(
  File "/Users/kevin/Library/Caches/pypoetry/virtualenvs/dbt-YSAPFX2U-py3.9/lib/python3.9/site-packages/click/types.py", line 136, in fail
    raise BadParameter(message, ctx=ctx, param=param)
click.exceptions.BadParameter: "['seed', 'model', 'test']" is not one of 'metric', 'source', 'analysis', 'model', 'test', 'exposure', 'snapshot', 'seed', 'default', 'all'.

Environment

- OS: MacOS 13.5.1
- Python: 3.9.16
- dbt: 1.6.1

Which database adapter are you using with dbt?

snowflake

Additional Context

Can confirm that without the resource-type specified in dbt build, dbt retry works as intended.

@kevin-chao kevin-chao added bug Something isn't working triage labels Sep 6, 2023
@github-actions github-actions bot changed the title [Bug] dbt retry doesn't unpack resource-type [CT-3085] [Bug] dbt retry doesn't unpack resource-type Sep 6, 2023
@dbeatty10 dbeatty10 self-assigned this Sep 7, 2023
@dbeatty10
Copy link
Contributor

Thanks for reporting this @kevin-chao and providing such a nice example of how to reproduce it 🤩

Following your example, I got the same results as you, namely that this doesn't work correctly:

dbt build -s some_model --resource-type all
dbt retry

And neither does this:

dbt build -s some_model --resource-type model test
dbt retry

But this works fine:

dbt build -s some_model
dbt retry

@dbeatty10 dbeatty10 removed the triage label Sep 7, 2023
@dbeatty10 dbeatty10 removed their assignment Sep 7, 2023
@jtcohen6
Copy link
Contributor

jtcohen6 commented Sep 19, 2023

I wonder if this will be incidentally resolved by this work:

@dbeatty10
Copy link
Contributor

🧠 @jtcohen6 looks quite likely!

Asked here whether it will resolve it or not.

@emmyoop
Copy link
Member

emmyoop commented Sep 21, 2023

@dbeatty10 my first approach in that PR did not actually solve this problem but I tweaked it a bit more and it seems to be resolved.

@emmyoop emmyoop self-assigned this Sep 21, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working retry
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants