[jira] [Assigned] (AIRFLOW-6033) UI crashes at "Landing Time" after switching task_id caps/small letters
[ https://issues.apache.org/jira/browse/AIRFLOW-6033?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] ivan de los santos reassigned AIRFLOW-6033: --- Assignee: ivan de los santos > UI crashes at "Landing Time" after switching task_id caps/small letters > --- > > Key: AIRFLOW-6033 > URL: https://issues.apache.org/jira/browse/AIRFLOW-6033 > Project: Apache Airflow > Issue Type: Bug > Components: DAG, ui >Affects Versions: 1.10.6 >Reporter: ivan de los santos >Assignee: ivan de los santos >Priority: Minor > > Airflow UI will crash in the browser returning "Oops" message and the > Traceback of the crashing error. > This is caused by modifying a task_id with a capital/small letter, I will > point out some examples that will cause airflow to crash: > - task_id = "DUMMY_TASK" to task_id = "dUMMY_TASK" > - task_id = "Dummy_Task" to task_id = "dummy_Task" or "Dummy_task",... > - task_id = "Dummy_task" to task_id = "Dummy_tASk" > _ > If you change the name of the task_id to something different such as, in our > example: > - task_id = "Dummy_Task" to task_id = "DummyTask" or "Dummytask" > It won't fail since it will be recognized as new tasks, which is the expected > behaviour. > If we switch back the modified name to the original name it won't crash since > it will access to the correct tasks instances. I will explain in next > paragraphs where this error is located. > _ > *How to replicate*: > # Launch airflow webserver -p 8080 > # Go to the Airflow-UI > # Create an example DAG with a task_id name up to your choice in small > letters (ex. "run") > # Launch the DAG and wait its execution to finish > # Modify the task_id inside the DAG with the first letter to capital letter > (ex. "Run") > # Refresh the DAG > # Go to "Landing Times" inside the DAG menu in the UI > # You will get an "oops" message with the Traceback. > > *File causing the problem*: > [https://github.com/apache/airflow/blob/master/airflow/www/views.py] (lines > 1643 - 1654) > > *Reasons of the problem*: > # KeyError: 'run', meaning a dictionary does not contain the task_id "run", > it will get more into the details of where this comes from. > {code:python} > Traceback (most recent call last): > File "/home/rde/.local/lib/python3.6/site-packages/flask/app.py", line > 2446, in wsgi_app > response = self.full_dispatch_request() > File "/home/rde/.local/lib/python3.6/site-packages/flask/app.py", line > 1951, in full_dispatch_request > rv = self.handle_user_exception(e) > File "/home/rde/.local/lib/python3.6/site-packages/flask/app.py", line > 1820, in handle_user_exception > reraise(exc_type, exc_value, tb) > File "/home/rde/.local/lib/python3.6/site-packages/flask/_compat.py", line > 39, in reraise > raise value > File "/home/rde/.local/lib/python3.6/site-packages/flask/app.py", line > 1949, in full_dispatch_request > rv = self.dispatch_request() > File "/home/rde/.local/lib/python3.6/site-packages/flask/app.py", line > 1935, in dispatch_request > return self.view_functions[rule.endpoint](**req.view_args) > File "/home/rde/.local/lib/python3.6/site-packages/flask_admin/base.py", > line 69, in inner > return self._run_view(f, *args, **kwargs) > File "/home/rde/.local/lib/python3.6/site-packages/flask_admin/base.py", > line 368, in _run_view > return fn(self, *args, **kwargs) > File "/home/rde/.local/lib/python3.6/site-packages/flask_login/utils.py", > line 258, in decorated_view > return func(*args, **kwargs) > File "/home/rde/.local/lib/python3.6/site-packages/airflow/www/utils.py", > line 295, in wrapper > return f(*args, **kwargs) > File "/home/rde/.local/lib/python3.6/site-packages/airflow/utils/db.py", > line 74, in wrapper > return func(*args, **kwargs) > File "/home/rde/.local/lib/python3.6/site-packages/airflow/www/views.py", > line 1921, in landing_times > x[ti.task_id].append(dttm) > KeyError: 'run' > {code} > _ > h2. Code > {code:python} > for task in dag.tasks: > y[task.task_id] = [] > x[task.task_id] = [] > for ti in task.get_task_instances(start_date=min_date, > end_date=base_date): > ts = ti.execution_date > if dag.schedule_interval and dag.following_schedule(ts): > ts = dag.following_schedule(ts) > if ti.end_date: > dttm = wwwutils.epoch(ti.execution_date) > secs = (ti.end_date - ts).total_seconds() > x[ti.task_id].append(dttm) > y[ti.task_id].append(secs) > {code} > > We can see in first two lines inside the first for loop, how the dictionary x > and y is being filled with
[jira] [Assigned] (AIRFLOW-6033) UI crashes at "Landing Time" after switching task_id caps/small letters
[ https://issues.apache.org/jira/browse/AIRFLOW-6033?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] ivan de los santos reassigned AIRFLOW-6033: --- Assignee: (was: ivan de los santos) > UI crashes at "Landing Time" after switching task_id caps/small letters > --- > > Key: AIRFLOW-6033 > URL: https://issues.apache.org/jira/browse/AIRFLOW-6033 > Project: Apache Airflow > Issue Type: Bug > Components: DAG, ui >Affects Versions: 1.10.6 >Reporter: ivan de los santos >Priority: Minor > > Airflow UI will crash in the browser returning "Oops" message and the > Traceback of the crashing error. > This is caused by modifying a task_id with a capital/small letter, I will > point out some examples that will cause airflow to crash: > - task_id = "DUMMY_TASK" to task_id = "dUMMY_TASK" > - task_id = "Dummy_Task" to task_id = "dummy_Task" or "Dummy_task",... > - task_id = "Dummy_task" to task_id = "Dummy_tASk" > _ > If you change the name of the task_id to something different such as, in our > example: > - task_id = "Dummy_Task" to task_id = "DummyTask" or "Dummytask" > It won't fail since it will be recognized as new tasks, which is the expected > behaviour. > If we switch back the modified name to the original name it won't crash since > it will access to the correct tasks instances. I will explain in next > paragraphs where this error is located. > _ > *How to replicate*: > # Launch airflow webserver -p 8080 > # Go to the Airflow-UI > # Create an example DAG with a task_id name up to your choice in small > letters (ex. "run") > # Launch the DAG and wait its execution to finish > # Modify the task_id inside the DAG with the first letter to capital letter > (ex. "Run") > # Refresh the DAG > # Go to "Landing Times" inside the DAG menu in the UI > # You will get an "oops" message with the Traceback. > > *File causing the problem*: > [https://github.com/apache/airflow/blob/master/airflow/www/views.py] (lines > 1643 - 1654) > > *Reasons of the problem*: > # KeyError: 'run', meaning a dictionary does not contain the task_id "run", > it will get more into the details of where this comes from. > {code:python} > Traceback (most recent call last): > File "/home/rde/.local/lib/python3.6/site-packages/flask/app.py", line > 2446, in wsgi_app > response = self.full_dispatch_request() > File "/home/rde/.local/lib/python3.6/site-packages/flask/app.py", line > 1951, in full_dispatch_request > rv = self.handle_user_exception(e) > File "/home/rde/.local/lib/python3.6/site-packages/flask/app.py", line > 1820, in handle_user_exception > reraise(exc_type, exc_value, tb) > File "/home/rde/.local/lib/python3.6/site-packages/flask/_compat.py", line > 39, in reraise > raise value > File "/home/rde/.local/lib/python3.6/site-packages/flask/app.py", line > 1949, in full_dispatch_request > rv = self.dispatch_request() > File "/home/rde/.local/lib/python3.6/site-packages/flask/app.py", line > 1935, in dispatch_request > return self.view_functions[rule.endpoint](**req.view_args) > File "/home/rde/.local/lib/python3.6/site-packages/flask_admin/base.py", > line 69, in inner > return self._run_view(f, *args, **kwargs) > File "/home/rde/.local/lib/python3.6/site-packages/flask_admin/base.py", > line 368, in _run_view > return fn(self, *args, **kwargs) > File "/home/rde/.local/lib/python3.6/site-packages/flask_login/utils.py", > line 258, in decorated_view > return func(*args, **kwargs) > File "/home/rde/.local/lib/python3.6/site-packages/airflow/www/utils.py", > line 295, in wrapper > return f(*args, **kwargs) > File "/home/rde/.local/lib/python3.6/site-packages/airflow/utils/db.py", > line 74, in wrapper > return func(*args, **kwargs) > File "/home/rde/.local/lib/python3.6/site-packages/airflow/www/views.py", > line 1921, in landing_times > x[ti.task_id].append(dttm) > KeyError: 'run' > {code} > _ > h2. Code > {code:python} > for task in dag.tasks: > y[task.task_id] = [] > x[task.task_id] = [] > for ti in task.get_task_instances(start_date=min_date, > end_date=base_date): > ts = ti.execution_date > if dag.schedule_interval and dag.following_schedule(ts): > ts = dag.following_schedule(ts) > if ti.end_date: > dttm = wwwutils.epoch(ti.execution_date) > secs = (ti.end_date - ts).total_seconds() > x[ti.task_id].append(dttm) > y[ti.task_id].append(secs) > {code} > > We can see in first two lines inside the first for loop, how the dictionary x > and y is being filled with tasks_id attributes which comes from