Skip to content

Commit

Permalink
Increase original resource ID max length to 289 chars
Browse files Browse the repository at this point in the history
Ceilometer formats Swift container resource IDs in the format
`<project ID>_<container name>`, where the project ID is 32 characters
and container names can be up to 256 characters long, resulting in a
resource ID with max length 289 characters.

To accommodate this, expand the `original_resource_id` column
to have a max length of 289 characters.
  • Loading branch information
Callum027 committed Jan 21, 2025
1 parent b28f215 commit a708655
Show file tree
Hide file tree
Showing 5 changed files with 58 additions and 6 deletions.
Original file line number Diff line number Diff line change
@@ -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)
2 changes: 1 addition & 1 deletion gnocchi/indexer/sqlalchemy_base.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)


Expand Down
6 changes: 3 additions & 3 deletions gnocchi/tests/functional/gabbits/transformedids.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
4 changes: 2 additions & 2 deletions gnocchi/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand Down
Original file line number Diff line number Diff line change
@@ -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.

0 comments on commit a708655

Please sign in to comment.