You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airflow.apache.org by bo...@apache.org on 2017/12/09 16:24:12 UTC
incubator-airflow git commit: [AIRFLOW-1897][AIRFLOW-1873] Task Logs
for running instance not visible in WebUI
Repository: incubator-airflow
Updated Branches:
refs/heads/master 2dbd81fa8 -> 9731ce6fa
[AIRFLOW-1897][AIRFLOW-1873] Task Logs for running instance not visible in WebUI
Due to the change in AIRFLOW-1873 we inadvertently
changed the behaviour
such that task logs for a try wouldn't show up in
the UI until after the
task run had completed.
Closes #2859 from ashb/AIRFLOW-1897-view-logs-for-
running-instance
Project: http://git-wip-us.apache.org/repos/asf/incubator-airflow/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-airflow/commit/9731ce6f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-airflow/tree/9731ce6f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-airflow/diff/9731ce6f
Branch: refs/heads/master
Commit: 9731ce6fae85c09ede54e40883f61a9d960d99e0
Parents: 2dbd81f
Author: Ash Berlin-Taylor <as...@firemirror.com>
Authored: Sat Dec 9 17:24:05 2017 +0100
Committer: Bolke de Bruin <bo...@xs4all.nl>
Committed: Sat Dec 9 17:24:05 2017 +0100
----------------------------------------------------------------------
airflow/models.py | 4 +++
airflow/utils/log/file_task_handler.py | 6 +++--
tests/utils/test_log_handlers.py | 40 +++++++++++++++++++++++++++++
3 files changed, 48 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-airflow/blob/9731ce6f/airflow/models.py
----------------------------------------------------------------------
diff --git a/airflow/models.py b/airflow/models.py
index 29977f2..a89da76 100755
--- a/airflow/models.py
+++ b/airflow/models.py
@@ -831,6 +831,10 @@ class TaskInstance(Base, LoggingMixin):
def try_number(self, value):
self._try_number = value
+ @property
+ def next_try_number(self):
+ return self._try_number + 1
+
def command(
self,
mark_success=False,
http://git-wip-us.apache.org/repos/asf/incubator-airflow/blob/9731ce6f/airflow/utils/log/file_task_handler.py
----------------------------------------------------------------------
diff --git a/airflow/utils/log/file_task_handler.py b/airflow/utils/log/file_task_handler.py
index 82fc349..e7d257f 100644
--- a/airflow/utils/log/file_task_handler.py
+++ b/airflow/utils/log/file_task_handler.py
@@ -141,12 +141,14 @@ class FileTaskHandler(logging.Handler):
# So the log for a particular task try will only show up when
# try number gets incremented in DB, i.e logs produced the time
# after cli run and before try_number + 1 in DB will not be displayed.
- next_try = task_instance.try_number
if try_number is None:
+ next_try = task_instance.next_try_number
try_numbers = list(range(1, next_try))
elif try_number < 1:
- logs = ['Error fetching the logs. Try number {} is invalid.'.format(try_number)]
+ logs = [
+ 'Error fetching the logs. Try number {} is invalid.'.format(try_number),
+ ]
return logs
else:
try_numbers = [try_number]
http://git-wip-us.apache.org/repos/asf/incubator-airflow/blob/9731ce6f/tests/utils/test_log_handlers.py
----------------------------------------------------------------------
diff --git a/tests/utils/test_log_handlers.py b/tests/utils/test_log_handlers.py
index 0feb363..f64bb32 100644
--- a/tests/utils/test_log_handlers.py
+++ b/tests/utils/test_log_handlers.py
@@ -26,6 +26,7 @@ from airflow.utils.timezone import datetime
from airflow.utils.log.logging_mixin import set_context
from airflow.utils.log.file_task_handler import FileTaskHandler
from airflow.utils.db import create_session
+from airflow.utils.state import State
DEFAULT_DATE = datetime(2016, 1, 1)
TASK_LOGGER = 'airflow.task'
@@ -108,6 +109,45 @@ class TestFileTaskLogHandler(unittest.TestCase):
# Remove the generated tmp log file.
os.remove(log_filename)
+ def test_file_task_handler_running(self):
+ def task_callable(ti, **kwargs):
+ ti.log.info("test")
+ dag = DAG('dag_for_testing_file_task_handler', start_date=DEFAULT_DATE)
+ task = PythonOperator(
+ task_id='task_for_testing_file_log_handler',
+ dag=dag,
+ python_callable=task_callable,
+ provide_context=True
+ )
+ ti = TaskInstance(task=task, execution_date=DEFAULT_DATE)
+ ti.try_number = 2
+ ti.state = State.RUNNING
+
+ logger = ti.log
+ ti.log.disabled = False
+
+ file_handler = next((handler for handler in logger.handlers
+ if handler.name == FILE_TASK_HANDLER), None)
+ self.assertIsNotNone(file_handler)
+
+ set_context(logger, ti)
+ self.assertIsNotNone(file_handler.handler)
+ # We expect set_context generates a file locally.
+ log_filename = file_handler.handler.baseFilename
+ self.assertTrue(os.path.isfile(log_filename))
+ self.assertTrue(log_filename.endswith("2.log"), log_filename)
+
+ logger.info("Test")
+
+ # Return value of read must be a list.
+ logs = file_handler.read(ti)
+ self.assertTrue(isinstance(logs, list))
+ # Logs for running tasks should show up too.
+ self.assertEqual(len(logs), 2)
+
+ # Remove the generated tmp log file.
+ os.remove(log_filename)
+
class TestFilenameRendering(unittest.TestCase):