diff --git a/ceilometer/alarm/storage/impl_hbase.py b/ceilometer/alarm/storage/impl_hbase.py index 27311c661..8a50bcae7 100644 --- a/ceilometer/alarm/storage/impl_hbase.py +++ b/ceilometer/alarm/storage/impl_hbase.py @@ -98,9 +98,10 @@ class Connection(base.Connection): self.conn_pool = self._get_connection_pool(opts) def upgrade(self): + tables = [self.ALARM_HISTORY_TABLE, self.ALARM_TABLE] + column_families = {'f': dict()} with self.conn_pool.connection() as conn: - conn.create_table(self.ALARM_TABLE, {'f': dict()}) - conn.create_table(self.ALARM_HISTORY_TABLE, {'f': dict()}) + hbase_utils.create_tables(conn, tables, column_families) def clear(self): LOG.debug(_('Dropping HBase schema...')) diff --git a/ceilometer/storage/hbase/utils.py b/ceilometer/storage/hbase/utils.py index 4a2a0b080..1fe4a3a4e 100644 --- a/ceilometer/storage/hbase/utils.py +++ b/ceilometer/storage/hbase/utils.py @@ -17,9 +17,14 @@ import datetime import json import bson.json_util +from happybase.hbase import ttypes +from ceilometer.openstack.common.gettextutils import _ +from ceilometer.openstack.common import log from ceilometer import utils +LOG = log.getLogger(__name__) + EVENT_TRAIT_TYPES = {'none': 0, 'string': 1, 'integer': 2, 'float': 3, 'datetime': 4} OP_SIGN = {'eq': '=', 'lt': '<', 'le': '<=', 'ne': '!=', 'gt': '>', 'ge': '>='} @@ -416,3 +421,21 @@ def object_hook(dct): dt = bson.json_util.object_hook(dct) return dt.replace(tzinfo=None) return bson.json_util.object_hook(dct) + + +def create_tables(conn, tables, column_families): + for table in tables: + try: + conn.create_table(table, column_families) + except ttypes.AlreadyExists: + if conn.table_prefix: + table = ("%(table_prefix)s" + "%(separator)s" + "%(table_name)s" % + dict(table_prefix=conn.table_prefix, + separator=conn.table_prefix_separator, + table_name=table)) + + LOG.warn(_("Cannot create table %(table_name)s " + "it already exists. Ignoring error") + % {'table_name': table}) \ No newline at end of file diff --git a/ceilometer/storage/impl_hbase.py b/ceilometer/storage/impl_hbase.py index 3899f4825..4a3a4e6fc 100644 --- a/ceilometer/storage/impl_hbase.py +++ b/ceilometer/storage/impl_hbase.py @@ -161,10 +161,10 @@ class Connection(base.Connection): self.conn_pool = self._get_connection_pool(opts) def upgrade(self): + tables = [self.RESOURCE_TABLE, self.METER_TABLE, self.EVENT_TABLE] + column_families = {'f': dict(max_versions=1)} with self.conn_pool.connection() as conn: - conn.create_table(self.RESOURCE_TABLE, {'f': dict(max_versions=1)}) - conn.create_table(self.METER_TABLE, {'f': dict(max_versions=1)}) - conn.create_table(self.EVENT_TABLE, {'f': dict(max_versions=1)}) + hbase_utils.create_tables(conn, tables, column_families) def clear(self): LOG.debug(_('Dropping HBase schema...'))