Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Random "duplicate key value violates unique constraint" errors when initializing the postgres database #23512

Closed
2 tasks done
zachliu opened this issue May 5, 2022 · 70 comments · Fixed by #27297
Closed
2 tasks done
Labels
affected_version:2.3 Issues Reported for 2.3 area:core area:MetaDB Meta Database related issues. area:upgrade Facilitating migration to a newer version of Airflow kind:bug This is a clearly a bug
Milestone

Comments

@zachliu
Copy link
Contributor

zachliu commented May 5, 2022

Apache Airflow version

2.3.0 (latest released)

What happened

while testing airflow 2.3.0 locally (using postgresql 12.4), the webserver container shows random errors:

webserver_1  | + airflow db init
...
webserver_1  | + exec airflow webserver
...
webserver_1  | [2022-05-04 18:58:46,011] {{manager.py:568}} INFO - Added Permission menu access on Permissions to role Admin
postgres_1   | 2022-05-04 18:58:46.013 UTC [41] ERROR:  duplicate key value violates unique constraint "ab_permission_view_role_permission_view_id_role_id_key"
postgres_1   | 2022-05-04 18:58:46.013 UTC [41] DETAIL:  Key (permission_view_id, role_id)=(204, 1) already exists.
postgres_1   | 2022-05-04 18:58:46.013 UTC [41] STATEMENT:  INSERT INTO ab_permission_view_role (id, permission_view_id, role_id) VALUES (nextval('ab_permission_view_role_id_seq'), 204, 1) RETURNING ab_permission_view_role.id
webserver_1  | [2022-05-04 18:58:46,015] {{manager.py:570}} ERROR - Add Permission to Role Error: (psycopg2.errors.UniqueViolation) duplicate key value violates unique constraint "ab_permission_view_role_permission_view_id_role_id_key"
webserver_1  | DETAIL:  Key (permission_view_id, role_id)=(204, 1) already exists.
webserver_1  |
webserver_1  | [SQL: INSERT INTO ab_permission_view_role (id, permission_view_id, role_id) VALUES (nextval('ab_permission_view_role_id_seq'), %(permission_view_id)s, %(role_id)s) RETURNING ab_permission_view_role.id]
webserver_1  | [parameters: {'permission_view_id': 204, 'role_id': 1}]

notes:

  1. when the db is first initialized, i have ~40 errors like this (with ~40 different permission_view_id but always the same 'role_id': 1)
  2. when it's not the first time initializing db, i always have 1 error like this but it shows different permission_view_id each time
  3. all these errors don't seem to have any real negative effects, the webserver is still running and airflow is still running and scheduling tasks
  4. "occasionally" i do get real exceptions which render the webserver workers all dead:
postgres_1   | 2022-05-05 20:03:30.580 UTC [44] ERROR:  duplicate key value violates unique constraint "ab_permission_view_role_permission_view_id_role_id_key"
postgres_1   | 2022-05-05 20:03:30.580 UTC [44] DETAIL:  Key (permission_view_id, role_id)=(214, 1) already exists.
postgres_1   | 2022-05-05 20:03:30.580 UTC [44] STATEMENT:  INSERT INTO ab_permission_view_role (id, permission_view_id, role_id) VALUES (nextval('ab_permission_view_role_id_seq'), 214, 1) RETURNING ab_permission_view_role.id
webserver_1  | [2022-05-05 20:03:30 +0000] [121] [ERROR] Exception in worker process
webserver_1  | Traceback (most recent call last):
webserver_1  |   File "/usr/local/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1705, in _execute_context
webserver_1  |     self.dialect.do_execute(
webserver_1  |   File "/usr/local/lib/python3.8/site-packages/sqlalchemy/engine/default.py", line 716, in do_execute
webserver_1  |     cursor.execute(statement, parameters)
webserver_1  | psycopg2.errors.UniqueViolation: duplicate key value violates unique constraint "ab_permission_view_role_permission_view_id_role_id_key"
webserver_1  | DETAIL:  Key (permission_view_id, role_id)=(214, 1) already exists.
webserver_1  |
webserver_1  |
webserver_1  | The above exception was the direct cause of the following exception:
webserver_1  |
webserver_1  | Traceback (most recent call last):
webserver_1  |   File "/usr/local/lib/python3.8/site-packages/gunicorn/arbiter.py", line 589, in spawn_worker
webserver_1  |     worker.init_process()
webserver_1  |   File "/usr/local/lib/python3.8/site-packages/gunicorn/workers/base.py", line 134, in init_process
webserver_1  |     self.load_wsgi()
webserver_1  |   File "/usr/local/lib/python3.8/site-packages/gunicorn/workers/base.py", line 146, in load_wsgi
webserver_1  |     self.wsgi = self.app.wsgi()
webserver_1  |   File "/usr/local/lib/python3.8/site-packages/gunicorn/app/base.py", line 67, in wsgi
webserver_1  |     self.callable = self.load()
webserver_1  |   File "/usr/local/lib/python3.8/site-packages/gunicorn/app/wsgiapp.py", line 58, in load
webserver_1  |     return self.load_wsgiapp()
webserver_1  |   File "/usr/local/lib/python3.8/site-packages/gunicorn/app/wsgiapp.py", line 48, in load_wsgiapp
webserver_1  |     return util.import_app(self.app_uri)
webserver_1  |   File "/usr/local/lib/python3.8/site-packages/gunicorn/util.py", line 412, in import_app
webserver_1  |     app = app(*args, **kwargs)
webserver_1  |   File "/usr/local/lib/python3.8/site-packages/airflow/www/app.py", line 158, in cached_app
webserver_1  |     app = create_app(config=config, testing=testing)
webserver_1  |   File "/usr/local/lib/python3.8/site-packages/airflow/www/app.py", line 146, in create_app
webserver_1  |     sync_appbuilder_roles(flask_app)
webserver_1  |   File "/usr/local/lib/python3.8/site-packages/airflow/www/app.py", line 68, in sync_appbuilder_roles
webserver_1  |     flask_app.appbuilder.sm.sync_roles()
webserver_1  |   File "/usr/local/lib/python3.8/site-packages/airflow/www/security.py", line 580, in sync_roles
webserver_1  |     self.update_admin_permission()
webserver_1  |   File "/usr/local/lib/python3.8/site-packages/airflow/www/security.py", line 562, in update_admin_permission
webserver_1  |     self.get_session.commit()
webserver_1  |   File "<string>", line 2, in commit
webserver_1  |   File "/usr/local/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 1423, in commit
webserver_1  |     self._transaction.commit(_to_root=self.future)
webserver_1  |   File "/usr/local/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 829, in commit
webserver_1  |     self._prepare_impl()
webserver_1  |   File "/usr/local/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 808, in _prepare_impl
webserver_1  |     self.session.flush()
webserver_1  |   File "/usr/local/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 3255, in flush
webserver_1  |     self._flush(objects)
webserver_1  |   File "/usr/local/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 3395, in _flush
webserver_1  |     transaction.rollback(_capture_exception=True)
webserver_1  |   File "/usr/local/lib/python3.8/site-packages/sqlalchemy/util/langhelpers.py", line 70, in __exit__
webserver_1  |     compat.raise_(
webserver_1  |   File "/usr/local/lib/python3.8/site-packages/sqlalchemy/util/compat.py", line 211, in raise_
webserver_1  |     raise exception
webserver_1  |   File "/usr/local/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 3355, in _flush
webserver_1  |     flush_context.execute()
webserver_1  |   File "/usr/local/lib/python3.8/site-packages/sqlalchemy/orm/unitofwork.py", line 453, in execute
webserver_1  |     rec.execute(self)
webserver_1  |   File "/usr/local/lib/python3.8/site-packages/sqlalchemy/orm/unitofwork.py", line 576, in execute
webserver_1  |     self.dependency_processor.process_saves(uow, states)
webserver_1  |   File "/usr/local/lib/python3.8/site-packages/sqlalchemy/orm/dependency.py", line 1182, in process_saves
webserver_1  |     self._run_crud(
webserver_1  |   File "/usr/local/lib/python3.8/site-packages/sqlalchemy/orm/dependency.py", line 1245, in _run_crud
webserver_1  |     connection.execute(statement, secondary_insert)
webserver_1  |   File "/usr/local/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1200, in execute
webserver_1  |     return meth(self, multiparams, params, _EMPTY_EXECUTION_OPTS)
webserver_1  |   File "/usr/local/lib/python3.8/site-packages/sqlalchemy/sql/elements.py", line 313, in _execute_on_connection
webserver_1  |     return connection._execute_clauseelement(
webserver_1  |   File "/usr/local/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1389, in _execute_clauseelement
webserver_1  |     ret = self._execute_context(
webserver_1  |   File "/usr/local/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1748, in _execute_context
webserver_1  |     self._handle_dbapi_exception(
webserver_1  |   File "/usr/local/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1929, in _handle_dbapi_exception
webserver_1  |     util.raise_(
webserver_1  |   File "/usr/local/lib/python3.8/site-packages/sqlalchemy/util/compat.py", line 211, in raise_
webserver_1  |     raise exception
webserver_1  |   File "/usr/local/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1705, in _execute_context
webserver_1  |     self.dialect.do_execute(
webserver_1  |   File "/usr/local/lib/python3.8/site-packages/sqlalchemy/engine/default.py", line 716, in do_execute
webserver_1  |     cursor.execute(statement, parameters)
webserver_1  | sqlalchemy.exc.IntegrityError: (psycopg2.errors.UniqueViolation) duplicate key value violates unique constraint "ab_permission_view_role_permission_view_id_role_id_key"
webserver_1  | DETAIL:  Key (permission_view_id, role_id)=(214, 1) already exists.
webserver_1  |
webserver_1  | [SQL: INSERT INTO ab_permission_view_role (id, permission_view_id, role_id) VALUES (nextval('ab_permission_view_role_id_seq'), %(permission_view_id)s, %(role_id)s) RETURNING ab_permission_view_role.id]
webserver_1  | [parameters: {'permission_view_id': 214, 'role_id': 1}]
webserver_1  | (Background on this error at: http://sqlalche.me/e/14/gkpj)
webserver_1  | [2022-05-05 20:03:30 +0000] [121] [INFO] Worker exiting (pid: 121)
flower_1     | + exec airflow celery flower
scheduler_1  | + exec airflow scheduler
webserver_1  | [2022-05-05 20:03:31 +0000] [118] [INFO] Worker exiting (pid: 118)
webserver_1  | [2022-05-05 20:03:31 +0000] [119] [INFO] Worker exiting (pid: 119)
webserver_1  | [2022-05-05 20:03:31 +0000] [120] [INFO] Worker exiting (pid: 120)
worker_1     | + exec airflow celery worker

However such exceptions are rare and pure random, i can't find a way to reproduce them consistently.

What you think should happen instead

prior to 2.3.0 there were no such errors

How to reproduce

No response

Operating System

Linux Mint 20.3

Versions of Apache Airflow Providers

No response

Deployment

Docker-Compose

Deployment details

No response

Anything else

No response

Are you willing to submit PR?

  • Yes I am willing to submit a PR!

Code of Conduct

@zachliu zachliu added area:core kind:bug This is a clearly a bug labels May 5, 2022
@zachliu
Copy link
Contributor Author

zachliu commented May 6, 2022

@ephraimbuddy sorry man, i actually have no idea what could cause the issue. i have only wild guesses 😅

@ephraimbuddy
Copy link
Contributor

Oh, I assigned it to you because you checked that you are willing to submit a PR. I'll unassign you now :)

@zachliu
Copy link
Contributor Author

zachliu commented May 7, 2022

further investigation shows that we are removing the same "permissions" and "permission views" repeatedly and trying to add them back repeatedly:

webserver_1  | [2022-05-07 02:50:25 +0000] [107] [INFO] Using worker: sync
webserver_1  | [2022-05-07 02:50:25 +0000] [117] [INFO] Booting worker with pid: 117
webserver_1  | [2022-05-07 02:50:25 +0000] [118] [INFO] Booting worker with pid: 118
webserver_1  | [2022-05-07 02:50:25 +0000] [119] [INFO] Booting worker with pid: 119
webserver_1  | [2022-05-07 02:50:25 +0000] [120] [INFO] Booting worker with pid: 120
webserver_1  | [2022-05-07 02:50:25,341] {{logging_config.py:46}} INFO - Successfully imported user-defined logging config from log_config.LOGGING_CONFIG
webserver_1  | [2022-05-07 02:50:25,400] {{logging_config.py:46}} INFO - Successfully imported user-defined logging config from log_config.LOGGING_CONFIG
webserver_1  | [2022-05-07 02:50:25,532] {{logging_config.py:46}} INFO - Successfully imported user-defined logging config from log_config.LOGGING_CONFIG
webserver_1  | [2022-05-07 02:50:25,600] {{logging_config.py:46}} INFO - Successfully imported user-defined logging config from log_config.LOGGING_CONFIG
webserver_1  | [2022-05-07 02:50:25,692] {{manager.py:585}} INFO - Removed Permission can create on Users to role Admin
webserver_1  | [2022-05-07 02:50:25,705] {{manager.py:585}} INFO - Removed Permission can create on Users to role Admin
webserver_1  | [2022-05-07 02:50:25,724] {{manager.py:543}} INFO - Removed Permission View: can_create on Users
webserver_1  | /usr/local/lib/python3.8/site-packages/sqlalchemy/orm/persistence.py:1461 SAWarning: DELETE statement on table 'ab_permission_view' expected to delete 1 row(s); 0 were matched.  Please set confirm_deleted_rows=False within the mapper configuration to prevent this warning.
webserver_1  | [2022-05-07 02:50:25,736] {{manager.py:543}} INFO - Removed Permission View: can_create on Users
webserver_1  | [2022-05-07 02:50:25,912] {{manager.py:585}} INFO - Removed Permission menu access on Permissions to role Admin
webserver_1  | [2022-05-07 02:50:25,912] {{manager.py:585}} INFO - Removed Permission menu access on Permissions to role Admin
webserver_1  | [2022-05-07 02:50:25,923] {{manager.py:543}} INFO - Removed Permission View: menu_access on Permissions
webserver_1  | /usr/local/lib/python3.8/site-packages/sqlalchemy/orm/persistence.py:1461 SAWarning: DELETE statement on table 'ab_permission_view' expected to delete 1 row(s); 0 were matched.  Please set confirm_deleted_rows=False within the mapper configuration to prevent this warning.
webserver_1  | [2022-05-07 02:50:25,935] {{manager.py:543}} INFO - Removed Permission View: menu_access on Permissions
webserver_1  | [2022-05-07 02:50:26,016] {{manager.py:508}} INFO - Created Permission View: menu access on Permissions
webserver_1  | [2022-05-07 02:50:26,027] {{manager.py:568}} INFO - Added Permission menu access on Permissions to role Admin
webserver_1  | [2022-05-07 02:50:26,067] {{manager.py:585}} INFO - Removed Permission menu access on Permissions to role Admin
webserver_1  | [2022-05-07 02:50:26,091] {{manager.py:543}} INFO - Removed Permission View: menu_access on Permissions
postgres_1   | 2022-05-07 02:50:26.093 UTC [43] ERROR:  insert or update on table "ab_permission_view_role" violates foreign key constraint "ab_permission_view_role_permission_view_id_fkey"
postgres_1   | 2022-05-07 02:50:26.093 UTC [43] DETAIL:  Key (permission_view_id)=(220) is not present in table "ab_permission_view".
postgres_1   | 2022-05-07 02:50:26.093 UTC [43] STATEMENT:  INSERT INTO ab_permission_view_role (id, permission_view_id, role_id) VALUES (nextval('ab_permission_view_role_id_seq'), 220, 1) RETURNING ab_permission_view_role.id
webserver_1  | [2022-05-07 02:50:26,096] {{manager.py:570}} ERROR - Add Permission to Role Error: (psycopg2.errors.ForeignKeyViolation) insert or update on table "ab_permission_view_role" violates foreign key constraint "ab_permission_view_role_permission_view_id_fkey"
webserver_1  | DETAIL:  Key (permission_view_id)=(220) is not present in table "ab_permission_view".
webserver_1  |
webserver_1  | [SQL: INSERT INTO ab_permission_view_role (id, permission_view_id, role_id) VALUES (nextval('ab_permission_view_role_id_seq'), %(permission_view_id)s, %(role_id)s) RETURNING ab_permission_view_role.id]
webserver_1  | [parameters: {'permission_view_id': 220, 'role_id': 1}]
webserver_1  | (Background on this error at: http://sqlalche.me/e/14/gkpj)

notice the 2 SAWarning: ... when we tried to Removed Permission View: can_create on Users. Apparently the same DELETE was executed twice.

I don't understand why we Removed Permission menu access on Permissions from role Admin and then immediately Added Permission menu access on Permissions to role Admin (the same with can create on Users permission) 🤔

The database screenshots which shows the permissions and permission views are being deleted and added back hence their IDs are increasing

2022-05-06_23-55

2022-05-06_23-56

interestingly previous airflow versions also have the same behavior but there were no errors ¯\_(ツ)_/¯

@potiuk
Copy link
Member

potiuk commented May 9, 2022

This sounds like a bug in sync_appbuilder_roles implementation - when we have more than 1 webserver or when they are crashing during first start they then subsequently fail on starting another webserver via wsgi. @jhtimmins - maybe you can take a look at that ?

@zachliu
Copy link
Contributor Author

zachliu commented May 9, 2022

webserver_1  | [2022-05-07 02:50:25 +0000] [107] [INFO] Using worker: sync
webserver_1  | [2022-05-07 02:50:25 +0000] [117] [INFO] Booting worker with pid: 117
webserver_1  | [2022-05-07 02:50:25 +0000] [118] [INFO] Booting worker with pid: 118
webserver_1  | [2022-05-07 02:50:25 +0000] [119] [INFO] Booting worker with pid: 119
webserver_1  | [2022-05-07 02:50:25 +0000] [120] [INFO] Booting worker with pid: 120
webserver_1  | [2022-05-07 02:50:25,341] {{logging_config.py:46}} INFO - Successfully imported user-defined logging config from log_config.LOGGING_CONFIG
webserver_1  | [2022-05-07 02:50:25,400] {{logging_config.py:46}} INFO - Successfully imported user-defined logging config from log_config.LOGGING_CONFIG
webserver_1  | [2022-05-07 02:50:25,532] {{logging_config.py:46}} INFO - Successfully imported user-defined logging config from log_config.LOGGING_CONFIG
webserver_1  | [2022-05-07 02:50:25,600] {{logging_config.py:46}} INFO - Successfully imported user-defined logging config from log_config.LOGGING_CONFIG
webserver_1  | [2022-05-07 02:50:25,692] {{manager.py:585}} INFO - Removed Permission can create on Users to role Admin

i see those repeated log messages right after booting up 4 worker sub-processes, are these workers trying to update the database at the same time using the same DELETE or INSERT statements?

@potiuk
Copy link
Member

potiuk commented May 9, 2022

Yeah. I think the problem is that the webserver spawns 4 parallel webserver processes (workers) and each process tries to update the permissions at the same time)

@eladkal eladkal added area:MetaDB Meta Database related issues. area:upgrade Facilitating migration to a newer version of Airflow affected_version:2.3 Issues Reported for 2.3 labels May 11, 2022
@gitruhul
Copy link
Contributor

Which library I should downgrade to get my upgrade going. Any suggestions, please?

@shawnngtq
Copy link

shawnngtq commented May 15, 2022

I don't think downgrade library will work? Seems like we have to wait for v2.3.1.

I am also facing exact thing for v2.3.0 using docker-compose installation

@zachliu
Copy link
Contributor Author

zachliu commented May 28, 2022

both

init_appbuilder(flask_app)

and
sync_appbuilder_roles(flask_app)

are doing clashing reads/writes to the database once this line
with subprocess.Popen(run_args, close_fds=True) as gunicorn_master_proc:

spins up 4 (by default) gunicorn workers. so i guess if i do this

            os.environ['SKIP_DAGS_PARSING'] = 'True'
            app = create_app(None)
            os.environ.pop('SKIP_DAGS_PARSING')

            # set webserver.update_fab_perms to "False" here 
            # would cause the workers not to do the clashing reads/writes

            with subprocess.Popen(run_args, close_fds=True) as gunicorn_master_proc:
                monitor_gunicorn(gunicorn_master_proc.pid)

i know it's weird to alter it on the fly. an alternative is to set an env var such as

os.environ['UPDATE_FAB_PERMS_DONE'] = 'True'

and then check it along side with webserver.update_fab_perms in

if conf.getboolean('webserver', 'UPDATE_FAB_PERMS'):
and
update_perms=conf.getboolean('webserver', 'UPDATE_FAB_PERMS'),

i tried the env var solution, it worked. but it's janky. it requires an extra env var 🤔

@uranusjr
Copy link
Member

This seems somewhat related to #23926. cc @jhtimmins

@zachliu
Copy link
Contributor Author

zachliu commented May 29, 2022

aha, i think it's exactly the same as #23926: all gunicorn workers are executing the same code causing clashes on the database

maybe i'll move my comments there

@zachliu
Copy link
Contributor Author

zachliu commented Jun 8, 2022

@jhtimmins #24065 didn't fix this issue:

webserver_1  | [2022-06-08 15:14:49 +0000] [108] [INFO] Listening at: http://0.0.0.0:5000 (108)
webserver_1  | [2022-06-08 15:14:49 +0000] [108] [INFO] Using worker: sync
webserver_1  | [2022-06-08 15:14:49 +0000] [118] [INFO] Booting worker with pid: 118
webserver_1  | [2022-06-08 15:14:49 +0000] [119] [INFO] Booting worker with pid: 119
webserver_1  | [2022-06-08 15:14:49 +0000] [120] [INFO] Booting worker with pid: 120
webserver_1  | [2022-06-08 15:14:49 +0000] [121] [INFO] Booting worker with pid: 121
webserver_1  | [2022-06-08 15:14:49,915] {{logging_config.py:46}} INFO - Successfully imported user-defined logging config from log_config.LOGGING_CONFIG
webserver_1  | [2022-06-08 15:14:49,993] {{logging_config.py:46}} INFO - Successfully imported user-defined logging config from log_config.LOGGING_CONFIG
webserver_1  | [2022-06-08 15:14:49,994] {{logging_config.py:46}} INFO - Successfully imported user-defined logging config from log_config.LOGGING_CONFIG
webserver_1  | [2022-06-08 15:14:50,172] {{logging_config.py:46}} INFO - Successfully imported user-defined logging config from log_config.LOGGING_CONFIG
webserver_1  | [2022-06-08 15:14:50,232] {{manager.py:585}} INFO - Removed Permission can create on Users to role Admin
webserver_1  | [2022-06-08 15:14:50,255] {{manager.py:543}} INFO - Removed Permission View: can_create on Users
webserver_1  | [2022-06-08 15:14:50,435] {{manager.py:585}} INFO - Removed Permission menu access on Permissions to role Admin
webserver_1  | [2022-06-08 15:14:50,448] {{manager.py:543}} INFO - Removed Permission View: menu_access on Permissions
postgres_1   | 2022-06-08 15:14:50.544 UTC [41] ERROR:  duplicate key value violates unique constraint "ab_view_menu_name_key"
postgres_1   | 2022-06-08 15:14:50.544 UTC [41] DETAIL:  Key (name)=(Permission Pairs) already exists.
postgres_1   | 2022-06-08 15:14:50.544 UTC [41] STATEMENT:  INSERT INTO ab_view_menu (id, name) VALUES (nextval('ab_view_menu_id_seq'), 'Permission Pairs') RETURNING ab_view_menu.id
webserver_1  | [2022-06-08 15:14:50,545] {{manager.py:420}} ERROR - Add View Menu Error: (psycopg2.errors.UniqueViolation) duplicate key value violates unique constraint "ab_view_menu_name_key"
webserver_1  | DETAIL:  Key (name)=(Permission Pairs) already exists.
webserver_1  |
webserver_1  | [SQL: INSERT INTO ab_view_menu (id, name) VALUES (nextval('ab_view_menu_id_seq'), %(name)s) RETURNING ab_view_menu.id]
webserver_1  | [parameters: {'name': 'Permission Pairs'}]
webserver_1  | (Background on this error at: http://sqlalche.me/e/14/gkpj)
postgres_1   | 2022-06-08 15:14:50.554 UTC [42] ERROR:  duplicate key value violates unique constraint "ab_permission_view_permission_id_view_menu_id_key"
postgres_1   | 2022-06-08 15:14:50.554 UTC [42] DETAIL:  Key (permission_id, view_menu_id)=(5, 84) already exists.
postgres_1   | 2022-06-08 15:14:50.554 UTC [42] STATEMENT:  INSERT INTO ab_permission_view (id, permission_id, view_menu_id) VALUES (nextval('ab_permission_view_id_seq'), 5, 84) RETURNING ab_permission_view.id
webserver_1  | [2022-06-08 15:14:50,554] {{manager.py:508}} INFO - Created Permission View: menu access on Permission Pairs
webserver_1  | [2022-06-08 15:14:50,555] {{manager.py:511}} ERROR - Creation of Permission View Error: (psycopg2.errors.UniqueViolation) duplicate key value violates unique constraint "ab_permission_view_permission_id_view_menu_id_key"
webserver_1  | DETAIL:  Key (permission_id, view_menu_id)=(5, 84) already exists.
webserver_1  |
webserver_1  | [SQL: INSERT INTO ab_permission_view (id, permission_id, view_menu_id) VALUES (nextval('ab_permission_view_id_seq'), %(permission_id)s, %(view_menu_id)s) RETURNING ab_permission_view.id]
webserver_1  | [parameters: {'permission_id': 5, 'view_menu_id': 84}]
webserver_1  | (Background on this error at: http://sqlalche.me/e/14/gkpj)
webserver_1  | [2022-06-08 15:14:50,564] {{manager.py:568}} INFO - Added Permission menu access on Permission Pairs to role Admin

@zachliu
Copy link
Contributor Author

zachliu commented Jun 8, 2022

still seeing

webserver_1  | [2022-06-08 15:28:57,507] {{manager.py:585}} INFO - Removed Permission can create on Users to role Admin

and

webserver_1  | [2022-06-08 15:28:57,536] {{manager.py:543}} INFO - Removed Permission View: can_create on Users
webserver_1  | [2022-06-08 15:28:59,994] {{manager.py:508}} INFO - Created Permission View: can create on Users

@hterik
Copy link
Contributor

hterik commented Oct 6, 2022

Seeing this in 2.4.1 also.

Workaround is to set config update_fab_perms = False

@zachliu
Copy link
Contributor Author

zachliu commented Oct 6, 2022

@hterik sadly sometimes we do need that config to be True, i've proposed a workaround, it ain't pretty

@potiuk
Copy link
Member

potiuk commented Oct 6, 2022

I believe This is going to be fixed in 2.4.2 #26885

@potiuk potiuk linked a pull request Oct 6, 2022 that will close this issue
@zachliu
Copy link
Contributor Author

zachliu commented Oct 6, 2022

how does #26885 solve the clashing reads/writes? 🤔

@ashb
Copy link
Member

ashb commented Oct 6, 2022

I've seen this from time to time and this is a separate issue to the null constraints violation.

@potiuk
Copy link
Member

potiuk commented Oct 6, 2022

Ah. My mistake.

@matteosdocsity
Copy link
Contributor

matteosdocsity commented Oct 7, 2022

so update_fab_perms = False and AIRFLOW__WEBSERVER__UPDATE_FAB_PERMS ENV does not change anything also in relation that with AUTH_OAUTH where is required to have fab permissions to be updated 😞..any other clue?

@lockkie0
Copy link

lockkie0 commented Oct 10, 2022

I also see this issue every time when the web server starts up. Env AUTH_TYPE = AUTH_OID. I use Airflow 2.3.3 with postgresql . AIRFLOW__WEBSERVER__UPDATE_FAB_PERMS = False also does not change anything.

@mjkonarski-b
Copy link
Contributor

mjkonarski-b commented Oct 10, 2022

I can see the same problem after enabling Okta. Unfortunately, for me it happens every time Kubernetes tries to start a new webserver pod. Airflow 2.3.3. Logs: https://gist.github.com/mjkonarski-b/8dd973b5a5ed99446508bf2ca74f967e

@stephenonethree
Copy link

Saw this after upgrading from 2.2.5 to 2.3.2. Dropping [webserver].workers to 1 seems to work as a temporary workaround.

@zachliu
Copy link
Contributor Author

zachliu commented Oct 27, 2022

i checked out 2.4.2 and did

wget -qO - https://github.com/apache/airflow/pull/27297.patch | git apply -v -3

then built my own airflow

breeze release-management prepare-airflow-package --package-format=wheel --verbose

then installed it

pip install apache_airflow-2.4.2-py3-none-any.whl[...] --constraint ...

no more "duplicate key value violates unique constraint" errors
🚀 🚀 🚀
🚀 🚀
🚀

@jscheffl
Copy link
Contributor

Thanks for the good news. I tried to test in our Azure deployment (using the official Helm chart) and Airflow 2.4.2 and it seems in our deployment it is still showing the same constraint errors. I am a bit confused because the milestoone was now modfied to be Airflow 2.4.3 but above the success is reported on 2.4.2... which release it it assumed to be in?

Our logs still look like attached (don't want to spoil the message thread with hundrets of lines...,):

(...)
[2022-10-31 12:59:33 +0000] [41] [INFO] Worker exiting (pid: 41)
[2022-10-31 12:59:33 +0000] [42] [ERROR] Exception in worker process
Traceback (most recent call last):
  File "/home/airflow/.local/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1802, in _execute_context
    self.dialect.do_execute(
  File "/home/airflow/.local/lib/python3.8/site-packages/sqlalchemy/engine/default.py", line 719, in do_execute
    cursor.execute(statement, parameters)
psycopg2.errors.UniqueViolation: duplicate key value violates unique constraint "ab_permission_view_role_permission_view_id_role_id_key"
DETAIL:  Key (permission_view_id, role_id)=(3097, 1) already exists.


The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/airflow/.local/lib/python3.8/site-packages/gunicorn/arbiter.py", line 589, in spawn_worker
    worker.init_process()
  File "/home/airflow/.local/lib/python3.8/site-packages/gunicorn/workers/base.py", line 134, in init_process
    self.load_wsgi()
  File "/home/airflow/.local/lib/python3.8/site-packages/gunicorn/workers/base.py", line 146, in load_wsgi
    self.wsgi = self.app.wsgi()
  File "/home/airflow/.local/lib/python3.8/site-packages/gunicorn/app/base.py", line 67, in wsgi
    self.callable = self.load()
  File "/home/airflow/.local/lib/python3.8/site-packages/gunicorn/app/wsgiapp.py", line 58, in load
    return self.load_wsgiapp()
  File "/home/airflow/.local/lib/python3.8/site-packages/gunicorn/app/wsgiapp.py", line 48, in load_wsgiapp
    return util.import_app(self.app_uri)
  File "/home/airflow/.local/lib/python3.8/site-packages/gunicorn/util.py", line 412, in import_app
    app = app(*args, **kwargs)
  File "/home/airflow/.local/lib/python3.8/site-packages/airflow/www/app.py", line 167, in cached_app
    app = create_app(config=config, testing=testing)
  File "/home/airflow/.local/lib/python3.8/site-packages/airflow/www/app.py", line 154, in create_app
    sync_appbuilder_roles(flask_app)
  File "/home/airflow/.local/lib/python3.8/site-packages/airflow/www/app.py", line 73, in sync_appbuilder_roles
    flask_app.appbuilder.sm.sync_roles()
  File "/home/airflow/.local/lib/python3.8/site-packages/airflow/www/security.py", line 600, in sync_roles
    self.update_admin_permission()
  File "/home/airflow/.local/lib/python3.8/site-packages/airflow/www/security.py", line 582, in update_admin_permission
    self.get_session.commit()
  File "<string>", line 2, in commit
  File "/home/airflow/.local/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 1428, in commit
    self._transaction.commit(_to_root=self.future)
  File "/home/airflow/.local/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 829, in commit
    self._prepare_impl()
  File "/home/airflow/.local/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 808, in _prepare_impl
    self.session.flush()
  File "/home/airflow/.local/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 3345, in flush
    self._flush(objects)
  File "/home/airflow/.local/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 3485, in _flush
    transaction.rollback(_capture_exception=True)
  File "/home/airflow/.local/lib/python3.8/site-packages/sqlalchemy/util/langhelpers.py", line 70, in __exit__
    compat.raise_(
  File "/home/airflow/.local/lib/python3.8/site-packages/sqlalchemy/util/compat.py", line 207, in raise_
    raise exception
  File "/home/airflow/.local/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 3445, in _flush
    flush_context.execute()
  File "/home/airflow/.local/lib/python3.8/site-packages/sqlalchemy/orm/unitofwork.py", line 456, in execute
    rec.execute(self)
  File "/home/airflow/.local/lib/python3.8/site-packages/sqlalchemy/orm/unitofwork.py", line 579, in execute
    self.dependency_processor.process_saves(uow, states)
  File "/home/airflow/.local/lib/python3.8/site-packages/sqlalchemy/orm/dependency.py", line 1182, in process_saves
    self._run_crud(
  File "/home/airflow/.local/lib/python3.8/site-packages/sqlalchemy/orm/dependency.py", line 1245, in _run_crud
    connection.execute(statement, secondary_insert)
  File "/home/airflow/.local/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1289, in execute
    return meth(self, multiparams, params, _EMPTY_EXECUTION_OPTS)
  File "/home/airflow/.local/lib/python3.8/site-packages/sqlalchemy/sql/elements.py", line 325, in _execute_on_connection
    return connection._execute_clauseelement(
  File "/home/airflow/.local/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1481, in _execute_clauseelement
    ret = self._execute_context(
  File "/home/airflow/.local/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1845, in _execute_context
    self._handle_dbapi_exception(
  File "/home/airflow/.local/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 2026, in _handle_dbapi_exception
    util.raise_(
  File "/home/airflow/.local/lib/python3.8/site-packages/sqlalchemy/util/compat.py", line 207, in raise_
    raise exception
  File "/home/airflow/.local/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1802, in _execute_context
    self.dialect.do_execute(
  File "/home/airflow/.local/lib/python3.8/site-packages/sqlalchemy/engine/default.py", line 719, in do_execute
    cursor.execute(statement, parameters)
sqlalchemy.exc.IntegrityError: (psycopg2.errors.UniqueViolation) duplicate key value violates unique constraint "ab_permission_view_role_permission_view_id_role_id_key"
DETAIL:  Key (permission_view_id, role_id)=(3097, 1) already exists.

[SQL: INSERT INTO ab_permission_view_role (permission_view_id, role_id) VALUES (%(permission_view_id)s, %(role_id)s) RETURNING ab_permission_view_role.id]
[parameters: {'permission_view_id': 3097, 'role_id': 1}]
(Background on this error at: https://sqlalche.me/e/14/gkpj)
[2022-10-31 12:59:33 +0000] [40] [ERROR] Exception in worker process
Traceback (most recent call last):
  File "/home/airflow/.local/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1802, in _execute_context
    self.dialect.do_execute(
  File "/home/airflow/.local/lib/python3.8/site-packages/sqlalchemy/engine/default.py", line 719, in do_execute
    cursor.execute(statement, parameters)
psycopg2.errors.UniqueViolation: duplicate key value violates unique constraint "ab_permission_view_role_permission_view_id_role_id_key"
DETAIL:  Key (permission_view_id, role_id)=(3097, 1) already exists.


The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/airflow/.local/lib/python3.8/site-packages/gunicorn/arbiter.py", line 589, in spawn_worker
    worker.init_process()
  File "/home/airflow/.local/lib/python3.8/site-packages/gunicorn/workers/base.py", line 134, in init_process
    self.load_wsgi()
  File "/home/airflow/.local/lib/python3.8/site-packages/gunicorn/workers/base.py", line 146, in load_wsgi
    self.wsgi = self.app.wsgi()
  File "/home/airflow/.local/lib/python3.8/site-packages/gunicorn/app/base.py", line 67, in wsgi
    self.callable = self.load()
  File "/home/airflow/.local/lib/python3.8/site-packages/gunicorn/app/wsgiapp.py", line 58, in load
    return self.load_wsgiapp()
  File "/home/airflow/.local/lib/python3.8/site-packages/gunicorn/app/wsgiapp.py", line 48, in load_wsgiapp
    return util.import_app(self.app_uri)
  File "/home/airflow/.local/lib/python3.8/site-packages/gunicorn/util.py", line 412, in import_app
    app = app(*args, **kwargs)
  File "/home/airflow/.local/lib/python3.8/site-packages/airflow/www/app.py", line 167, in cached_app
    app = create_app(config=config, testing=testing)
  File "/home/airflow/.local/lib/python3.8/site-packages/airflow/www/app.py", line 154, in create_app
    sync_appbuilder_roles(flask_app)
  File "/home/airflow/.local/lib/python3.8/site-packages/airflow/www/app.py", line 73, in sync_appbuilder_roles
    flask_app.appbuilder.sm.sync_roles()
  File "/home/airflow/.local/lib/python3.8/site-packages/airflow/www/security.py", line 600, in sync_roles
    self.update_admin_permission()
  File "/home/airflow/.local/lib/python3.8/site-packages/airflow/www/security.py", line 582, in update_admin_permission
    self.get_session.commit()
  File "<string>", line 2, in commit
  File "/home/airflow/.local/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 1428, in commit
    self._transaction.commit(_to_root=self.future)
  File "/home/airflow/.local/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 829, in commit
    self._prepare_impl()
  File "/home/airflow/.local/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 808, in _prepare_impl
    self.session.flush()
  File "/home/airflow/.local/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 3345, in flush
    self._flush(objects)
  File "/home/airflow/.local/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 3485, in _flush
    transaction.rollback(_capture_exception=True)
  File "/home/airflow/.local/lib/python3.8/site-packages/sqlalchemy/util/langhelpers.py", line 70, in __exit__
    compat.raise_(
  File "/home/airflow/.local/lib/python3.8/site-packages/sqlalchemy/util/compat.py", line 207, in raise_
    raise exception
  File "/home/airflow/.local/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 3445, in _flush
    flush_context.execute()
  File "/home/airflow/.local/lib/python3.8/site-packages/sqlalchemy/orm/unitofwork.py", line 456, in execute
    rec.execute(self)
  File "/home/airflow/.local/lib/python3.8/site-packages/sqlalchemy/orm/unitofwork.py", line 579, in execute
    self.dependency_processor.process_saves(uow, states)
  File "/home/airflow/.local/lib/python3.8/site-packages/sqlalchemy/orm/dependency.py", line 1182, in process_saves
    self._run_crud(
  File "/home/airflow/.local/lib/python3.8/site-packages/sqlalchemy/orm/dependency.py", line 1245, in _run_crud
    connection.execute(statement, secondary_insert)
  File "/home/airflow/.local/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1289, in execute
    return meth(self, multiparams, params, _EMPTY_EXECUTION_OPTS)
  File "/home/airflow/.local/lib/python3.8/site-packages/sqlalchemy/sql/elements.py", line 325, in _execute_on_connection
    return connection._execute_clauseelement(
  File "/home/airflow/.local/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1481, in _execute_clauseelement
    ret = self._execute_context(
  File "/home/airflow/.local/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1845, in _execute_context
    self._handle_dbapi_exception(
  File "/home/airflow/.local/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 2026, in _handle_dbapi_exception
    util.raise_(
  File "/home/airflow/.local/lib/python3.8/site-packages/sqlalchemy/util/compat.py", line 207, in raise_
    raise exception
  File "/home/airflow/.local/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1802, in _execute_context
    self.dialect.do_execute(
  File "/home/airflow/.local/lib/python3.8/site-packages/sqlalchemy/engine/default.py", line 719, in do_execute
    cursor.execute(statement, parameters)
sqlalchemy.exc.IntegrityError: (psycopg2.errors.UniqueViolation) duplicate key value violates unique constraint "ab_permission_view_role_permission_view_id_role_id_key"
DETAIL:  Key (permission_view_id, role_id)=(3097, 1) already exists.

[SQL: INSERT INTO ab_permission_view_role (permission_view_id, role_id) VALUES (%(permission_view_id)s, %(role_id)s) RETURNING ab_permission_view_role.id]
[parameters: {'permission_view_id': 3097, 'role_id': 1}]
(Background on this error at: https://sqlalche.me/e/14/gkpj)
[2022-10-31 12:59:33 +0000] [42] [INFO] Worker exiting (pid: 42)
[2022-10-31 12:59:33 +0000] [40] [INFO] Worker exiting (pid: 40)
10.10.16.4 - - [31/Oct/2022:12:59:33 +0000] "GET /dev-**readacted**/airflow/health HTTP/1.1" 200 141 "-" "-"
10.10.16.7 - - [31/Oct/2022:12:59:33 +0000] "GET /dev-**readacted**/airflow/health HTTP/1.1" 200 141 "-" "-"
10.10.0.241 - - [31/Oct/2022:12:59:34 +0000] "GET /dev-**readacted**/airflow/health HTTP/1.1" 200 141 "-" "kube-probe/1.23"
10.10.0.241 - - [31/Oct/2022:12:59:34 +0000] "GET /dev-**readacted**/airflow/health HTTP/1.1" 200 141 "-" "kube-probe/1.23"
10.10.0.241 - - [31/Oct/2022:12:59:34 +0000] "GET /dev-**readacted**/airflow/health HTTP/1.1" 200 141 "-" "kube-probe/1.23"
10.10.0.241 - - [31/Oct/2022:12:59:34 +0000] "GET /dev-**readacted**/airflow/health HTTP/1.1" 200 141 "-" "kube-probe/1.23"
10.10.16.4 - - [31/Oct/2022:12:59:35 +0000] "GET /dev-**readacted**/airflow/health HTTP/1.1" 200 141 "-" "-"
[2022-10-31 12:59:35 +0000] [43] [INFO] Worker exiting (pid: 43)
Traceback (most recent call last):
  File "/home/airflow/.local/lib/python3.8/site-packages/gunicorn/arbiter.py", line 209, in run
    self.sleep()
  File "/home/airflow/.local/lib/python3.8/site-packages/gunicorn/arbiter.py", line 357, in sleep
    ready = select.select([self.PIPE[0]], [], [], 1.0)
  File "/home/airflow/.local/lib/python3.8/site-packages/gunicorn/arbiter.py", line 242, in handle_chld
    self.reap_workers()
  File "/home/airflow/.local/lib/python3.8/site-packages/gunicorn/arbiter.py", line 525, in reap_workers
    raise HaltServer(reason, self.WORKER_BOOT_ERROR)
gunicorn.errors.HaltServer: <HaltServer 'Worker failed to boot.' 3>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.8/runpy.py", line 194, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "/usr/local/lib/python3.8/runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "/home/airflow/.local/lib/python3.8/site-packages/gunicorn/__main__.py", line 7, in <module>
    run()
  File "/home/airflow/.local/lib/python3.8/site-packages/gunicorn/app/wsgiapp.py", line 67, in run
    WSGIApplication("%(prog)s [OPTIONS] [APP_MODULE]").run()
  File "/home/airflow/.local/lib/python3.8/site-packages/gunicorn/app/base.py", line 231, in run
    super().run()
  File "/home/airflow/.local/lib/python3.8/site-packages/gunicorn/app/base.py", line 72, in run
    Arbiter(self).run()
  File "/home/airflow/.local/lib/python3.8/site-packages/gunicorn/arbiter.py", line 229, in run
    self.halt(reason=inst.reason, exit_status=inst.exit_status)
  File "/home/airflow/.local/lib/python3.8/site-packages/gunicorn/arbiter.py", line 342, in halt
    self.stop()
  File "/home/airflow/.local/lib/python3.8/site-packages/gunicorn/arbiter.py", line 393, in stop
    time.sleep(0.1)
  File "/home/airflow/.local/lib/python3.8/site-packages/gunicorn/arbiter.py", line 242, in handle_chld
    self.reap_workers()
  File "/home/airflow/.local/lib/python3.8/site-packages/gunicorn/arbiter.py", line 525, in reap_workers
    raise HaltServer(reason, self.WORKER_BOOT_ERROR)
gunicorn.errors.HaltServer: <HaltServer 'Worker failed to boot.' 3>
  ____________       _____________
 ____    |__( )_________  __/__  /________      __
____  /| |_  /__  ___/_  /_ __  /_  __ \_ | /| / /
___  ___ |  / _  /   _  __/ _  / / /_/ /_ |/ |/ /
 _/_/  |_/_/  /_/    /_/    /_/  \____/____/|__/
Running the Gunicorn Server with:
Workers: 4 sync
Host: 0.0.0.0:8080
Timeout: 120
Logfiles: - -
Access Logformat: 
=================================================================
[2022-10-31T12:59:37.555+0000] {webserver_command.py:252} ERROR - [0 / 0] Some workers seem to have died and gunicorn did not restart them as expected
[2022-10-31T12:59:47.567+0000] {webserver_command.py:264} INFO - [0 / 0] Spawning 1 workers
[2022-10-31T13:01:14.490+0000] {webserver_command.py:420} INFO - Received signal: 15. Closing gunicorn.

webserver-logs.txt

@potiuk
Copy link
Member

potiuk commented Oct 31, 2022

No confusion. There were two similar issues - one of them (for some users) fixed in 2.4.2 and another similar issue for some other users that will be released in 2.4.3. The milestone is always "current" thinking and if it moves, it moves.

@zachliu
Copy link
Contributor Author

zachliu commented Oct 31, 2022

@jens-scheffler-bosch also you'd have to patch 2.4.2 manually

@mdering
Copy link
Contributor

mdering commented Oct 31, 2022

if the preload fix is indeed the fix, you can suppress this for now by setting the GUNICORN_CMD_ARGS environment variable to --preload

@potiuk
Copy link
Member

potiuk commented Oct 31, 2022

Great point @mdering !

@jscheffl
Copy link
Contributor

Thanks for the clarification, looking forward for 2.4.3 :-D

@ahipp13
Copy link

ahipp13 commented Nov 28, 2022

We are still having this issue in 2.4.3. We set [webserver].workers to 1 for a workaround. Here were the logs we were seeing:

airflow-web 127.0.0.1 - - [23/Nov/2022:15:35:59 +0000] "GET /login/ HTTP/1.1" 200 16330 "https://login.microsoftonline.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.52"
airflow-web 127.0.0.1 - - [23/Nov/2022:15:35:59 +0000] "GET /static/appbuilder/css/font-awesome.min.css HTTP/1.1" 200 0 "our_app_url" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.52"
airflow-web [2022-11-23 15:35:59,423] {app.py:1741} ERROR - Exception on /static/appbuilder/css/bootstrap.min.css [GET]
airflow-web Traceback (most recent call last):
airflow-web File "/home/airflow/.local/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1802, in _execute_context
airflow-web self.dialect.do_execute(
airflow-web File "/home/airflow/.local/lib/python3.8/site-packages/sqlalchemy/engine/default.py", line 719, in do_execute
airflow-web cursor.execute(statement, parameters)
airflow-web psycopg2.errors.UniqueViolation: duplicate key value violates unique constraint "session_session_id_key"
airflow-web DETAIL: Key (session_id)=(7582aee0-4289-4152-99d2-918c98ff64d6) already exists.
airflow-web
airflow-web return super().save_session(*args, **kwargs)
airflow-web File "/home/airflow/.local/lib/python3.8/site-packages/flask_session/sessions.py", line 578, in save_session
airflow-web self.db.session.commit()
airflow-web File "", line 2, in commit
airflow-web File "/home/airflow/.local/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 1428, in commit
airflow-web self._transaction.commit(_to_root=self.future)
airflow-web File "/home/airflow/.local/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 829, in commit
airflow-web self._prepare_impl()
airflow-web File "/home/airflow/.local/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 808, in _prepare_impl
airflow-web self.session.flush()
airflow-web File "/home/airflow/.local/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 3345, in flush
airflow-web self._flush(objects)
airflow-web File "/home/airflow/.local/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 3485, in flush
airflow-web transaction.rollback(capture_exception=True)
airflow-web File "/home/airflow/.local/lib/python3.8/site-packages/sqlalchemy/util/langhelpers.py", line 70, in exit
airflow-web compat.raise(
airflow-web File "/home/airflow/.local/lib/python3.8/site-packages/sqlalchemy/util/compat.py", line 207, in raise
airflow-web raise exception
airflow-web File "/home/airflow/.local/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 3445, in _flush
airflow-web flush_context.execute()
airflow-web File "/home/airflow/.local/lib/python3.8/site-packages/sqlalchemy/orm/unitofwork.py", line 456, in execute
airflow-web rec.execute(self)
airflow-web File "/home/airflow/.local/lib/python3.8/site-packages/sqlalchemy/orm/unitofwork.py", line 630, in execute
airflow-web util.preloaded.orm_persistence.save_obj(
airflow-web File "/home/airflow/.local/lib/python3.8/site-packages/sqlalchemy/orm/persistence.py", line 244, in save_obj
airflow-web _emit_insert_statements(
airflow-web File "/home/airflow/.local/lib/python3.8/site-packages/sqlalchemy/orm/persistence.py", line 1221, in _emit_insert_statements
airflow-web result = connection._execute_20(
airflow-web File "/home/airflow/.local/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1614, in _execute_20
airflow-web return meth(self, args_10style, kwargs_10style, execution_options)
airflow-web File "/home/airflow/.local/lib/python3.8/site-packages/sqlalchemy/sql/elements.py", line 325, in _execute_on_connection
airflow-web return connection._execute_clauseelement(
airflow-web File "/home/airflow/.local/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1481, in _execute_clauseelement
airflow-web ret = self._execute_context(
airflow-web File "/home/airflow/.local/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1845, in _execute_context
airflow-web self.handle_dbapi_exception(
airflow-web File "/home/airflow/.local/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 2026, in handle_dbapi_exception
airflow-web util.raise(
airflow-web File "/home/airflow/.local/lib/python3.8/site-packages/sqlalchemy/util/compat.py", line 207, in raise
airflow-web raise exception
airflow-web File "/home/airflow/.local/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1802, in _execute_context
airflow-web self.dialect.do_execute(
airflow-web File "/home/airflow/.local/lib/python3.8/site-packages/sqlalchemy/engine/default.py", line 719, in do_execute
airflow-web cursor.execute(statement, parameters)
airflow-web sqlalchemy.exc.IntegrityError: (psycopg2.errors.UniqueViolation) duplicate key value violates unique constraint "session_session_id_key"
airflow-web DETAIL: Key (session_id)=(7582aee0-4289-4152-99d2-918c98ff64d6) already exists.
airflow-web
airflow-web [SQL: INSERT INTO session (session_id, data, expiry) VALUES (%(session_id)s, %(data)s, %(expiry)s) RETURNING session.id]
airflow-web [parameters: {'session_id': '7582aee0-4289-4152-99d2-918c98ff64d6', 'data': <psycopg2.extensions.Binary object at 0x7fbd53ad71b0>, 'expiry': datetime.datetime(2022, 11, 23, 16, 5, 59, 467562, tzinfo=datetime.timezone.utc)}]
airflow-web (Background on this error at: https://sqlalche.me/e/14/gkpj)
airflow-web

@potiuk
Copy link
Member

potiuk commented Nov 28, 2022

Can you please open a new issue for 2.4.3 @zachliu with more details? I have a feeling this is somehow different issue.

@zachliu
Copy link
Contributor Author

zachliu commented Nov 28, 2022

@potiuk you probably @ the wrong guy 😁

@ahipp13 Can you please open a new issue for 2.4.3 with more details? I also have a feeling this is a different issue. issue #23512 is centered around the ab_permission_view_role_permission_view_id_role_id_key which is role management & permission related, yours is the session_session_id_key, my guess is somehow you have a duplicate session

@potiuk
Copy link
Member

potiuk commented Nov 28, 2022

Not sure why - but yes. I ping the wrong person :)

@ahipp13
Copy link

ahipp13 commented Nov 28, 2022

Issue submitted #27977

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
affected_version:2.3 Issues Reported for 2.3 area:core area:MetaDB Meta Database related issues. area:upgrade Facilitating migration to a newer version of Airflow kind:bug This is a clearly a bug
Projects
None yet