Всякий раз, когда я пытался запустить свой DAG, он получает состояние успеха, но не может выполнить задачу. При первом запуске работает отлично

< Сильный > trigger_controller_dag.py :

def conditionally_trigger(context, dag_run_obj):
    c_p = context['params']['condition_param']
    if context['params']['condition_param']:
        dag_run_obj.payload = {'message': context['params']['message']}
        pp.pprint(dag_run_obj.payload)
        return dag_run_obj

dag = DAG(
    dag_id='example_trigger_controller_dag',
    default_args={
        "owner": "airflow",
        "start_date": datetime.utcnow(),
    },
    schedule_interval='@once',
)

trigger = TriggerDagRunOperator(
    task_id='test_trigger_dagrun',
    trigger_dag_id="example_trigger_target_dag",
    python_callable=conditionally_trigger,
    params={'condition_param': True, 'message': 'Hello World'},
    dag=dag,
)

< Сильный > trigger_target_dag.py :

args = {
    'start_date': datetime.utcnow(),
    'owner': 'airflow',
}

dag = DAG(
    dag_id='example_trigger_target_dag',
    default_args=args,
    schedule_interval=None,
)


def run_this_func(ds, **kwargs):
    print("Remotely received value of {} for key=message".
          format(kwargs['dag_run'].conf['message']))


run_this = PythonOperator(
    task_id='run_this',
    provide_context=True,
    python_callable=run_this_func,
    dag=dag,
)

При запуске DAG я получаю следующую ошибку: Зависимость 'Состояние экземпляра задачи' СБОЙ: Задача находится в состоянии «успех», которое не является допустимым для выполнения. Задача должна быть очищена для запуска

0
Durai Sankaran 30 Май 2019 в 18:13

2 ответа

Лучший ответ

Ваши start_date переменные в обеих DAGS являются динамическими и могут вызывать вашу проблему 'start_date': datetime.utcnow(). Установка их в динамический запуск не рекомендуется и приводит к ошибкам.

Попробуйте установить статическую дату начала, например, 'start_date': datetime(2019, 5, 29) #year month day

Взято из FAQ по воздушным потокам

Мы не рекомендуем использовать динамические значения в качестве start_date, особенно datetime.now (), так как это может привести к путанице. Задание запускается после закрытия периода, и теоретически DAG @hourly никогда не достигнет часа спустя, поскольку now () движется дальше.

Еще один вопрос об этом: почему динамический начало вызывает проблемы

0
Zack 30 Май 2019 в 16:04

Вместо schedule_interval='@once' попробуйте schedule_interval=None.

@once означает, что он будет запущен только один раз.

0
jhnclvr 30 Май 2019 в 15:19