From 042ad4025a1ae930438473a5df376b338ad2cc82 Mon Sep 17 00:00:00 2001 From: Liang Fang Date: Wed, 10 Oct 2018 02:12:46 -0400 Subject: [PATCH] Fix for cinder-manage db purge When backend database is postgresql, "cinder-manage db purge" will throw an exception. The root cause is that "deleted" column in table quality_of_service_specs is of type boolean, but it is compared with an integer. In mysql, there's no such issue because boolean in mysql is tinyint(1). Some logs: DBAPIError exception wrapped from (psycopg2.ProgrammingError) operator does not exist: boolean = integer Closes-Bug: #1797048 Change-Id: I05b0edef4cc56518e99622599f01dbd6280a7f1b Signed-off-by: Liang Fang --- cinder/db/sqlalchemy/api.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cinder/db/sqlalchemy/api.py b/cinder/db/sqlalchemy/api.py index 62a5d43c7ff..21c4743aac1 100644 --- a/cinder/db/sqlalchemy/api.py +++ b/cinder/db/sqlalchemy/api.py @@ -6536,9 +6536,9 @@ def purge_deleted_rows(context, age_in_days): if six.text_type(table) == "quality_of_service_specs": session.query(models.QualityOfServiceSpecs).filter( and_(models.QualityOfServiceSpecs.specs_id.isnot( - None), models.QualityOfServiceSpecs.deleted == 1, - models.QualityOfServiceSpecs.deleted_at < - deleted_age)).delete() + None), models.QualityOfServiceSpecs. + deleted.is_(True), models.QualityOfServiceSpecs. + deleted_at < deleted_age)).delete() result = session.execute( table.delete() .where(table.c.deleted_at < deleted_age))