summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2016-07-20 08:59:58 +0000
committerGerrit Code Review <review@openstack.org>2016-07-20 08:59:58 +0000
commitfd9ee40216b445115f3d828df81c4163ad80cc75 (patch)
tree40ccf3dd55f97c6639b65424f4eecb26717b9273
parent51d5a8e9f3549efbea5ae85c099cc3d5b45920b8 (diff)
parent7f4f983ea8478514ebc4117f58d0506c55d66285 (diff)
downloadceilometer-fd9ee40216b445115f3d828df81c4163ad80cc75.tar.gz
Merge "sqlalchemy: do not run upgrade on fresh install" into stable/mitaka6.1.3
-rw-r--r--ceilometer/event/storage/impl_sqlalchemy.py15
-rw-r--r--ceilometer/storage/impl_sqlalchemy.py15
-rw-r--r--ceilometer/storage/sqlalchemy/models.py22
3 files changed, 46 insertions, 6 deletions
diff --git a/ceilometer/event/storage/impl_sqlalchemy.py b/ceilometer/event/storage/impl_sqlalchemy.py
index b53e0f18..0a350188 100644
--- a/ceilometer/event/storage/impl_sqlalchemy.py
+++ b/ceilometer/event/storage/impl_sqlalchemy.py
@@ -142,7 +142,20 @@ class Connection(base.Connection):
path = os.path.join(os.path.abspath(os.path.dirname(__file__)),
'..', '..', 'storage', 'sqlalchemy',
'migrate_repo')
- migration.db_sync(self._engine_facade.get_engine(), path)
+ engine = self._engine_facade.get_engine()
+
+ from migrate import exceptions as migrate_exc
+ from migrate.versioning import api
+ from migrate.versioning import repository
+
+ repo = repository.Repository(path)
+ try:
+ api.db_version(engine, repo)
+ except migrate_exc.DatabaseNotControlledError:
+ models.Base.metadata.create_all(engine)
+ api.version_control(engine, repo, repo.latest)
+ else:
+ migration.db_sync(engine, path)
def clear(self):
engine = self._engine_facade.get_engine()
diff --git a/ceilometer/storage/impl_sqlalchemy.py b/ceilometer/storage/impl_sqlalchemy.py
index ec9f8044..e70cc6c1 100644
--- a/ceilometer/storage/impl_sqlalchemy.py
+++ b/ceilometer/storage/impl_sqlalchemy.py
@@ -237,7 +237,20 @@ class Connection(base.Connection):
from oslo_db.sqlalchemy import migration
path = os.path.join(os.path.abspath(os.path.dirname(__file__)),
'sqlalchemy', 'migrate_repo')
- migration.db_sync(self._engine_facade.get_engine(), path)
+ engine = self._engine_facade.get_engine()
+
+ from migrate import exceptions as migrate_exc
+ from migrate.versioning import api
+ from migrate.versioning import repository
+
+ repo = repository.Repository(path)
+ try:
+ api.db_version(engine, repo)
+ except migrate_exc.DatabaseNotControlledError:
+ models.Base.metadata.create_all(engine)
+ api.version_control(engine, repo, repo.latest)
+ else:
+ migration.db_sync(engine, path)
def clear(self):
engine = self._engine_facade.get_engine()
diff --git a/ceilometer/storage/sqlalchemy/models.py b/ceilometer/storage/sqlalchemy/models.py
index 2721845d..3667d5d8 100644
--- a/ceilometer/storage/sqlalchemy/models.py
+++ b/ceilometer/storage/sqlalchemy/models.py
@@ -78,10 +78,12 @@ class PreciseTimestamp(TypeDecorator):
return value
+_COMMON_TABLE_ARGS = {'mysql_charset': "utf8", 'mysql_engine': "InnoDB"}
+
+
class CeilometerBase(object):
"""Base class for Ceilometer Models."""
- __table_args__ = {'mysql_charset': "utf8",
- 'mysql_engine': "InnoDB"}
+ __table_args__ = _COMMON_TABLE_ARGS
__table_initialized__ = False
def __setitem__(self, key, value):
@@ -105,6 +107,7 @@ class MetaText(Base):
__tablename__ = 'metadata_text'
__table_args__ = (
Index('ix_meta_text_key', 'meta_key'),
+ _COMMON_TABLE_ARGS,
)
id = Column(Integer, ForeignKey('resource.internal_id'), primary_key=True)
meta_key = Column(String(255), primary_key=True)
@@ -117,6 +120,7 @@ class MetaBool(Base):
__tablename__ = 'metadata_bool'
__table_args__ = (
Index('ix_meta_bool_key', 'meta_key'),
+ _COMMON_TABLE_ARGS,
)
id = Column(Integer, ForeignKey('resource.internal_id'), primary_key=True)
meta_key = Column(String(255), primary_key=True)
@@ -129,6 +133,7 @@ class MetaBigInt(Base):
__tablename__ = 'metadata_int'
__table_args__ = (
Index('ix_meta_int_key', 'meta_key'),
+ _COMMON_TABLE_ARGS,
)
id = Column(Integer, ForeignKey('resource.internal_id'), primary_key=True)
meta_key = Column(String(255), primary_key=True)
@@ -141,6 +146,7 @@ class MetaFloat(Base):
__tablename__ = 'metadata_float'
__table_args__ = (
Index('ix_meta_float_key', 'meta_key'),
+ _COMMON_TABLE_ARGS,
)
id = Column(Integer, ForeignKey('resource.internal_id'), primary_key=True)
meta_key = Column(String(255), primary_key=True)
@@ -154,6 +160,7 @@ class Meter(Base):
__table_args__ = (
UniqueConstraint('name', 'type', 'unit', name='def_unique'),
Index('ix_meter_name', 'name'),
+ _COMMON_TABLE_ARGS,
)
id = Column(Integer, primary_key=True)
name = Column(String(255), nullable=False)
@@ -175,6 +182,7 @@ class Resource(Base):
# name='res_def_unique'),
Index('ix_resource_resource_id', 'resource_id'),
Index('ix_resource_metadata_hash', 'metadata_hash'),
+ _COMMON_TABLE_ARGS,
)
internal_id = Column(Integer, primary_key=True)
@@ -209,7 +217,8 @@ class Sample(Base):
Index('ix_sample_timestamp', 'timestamp'),
Index('ix_sample_resource_id', 'resource_id'),
Index('ix_sample_meter_id', 'meter_id'),
- Index('ix_sample_meter_id_resource_id', 'meter_id', 'resource_id')
+ Index('ix_sample_meter_id_resource_id', 'meter_id', 'resource_id'),
+ _COMMON_TABLE_ARGS,
)
id = Column(Integer, primary_key=True)
meter_id = Column(Integer, ForeignKey('meter.id'))
@@ -260,7 +269,8 @@ class Event(Base):
__table_args__ = (
Index('ix_event_message_id', 'message_id'),
Index('ix_event_type_id', 'event_type_id'),
- Index('ix_event_generated', 'generated')
+ Index('ix_event_generated', 'generated'),
+ _COMMON_TABLE_ARGS,
)
id = Column(Integer, primary_key=True)
message_id = Column(String(50), unique=True)
@@ -289,6 +299,7 @@ class TraitText(Base):
__tablename__ = 'trait_text'
__table_args__ = (
Index('ix_trait_text_event_id_key', 'event_id', 'key'),
+ _COMMON_TABLE_ARGS,
)
event_id = Column(Integer, ForeignKey('event.id'), primary_key=True)
key = Column(String(255), primary_key=True)
@@ -301,6 +312,7 @@ class TraitInt(Base):
__tablename__ = 'trait_int'
__table_args__ = (
Index('ix_trait_int_event_id_key', 'event_id', 'key'),
+ _COMMON_TABLE_ARGS,
)
event_id = Column(Integer, ForeignKey('event.id'), primary_key=True)
key = Column(String(255), primary_key=True)
@@ -313,6 +325,7 @@ class TraitFloat(Base):
__tablename__ = 'trait_float'
__table_args__ = (
Index('ix_trait_float_event_id_key', 'event_id', 'key'),
+ _COMMON_TABLE_ARGS,
)
event_id = Column(Integer, ForeignKey('event.id'), primary_key=True)
key = Column(String(255), primary_key=True)
@@ -325,6 +338,7 @@ class TraitDatetime(Base):
__tablename__ = 'trait_datetime'
__table_args__ = (
Index('ix_trait_datetime_event_id_key', 'event_id', 'key'),
+ _COMMON_TABLE_ARGS,
)
event_id = Column(Integer, ForeignKey('event.id'), primary_key=True)
key = Column(String(255), primary_key=True)