summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2014-09-20 23:03:04 +0000
committerGerrit Code Review <review@openstack.org>2014-09-20 23:03:04 +0000
commit22a8654c5cc68599bee0e2a884dbb192939199a7 (patch)
tree2ee20f11c47eea643bbfabeebf7d405b5e617fbd
parent0f4147723eebae61311e0c4a3fcbac8f51a214bc (diff)
parent5e8fb13dbb357bdb0be4500f5e65217c5ba9b881 (diff)
downloadceilometer-22a8654c5cc68599bee0e2a884dbb192939199a7.tar.gz
Merge "[HBase] Catch AlreadyExists error in Connection upgrade"
-rw-r--r--ceilometer/alarm/storage/impl_hbase.py5
-rw-r--r--ceilometer/storage/hbase/utils.py23
-rw-r--r--ceilometer/storage/impl_hbase.py6
3 files changed, 29 insertions, 5 deletions
diff --git a/ceilometer/alarm/storage/impl_hbase.py b/ceilometer/alarm/storage/impl_hbase.py
index 27311c66..8a50bcae 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 4a2a0b08..1fe4a3a4 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 3899f482..4a3a4e6f 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...'))