[ 
https://issues.apache.org/jira/browse/AIRFLOW-5039?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Rodrigo Martins de Oliveira updated AIRFLOW-5039:
-------------------------------------------------
    Description: 
Function [xcom_push from airflow.models.taskinstance automatically sets the 
execution_date to 
XCOM|https://github.com/apache/airflow/blob/7f66d0a6dc13a790b4d2d31694cb50737983f82e/airflow/models/taskinstance.py#L1336],
 while this is fine when pickling is enabled it just won't work when it isn't 
as [XCOM will attempt to JSON serialize a `datetime` 
object|https://github.com/apache/airflow/blob/7f66d0a6dc13a790b4d2d31694cb50737983f82e/airflow/models/xcom.py#L229],
 which is unsupported.

 

This issue is critical as having pickle enabled poses security risks and [in 
environments such as Google Cloud Composer pickling is disabled for 
good|[https://cloud.google.com/composer/docs/concepts/airflow-configurations]].

Attempting to run DAGs with tasks which pushes content to XCOM when 
`core-enable_xcom_pickling=False` in `airflow.cfg` will result in the following 
stacktrace (tested in version 1.10.2-composer):
{quote}
 TypeError: Object of type 'datetime' is not JSON serializable
 [2019-07-24 19:14:53,193] \{models.py:1796} ERROR - Object of type 'datetime' 
is not JSON serializable
 Traceback (most recent call last):
 File "/usr/local/lib/airflow/airflow/models.py", line 1668, in _run_raw_task
 self.xcom_push(key=XCOM_RETURN_KEY, value=result)
 File "/usr/local/lib/airflow/airflow/models.py", line 2063, in xcom_push
 execution_date=execution_date or self.execution_date)
 File "/usr/local/lib/airflow/airflow/utils/db.py", line 73, in wrapper
 return func(*args, **kwargs)
 File "/usr/local/lib/airflow/airflow/models.py", line 4785, in set
 value = json.dumps(value).encode('UTF-8')
 File "/opt/python3.6/lib/python3.6/json/__init__.py", line 231, in dumps
 return _default_encoder.encode(obj)
 File "/opt/python3.6/lib/python3.6/json/encoder.py", line 199, in encode
 chunks = self.iterencode(o, _one_shot=True)
 File "/opt/python3.6/lib/python3.6/json/encoder.py", line 257, in iterencode
 return _iterencode(o, 0)
 File "/opt/python3.6/lib/python3.6/json/encoder.py", line 180, in default
 o.__class__.__name__)
 TypeError: Object of type 'datetime' is not JSON serializable
{quote}

  was:
Function [xcom_push from airflow.models.taskinstance automatically sets the 
execution_date to 
XCOM|https://github.com/apache/airflow/blob/7f66d0a6dc13a790b4d2d31694cb50737983f82e/airflow/models/taskinstance.py#L1336],
 while this is fine when pickling is enabled it just won't work when it isn't 
as [XCOM will attempt to JSON serialize a `datetime` 
object|https://github.com/apache/airflow/blob/7f66d0a6dc13a790b4d2d31694cb50737983f82e/airflow/models/xcom.py#L229],
 which is unsupported.

 

This issue is critical as having pickle enabled poses security risks and [in 
environments such as Google Cloud Composer pickling is disabled for 
good|[https://cloud.google.com/composer/docs/concepts/airflow-configurations]].

Attempting to run DAGs with tasks which pushes content to XCOM when 
`core-enable_xcom_pickling=False` in `airflow.cfg` will result in the following 
stacktrace (tested in version 1.10.2):
{quote}
 TypeError: Object of type 'datetime' is not JSON serializable
 [2019-07-24 19:14:53,193] \{models.py:1796} ERROR - Object of type 'datetime' 
is not JSON serializable
 Traceback (most recent call last):
 File "/usr/local/lib/airflow/airflow/models.py", line 1668, in _run_raw_task
 self.xcom_push(key=XCOM_RETURN_KEY, value=result)
 File "/usr/local/lib/airflow/airflow/models.py", line 2063, in xcom_push
 execution_date=execution_date or self.execution_date)
 File "/usr/local/lib/airflow/airflow/utils/db.py", line 73, in wrapper
 return func(*args, **kwargs)
 File "/usr/local/lib/airflow/airflow/models.py", line 4785, in set
 value = json.dumps(value).encode('UTF-8')
 File "/opt/python3.6/lib/python3.6/json/__init__.py", line 231, in dumps
 return _default_encoder.encode(obj)
 File "/opt/python3.6/lib/python3.6/json/encoder.py", line 199, in encode
 chunks = self.iterencode(o, _one_shot=True)
 File "/opt/python3.6/lib/python3.6/json/encoder.py", line 257, in iterencode
 return _iterencode(o, 0)
 File "/opt/python3.6/lib/python3.6/json/encoder.py", line 180, in default
 o.__class__.__name__)
 TypeError: Object of type 'datetime' is not JSON serializable
{quote}


> xcom_push execution_date setting is broken when 
> core.enable_xcom_pickling=False
> -------------------------------------------------------------------------------
>
>                 Key: AIRFLOW-5039
>                 URL: https://issues.apache.org/jira/browse/AIRFLOW-5039
>             Project: Apache Airflow
>          Issue Type: Bug
>          Components: xcom
>    Affects Versions: 1.10.2, 1.10.3
>            Reporter: Rodrigo Martins de Oliveira
>            Priority: Critical
>
> Function [xcom_push from airflow.models.taskinstance automatically sets the 
> execution_date to 
> XCOM|https://github.com/apache/airflow/blob/7f66d0a6dc13a790b4d2d31694cb50737983f82e/airflow/models/taskinstance.py#L1336],
>  while this is fine when pickling is enabled it just won't work when it isn't 
> as [XCOM will attempt to JSON serialize a `datetime` 
> object|https://github.com/apache/airflow/blob/7f66d0a6dc13a790b4d2d31694cb50737983f82e/airflow/models/xcom.py#L229],
>  which is unsupported.
>  
> This issue is critical as having pickle enabled poses security risks and [in 
> environments such as Google Cloud Composer pickling is disabled for 
> good|[https://cloud.google.com/composer/docs/concepts/airflow-configurations]].
> Attempting to run DAGs with tasks which pushes content to XCOM when 
> `core-enable_xcom_pickling=False` in `airflow.cfg` will result in the 
> following stacktrace (tested in version 1.10.2-composer):
> {quote}
>  TypeError: Object of type 'datetime' is not JSON serializable
>  [2019-07-24 19:14:53,193] \{models.py:1796} ERROR - Object of type 
> 'datetime' is not JSON serializable
>  Traceback (most recent call last):
>  File "/usr/local/lib/airflow/airflow/models.py", line 1668, in _run_raw_task
>  self.xcom_push(key=XCOM_RETURN_KEY, value=result)
>  File "/usr/local/lib/airflow/airflow/models.py", line 2063, in xcom_push
>  execution_date=execution_date or self.execution_date)
>  File "/usr/local/lib/airflow/airflow/utils/db.py", line 73, in wrapper
>  return func(*args, **kwargs)
>  File "/usr/local/lib/airflow/airflow/models.py", line 4785, in set
>  value = json.dumps(value).encode('UTF-8')
>  File "/opt/python3.6/lib/python3.6/json/__init__.py", line 231, in dumps
>  return _default_encoder.encode(obj)
>  File "/opt/python3.6/lib/python3.6/json/encoder.py", line 199, in encode
>  chunks = self.iterencode(o, _one_shot=True)
>  File "/opt/python3.6/lib/python3.6/json/encoder.py", line 257, in iterencode
>  return _iterencode(o, 0)
>  File "/opt/python3.6/lib/python3.6/json/encoder.py", line 180, in default
>  o.__class__.__name__)
>  TypeError: Object of type 'datetime' is not JSON serializable
> {quote}



--
This message was sent by Atlassian JIRA
(v7.6.14#76016)

Reply via email to