Add a tool to clean the legacy alarm tables
Since we have moved alarm out of ceilometer, when run ceilometer-dbsync, the alarm tables will still be created and won't be removed. This change added a tool that allow users to drop the legacy alarm and alarm_history tables with SQL backends. Change-Id: Ia831741319fd8e198f54a7d4a99b4d7833074e8e Closes-Bug: #1578128 Signed-off-by: liusheng <liusheng@huawei.com>
This commit is contained in:
parent
913880bafb
commit
800034dc0b
@ -16,12 +16,13 @@
|
||||
|
||||
from oslo_config import cfg
|
||||
from oslo_log import log
|
||||
import six.moves.urllib.parse as urlparse
|
||||
import sqlalchemy as sa
|
||||
|
||||
from ceilometer.i18n import _LI
|
||||
from ceilometer.i18n import _LE, _LI
|
||||
from ceilometer import service
|
||||
from ceilometer import storage
|
||||
|
||||
|
||||
LOG = log.getLogger(__name__)
|
||||
|
||||
|
||||
@ -51,3 +52,72 @@ def expirer():
|
||||
else:
|
||||
LOG.info(_LI("Nothing to clean, database event time to live "
|
||||
"is disabled"))
|
||||
|
||||
|
||||
def db_clean_legacy():
|
||||
confirm = raw_input("Do you really want to drop the legacy alarm tables? "
|
||||
"This will destroy data definitely if it exist. "
|
||||
"Please type 'YES' to confirm: ")
|
||||
if confirm != 'YES':
|
||||
print("DB legacy cleanup aborted!")
|
||||
return
|
||||
service.prepare_service()
|
||||
for purpose in ['metering', 'event']:
|
||||
url = (getattr(cfg.CONF.database, '%s_connection' % purpose) or
|
||||
cfg.CONF.database.connection)
|
||||
parsed = urlparse.urlparse(url)
|
||||
|
||||
if parsed.password:
|
||||
masked_netloc = '****'.join(parsed.netloc.rsplit(parsed.password))
|
||||
masked_url = parsed._replace(netloc=masked_netloc)
|
||||
masked_url = urlparse.urlunparse(masked_url)
|
||||
else:
|
||||
masked_url = url
|
||||
LOG.info(_LI('Starting to drop alarm and alarm history tables in '
|
||||
'%(purpose)s backend: %(url)s'), {
|
||||
'purpose': purpose, 'url': masked_url})
|
||||
|
||||
connection_scheme = parsed.scheme
|
||||
conn = storage.get_connection_from_config(cfg.CONF, purpose)
|
||||
if connection_scheme in ('mysql', 'mysql+pymysql', 'postgresql',
|
||||
'sqlite'):
|
||||
engine = conn._engine_facade.get_engine()
|
||||
meta = sa.MetaData(bind=engine)
|
||||
for table_name in ['alarm', 'alarm_history']:
|
||||
if engine.has_table(table_name):
|
||||
alarm = sa.Table(table_name, meta, autoload=True)
|
||||
alarm.drop()
|
||||
LOG.info(_LI("Legacy %s table of SQL backend has been "
|
||||
"dropped."), table_name)
|
||||
else:
|
||||
LOG.info(_LI('%s table does not exist.'), table_name)
|
||||
|
||||
elif connection_scheme == 'hbase':
|
||||
with conn.conn_pool.connection() as h_conn:
|
||||
tables = h_conn.tables()
|
||||
table_name_mapping = {'alarm': 'alarm',
|
||||
'alarm_h': 'alarm history'}
|
||||
for table_name in ['alarm', 'alarm_h']:
|
||||
try:
|
||||
if table_name in tables:
|
||||
h_conn.disable_table(table_name)
|
||||
h_conn.delete_table(table_name)
|
||||
LOG.info(_LI("Legacy %s table of Hbase backend "
|
||||
"has been dropped."),
|
||||
table_name_mapping[table_name])
|
||||
else:
|
||||
LOG.info(_LI('%s table does not exist.'),
|
||||
table_name_mapping[table_name])
|
||||
except Exception as e:
|
||||
LOG.error(_LE('Error occurred while dropping alarm '
|
||||
'tables of Hbase, %s'), e)
|
||||
|
||||
elif connection_scheme == 'mongodb':
|
||||
for table_name in ['alarm', 'alarm_history']:
|
||||
if table_name in conn.db.conn.collection_names():
|
||||
conn.db.conn.drop_collection(table_name)
|
||||
LOG.info(_LI("Legacy %s table of Mongodb backend has been "
|
||||
"dropped."), table_name)
|
||||
else:
|
||||
LOG.info(_LI('%s table does not exist.'), table_name)
|
||||
LOG.info('Legacy alarm tables cleanup done.')
|
||||
|
@ -0,0 +1,6 @@
|
||||
---
|
||||
fixes:
|
||||
- >
|
||||
[`bug 1578128 <https://bugs.launchpad.net/ceilometer/+bug/1578128>`_]
|
||||
Add a tool that allow users to drop the legacy alarm and alarm_history
|
||||
tables.
|
@ -246,6 +246,7 @@ console_scripts =
|
||||
ceilometer-agent-notification = ceilometer.cmd.agent_notification:main
|
||||
ceilometer-send-sample = ceilometer.cmd.sample:send_sample
|
||||
ceilometer-dbsync = ceilometer.cmd.storage:dbsync
|
||||
ceilometer-db-legacy-clean = ceilometer.cmd.storage:db_clean_legacy
|
||||
ceilometer-expirer = ceilometer.cmd.storage:expirer
|
||||
ceilometer-rootwrap = oslo_rootwrap.cmd:main
|
||||
ceilometer-collector = ceilometer.cmd.collector:main
|
||||
|
Loading…
x
Reference in New Issue
Block a user