summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBartosz Fic <bartosz.fic@intel.com>2014-10-07 18:13:51 +0200
committerThierry Carrez <thierry@openstack.org>2014-10-08 13:56:47 +0200
commit76c66343a45cba0068c97d1ad21b46c63977e13d (patch)
tree4ac01d466be8587403f237bde93d0aaa93f31fdf
parentda93f408dde9652a3f5e2daaa534852576b8f6f2 (diff)
downloadglance-76c66343a45cba0068c97d1ad21b46c63977e13d.tar.gz
Use ID for namespace generated by DB
In current implementation ID that is used in namespace to insert data to DB is generated by built-in function - enumerate. This causes problems with loading the metadata when there are already namespaces in DB. This patch removes 'enumerate' and asks for namespace ID generated by database. Closes-Bug: #1367771 Co-Authored-By: Bartosz Fic <bartosz.fic@intel.com> Co-Authored-By: Pawel Koniszewski <pawel.koniszewski@intel.com> (cherry picked from commit 89c04904416270d3c306d430f443a7127c5fc206) Conflicts: glance/db/sqlalchemy/metadata.py Change-Id: I235c6310077526cafb898ac007c3601b4d66c9fe
-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"))