Found by db purge command, the foreign key between share and share metadata should not exist(they should all marked soft-deleted when deleting shares), but the fact is that the metadata will not been marked soft-deleted even the share does:
Applied https://review.openstack.org/#/c/308212/19 on https://github.com/openstack/manila/tree/ba747463
$ manila-manage db purge 5
2017-01-16 18:11:17.361 DEBUG oslo_db.api [req-590ed115-8578-4dd6-b67c-70c6a4bde3ae None None] Loading backend 'sqlalchemy' from 'manila.db.sqlalchemy.api' from (pid=23490) _load_backend /usr/local/lib/python2.7/dist-packages/oslo_db/api.py:238
2017-01-16 18:11:17.732 DEBUG oslo_db.sqlalchemy.engines [req-590ed115-8578-4dd6-b67c-70c6a4bde3ae None None] MySQL server mode set to STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,TRADITIONAL,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION from (pid=23490) _check_effective_sql_mode /usr/local/lib/python2.7/dist-packages/oslo_db/sqlalchemy/engines.py:261
2017-01-16 18:11:20.777 ERROR oslo_db.sqlalchemy.exc_filters [req-590ed115-8578-4dd6-b67c-70c6a4bde3ae None None] DBAPIError exception wrapped from (pymysql.err.IntegrityError) (1048, u"Column 'share_id' cannot be null") [SQL: u'UPDATE share_metadata SET updated_at=%(updated_at)s, share_id=%(share_id)s WHERE share_metadata.id = %(share_metadata_id)s'] [parameters: ({'share_id': None, 'share_metadata_id': 6, 'updated_at': datetime.datetime(2017, 1, 16, 16, 11, 20, 776508)}, {'share_id': None, 'share_metadata_id': 7, 'updated_at': datetime.datetime(2017, 1, 16, 16, 11, 20, 776516)}, {'share_id': None, 'share_metadata_id': 8, 'updated_at': datetime.datetime(2017, 1, 16, 16, 11, 20, 776521)})]
2017-01-16 18:11:20.777 TRACE oslo_db.sqlalchemy.exc_filters Traceback (most recent call last):
2017-01-16 18:11:20.777 TRACE oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1116, in _execute_context
2017-01-16 18:11:20.777 TRACE oslo_db.sqlalchemy.exc_filters context)
2017-01-16 18:11:20.777 TRACE oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/dialects/mysql/mysqldb.py", line 95, in do_executemany
2017-01-16 18:11:20.777 TRACE oslo_db.sqlalchemy.exc_filters rowcount = cursor.executemany(statement, parameters)
2017-01-16 18:11:20.777 TRACE oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/pymysql/cursors.py", line 195, in executemany
2017-01-16 18:11:20.777 TRACE oslo_db.sqlalchemy.exc_filters self.rowcount = sum(self.execute(query, arg) for arg in args)
2017-01-16 18:11:20.777 TRACE oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/pymysql/cursors.py", line 195, in <genexpr>
2017-01-16 18:11:20.777 TRACE oslo_db.sqlalchemy.exc_filters self.rowcount = sum(self.execute(query, arg) for arg in args)
2017-01-16 18:11:20.777 TRACE oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/pymysql/cursors.py", line 166, in execute
2017-01-16 18:11:20.777 TRACE oslo_db.sqlalchemy.exc_filters result = self._query(query)
2017-01-16 18:11:20.777 TRACE oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/pymysql/cursors.py", line 322, in _query
2017-01-16 18:11:20.777 TRACE oslo_db.sqlalchemy.exc_filters conn.query(q)
2017-01-16 18:11:20.777 TRACE oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 835, in query
2017-01-16 18:11:20.777 TRACE oslo_db.sqlalchemy.exc_filters self._affected_rows = self._read_query_result(unbuffered=unbuffered)
2017-01-16 18:11:20.777 TRACE oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 1019, in _read_query_result
2017-01-16 18:11:20.777 TRACE oslo_db.sqlalchemy.exc_filters result.read()
2017-01-16 18:11:20.777 TRACE oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 1302, in read
2017-01-16 18:11:20.777 TRACE oslo_db.sqlalchemy.exc_filters first_packet = self.connection._read_packet()
2017-01-16 18:11:20.777 TRACE oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 981, in _read_packet
2017-01-16 18:11:20.777 TRACE oslo_db.sqlalchemy.exc_filters packet.check_error()
2017-01-16 18:11:20.777 TRACE oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 393, in check_error
2017-01-16 18:11:20.777 TRACE oslo_db.sqlalchemy.exc_filters err.raise_mysql_exception(self._data)
2017-01-16 18:11:20.777 TRACE oslo_db.sqlalchemy.exc_filters File "/usr/local/lib/python2.7/dist-packages/pymysql/err.py", line 107, in raise_mysql_exception
2017-01-16 18:11:20.777 TRACE oslo_db.sqlalchemy.exc_filters raise errorclass(errno, errval)
2017-01-16 18:11:20.777 TRACE oslo_db.sqlalchemy.exc_filters IntegrityError: (1048, u"Column 'share_id' cannot be null")
2017-01-16 18:11:20.777 TRACE oslo_db.sqlalchemy.exc_filters
2017-01-16 18:11:20.835 ERROR manila.db.sqlalchemy.api [req-590ed115-8578-4dd6-b67c-70c6a4bde3ae None None] Deletion of soft-delete records failed, skipping record (<manila.db.sqlalchemy.models.Share object at 0x7fd31b233290>,).
2017-01-16 18:11:20.835 TRACE manila.db.sqlalchemy.api Traceback (most recent call last):
2017-01-16 18:11:20.835 TRACE manila.db.sqlalchemy.api File "/opt/stack/manila/manila/db/sqlalchemy/api.py", line 3784, in purge_deleted_records
2017-01-16 18:11:20.835 TRACE manila.db.sqlalchemy.api session.delete(record)
2017-01-16 18:11:20.835 TRACE manila.db.sqlalchemy.api File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 490, in __exit__
2017-01-16 18:11:20.835 TRACE manila.db.sqlalchemy.api self.rollback()
2017-01-16 18:11:20.835 TRACE manila.db.sqlalchemy.api File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/util/langhelpers.py", line 60, in __exit__
2017-01-16 18:11:20.835 TRACE manila.db.sqlalchemy.api compat.reraise(exc_type, exc_value, exc_tb)
2017-01-16 18:11:20.835 TRACE manila.db.sqlalchemy.api File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 487, in __exit__
2017-01-16 18:11:20.835 TRACE manila.db.sqlalchemy.api self.commit()
2017-01-16 18:11:20.835 TRACE manila.db.sqlalchemy.api File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 392, in commit
2017-01-16 18:11:20.835 TRACE manila.db.sqlalchemy.api self._prepare_impl()
2017-01-16 18:11:20.835 TRACE manila.db.sqlalchemy.api File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 372, in _prepare_impl
2017-01-16 18:11:20.835 TRACE manila.db.sqlalchemy.api self.session.flush()
2017-01-16 18:11:20.835 TRACE manila.db.sqlalchemy.api File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 2019, in flush
2017-01-16 18:11:20.835 TRACE manila.db.sqlalchemy.api self._flush(objects)
2017-01-16 18:11:20.835 TRACE manila.db.sqlalchemy.api File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 2137, in _flush
2017-01-16 18:11:20.835 TRACE manila.db.sqlalchemy.api transaction.rollback(_capture_exception=True)
2017-01-16 18:11:20.835 TRACE manila.db.sqlalchemy.api File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/util/langhelpers.py", line 60, in __exit__
2017-01-16 18:11:20.835 TRACE manila.db.sqlalchemy.api compat.reraise(exc_type, exc_value, exc_tb)
2017-01-16 18:11:20.835 TRACE manila.db.sqlalchemy.api File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 2101, in _flush
2017-01-16 18:11:20.835 TRACE manila.db.sqlalchemy.api flush_context.execute()
2017-01-16 18:11:20.835 TRACE manila.db.sqlalchemy.api File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/unitofwork.py", line 373, in execute
2017-01-16 18:11:20.835 TRACE manila.db.sqlalchemy.api rec.execute(self)
2017-01-16 18:11:20.835 TRACE manila.db.sqlalchemy.api File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/unitofwork.py", line 532, in execute
2017-01-16 18:11:20.835 TRACE manila.db.sqlalchemy.api uow
2017-01-16 18:11:20.835 TRACE manila.db.sqlalchemy.api File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/persistence.py", line 170, in save_obj
2017-01-16 18:11:20.835 TRACE manila.db.sqlalchemy.api mapper, table, update)
2017-01-16 18:11:20.835 TRACE manila.db.sqlalchemy.api File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/persistence.py", line 706, in _emit_update_statements
2017-01-16 18:11:20.835 TRACE manila.db.sqlalchemy.api execute(statement, multiparams)
2017-01-16 18:11:20.835 TRACE manila.db.sqlalchemy.api File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 914, in execute
2017-01-16 18:11:20.835 TRACE manila.db.sqlalchemy.api return meth(self, multiparams, params)
2017-01-16 18:11:20.835 TRACE manila.db.sqlalchemy.api File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/elements.py", line 323, in _execute_on_connection
2017-01-16 18:11:20.835 TRACE manila.db.sqlalchemy.api return connection._execute_clauseelement(self, multiparams, params)
2017-01-16 18:11:20.835 TRACE manila.db.sqlalchemy.api File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1010, in _execute_clauseelement
2017-01-16 18:11:20.835 TRACE manila.db.sqlalchemy.api compiled_sql, distilled_params
2017-01-16 18:11:20.835 TRACE manila.db.sqlalchemy.api File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1146, in _execute_context
2017-01-16 18:11:20.835 TRACE manila.db.sqlalchemy.api context)
2017-01-16 18:11:20.835 TRACE manila.db.sqlalchemy.api File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1337, in _handle_dbapi_exception
2017-01-16 18:11:20.835 TRACE manila.db.sqlalchemy.api util.raise_from_cause(newraise, exc_info)
2017-01-16 18:11:20.835 TRACE manila.db.sqlalchemy.api File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/util/compat.py", line 202, in raise_from_cause
2017-01-16 18:11:20.835 TRACE manila.db.sqlalchemy.api reraise(type(exception), exception, tb=exc_tb, cause=cause)
2017-01-16 18:11:20.835 TRACE manila.db.sqlalchemy.api File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1116, in _execute_context
2017-01-16 18:11:20.835 TRACE manila.db.sqlalchemy.api context)
2017-01-16 18:11:20.835 TRACE manila.db.sqlalchemy.api File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/dialects/mysql/mysqldb.py", line 95, in do_executemany
2017-01-16 18:11:20.835 TRACE manila.db.sqlalchemy.api rowcount = cursor.executemany(statement, parameters)
2017-01-16 18:11:20.835 TRACE manila.db.sqlalchemy.api File "/usr/local/lib/python2.7/dist-packages/pymysql/cursors.py", line 195, in executemany
2017-01-16 18:11:20.835 TRACE manila.db.sqlalchemy.api self.rowcount = sum(self.execute(query, arg) for arg in args)
2017-01-16 18:11:20.835 TRACE manila.db.sqlalchemy.api File "/usr/local/lib/python2.7/dist-packages/pymysql/cursors.py", line 195, in <genexpr>
2017-01-16 18:11:20.835 TRACE manila.db.sqlalchemy.api self.rowcount = sum(self.execute(query, arg) for arg in args)
2017-01-16 18:11:20.835 TRACE manila.db.sqlalchemy.api File "/usr/local/lib/python2.7/dist-packages/pymysql/cursors.py", line 166, in execute
2017-01-16 18:11:20.835 TRACE manila.db.sqlalchemy.api result = self._query(query)
2017-01-16 18:11:20.835 TRACE manila.db.sqlalchemy.api File "/usr/local/lib/python2.7/dist-packages/pymysql/cursors.py", line 322, in _query
2017-01-16 18:11:20.835 TRACE manila.db.sqlalchemy.api conn.query(q)
2017-01-16 18:11:20.835 TRACE manila.db.sqlalchemy.api File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 835, in query
2017-01-16 18:11:20.835 TRACE manila.db.sqlalchemy.api self._affected_rows = self._read_query_result(unbuffered=unbuffered)
2017-01-16 18:11:20.835 TRACE manila.db.sqlalchemy.api File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 1019, in _read_query_result
2017-01-16 18:11:20.835 TRACE manila.db.sqlalchemy.api result.read()
2017-01-16 18:11:20.835 TRACE manila.db.sqlalchemy.api File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 1302, in read
2017-01-16 18:11:20.835 TRACE manila.db.sqlalchemy.api first_packet = self.connection._read_packet()
2017-01-16 18:11:20.835 TRACE manila.db.sqlalchemy.api File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 981, in _read_packet
2017-01-16 18:11:20.835 TRACE manila.db.sqlalchemy.api packet.check_error()
2017-01-16 18:11:20.835 TRACE manila.db.sqlalchemy.api File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 393, in check_error
2017-01-16 18:11:20.835 TRACE manila.db.sqlalchemy.api err.raise_mysql_exception(self._data)
2017-01-16 18:11:20.835 TRACE manila.db.sqlalchemy.api File "/usr/local/lib/python2.7/dist-packages/pymysql/err.py", line 107, in raise_mysql_exception
2017-01-16 18:11:20.835 TRACE manila.db.sqlalchemy.api raise errorclass(errno, errval)
Fix proposed to branch: master /review. openstack. org/421170
Review: https:/