From 78e45f1c0326f1adfed6cfe4919b63e26b8e423d Mon Sep 17 00:00:00 2001 From: Roman Prykhodchenko Date: Tue, 7 Jun 2016 13:21:10 +0200 Subject: [PATCH] Allow long error messages for nodes Change type of error message attribute for nodes from a 255 character long string, i.e., sa.String(255) to a text of variable lenght -- sa.Text. Change-Id: I5d1d83458d961302d4696ee5089197eacc420688 Closes-bug: #1578245 --- .../alembic_migrations/versions/fuel_9_0_1.py | 18 ++++++++++++ nailgun/nailgun/db/sqlalchemy/models/node.py | 2 +- .../test/unit/test_migration_fuel_9_0_1.py | 29 +++++++++++++++++++ 3 files changed, 48 insertions(+), 1 deletion(-) diff --git a/nailgun/nailgun/db/migration/alembic_migrations/versions/fuel_9_0_1.py b/nailgun/nailgun/db/migration/alembic_migrations/versions/fuel_9_0_1.py index b3b4a8750f..0d596d66e7 100644 --- a/nailgun/nailgun/db/migration/alembic_migrations/versions/fuel_9_0_1.py +++ b/nailgun/nailgun/db/migration/alembic_migrations/versions/fuel_9_0_1.py @@ -37,6 +37,7 @@ def upgrade(): upgrade_transaction_names() upgrade_clusters_replaced_info_wrong_default() upgrade_tasks_snapshot() + upgrade_node_error_msg_to_allow_long_error_msg() def downgrade(): @@ -44,6 +45,7 @@ def downgrade(): downgrade_clusters_replaced_info_wrong_default() downgrade_transaction_names() downgrade_deployment_history() + downgrade_node_error_msg_to_allow_long_error_msg() def upgrade_deployment_history(): @@ -143,6 +145,12 @@ def upgrade_transaction_names(): ) +def upgrade_node_error_msg_to_allow_long_error_msg(): + op.alter_column(table_name='nodes', + column_name='error_msg', + type_=sa.Text) + + def downgrade_transaction_names(): upgrade_enum( 'tasks', @@ -151,3 +159,13 @@ def downgrade_transaction_names(): transaction_names_new, transaction_names_old ) + + +def downgrade_node_error_msg_to_allow_long_error_msg(): + connection = op.get_bind() + connection.execute(sa.text(''' +UPDATE nodes SET error_msg = substring(error_msg for 255); +''')) + op.alter_column(table_name='nodes', + column_name='error_msg', + type_=sa.String(255)) diff --git a/nailgun/nailgun/db/sqlalchemy/models/node.py b/nailgun/nailgun/db/sqlalchemy/models/node.py index 972eb6e410..354c3a2e74 100644 --- a/nailgun/nailgun/db/sqlalchemy/models/node.py +++ b/nailgun/nailgun/db/sqlalchemy/models/node.py @@ -90,7 +90,7 @@ class Node(Base): pending_deletion = Column(Boolean, default=False) changes = relationship("ClusterChanges", backref="node") error_type = Column(Enum(*consts.NODE_ERRORS, name='node_error_type')) - error_msg = Column(String(255)) + error_msg = Column(Text) timestamp = Column(DateTime, nullable=False) online = Column(Boolean, default=True) labels = Column( diff --git a/nailgun/nailgun/test/unit/test_migration_fuel_9_0_1.py b/nailgun/nailgun/test/unit/test_migration_fuel_9_0_1.py index 632650a1ad..0c3d568e3e 100644 --- a/nailgun/nailgun/test/unit/test_migration_fuel_9_0_1.py +++ b/nailgun/nailgun/test/unit/test_migration_fuel_9_0_1.py @@ -12,6 +12,8 @@ # License for the specific language governing permissions and limitations # under the License. +import datetime + import alembic from nailgun.db import db @@ -117,3 +119,30 @@ class TestTransactionsNames(base.BaseAlembicMigrationTest): } ] ) + + +class TestNodeErrorMessage(base.BaseAlembicMigrationTest): + + def test_upgrade_node_error_msg_to_allow_long_error_msg(self): + nodes = self.meta.tables['nodes'] + self.assertIsInstance(nodes.columns['error_msg'].type, sa.Text) + + node_uuid = '26b508d0-0d76-4159-bce9-f67ec2765480' + long_error_msg = ''.join('a' for i in range(500)) + + db.execute( + nodes.insert(), + [{ + 'uuid': node_uuid, + 'cluster_id': None, + 'group_id': None, + 'status': 'discover', + 'meta': '{}', + 'mac': 'aa:aa:aa:aa:aa:aa', + 'error_msg': long_error_msg, + 'timestamp': datetime.datetime.utcnow(), + }] + ) + + node = db.query(nodes).filter_by(uuid=node_uuid).first() + self.assertEqual(long_error_msg, node.error_msg)