Skip to content

Commit

Permalink
config-errhdl: Handle NoIdError from dbe_read.
Browse files Browse the repository at this point in the history
This commit is in prepartion for a follow-on to contrail-controller
where dbe_read will raise NoIdError and have caller decide on course
of action.

Partial-Bug: #1452835

Change-Id: Ib146e5fa00f09b3fc330bd793ddb0bb87d46d94b
  • Loading branch information
Hampapur Ajay committed Jun 19, 2015
1 parent 30c402f commit 788d7b5
Showing 1 changed file with 38 additions and 13 deletions.
51 changes: 38 additions & 13 deletions ifmap_frontend.py
Expand Up @@ -1721,11 +1721,15 @@ def _generate_server_impl(self, gen_fname, gen_type_pfx):
write(gen_file, " if 'exclude_children' not in request.query:")
write(gen_file, " obj_fields = obj_fields + children")
write(gen_file, "")
write(gen_file, " (ok, result) = db_conn.dbe_read('%s', obj_ids, obj_fields)" %(ident_name))
write(gen_file, " if not ok:")
write(gen_file, " try:")
write(gen_file, " (ok, result) = db_conn.dbe_read('%s', obj_ids, obj_fields)" %(ident_name))
write(gen_file, " if not ok:")
write(gen_file, " self.config_object_error(id, None, '%s', 'http_get', result)" % (method_name))
write(gen_file, " except NoIdError as e:")
write(gen_file, " # Not present in DB")
write(gen_file, " self.config_object_error(id, None, '%s', 'http_get', result)" % (method_name))
write(gen_file, " abort(404, result)")
write(gen_file, " abort(404, str(e))")
write(gen_file, " if not ok:")
write(gen_file, " abort(500, result)")
write(gen_file, "")
write(gen_file, " # check visibility")
write(gen_file, " if (not result['id_perms'].get('user_visible', True) and")
Expand Down Expand Up @@ -1861,7 +1865,12 @@ def _generate_server_impl(self, gen_fname, gen_type_pfx):
write(gen_file, " back_references = %s" %(back_ref_fields))
write(gen_file, " children = %s" %(children_fields))
write(gen_file, " obj_fields = children + back_references")
write(gen_file, " (read_ok, read_result) = db_conn.dbe_read('%s', obj_ids, obj_fields)" %(ident_name))
write(gen_file, " try:")
write(gen_file, " (read_ok, read_result) = db_conn.dbe_read('%s', obj_ids, obj_fields)" %(ident_name))
write(gen_file, " except NoIdError as e:")
write(gen_file, " abort(404, str(e))")
write(gen_file, " except DatabaseUnavailableError as e:")
write(gen_file, " abort(500, 'Error in database access: %s' %(str(e)))")
write(gen_file, " if not read_ok:")
write(gen_file, " if read_result.startswith('Unknown id:'):")
write(gen_file, " abort(404, 'ID %s does not exist' %(id))")
Expand Down Expand Up @@ -2888,8 +2897,19 @@ def _generate_cassandra_db_impl(self, gen_fname, gen_type_pfx):
write(gen_file, " column_count = 10000000,")
write(gen_file, " include_timestamp = True)")
write(gen_file, "")
write(gen_file, " if (len(obj_uuids) == 1) and not obj_rows:")
write(gen_file, " raise cfgm_common.exceptions.NoIdError(obj_uuids[0])")
write(gen_file, " def err_handle_single(obj_uuid, obj_type=None, fq_name=None):")
write(gen_file, " raise cfgm_common.exceptions.NoIdError(obj_uuid)")
write(gen_file, "")
write(gen_file, " def err_handle_multi(obj_uuid, obj_type=None, fq_name=None):")
write(gen_file, " pass")
write(gen_file, "")
write(gen_file, " if len(obj_uuids) == 1:")
write(gen_file, " err_handler = err_handle_single")
write(gen_file, " else:")
write(gen_file, " err_handler = err_handle_multi")
write(gen_file, "")
write(gen_file, " if not obj_rows:")
write(gen_file, " err_handler(obj_uuids[0])")
write(gen_file, "")
write(gen_file, " results = []")
write(gen_file, " for row_key in obj_rows:")
Expand All @@ -2899,19 +2919,24 @@ def _generate_cassandra_db_impl(self, gen_fname, gen_type_pfx):
write(gen_file, " obj_cols = obj_rows[obj_uuid]")
write(gen_file, " result = {}")
write(gen_file, " result['uuid'] = obj_uuid")
write(gen_file, " result['fq_name'] = json.loads(obj_cols['fq_name'][0])")
write(gen_file, " try:")
write(gen_file, " # while updating last-modified of idperms(rd-mo-wr) object could be deleted")
write(gen_file, " result['fq_name'] = json.loads(obj_cols['fq_name'][0])")
write(gen_file, " except KeyError:")
write(gen_file, " err_handler(obj_uuid)")
write(gen_file, " continue")
write(gen_file, " for col_name in obj_cols.keys():")
write(gen_file, " if self._re_match_parent.match(col_name):")
write(gen_file, " # non config-root child")
write(gen_file, " (_, _, parent_uuid) = col_name.split(':')")
write(gen_file, " parent_type = json.loads(obj_cols['parent_type'][0])")
write(gen_file, " result['parent_type'] = parent_type")
write(gen_file, " try:")
write(gen_file, " parent_type = json.loads(obj_cols['parent_type'][0])")
write(gen_file, " result['parent_type'] = parent_type")
write(gen_file, " result['parent_uuid'] = parent_uuid")
write(gen_file, " result['parent_href'] = self._generate_url(parent_type, parent_uuid)")
write(gen_file, " except cfgm_common.exceptions.NoIdError:")
write(gen_file, " err_msg = 'Unknown uuid for parent ' + result['fq_name'][-2]")
write(gen_file, " return (False, err_msg)")
write(gen_file, " except KeyError:")
write(gen_file, " err_handler(obj_uuid)")
write(gen_file, " continue")
write(gen_file, "")
write(gen_file, " # TODO use compiled RE")
write(gen_file, " if self._re_match_prop.match(col_name):")
Expand Down

0 comments on commit 788d7b5

Please sign in to comment.