summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2014-10-08 17:05:40 +0000
committerGerrit Code Review <review@openstack.org>2014-10-08 17:05:40 +0000
commit516cefc0fc708b2e5e555d0cb2b17d8caf527639 (patch)
treeec9175f46657aaf0b5f0b1528b1cb09322a7747b
parenta3379c16e48a1414e11d16dbc69e984aac5ddf9d (diff)
parent76c66343a45cba0068c97d1ad21b46c63977e13d (diff)
downloadglance-516cefc0fc708b2e5e555d0cb2b17d8caf527639.tar.gz
Merge "Use ID for namespace generated by DB" into proposed/juno
-rw-r--r--glance/db/sqlalchemy/metadata.py112
1 files changed, 66 insertions, 46 deletions
diff --git a/glance/db/sqlalchemy/metadata.py b/glance/db/sqlalchemy/metadata.py
index fb442a494..0bf85c1b3 100644
--- a/glance/db/sqlalchemy/metadata.py
+++ b/glance/db/sqlalchemy/metadata.py
@@ -27,6 +27,7 @@ from oslo.config import cfg
import six
import sqlalchemy
from sqlalchemy.schema import MetaData
+from sqlalchemy.sql import select
from glance.common import utils
from glance import i18n
@@ -128,8 +129,7 @@ def _populate_metadata(meta, metadata_path=None):
metadata_path)
return
- for namespace_id, json_schema_file in enumerate(json_schema_files,
- start=1):
+ for json_schema_file in json_schema_files:
try:
file = join(metadata_path, json_schema_file)
with open(file) as json_file:
@@ -139,7 +139,6 @@ def _populate_metadata(meta, metadata_path=None):
continue
values = {
- 'id': namespace_id,
'namespace': metadata.get('namespace', None),
'display_name': metadata.get('display_name', None),
'description': metadata.get('description', None),
@@ -148,53 +147,74 @@ def _populate_metadata(meta, metadata_path=None):
'owner': metadata.get('owner', 'admin'),
'created_at': timeutils.utcnow()
}
- _insert_data_to_db(metadef_namespaces_table, values)
- for resource_type in metadata.get('resource_type_associations', []):
- try:
- resource_type_id = \
- _get_resource_type_id(meta, resource_type['name'])
- except AttributeError:
+ temp = metadef_namespaces_table.select(
+ whereclause='namespace = \'%s\'' % values['namespace'])\
+ .execute().fetchone()
+
+ if temp == None:
+ _insert_data_to_db(metadef_namespaces_table, values)
+
+ db_namespace = select(
+ [metadef_namespaces_table.c.id]
+ ).where(
+ metadef_namespaces_table.c.namespace == values['namespace']
+ ).select_from(
+ metadef_namespaces_table
+ ).execute().fetchone()
+ namespace_id = db_namespace['id']
+
+ for resource_type in metadata.get('resource_type_associations',
+ []):
+ try:
+ resource_type_id = \
+ _get_resource_type_id(meta, resource_type['name'])
+ except AttributeError:
+ values = {
+ 'name': resource_type['name'],
+ 'protected': True,
+ 'created_at': timeutils.utcnow()
+ }
+ _insert_data_to_db(metadef_resource_types_table,
+ values)
+ resource_type_id =\
+ _get_resource_type_id(meta, resource_type['name'])
+
values = {
- 'name': resource_type['name'],
- 'protected': True,
- 'created_at': timeutils.utcnow()
+ 'resource_type_id': resource_type_id,
+ 'namespace_id': namespace_id,
+ 'created_at': timeutils.utcnow(),
+ 'properties_target': resource_type.get(
+ 'properties_target'),
+ 'prefix': resource_type.get('prefix', None)
}
- _insert_data_to_db(metadef_resource_types_table,
+ _insert_data_to_db(metadef_namespace_resource_types_tables,
values)
- resource_type_id =\
- _get_resource_type_id(meta, resource_type['name'])
-
- values = {
- 'resource_type_id': resource_type_id,
- 'namespace_id': namespace_id,
- 'created_at': timeutils.utcnow(),
- 'properties_target': resource_type.get('properties_target'),
- 'prefix': resource_type.get('prefix', None)
- }
- _insert_data_to_db(metadef_namespace_resource_types_tables,
- values)
-
- for property, schema in six.iteritems(metadata.get('properties', {})):
- values = {
- 'name': property,
- 'namespace_id': namespace_id,
- 'schema': json.dumps(schema),
- 'created_at': timeutils.utcnow()
- }
- _insert_data_to_db(metadef_properties_table, values)
-
- for object in metadata.get('objects', []):
- values = {
- 'name': object.get('name', None),
- 'description': object.get('description', None),
- 'namespace_id': namespace_id,
- 'schema': json.dumps(object.get('properties', None)),
- 'created_at': timeutils.utcnow()
- }
- _insert_data_to_db(metadef_objects_table, values)
-
- LOG.info(_LI("File %s loaded to database."), file)
+
+ for property, schema in six.iteritems(metadata.get('properties',
+ {})):
+ values = {
+ 'name': property,
+ 'namespace_id': namespace_id,
+ 'schema': json.dumps(schema),
+ 'created_at': timeutils.utcnow()
+ }
+ _insert_data_to_db(metadef_properties_table, values)
+
+ for object in metadata.get('objects', []):
+ values = {
+ 'name': object.get('name', None),
+ 'description': object.get('description', None),
+ 'namespace_id': namespace_id,
+ 'schema': json.dumps(object.get('properties', None)),
+ 'created_at': timeutils.utcnow()
+ }
+ _insert_data_to_db(metadef_objects_table, values)
+
+ LOG.info(_LI("File %s loaded to database."), file)
+ else:
+ LOG.info(_LI("Skipping namespace %s. It already exists in the "
+ "database."), values['namespace'])
LOG.info(_LI("Metadata loading finished"))