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
This commit is contained in:
Roman Prykhodchenko 2016-06-07 13:21:10 +02:00
parent b36d190765
commit 78e45f1c03
3 changed files with 48 additions and 1 deletions

View File

@ -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))

View File

@ -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(

View File

@ -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)