indexer: make sure original_resource_id is never NULL
Currently the original resource id is never NULL… except when statsd create its resource! So that's the only resource with a NULL original_resource_id. Change-Id: If0b27630961808287d6b4d84b340dc9510191096
This commit is contained in:
parent
ad4b851c7f
commit
2c0f2b6930
@ -0,0 +1,39 @@
|
||||
# Copyright 2017 OpenStack Foundation
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
|
||||
"""Make sure resource.original_resource_id is NOT NULL
|
||||
|
||||
Revision ID: 1e1a63d3d186
|
||||
Revises: 397987e38570
|
||||
Create Date: 2017-01-26 19:33:35.209688
|
||||
|
||||
"""
|
||||
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = '1e1a63d3d186'
|
||||
down_revision = '397987e38570'
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
|
||||
def upgrade():
|
||||
for table_name in ('resource', 'resource_history'):
|
||||
op.alter_column(table_name, "original_resource_id", nullable=False,
|
||||
existing_type=sa.String(255),
|
||||
existing_nullable=True)
|
@ -734,17 +734,21 @@ class SQLAlchemyIndexer(indexer.IndexerDriver):
|
||||
def create_resource(self, resource_type, id,
|
||||
creator, user_id=None, project_id=None,
|
||||
started_at=None, ended_at=None, metrics=None,
|
||||
original_resource_id=None,
|
||||
**kwargs):
|
||||
if (started_at is not None
|
||||
and ended_at is not None
|
||||
and started_at > ended_at):
|
||||
raise ValueError(
|
||||
"Start timestamp cannot be after end timestamp")
|
||||
if original_resource_id is None:
|
||||
original_resource_id = str(id)
|
||||
with self.facade.writer() as session:
|
||||
resource_cls = self._resource_type_to_mappers(
|
||||
session, resource_type)['resource']
|
||||
r = resource_cls(
|
||||
id=id,
|
||||
original_resource_id=original_resource_id,
|
||||
type=resource_type,
|
||||
creator=creator,
|
||||
user_id=user_id,
|
||||
|
@ -337,7 +337,8 @@ class ResourceMixin(ResourceJsonifier):
|
||||
ended_at = sqlalchemy.Column(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(255),
|
||||
nullable=False)
|
||||
|
||||
|
||||
class Resource(ResourceMixin, Base, GnocchiBase):
|
||||
|
@ -214,7 +214,32 @@ class TestIndexerDriver(tests_base.TestCase):
|
||||
"project_id": None,
|
||||
"started_at": rc.started_at,
|
||||
"ended_at": None,
|
||||
"original_resource_id": None,
|
||||
"original_resource_id": str(r1),
|
||||
"type": "generic",
|
||||
"metrics": {}},
|
||||
rc.jsonify())
|
||||
rg = self.index.get_resource('generic', r1, with_metrics=True)
|
||||
self.assertEqual(rc, rg)
|
||||
self.assertEqual(rc.metrics, rg.metrics)
|
||||
|
||||
def test_create_resource_with_original_resource_id(self):
|
||||
r1 = uuid.uuid4()
|
||||
creator = str(uuid.uuid4())
|
||||
rc = self.index.create_resource('generic', r1, creator,
|
||||
original_resource_id="foobar")
|
||||
self.assertIsNotNone(rc.started_at)
|
||||
self.assertIsNotNone(rc.revision_start)
|
||||
self.assertEqual({"id": r1,
|
||||
"revision_start": rc.revision_start,
|
||||
"revision_end": None,
|
||||
"creator": creator,
|
||||
"created_by_user_id": creator,
|
||||
"created_by_project_id": "",
|
||||
"user_id": None,
|
||||
"project_id": None,
|
||||
"started_at": rc.started_at,
|
||||
"ended_at": None,
|
||||
"original_resource_id": "foobar",
|
||||
"type": "generic",
|
||||
"metrics": {}},
|
||||
rc.jsonify())
|
||||
@ -240,7 +265,7 @@ class TestIndexerDriver(tests_base.TestCase):
|
||||
"project_id": None,
|
||||
"started_at": rc.started_at,
|
||||
"ended_at": None,
|
||||
"original_resource_id": None,
|
||||
"original_resource_id": str(r1),
|
||||
"type": "generic",
|
||||
"metrics": {}},
|
||||
rc.jsonify())
|
||||
@ -323,7 +348,7 @@ class TestIndexerDriver(tests_base.TestCase):
|
||||
"project_id": None,
|
||||
"started_at": ts,
|
||||
"ended_at": None,
|
||||
"original_resource_id": None,
|
||||
"original_resource_id": str(r1),
|
||||
"type": "generic",
|
||||
"metrics": {}}, rc.jsonify())
|
||||
r = self.index.get_resource('generic', r1, with_metrics=True)
|
||||
@ -352,7 +377,7 @@ class TestIndexerDriver(tests_base.TestCase):
|
||||
"project_id": None,
|
||||
"started_at": rc.started_at,
|
||||
"ended_at": None,
|
||||
"original_resource_id": None,
|
||||
"original_resource_id": str(r1),
|
||||
"type": "generic",
|
||||
"metrics": {'foo': str(e1), 'bar': str(e2)}},
|
||||
rc.jsonify())
|
||||
@ -369,7 +394,7 @@ class TestIndexerDriver(tests_base.TestCase):
|
||||
"ended_at": None,
|
||||
"user_id": None,
|
||||
"project_id": None,
|
||||
"original_resource_id": None,
|
||||
"original_resource_id": str(r1),
|
||||
"metrics": {'foo': str(e1), 'bar': str(e2)}},
|
||||
r.jsonify())
|
||||
|
||||
@ -419,7 +444,7 @@ class TestIndexerDriver(tests_base.TestCase):
|
||||
"project_id": None,
|
||||
"type": "generic",
|
||||
"started_at": r.started_at,
|
||||
"original_resource_id": None,
|
||||
"original_resource_id": str(r1),
|
||||
"metrics": {}}, r.jsonify())
|
||||
|
||||
def test_update_resource_metrics(self):
|
||||
@ -592,7 +617,7 @@ class TestIndexerDriver(tests_base.TestCase):
|
||||
"created_by_user_id": creator,
|
||||
"user_id": None,
|
||||
"project_id": None,
|
||||
"original_resource_id": None,
|
||||
"original_resource_id": str(r1),
|
||||
"type": "generic",
|
||||
"metrics": {'bar': str(e2)}}, r.jsonify())
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user