You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airflow.apache.org by GitBox <gi...@apache.org> on 2022/10/11 09:19:38 UTC
[GitHub] [airflow] heavenlxj opened a new issue, #26988: 'LoggingProxy' object has no attribute 'encoding'
heavenlxj opened a new issue, #26988:
URL: https://github.com/apache/airflow/issues/26988
### Apache Airflow version
Other Airflow 2 version
### What happened
OS: CentOS Linux release 7.9.2009 (Core)
K8S: 1.16
Airflow: 2.2.1
The Dag Code paste here:
`
import sys
sys.path.insert(0, "/opt/bitnami/airflow/dags/scene4")
import pendulum
from airflow import DAG
from datetime import datetime
from airflow.sensors.external_task import ExternalTaskSensor
from airflow.operators.dummy import DummyOperator
from airflow.utils.dates import timedelta
from scene4.data_mock.run_env import gen_data
from airflow.operators.python import PythonOperator
local_tz = pendulum.timezone("Asia/Shanghai")
with DAG(
dag_id="DAG_4_31",
start_date=datetime(2022, 10, 10, tzinfo=local_tz),
schedule_interval=None,
catchup=False,
template_searchpath = "/opt/bitnami/airflow/dags/scene4",
params= { "scene_id": "4", "workspace_id": "1"}
) as dag:
task_start = DummyOperator(
task_id="task_start"
)
gen_data_task = PythonOperator (
task_id = "gen_data_task",
provide_context = True,
python_callable = gen_data,
retries = 10,
retry_delay = timedelta(seconds = 20),
execution_timeout = timedelta(seconds = 30),
trigger_rule = "all_success",
op_kwargs = {
}
)
task_start >> [gen_data_task]
`
in the run_env.py we import the python lib 'py_trees', and getting the error in the airflow worker as below:
`
[2022-10-10 17:32:35,132: ERROR/ForkPoolWorker-15] Failed to import: /opt/bitnami/airflow/dags/scene4/auto_gen/DAG_4_44.py
Traceback (most recent call last):
File "/opt/bitnami/airflow/venv/lib/python3.8/site-packages/airflow/models/dagbag.py", line 331, in _load_modules_from_file
loader.exec_module(new_module)
File "<frozen importlib._bootstrap_external>", line 843, in exec_module
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "/opt/bitnami/airflow/dags/scene4/auto_gen/DAG_4_44.py", line 14, in <module>
from scene4.data_mock.run_env import main
File "/opt/bitnami/airflow/dags/scene4/data_mock/run_env.py", line 11, in <module>
from data_mock.env_aml import CustomEnv
File "/opt/bitnami/airflow/dags/scene4/data_mock/env_aml.py", line 6, in <module>
from data_mock.tree import BTConfigs, BehaviorTree
File "/opt/bitnami/airflow/dags/scene4/data_mock/tree.py", line 7, in <module>
import py_trees
File "/opt/bitnami/airflow/venv/lib/python3.8/site-packages/py_trees/__init__.py", line 16, in <module>
from . import behaviour # noqa
File "/opt/bitnami/airflow/venv/lib/python3.8/site-packages/py_trees/behaviour.py", line 23, in <module>
from . import blackboard
File "/opt/bitnami/airflow/venv/lib/python3.8/site-packages/py_trees/blackboard.py", line 73, in <module>
from . import console
File "/opt/bitnami/airflow/venv/lib/python3.8/site-packages/py_trees/console.py", line 44, in <module>
def has_unicode(encoding: str=sys.stdout.encoding) -> bool:
AttributeError: 'LoggingProxy' object has no attribute 'encoding'
[2022-10-10 17:32:35,269: ERROR/ForkPoolWorker-15] Failed to execute task dag_id could not be found: DAG_4_44. Either the dag did not exist or it failed to parse..
Traceback (most recent call last):
File "/opt/bitnami/airflow/venv/lib/python3.8/site-packages/airflow/executors/celery_executor.py", line 121, in _execute_in_fork
args.func(args)
File "/opt/bitnami/airflow/venv/lib/python3.8/site-packages/airflow/cli/cli_parser.py", line 48, in command
return func(*args, **kwargs)
File "/opt/bitnami/airflow/venv/lib/python3.8/site-packages/airflow/utils/cli.py", line 92, in wrapper
return f(*args, **kwargs)
File "/opt/bitnami/airflow/venv/lib/python3.8/site-packages/airflow/cli/commands/task_command.py", line 276, in task_run
dag = get_dag(args.subdir, args.dag_id)
File "/opt/bitnami/airflow/venv/lib/python3.8/site-packages/airflow/utils/cli.py", line 193, in get_dag
raise AirflowException(
airflow.exceptions.AirflowException: dag_id could not be found: DAG_4_44. Either the dag did not exist or it failed to parse.
[2022-10-10 17:32:35,295: ERROR/ForkPoolWorker-15] Task airflow.executors.celery_executor.execute_command[4ce04924-18c1-4ad0-8025-1f78b4b1f6a1] raised unexpected: AirflowException('Celery command failed on host: airflow-worker-0.airflow-worker-hl.airflow.svc.cluster.local')
`
search some similar issue for this post about celery worker stdout:
https://docs.celeryq.dev/en/stable/userguide/configuration.html?highlight=REDIRECT_STDOUTS#std-setting-worker_redirect_stdouts
it tells you can setting the celery config 'worker_redirect_stdouts' to False to avoid this error.
what I did:
modify the 'airflow.config_templates.default_celery.py', and add this config into DEFAULT_CELERY_CONFIG:
`
DEFAULT_CELERY_CONFIG = {
'accept_content': ['json'],
'event_serializer': 'json',
'worker_prefetch_multiplier': conf.getint('celery', 'worker_prefetch_multiplier', fallback=1),
'task_acks_late': True,
'task_default_queue': conf.get('operators', 'DEFAULT_QUEUE'),
'task_default_exchange': conf.get('operators', 'DEFAULT_QUEUE'),
'task_track_started': conf.get('celery', 'task_track_started', fallback=True),
'broker_url': broker_url,
'broker_transport_options': broker_transport_options,
'result_backend': conf.get('celery', 'RESULT_BACKEND'),
'worker_concurrency': conf.getint('celery', 'WORKER_CONCURRENCY'),
++ 'worker_redirect_stdouts': False
}
`
i see the airflow config inject the celery config in:
<img width="813" alt="image" src="https://user-images.githubusercontent.com/4516605/195049341-e0a9e209-b963-42b0-a7dd-8f73fe9c507b.png">
so the problem is :
1. is this a bug for airflow logging issue?
2. if need to set the celery config, what is the right way?
now i try to make this config effective doing that:
1. add a new celery_config.py with new configs
2. mount this py into worker pod as volume path
3. inject the k8s ENV for 'celery_config_options' point to the celery_config file
so should be do this properly?
### What you think should happen instead
_No response_
### How to reproduce
_No response_
### Operating System
CentOS Linux release 7.9.2009 (Core)
### Versions of Apache Airflow Providers
_No response_
### Deployment
Other 3rd-party Helm chart
### Deployment details
bitnami:airflow. 2.2.1
### Anything else
_No response_
### Are you willing to submit PR?
- [X] Yes I am willing to submit a PR!
### Code of Conduct
- [X] I agree to follow this project's [Code of Conduct](https://github.com/apache/airflow/blob/main/CODE_OF_CONDUCT.md)
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
[GitHub] [airflow] uranusjr closed issue #26988: 'LoggingProxy' object has no attribute 'encoding'
Posted by GitBox <gi...@apache.org>.
uranusjr closed issue #26988: 'LoggingProxy' object has no attribute 'encoding'
URL: https://github.com/apache/airflow/issues/26988
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
[GitHub] [airflow] uranusjr commented on issue #26988: 'LoggingProxy' object has no attribute 'encoding'
Posted by GitBox <gi...@apache.org>.
uranusjr commented on issue #26988:
URL: https://github.com/apache/airflow/issues/26988#issuecomment-1275741574
Yeah Celery patches stdout/stderr, but apparently that patch is incompatible with py_trees. I’m not sure whether it’s Celery’s fault (they should but do not provide `encoding`) or py_trees’s (they should not but do depend on `encoding`), but the solution is out of Airflow’s hands either way.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
[GitHub] [airflow] o-nikolas commented on issue #26988: 'LoggingProxy' object has no attribute 'encoding'
Posted by GitBox <gi...@apache.org>.
o-nikolas commented on issue #26988:
URL: https://github.com/apache/airflow/issues/26988#issuecomment-1275527487
Hey @heavenlxj,
I don't think this is an Airflow issue, it's a problem between Celery and the thirdparty python modules you're using. The method you used to update the celery config is the standard way I've seen as well, i.e.:
1. Create a new module which imports the default celery config
2. Add/modify any additional config you want
3. Put this module somewhere on Airflow path
4. Specify this config module to be used by updating the `celery_config_options` Airflow config (whether that be airflow.cfg, export env var, etc)
@eladkal, @kaxil
I think that this issue can be resolved, working as intended, WDYT?
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org