Bug 51671 - OperationalError: (psycopg2.OperationalError) FATAL: Passwort-Authentifizierung für Benutzer »admindiary« fehlgeschlagen
OperationalError: (psycopg2.OperationalError) FATAL: Passwort-Authentifizier...
Status: NEW
Product: UCS
Classification: Unclassified
Component: Admin Diary
UCS 4.4
Other Linux
: P5 normal (vote)
: ---
Assigned To: UCS maintainers
UCS maintainers
:
Depends on:
Blocks:
  Show dependency treegraph
 
Reported: 2020-07-15 09:03 CEST by Florian Best
Modified: 2020-10-14 12:20 CEST (History)
0 users

See Also:
What kind of report is it?: ---
What type of bug is this?: ---
Who will be affected by this bug?: ---
How will those affected feel about the bug?: ---
User Pain:
Enterprise Customer affected?:
School Customer affected?:
ISV affected?:
Waiting Support:
Flags outvoted (downgraded) after PO Review:
Ticket number:
Bug group (optional): Error handling
Max CVSS v3 score:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Florian Best univentionstaff 2020-07-15 09:03:46 CEST
I see 67 traceback in our Jenkins tests:
Traceback (most recent call last):
  File "/usr/share/univention-admin-diary/admindiary_backend_wrapper.py", line 131, in <module>
    stdin_to_storage()
  File "/usr/share/univention-admin-diary/admindiary_backend_wrapper.py", line 125, in stdin_to_storage
    process(values)
  File "/usr/share/univention-admin-diary/admindiary_backend_wrapper.py", line 96, in process
    add_entry_v1(entry)
  File "/usr/share/univention-admin-diary/admindiary_backend_wrapper.py", line 107, in add_entry_v1
    client.add(entry)
  File "/usr/lib/python2.7/dist-packages/univention/admindiary/backend.py", line 233, in add
    event = self.add_event(diary_entry.event_name)
  File "/usr/lib/python2.7/dist-packages/univention/admindiary/backend.py", line 204, in add_event
    obj = self._session.query(Event).filter(Event.name == name).one_or_none()
  File "/usr/lib/python2.7/dist-packages/sqlalchemy/orm/query.py", line 3008, in one_or_none
    ret = list(self)
  File "/usr/lib/python2.7/dist-packages/sqlalchemy/orm/query.py", line 3081, in __iter__
    return self._execute_and_instances(context)
  File "/usr/lib/python2.7/dist-packages/sqlalchemy/orm/query.py", line 3103, in _execute_and_instances
    querycontext, self._connection_from_session, close_with_result=True
  File "/usr/lib/python2.7/dist-packages/sqlalchemy/orm/query.py", line 3111, in _get_bind_args
    mapper=self._bind_mapper(), clause=querycontext.statement, **kw
  File "/usr/lib/python2.7/dist-packages/sqlalchemy/orm/query.py", line 3096, in _connection_from_session
    conn = self.session.connection(**kw)
  File "/usr/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 1120, in connection
    execution_options=execution_options,
  File "/usr/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 1126, in _connection_for_bind
    engine, execution_options
  File "/usr/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 424, in _connection_for_bind
    conn = bind.contextual_connect()
  File "/usr/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 2192, in contextual_connect
    self._wrap_pool_connect(self.pool.connect, None),
  File "/usr/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 2232, in _wrap_pool_connect
    e, dialect, self
  File "/usr/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1528, in _handle_dbapi_exception_noconnection
    util.raise_from_cause(sqlalchemy_exception, exc_info)
  File "/usr/lib/python2.7/dist-packages/sqlalchemy/util/compat.py", line 296, in raise_from_cause
    reraise(type(exception), exception, tb=exc_tb, cause=cause)
  File "/usr/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 2228, in _wrap_pool_connect
    return fn()
  File "/usr/lib/python2.7/dist-packages/sqlalchemy/pool.py", line 425, in connect
    return _ConnectionFairy._checkout(self)
  File "/usr/lib/python2.7/dist-packages/sqlalchemy/pool.py", line 822, in _checkout
    fairy = _ConnectionRecord.checkout(pool)
  File "/usr/lib/python2.7/dist-packages/sqlalchemy/pool.py", line 554, in checkout
    rec = pool._do_get()
  File "/usr/lib/python2.7/dist-packages/sqlalchemy/pool.py", line 1250, in _do_get
    self._dec_overflow()
  File "/usr/lib/python2.7/dist-packages/sqlalchemy/util/langhelpers.py", line 67, in __exit__
    compat.reraise(exc_type, exc_value, exc_tb)
  File "/usr/lib/python2.7/dist-packages/sqlalchemy/pool.py", line 1247, in _do_get
    return self._create_connection()
  File "/usr/lib/python2.7/dist-packages/sqlalchemy/pool.py", line 370, in _create_connection
    return _ConnectionRecord(self)
  File "/usr/lib/python2.7/dist-packages/sqlalchemy/pool.py", line 499, in __init__
    self.__connect(first_connect_check=True)
  File "/usr/lib/python2.7/dist-packages/sqlalchemy/pool.py", line 701, in __connect
    connection = pool._invoke_creator(self)
  File "/usr/lib/python2.7/dist-packages/sqlalchemy/engine/strategies.py", line 114, in connect
    return dialect.connect(*cargs, **cparams)
  File "/usr/lib/python2.7/dist-packages/sqlalchemy/engine/default.py", line 437, in connect
    return self.dbapi.connect(*cargs, **cparams)
  File "/usr/lib/python2.7/dist-packages/psycopg2/__init__.py", line 130, in connect
    conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
OperationalError: (psycopg2.OperationalError) FATAL:  Passwort-Authentifizierung für Benutzer »admindiary« fehlgeschlagen


I think the joinscript should fail if the user could not be created:

diff --git services/univention-admin-diary/create-database services/univention-admin-diary/create-database
index 936fc87ade..51e4984a9a 100755
--- services/univention-admin-diary/create-database
+++ services/univention-admin-diary/create-database
@@ -27,6 +27,8 @@
 # /usr/share/common-licenses/AGPL-3; if not, see
 # <https://www.gnu.org/licenses/>.
 
+set -e
+
 db_backend="$(ucr get admin/diary/dbms)"
 PASSWORD="$(cat /etc/admin-diary.secret)"
 
See also Bug #48476 comment 1.
Comment 1 Florian Best univentionstaff 2020-10-14 12:20:38 CEST
git:fbest/51671-wrap-sqlalchemy-error

Add some error handling for the exception, because this spams the logfiles of Jenkins runs every day.

diff --git services/univention-admin-diary/admindiary_backend_wrapper.py services/univention-admin-diary/admindiary_backend_wrapper.py
index 4c84de4d5e..8e66ba4e86 100755
--- services/univention-admin-diary/admindiary_backend_wrapper.py
+++ services/univention-admin-diary/admindiary_backend_wrapper.py
@@ -38,6 +38,7 @@ import sys
 from datetime import datetime
 from functools import partial
 import json
+import sqlalchemy.exc
 
 from pyparsing import Word, alphas, Suppress, Combine, nums, string, Regex, ParseException
 
@@ -129,6 +130,8 @@ def stdin_to_storage():
 if __name__ == "__main__":
        try:
                stdin_to_storage()
+       except sqlalchemy.exc.OperationalError as exc:
+               get_logger().error('Processing entry failed: %s', exc)
        except Exception as exc:
                get_logger().error('Processing entry failed!')
                get_logger().exception(exc)