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

Create UsingSQLFromBaseHookRule to ease upgrade to Airflow 2.0 #11039

Closed
turbaszek opened this issue Sep 21, 2020 · 11 comments · Fixed by #12730
Closed

Create UsingSQLFromBaseHookRule to ease upgrade to Airflow 2.0 #11039

turbaszek opened this issue Sep 21, 2020 · 11 comments · Fixed by #12730
Labels
area:upgrade Facilitating migration to a newer version of Airflow good first issue kind:feature Feature Requests upgrade-check upgrade-check CLI

Comments

@turbaszek
Copy link
Member

This issue is part of #8765

Rule

Create UsingSQLFromBaseHookRule which corresponds to

Remove SQL support in base_hook

entry in UPDATING.md. This rule should allow users to check if their current configuration needs any adjusting
before migration to Airflow 2.0.

How to guide

To implement a new rule, create a class that inherits from airflow.upgrade.rules.base_rule.BaseRule.
It will be auto-registered and used by airflow upgrade-check command. The custom rule class has to have title,
description properties and should implement check method which returns a list of error messages in case of
incompatibility.

For example:

class ConnTypeIsNotNullableRule(BaseRule):
title = "Connection.conn_type is not nullable"
description = """\
The `conn_type` column in the `connection` table must contain content. Previously, this rule was \
enforced by application logic, but was not enforced by the database schema.
If you made any modifications to the table directly, make sure you don't have null in the conn_type column.\
"""
@provide_session
def check(self, session=None):
invalid_connections = session.query(Connection).filter(Connection.conn_type.is_(None))
return (
'Connection<id={}", conn_id={}> have empty conn_type field.'.format(conn.id, conn.conn_id)
for conn in invalid_connections
)

Remember to open the PR against v1-10-test branch.

@turbaszek turbaszek added area:upgrade Facilitating migration to a newer version of Airflow kind:feature Feature Requests good first issue labels Sep 21, 2020
@turbaszek turbaszek added this to the Airflow 1.10.13 milestone Sep 21, 2020
@pcandoalmeida
Copy link
Contributor

Hi @turbaszek 👋🏼 could I work on this? I think I'm almost done with the GCP account service key rule.

@mik-laj
Copy link
Member

mik-laj commented Oct 2, 2020

@pcandoalmeida I assigned you to this ticket.

@pcandoalmeida
Copy link
Contributor

Hi @turbaszek 👋🏼 I wanted to check that I'm understanding this rule correctly. Here, no configuration is set; either, users will be extending the BaseHook class or using the removed class methods directly. Would we parse custom operators for this check or would we perhaps return a warning?

@turbaszek
Copy link
Member Author

turbaszek commented Oct 11, 2020

Here, no configuration is set; either, users will be extending the BaseHook class or using the removed class methods directly.

Yes, it's all about using the removed methods.

Would we parse custom operators for this check or would we perhaps return a warning?

I'm personally in favor of checking if users use any custom operator - if yes we should inform them about this change. I'm afraid that checking this with 100% of accuracy may be really hard. @mik-laj @kaxil what is your opinion?

@pcandoalmeida
Copy link
Contributor

I'm afraid that checking this with 100% of accuracy may be really hard

Agree. If it proves too tricky, could we return a blanket WARNING as a workaround idea?

@turbaszek
Copy link
Member Author

I'm afraid that checking this with 100% of accuracy may be really hard

Agree. If it proves too tricky, could we return a blanket WARNING as a workaround idea?

I think yes. We may consider introducing in checker a new type "WARNING" (next to "SUCCESS" and "FAIL").

@pcandoalmeida
Copy link
Contributor

Hey @turbaszek is the above work something I could do perhaps? If it's straightforward, I could perhaps implement it and then try and finish this rule 😃

@turbaszek
Copy link
Member Author

@pcandoalmeida feel free to give it a shot 🚀

@dimberman
Copy link
Contributor

@turbaszek I think I have a solution. We can basically check any hook that inherits from base_hook and ensure that they don't use the function. Do you think this would work?

@turbaszek
Copy link
Member Author

@turbaszek I think I have a solution. We can basically check any hook that inherits from base_hook and ensure that they don't use the function. Do you think this would work?

We can, but how? We should not only check custom hooks imported in DAGs but also custom operators that may use BaseHook somewhere.

@turbaszek
Copy link
Member Author

Done in #12730

Airflow upgrade check automation moved this from To do to Done Dec 31, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area:upgrade Facilitating migration to a newer version of Airflow good first issue kind:feature Feature Requests upgrade-check upgrade-check CLI
Projects
No open projects
Development

Successfully merging a pull request may close this issue.

6 participants