diff --git a/gnocchi/indexer/alembic/versions/94544ca86c7e_increase_original_resource_id_max_length.py b/gnocchi/indexer/alembic/versions/94544ca86c7e_increase_original_resource_id_max_length.py new file mode 100644 index 000000000..8f951972a --- /dev/null +++ b/gnocchi/indexer/alembic/versions/94544ca86c7e_increase_original_resource_id_max_length.py @@ -0,0 +1,45 @@ +# Copyright 2025 The Gnocchi Developers +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +# + +"""Increase original resource ID max length + +Revision ID: 94544ca86c7e +Revises: 18fff4509e3e +Create Date: 2025-01-15 22:12:53.822748 + +""" + +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = '94544ca86c7e' +down_revision = '18fff4509e3e' +branch_labels = None +depends_on = None + + +def upgrade(): + op.alter_column("resource", "original_resource_id", + type_=sa.String(289), + nullable=False, + existing_type=sa.String(255), + existing_nullable=False) + op.alter_column("resource_history", "original_resource_id", + type_=sa.String(289), + nullable=False, + existing_type=sa.String(255), + existing_nullable=False) diff --git a/gnocchi/indexer/sqlalchemy_base.py b/gnocchi/indexer/sqlalchemy_base.py index b62f44f6d..0d704f35c 100644 --- a/gnocchi/indexer/sqlalchemy_base.py +++ b/gnocchi/indexer/sqlalchemy_base.py @@ -262,7 +262,7 @@ def type(cls): ended_at = sqlalchemy.Column(types.TimestampUTC) user_id = sqlalchemy.Column(sqlalchemy.String(255)) project_id = sqlalchemy.Column(sqlalchemy.String(255)) - original_resource_id = sqlalchemy.Column(sqlalchemy.String(255), + original_resource_id = sqlalchemy.Column(sqlalchemy.String(289), nullable=False) diff --git a/gnocchi/tests/functional/gabbits/transformedids.yaml b/gnocchi/tests/functional/gabbits/transformedids.yaml index d5ae28932..c96bb13cd 100644 --- a/gnocchi/tests/functional/gabbits/transformedids.yaml +++ b/gnocchi/tests/functional/gabbits/transformedids.yaml @@ -163,13 +163,13 @@ tests: archive_policy_name: medium status: 400 response_strings: - - transformable resource id >255 max allowed characters for dictionary value + - transformable resource id >289 max allowed characters for dictionary value - name: post long non uuid resource id POST: $LAST_URL data: - # 255 char string - id: four score and seven years ago we the people of the United States of America i have a dream it is the courage to continue that counts four score and seven years ago we the people of the United States of America i have a dream it is the courage to continue + # 289 char string + id: four score and seven years ago we the people of the United States of America i have a dream it is the courage to continue that counts four score and seven years ago we the people of the United States of America i have a dream it is the courage to continue that counts our score and seven y user_id: 0fbb231484614b1a80131fc22f6afc9c project_id: f3d41b770cc14f0bb94a1d5be9c0e3ea metrics: diff --git a/gnocchi/utils.py b/gnocchi/utils.py index d22b32433..c304aaedb 100644 --- a/gnocchi/utils.py +++ b/gnocchi/utils.py @@ -49,13 +49,13 @@ def ResourceUUID(value, creator): try: return uuid.UUID(value) except ValueError: - if len(value) <= 255: + if len(value) <= 289: if creator is None: creator = "\x00" return uuid.uuid5(RESOURCE_ID_NAMESPACE, value + "\x00" + creator) raise ValueError( - 'transformable resource id >255 max allowed characters') + 'transformable resource id >289 max allowed characters') def UUID(value): diff --git a/releasenotes/notes/original-resource-id-max-length-ced99a100f3e494d.yaml b/releasenotes/notes/original-resource-id-max-length-ced99a100f3e494d.yaml new file mode 100644 index 000000000..8a017b168 --- /dev/null +++ b/releasenotes/notes/original-resource-id-max-length-ced99a100f3e494d.yaml @@ -0,0 +1,7 @@ +--- +features: + - | + The maximum length of the resource ID when creating new resources has been + increased from 255 to 289 characters. This extra length allows Gnocchi to + accommodate Swift container resources generated by Ceilometer with the + maximum container name length of 256 characters.