Merge "Refactor sql driver api"

This commit is contained in:
Zuul 2018-11-06 06:24:44 +00:00 committed by Gerrit Code Review
commit 40fe31c931
1 changed files with 221 additions and 393 deletions

View File

@ -142,20 +142,157 @@ def model_query(session, model,
return query
def delete_tuple(tablename, user_id, tuple_id, project_id=None):
session = get_db_session()
with session.begin():
try:
query = model_query(session, tablename, project_id=project_id)
query = query.filter_by(user_id=user_id).filter_by(id=tuple_id)
result = query.all()
if 1 == len(result):
result[0].delete(session=session)
LOG.info('Tuple delete, Tuple_id: '
'{0} deleted in Table {1}'.
format(tuple_id, tablename))
else:
LOG.info('Tuple delete, Tuple_id: '
'{0} not found in Table {1}'.
format(tuple_id, tablename))
except Exception as e:
session.close()
raise freezer_api_exc.StorageEngineError(
message='Mysql operation failed {0}'.format(e))
session.close()
return tuple_id
def get_tuple(tablename, user_id, tuple_id, project_id=None):
session = get_db_session()
with session.begin():
try:
query = model_query(session, tablename, project_id=project_id)
query = query.filter_by(user_id=user_id).filter_by(id=tuple_id)
result = query.all()
except Exception as e:
raise freezer_api_exc.StorageEngineError(
message='Mysql operation failed {0}'.format(e))
session.close()
return result
def add_tuple(tuple):
session = get_db_session()
with session.begin():
try:
tuple.save(session=session)
except Exception as e:
session.close()
raise freezer_api_exc.StorageEngineError(
message='Mysql operation failed {0}'.format(e))
session.close()
def update_tuple(tablename, user_id, tuple_id, tuple_values, project_id=None):
session = get_db_session()
with session.begin():
try:
query = model_query(session, tablename, project_id=project_id)
query = query.filter_by(user_id=user_id).filter_by(id=tuple_id)
result = query.update(tuple_values)
except Exception as e:
session.close()
raise freezer_api_exc.StorageEngineError(
message='Mysql operation failed {0}'.format(e))
session.close()
if not result:
raise freezer_api_exc.DocumentNotFound(
message='Tuple not registered with ID'
' {0} in Table{1} '.format(tuple_id, tablename))
else:
LOG.info('Tuple updated, tuple_id: {0}'.format(tuple_id))
return tuple_id
def replace_tuple(tablename, user_id, tuple_id, tuple_values, project_id=None):
bCreate = False
session = get_db_session()
with session.begin():
try:
query = model_query(session, tablename, project_id=project_id)
query = query.filter_by(user_id=user_id).filter_by(id=tuple_id)
result = query.update(tuple_values)
if not result:
bCreate = True
except Exception as e:
session.close()
raise freezer_api_exc.StorageEngineError(
message='Mysql operation failed {0}'.format(e))
session.close()
if bCreate:
tuplet = models.Session()
tuplet.update(tuple_values)
session = get_db_session()
with session.begin():
try:
tuplet.save(session=session)
except Exception as e:
session.close()
raise freezer_api_exc.\
StorageEngineError(message='Mysql operation failed {0}'.
format(e))
session.close()
return tuple_id
def search_tuple(tablename, user_id, project_id=None, offset=0,
limit=100, search=None):
session = get_db_session()
with session.begin():
try:
# TODO(gecong) search will be implemented in the future
query = model_query(session, tablename, project_id=project_id)
query = query.filter_by(user_id=user_id)
query = query.offset(offset)
query = query.limit(limit)
result = query.all()
except Exception as e:
raise freezer_api_exc.StorageEngineError(
message='Mysql operation failed {0}'.format(e))
session.close()
return result
def get_client(user_id, project_id=None, client_id=None, offset=0,
limit=10, search=None):
limit=100, search=None):
search = search or {}
clients = []
session = get_db_session()
query = model_query(session, models.Client, project_id=project_id)
if client_id:
query = query.filter_by(user_id=user_id).filter_by(client_id=client_id)
else:
query = query.filter_by(user_id=user_id)
result = query.all()
with session.begin():
try:
query = model_query(session, models.Client, project_id=project_id)
if client_id:
query = query.filter_by(user_id=user_id).filter_by(
client_id=client_id)
else:
query = query.filter_by(user_id=user_id)
query = query.offset(offset)
query = query.limit(limit)
result = query.all()
except Exception as e:
raise freezer_api_exc.StorageEngineError(
message='Mysql operation failed {0}'.format(e))
session.close()
for client in result:
clientmap = {}
@ -167,7 +304,6 @@ def get_client(user_id, project_id=None, client_id=None, offset=0,
u'description': client.description}
clients.append(clientmap)
session.close()
return clients
@ -197,80 +333,38 @@ def add_client(user_id, doc, project_id=None):
values['description'] = client_json.get('description', None)
client.update(values)
session = get_db_session()
with session.begin():
try:
client.save(session=session)
except Exception as e:
session.close()
raise freezer_api_exc.StorageEngineError(
message='mysql operation failed {0}'.format(e))
add_tuple(tuple=client)
LOG.info('Client registered, client_id: {0}'.format(client_id))
session.close()
return client_id
def delete_client(user_id, client_id, project_id=None):
session = get_db_session()
query = model_query(session, models.Client, project_id=project_id)
query = query.filter_by(user_id=user_id).filter_by(client_id=client_id)
result = query.all()
if 1 == len(result):
try:
result[0].delete(session=session)
except Exception as e:
session.close()
raise freezer_api_exc.StorageEngineError(
message='mysql operation failed {0}'.format(e))
existing = get_client(project_id=project_id, user_id=user_id,
client_id=client_id)
if existing:
clientt = existing[0].get('client')
clientid = clientt.get('uuid')
delete_tuple(tablename=models.Client, user_id=user_id,
tuple_id=clientid, project_id=project_id)
LOG.info('Client delete, client_id: {0} deleted'.
format(client_id))
else:
LOG.info('Client delete, client_id: {0} not found'.
format(client_id))
session.close()
return client_id
def delete_action(user_id, action_id, project_id=None):
session = get_db_session()
query = model_query(session, models.Action, project_id=project_id)
query = query.filter_by(user_id=user_id).filter_by(id=action_id)
tupleid = delete_tuple(tablename=models.Action, user_id=user_id,
tuple_id=action_id, project_id=project_id)
result = query.all()
if 1 == len(result):
try:
result[0].delete(session=session)
except Exception as e:
session.close()
raise freezer_api_exc.StorageEngineError(
message='mysql operation failed {0}'.format(e))
LOG.info('Action delete, action_id: {0} deleted'.
format(action_id))
else:
LOG.info('Action delete, action_id: {0} not found'.
format(action_id))
query = model_query(session, models.ActionReport, project_id=project_id)
query = query.filter_by(user_id=user_id).filter_by(id=action_id)
result = query.all()
if 1 == len(result):
try:
result[0].delete(session=session)
except Exception as e:
session.close()
raise freezer_api_exc.StorageEngineError(
message='mysql operation failed {0}'.format(e))
LOG.info('ActionReport delete, action_id: {0} deleted'.
format(action_id))
else:
LOG.info('ActionReport delete, action_id: {0} not found'.
format(action_id))
session.close()
return action_id
tupleid = delete_tuple(tablename=models.ActionReport, user_id=user_id,
tuple_id=action_id, project_id=project_id)
return tupleid
def add_action(user_id, doc, project_id=None):
@ -316,14 +410,7 @@ def add_action(user_id, doc, project_id=None):
action.update(actionvalue)
session = get_db_session()
with session.begin():
try:
action.save(session=session)
except Exception as e:
session.close()
raise freezer_api_exc.StorageEngineError(
message='mysql operation failed {0}'.format(e))
add_tuple(tuple=action)
LOG.info('Action registered, action_id: {0}'.format(action_id))
@ -335,32 +422,17 @@ def add_action(user_id, doc, project_id=None):
actionReport.update(actionreportvalue)
with session.begin():
try:
actionReport.save(session=session)
except Exception as e:
session.close()
raise freezer_api_exc.StorageEngineError(
message='mysql operation failed {0}'.format(e))
add_tuple(tuple=actionReport)
LOG.info('Action Reports registered, action_id: {0}'.
format(action_id))
session.close()
return action_id
def get_action(user_id, action_id, project_id=None):
session = get_db_session()
with session.begin():
try:
query = model_query(session, models.Action, project_id=project_id)
query = query.filter_by(user_id=user_id).filter_by(id=action_id)
result = query.all()
except Exception as e:
raise freezer_api_exc.StorageEngineError(
message='mysql operation failed {0}'.format(e))
session.close()
result = get_tuple(tablename=models.Action, user_id=user_id,
tuple_id=action_id, project_id=project_id)
values = {}
if 1 == len(result):
values['project_id'] = result[0].get('project_id')
@ -385,17 +457,13 @@ def get_action(user_id, action_id, project_id=None):
def search_action(user_id, project_id=None, offset=0,
limit=10, search=None):
limit=100, search=None):
search = search or {}
actions = []
session = get_db_session()
query = model_query(session, models.Action, project_id=project_id)
query = query.filter_by(user_id=user_id)
result = query.all()
result = search_tuple(tablename=models.Action, user_id=user_id,
project_id=project_id, offset=offset,
limit=limit, search=search)
for action in result:
actionmap = {}
actionmap['project_id'] = project_id
@ -421,7 +489,6 @@ def search_action(user_id, project_id=None, offset=0,
actions.append(actionmap)
session.close()
return actions
@ -453,26 +520,10 @@ def update_action(user_id, action_id, patch_doc, project_id=None):
values['backup_metadata'] = json_utils.json_encode(freezer_action)
session = get_db_session()
with session.begin():
try:
query = model_query(session, models.Action, project_id=project_id)
query = query.filter_by(user_id=user_id).filter_by(id=action_id)
result = query.update(values)
except Exception as e:
session.close()
raise freezer_api_exc.StorageEngineError(
message='mysql operation failed {0}'.format(e))
update_tuple(tablename=models.Action, user_id=user_id, tuple_id=action_id,
tuple_values=values, project_id=project_id)
session.close()
if not result:
raise freezer_api_exc.DocumentNotFound(
message='Action not registered with ID'
' {0}'.format(action_id))
else:
LOG.info('action updated, action_id: {0}'.format(action_id))
return action_id
return action_id
def replace_action(user_id, action_id, doc, project_id=None):
@ -484,7 +535,6 @@ def replace_action(user_id, action_id, doc, project_id=None):
values = {}
keyt = ['action', 'mode', 'backup_name', 'container',
'src_file', 'timeout', 'priority', 'mandatory', 'log_file']
bCreate = False
freezer_action = valid_doc.get('freezer_action', {})
@ -500,57 +550,19 @@ def replace_action(user_id, action_id, doc, project_id=None):
if key in keyt:
values[key] = freezer_action.get(key)
session = get_db_session()
with session.begin():
try:
query = model_query(session, models.Action, project_id=project_id)
query = query.filter_by(user_id=user_id).filter_by(id=action_id)
result = query.update(values)
if not result:
bCreate = True
except Exception as e:
session.close()
raise freezer_api_exc.StorageEngineError(
message='mysql operation failed {0}'.format(e))
session.close()
if bCreate:
action = models.Action()
action.update(values)
session = get_db_session()
with session.begin():
try:
action.save(session=session)
except Exception as e:
session.close()
raise freezer_api_exc.\
StorageEngineError(message='mysql operation failed {0}'.
format(e))
session.close()
replace_tuple(tablename=models.Action, user_id=user_id,
tuple_id=action_id, tuple_values=values,
project_id=project_id)
LOG.info('action replaced, action_id: {0}'.format(action_id))
return action_id
def delete_job(user_id, job_id, project_id=None):
session = get_db_session()
query = model_query(session, models.Job, project_id=project_id)
query = query.filter_by(user_id=user_id).filter_by(id=job_id)
result = query.all()
if 1 == len(result):
try:
result[0].delete(session=session)
except Exception as e:
session.close()
raise freezer_api_exc.StorageEngineError(
message='mysql operation failed {0}'.format(e))
LOG.info('Job delete, job_id: {0} deleted'.format(job_id))
else:
LOG.info('Job delete, job_id: {0} not found'.
format(job_id))
session.close()
return job_id
tupleid = delete_tuple(tablename=models.Job, user_id=user_id,
tuple_id=job_id, project_id=project_id)
return tupleid
def add_job(user_id, doc, project_id=None):
@ -582,14 +594,7 @@ def add_job(user_id, doc, project_id=None):
json_encode(job_doc.pop('job_actions', ''))
job.update(jobvalue)
session = get_db_session()
with session.begin():
try:
job.save(session=session)
except Exception as e:
session.close()
raise freezer_api_exc.StorageEngineError(
message='mysql operation failed {0}'.format(e))
add_tuple(tuple=job)
LOG.info('Job registered, job_id: {0}'.format(job_id))
@ -597,17 +602,9 @@ def add_job(user_id, doc, project_id=None):
def get_job(user_id, job_id, project_id=None):
session = get_db_session()
with session.begin():
try:
query = model_query(session, models.Job, project_id=project_id)
query = query.filter_by(user_id=user_id).filter_by(id=job_id)
result = query.all()
except Exception as e:
raise freezer_api_exc.StorageEngineError(
message='mysql operation failed {0}'.format(e))
session.close()
result = get_tuple(tablename=models.Job, user_id=user_id,
tuple_id=job_id, project_id=project_id)
values = {}
if 1 == len(result):
values['job_id'] = result[0].get('id')
@ -625,16 +622,11 @@ def get_job(user_id, job_id, project_id=None):
def search_job(user_id, project_id=None, offset=0,
limit=10, search=None):
search = search or {}
limit=100, search=None):
jobs = []
session = get_db_session()
query = model_query(session, models.Job, project_id=project_id)
query = query.filter_by(user_id=user_id)
result = query.all()
result = search_tuple(tablename=models.Job, user_id=user_id,
project_id=project_id, offset=offset,
limit=limit, search=search)
for job in result:
jobmap = {}
jobmap['job_id'] = job.get('id')
@ -650,7 +642,6 @@ def search_job(user_id, project_id=None, offset=0,
jobs.append(jobmap)
session.close()
return jobs
@ -670,26 +661,10 @@ def update_job(user_id, job_id, patch_doc, project_id=None):
else:
values[key] = valid_patch.get(key, None)
session = get_db_session()
with session.begin():
try:
query = model_query(session, models.Job, project_id=project_id)
query = query.filter_by(user_id=user_id).filter_by(id=job_id)
result = query.update(values)
except Exception as e:
session.close()
raise freezer_api_exc.StorageEngineError(
message='mysql operation failed {0}'.format(e))
update_tuple(tablename=models.Job, user_id=user_id, tuple_id=job_id,
tuple_values=values, project_id=project_id)
session.close()
if not result:
raise freezer_api_exc.DocumentNotFound(
message='Job not registered with ID'
' {0}'.format(job_id))
else:
LOG.info('job updated, job_id: {0}'.format(job_id))
return 0
return 0
def replace_job(user_id, job_id, doc, project_id=None):
@ -700,7 +675,6 @@ def replace_job(user_id, job_id, doc, project_id=None):
values = {}
valuesnew = {}
bCreate = False
values['id'] = job_id
values['project_id'] = project_id
@ -718,51 +692,17 @@ def replace_job(user_id, job_id, doc, project_id=None):
if values[key] is not None:
valuesnew[key] = values[key]
session = get_db_session()
with session.begin():
try:
query = model_query(session, models.Job, project_id=project_id)
query = query.filter_by(user_id=user_id).filter_by(id=job_id)
result = query.update(valuesnew)
if not result:
bCreate = True
except Exception as e:
session.close()
raise freezer_api_exc.StorageEngineError(
message='mysql operation failed {0}'.format(e))
session.close()
if bCreate:
job = models.Job()
job.update(valuesnew)
session = get_db_session()
with session.begin():
try:
job.save(session=session)
except Exception as e:
session.close()
raise freezer_api_exc.\
StorageEngineError(message='mysql operation failed {0}'.
format(e))
session.close()
replace_tuple(tablename=models.Job, user_id=user_id,
tuple_id=job_id, tuple_values=valuesnew,
project_id=project_id)
LOG.info('job replaced, job_id: {0}'.format(job_id))
return job_id
def get_backup(user_id, backup_id, project_id=None):
session = get_db_session()
with session.begin():
try:
query = model_query(session, models.Backup, project_id=project_id)
query = query.filter_by(user_id=user_id).filter_by(id=backup_id)
result = query.all()
except Exception as e:
raise freezer_api_exc.StorageEngineError(
message='mysql operation failed {0}'.format(e))
session.close()
result = get_tuple(tablename=models.Backup, user_id=user_id,
tuple_id=backup_id, project_id=project_id)
values = {}
if 1 == len(result):
values['project_id'] = result[0].get('project_id')
@ -812,56 +752,26 @@ def add_backup(user_id, user_name, doc, project_id=None):
backupvalue['backup_metadata'] = json_utils.json_encode(backup_metadata)
backup.update(backupvalue)
session = get_db_session()
with session.begin():
try:
backup.save(session=session)
except Exception as e:
session.close()
raise freezer_api_exc.\
StorageEngineError(message='mysql operation failed {0}'.
format(e))
add_tuple(tuple=backup)
LOG.info('Backup registered, backup_id: {0}'.format(backup_id))
session.close()
return backup_id
def delete_backup(user_id, backup_id, project_id=None):
session = get_db_session()
query = model_query(session, models.Backup, project_id=project_id)
query = query.filter_by(user_id=user_id).filter_by(id=backup_id)
result = query.all()
if 1 == len(result):
try:
result[0].delete(session=session)
except Exception as e:
session.close()
raise freezer_api_exc.StorageEngineError(
message='mysql operation failed {0}'.format(e))
LOG.info('Backup delete, backup_id: {0} deleted'.
format(backup_id))
else:
LOG.info('Backup delete, backup_id: {0} not found'.
format(backup_id))
session.close()
return backup_id
tupleid = delete_tuple(tablename=models.Backup, user_id=user_id,
tuple_id=backup_id, project_id=project_id)
return tupleid
def search_backup(user_id, project_id=None, offset=0,
limit=10, search=None):
limit=100, search=None):
search = search or {}
backups = []
session = get_db_session()
query = model_query(session, models.Backup, project_id=project_id)
query = query.filter_by(user_id=user_id)
result = query.all()
result = search_tuple(tablename=models.Backup, user_id=user_id,
project_id=project_id, offset=offset,
limit=limit, search=search)
for backup in result:
backupmap = {}
backupmap['project_id'] = project_id
@ -874,24 +784,14 @@ def search_backup(user_id, project_id=None, offset=0,
json_decode(backup.get('backup_metadata'))
backups.append(backupmap)
session.close()
return backups
def get_session(user_id, session_id, project_id=None):
jobt = {}
session = get_db_session()
with session.begin():
try:
query = model_query(session, models.Session, project_id=project_id)
query = query.filter_by(user_id=user_id).filter_by(id=session_id)
result = query.all()
except Exception as e:
raise freezer_api_exc.StorageEngineError(
message='mysql operation failed {0}'.format(e))
session.close()
values = {}
result = get_tuple(tablename=models.Session, user_id=user_id,
tuple_id=session_id, project_id=project_id)
if 1 == len(result):
values['project_id'] = result[0].get('project_id')
values['session_id'] = result[0].get('id')
@ -916,26 +816,10 @@ def get_session(user_id, session_id, project_id=None):
def delete_session(user_id, session_id, project_id=None):
session = get_db_session()
query = model_query(session, models.Session, project_id=project_id)
query = query.filter_by(user_id=user_id).filter_by(id=session_id)
result = query.all()
if 1 == len(result):
try:
result[0].delete(session=session)
except Exception as e:
session.close()
raise freezer_api_exc.StorageEngineError(
message='mysql operation failed {0}'.format(e))
LOG.info('Session delete, session_id: {0} deleted'.
format(session_id))
else:
LOG.info('Session delete, session_id: {0} not found'.
format(session_id))
session.close()
return session_id
tupleid = delete_tuple(tablename=models.Session, user_id=user_id,
tuple_id=session_id, project_id=project_id)
return tupleid
def add_session(user_id, doc, project_id=None):
@ -974,19 +858,9 @@ def add_session(user_id, doc, project_id=None):
sessionvalue['schedule'] = json_utils.json_encode(schedulingjson)
sessiont.update(sessionvalue)
session = get_db_session()
with session.begin():
try:
sessiont.save(session=session)
except Exception as e:
session.close()
raise freezer_api_exc.\
StorageEngineError(message='mysql operation failed {0}'.
format(e))
add_tuple(tuple=sessiont)
LOG.info('Session registered, session_id: {0}'.format(session_id))
session.close()
return session_id
@ -1017,26 +891,11 @@ def update_session(user_id, session_id, patch_doc, project_id=None):
else:
values[key] = valid_patch.get(key, None)
session = get_db_session()
with session.begin():
try:
query = model_query(session, models.Session, project_id=project_id)
query = query.filter_by(user_id=user_id).filter_by(id=session_id)
result = query.update(values)
except Exception as e:
session.close()
raise freezer_api_exc.StorageEngineError(
message='mysql operation failed {0}'.format(e))
update_tuple(tablename=models.Session, user_id=user_id,
tuple_id=session_id, tuple_values=values,
project_id=project_id)
session.close()
if not result:
raise freezer_api_exc.DocumentNotFound(
message='session not registered with ID'
' {0}'.format(session_id))
else:
LOG.info('session updated, session_id: {0}'.format(session_id))
return 0
return 0
def replace_session(user_id, session_id, doc, project_id=None):
@ -1048,7 +907,6 @@ def replace_session(user_id, session_id, doc, project_id=None):
project_id)
values = {}
valuesnew = {}
bCreate = False
values['id'] = session_id
values['project_id'] = project_id
@ -1070,51 +928,22 @@ def replace_session(user_id, session_id, doc, project_id=None):
if values[key] is not None:
valuesnew[key] = values[key]
session = get_db_session()
with session.begin():
try:
query = model_query(session, models.Session, project_id=project_id)
query = query.filter_by(user_id=user_id).filter_by(id=session_id)
result = query.update(valuesnew)
if not result:
bCreate = True
except Exception as e:
session.close()
raise freezer_api_exc.StorageEngineError(
message='mysql operation failed {0}'.format(e))
session.close()
if bCreate:
sessiont = models.Session()
sessiont.update(valuesnew)
session = get_db_session()
with session.begin():
try:
sessiont.save(session=session)
except Exception as e:
session.close()
raise freezer_api_exc.\
StorageEngineError(message='mysql operation failed {0}'.
format(e))
session.close()
replace_tuple(tablename=models.Session, user_id=user_id,
tuple_id=session_id,
tuple_values=valuesnew,
project_id=project_id)
LOG.info('session replaced, session_id: {0}'.format(session_id))
return session_id
def search_session(user_id, project_id=None, offset=0,
limit=10, search=None):
search = search or {}
limit=100, search=None):
sessions = []
jobt = {}
session = get_db_session()
query = model_query(session, models.Session, project_id=project_id)
query = query.filter_by(user_id=user_id)
result = query.all()
result = search_tuple(tablename=models.Session, user_id=user_id,
project_id=project_id, offset=offset,
limit=limit, search=search)
for sessiont in result:
sessionmap = {}
sessionmap['project_id'] = project_id
@ -1136,5 +965,4 @@ def search_session(user_id, project_id=None, offset=0,
sessionmap['jobs'] = json_utils.json_decode(sessiont.get('job'))
sessions.append(sessionmap)
session.close()
return sessions