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_config import cfg
|
||||||
from oslo_log import log
|
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 service
|
||||||
from ceilometer import storage
|
from ceilometer import storage
|
||||||
|
|
||||||
|
|
||||||
LOG = log.getLogger(__name__)
|
LOG = log.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
@ -51,3 +52,72 @@ def expirer():
|
||||||
else:
|
else:
|
||||||
LOG.info(_LI("Nothing to clean, database event time to live "
|
LOG.info(_LI("Nothing to clean, database event time to live "
|
||||||
"is disabled"))
|
"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-agent-notification = ceilometer.cmd.agent_notification:main
|
||||||
ceilometer-send-sample = ceilometer.cmd.sample:send_sample
|
ceilometer-send-sample = ceilometer.cmd.sample:send_sample
|
||||||
ceilometer-dbsync = ceilometer.cmd.storage:dbsync
|
ceilometer-dbsync = ceilometer.cmd.storage:dbsync
|
||||||
|
ceilometer-db-legacy-clean = ceilometer.cmd.storage:db_clean_legacy
|
||||||
ceilometer-expirer = ceilometer.cmd.storage:expirer
|
ceilometer-expirer = ceilometer.cmd.storage:expirer
|
||||||
ceilometer-rootwrap = oslo_rootwrap.cmd:main
|
ceilometer-rootwrap = oslo_rootwrap.cmd:main
|
||||||
ceilometer-collector = ceilometer.cmd.collector:main
|
ceilometer-collector = ceilometer.cmd.collector:main
|
||||||
|
|
Loading…
Reference in New Issue