From 04ef146e1961448a1f0ad13075f6bc7fb0e19477 Mon Sep 17 00:00:00 2001 From: gord chung Date: Fri, 10 Feb 2017 14:22:04 -0500 Subject: [PATCH] ensure original_resource_id is not none statsd resource doesn't have an original_resource_id so we need to set it by copying over id during upgrade Change-Id: Id516c5b1d091ca01688d6ad8cf1076a998d15333 Closes-Bug: #1662849 (cherry picked from commit 9b53bce0c5fb86fc8db3055d861d7b1f2715a00c) --- ...a63d3d186_original_resource_id_not_null.py | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/gnocchi/indexer/alembic/versions/1e1a63d3d186_original_resource_id_not_null.py b/gnocchi/indexer/alembic/versions/1e1a63d3d186_original_resource_id_not_null.py index fa29a5980..bd73b12b0 100644 --- a/gnocchi/indexer/alembic/versions/1e1a63d3d186_original_resource_id_not_null.py +++ b/gnocchi/indexer/alembic/versions/1e1a63d3d186_original_resource_id_not_null.py @@ -23,6 +23,8 @@ Create Date: 2017-01-26 19:33:35.209688 from alembic import op import sqlalchemy as sa +from sqlalchemy import func +import sqlalchemy_utils # revision identifiers, used by Alembic. @@ -32,8 +34,33 @@ branch_labels = None depends_on = None +def clean_substr(col, start, length): + return func.lower(func.substr(func.hex(col), start, length)) + + def upgrade(): + bind = op.get_bind() for table_name in ('resource', 'resource_history'): + table = sa.Table(table_name, sa.MetaData(), + sa.Column('id', + sqlalchemy_utils.types.uuid.UUIDType(), + nullable=False), + sa.Column('original_resource_id', sa.String(255))) + + # NOTE(gordc): mysql stores id as binary so we need to rebuild back to + # string uuid. + if bind and bind.engine.name == "mysql": + vals = {'original_resource_id': + clean_substr(table.c.id, 1, 8) + '-' + + clean_substr(table.c.id, 9, 4) + '-' + + clean_substr(table.c.id, 13, 4) + '-' + + clean_substr(table.c.id, 17, 4) + '-' + + clean_substr(table.c.id, 21, 12)} + else: + vals = {'original_resource_id': table.c.id} + + op.execute(table.update().where( + table.c.original_resource_id.is_(None)).values(vals)) op.alter_column(table_name, "original_resource_id", nullable=False, existing_type=sa.String(255), existing_nullable=True)