Description of problem: The Glance's API version 2 enables multiple location of the image, the feature shouldn't allow the user to add the same location to the same image. The log shows: 2013-11-06 16:28:22.449 6952 DEBUG glance.api.middleware.version_negotiation [-] Determining version of request: PATCH /v2/images/149563cb-0ad5-4bcc-a933-a24744219e53 Accept: */* process_request /usr/lib/python2.6/site-packages/glance/api/middleware/version_negotiation.py:46 2013-11-06 16:28:22.449 6952 DEBUG glance.api.middleware.version_negotiation [-] Using url versioning process_request /usr/lib/python2.6/site-packages/glance/api/middleware/version_negotiation.py:59 2013-11-06 16:28:22.450 6952 DEBUG glance.api.middleware.version_negotiation [-] Matched version: v2 process_request /usr/lib/python2.6/site-packages/glance/api/middleware/version_negotiation.py:71 2013-11-06 16:28:22.450 6952 DEBUG glance.api.middleware.version_negotiation [-] new path /v2/images/149563cb-0ad5-4bcc-a933-a24744219e53 process_request /usr/lib/python2.6/site-packages/glance/api/middleware/version_negotiation.py:72 2013-11-06 16:28:22.450 6952 DEBUG keystoneclient.middleware.auth_token [-] Authenticating user token __call__ /usr/lib/python2.6/site-packages/keystoneclient/middleware/auth_token.py:558 2013-11-06 16:28:22.450 6952 DEBUG keystoneclient.middleware.auth_token [-] Removing headers from request environment: X-Identity-Status,X-Domain-Id,X-Domain-Name,X-Project-Id,X-Project-Name,X-Project-Domain-Id,X-Project-Domain-Name,X-User-Id,X-User-Name,X-User-Domain-Id,X-User-Domain-Name,X-Roles,X-Service-Catalog,X-User,X-Tenant-Id,X-Tenant-Name,X-Tenant,X-Role _remove_auth_headers /usr/lib/python2.6/site-packages/keystoneclient/middleware/auth_token.py:617 2013-11-06 16:28:22.452 6952 INFO urllib3.connectionpool [-] Starting new HTTP connection (1): 10.35.160.113 2013-11-06 16:28:22.495 6952 DEBUG urllib3.connectionpool [-] "GET /v2.0/tokens/revoked HTTP/1.1" 200 904 _make_request /usr/lib/python2.6/site-packages/urllib3/connectionpool.py:295 2013-11-06 16:28:22.520 6952 DEBUG keystoneclient.middleware.auth_token [-] Storing e38114150a7ee42e223aa81de126ff3c token in memcache _cache_put /usr/lib/python2.6/site-packages/keystoneclient/middleware/auth_token.py:1061 2013-11-06 16:28:22.521 6952 DEBUG keystoneclient.middleware.auth_token [-] Received request from user: c7fdf6f628554d56aad363ad501ce412 with project_id : add3de2deaa445c1a1e71c1721bc8976 and roles: admin _build_user_headers /usr/lib/python2.6/site-packages/keystoneclient/middleware/auth_token.py:922 2013-11-06 16:28:22.525 6952 DEBUG routes.middleware [-] Matched PATCH /images/149563cb-0ad5-4bcc-a933-a24744219e53 __call__ /usr/lib/python2.6/site-packages/Routes-1.12.3-py2.6.egg/routes/middleware.py:100 2013-11-06 16:28:22.525 6952 DEBUG routes.middleware [-] Route path: '/images/{image_id}', defaults: {'action': u'update', 'controller': <glance.common.wsgi.Resource object at 0x31c99d0>} __call__ /usr/lib/python2.6/site-packages/Routes-1.12.3-py2.6.egg/routes/middleware.py:102 2013-11-06 16:28:22.525 6952 DEBUG routes.middleware [-] Match dict: {'action': u'update', 'image_id': u'149563cb-0ad5-4bcc-a933-a24744219e53', 'controller': <glance.common.wsgi.Resource object at 0x31c99d0>} __call__ /usr/lib/python2.6/site-packages/Routes-1.12.3-py2.6.egg/routes/middleware.py:103 2013-11-06 16:28:22.540 6952 DEBUG glance.api.policy [862beb1a-c108-4739-a071-b916b854170f c7fdf6f628554d56aad363ad501ce412 add3de2deaa445c1a1e71c1721bc8976] Loaded policy rules: {u'context_is_admin': 'role:admin', u'default': '@', u'manage_image_cache': 'role:admin'} load_rules /usr/lib/python2.6/site-packages/glance/api/policy.py:75 2013-11-06 16:28:22.555 6952 DEBUG glance.api.policy [862beb1a-c108-4739-a071-b916b854170f c7fdf6f628554d56aad363ad501ce412 add3de2deaa445c1a1e71c1721bc8976] Loaded policy rules: {u'context_is_admin': 'role:admin', u'default': '@', u'manage_image_cache': 'role:admin'} load_rules /usr/lib/python2.6/site-packages/glance/api/policy.py:75 2013-11-06 16:28:22.555 6952 DEBUG glance.api.policy [862beb1a-c108-4739-a071-b916b854170f c7fdf6f628554d56aad363ad501ce412 add3de2deaa445c1a1e71c1721bc8976] Loaded policy rules: {u'context_is_admin': 'role:admin', u'default': '@', u'manage_image_cache': 'role:admin'} load_rules /usr/lib/python2.6/site-packages/glance/api/policy.py:75 2013-11-06 16:28:23.010 6952 DEBUG glance.api.policy [862beb1a-c108-4739-a071-b916b854170f c7fdf6f628554d56aad363ad501ce412 add3de2deaa445c1a1e71c1721bc8976] Loaded policy rules: {u'context_is_admin': 'role:admin', u'default': '@', u'manage_image_cache': 'role:admin'} load_rules /usr/lib/python2.6/site-packages/glance/api/policy.py:75 2013-11-06 16:28:23.255 6952 DEBUG glance.store [862beb1a-c108-4739-a071-b916b854170f c7fdf6f628554d56aad363ad501ce412 add3de2deaa445c1a1e71c1721bc8976] Skipping store.set_acls... not implemented. set_acls /usr/lib/python2.6/site-packages/glance/store/__init__.py:369 2013-11-06 16:28:23.255 6952 DEBUG glance.store [862beb1a-c108-4739-a071-b916b854170f c7fdf6f628554d56aad363ad501ce412 add3de2deaa445c1a1e71c1721bc8976] Skipping store.set_acls... not implemented. set_acls /usr/lib/python2.6/site-packages/glance/store/__init__.py:369 2013-11-06 16:28:23.256 6952 DEBUG glance.store [862beb1a-c108-4739-a071-b916b854170f c7fdf6f628554d56aad363ad501ce412 add3de2deaa445c1a1e71c1721bc8976] Skipping store.set_acls... not implemented. set_acls /usr/lib/python2.6/site-packages/glance/store/__init__.py:369 2013-11-06 16:28:23.257 6952 DEBUG qpid.messaging.io.raw [-] OPEN[3974c20]: localhost:5672 connect /usr/lib/python2.6/site-packages/qpid/messaging/driver.py:530 2013-11-06 16:28:23.259 6952 DEBUG qpid.messaging.io.raw [-] SENT[3974c20]: 'AMQP\x01\x01\x00\n' writeable /usr/lib/python2.6/site-packages/qpid/messaging/driver.py:480 2013-11-06 16:28:23.259 6952 DEBUG qpid.messaging.io.raw [-] READ[3974c20]: 'AMQP\x01\x01\x00\n\x0f\x00\x00~\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01\x07\x00\x00\x00\x00?\x00\x00\x00\x01\x13qpid.federation_tag\x95\x00$6f65d2c0-f8c9-4017-a268-799e01e57976\x00\x00\x00\x17\x95\x00\x00\x00\x02\x00\tANONYMOUS\x00\x05PLAIN\x00\x00\x00\x0c\x95\x00\x00\x00\x01\x00\x05en_US' readable /usr/lib/python2.6/site-packages/qpid/messaging/driver.py:416 2013-11-06 16:28:23.260 6952 DEBUG qpid.messaging.io.ops [-] RCVD[3974c20]: ConnectionStart(server_properties={u'qpid.federation_tag': u'6f65d2c0-f8c9-4017-a268-799e01e57976'}, mechanisms=[u'ANONYMOUS', u'PLAIN'], locales=[u'en_US']) write /usr/lib/python2.6/site-packages/qpid/messaging/driver.py:654 2013-11-06 16:28:23.260 6952 DEBUG qpid.messaging.io.ops [-] SENT[3974c20]: ConnectionStartOk(client_properties={'product': 'qpid python client', 'qpid.client_ppid': 6944, 'qpid.client_process': 'glance-api', 'platform': 'posix', 'qpid.client_pid': 6952, 'version': 'development'}, mechanism='ANONYMOUS', response='anonymous.lab.tlv.redhat.com') write_op /usr/lib/python2.6/site-packages/qpid/messaging/driver.py:686 2013-11-06 16:28:23.261 6952 DEBUG qpid.messaging.io.raw [-] SENT[3974c20]: '\x0f\x00\x00\xe7\x00\x00\x00\x00\x00\x00\x00\x00\x01\x02\x07\x00\x00\x00\x00\x9c\x00\x00\x00\x06\x07product\x95\x00\x12qpid python client\x10qpid.client_ppid1\x00\x00\x00\x00\x00\x00\x1b \x13qpid.client_process\x95\x00\nglance-api\x08platform\x95\x00\x05posix\x0fqpid.client_pid1\x00\x00\x00\x00\x00\x00\x1b(\x07version\x95\x00\x0bdevelopment\tANONYMOUS\x00\x00\x00)anonymous.lab.tlv.redhat.com' writeable /usr/lib/python2.6/site-packages/qpid/messaging/driver.py:480 2013-11-06 16:28:23.261 6952 DEBUG qpid.messaging.io.raw [-] READ[3974c20]: '\x0f\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x01\x05\x0f\x00\x7f\xff\xff\xff\x00\x00\x00x' readable /usr/lib/python2.6/site-packages/qpid/messaging/driver.py:416 2013-11-06 16:28:23.262 6952 DEBUG qpid.messaging.io.ops [-] RCVD[3974c20]: ConnectionTune(channel_max=32767, max_frame_size=65535, heartbeat_min=0, heartbeat_max=120) write /usr/lib/python2.6/site-packages/qpid/messaging/driver.py:654 2013-11-06 16:28:23.262 6952 DEBUG qpid.messaging.io.ops [-] SENT[3974c20]: ConnectionTuneOk(channel_max=32767, heartbeat=60) write_op /usr/lib/python2.6/site-packages/qpid/messaging/driver.py:686 2013-11-06 16:28:23.262 6952 DEBUG qpid.messaging.io.ops [-] SENT[3974c20]: ConnectionOpen() write_op /usr/lib/python2.6/site-packages/qpid/messaging/driver.py:686 2013-11-06 16:28:23.263 6952 DEBUG qpid.messaging.io.raw [-] SENT[3974c20]: '\x0f\x00\x00\x14\x00\x00\x00\x00\x00\x00\x00\x00\x01\x06\x05\x00\x7f\xff\x00<\x0f\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x01\x07\x00\x00' writeable /usr/lib/python2.6/site-packages/qpid/messaging/driver.py:480 2013-11-06 16:28:23.264 6952 DEBUG qpid.messaging.io.raw [-] READ[3974c20]: '\x0f\x00\x006\x00\x00\x00\x00\x00\x00\x00\x00\x01\x08\x01\x00\x00\x00\x00"\x95\x00\x00\x00\x01\x00\x1bamqp:tcp:10.35.160.113:5672' readable /usr/lib/python2.6/site-packages/qpid/messaging/driver.py:416 2013-11-06 16:28:23.264 6952 DEBUG qpid.messaging.io.ops [-] RCVD[3974c20]: ConnectionOpenOk(known_hosts=[u'amqp:tcp:10.35.160.113:5672']) write /usr/lib/python2.6/site-packages/qpid/messaging/driver.py:654 2013-11-06 16:28:23.265 6952 INFO glance.notifier.notify_qpid [862beb1a-c108-4739-a071-b916b854170f c7fdf6f628554d56aad363ad501ce412 add3de2deaa445c1a1e71c1721bc8976] Connected to AMQP server on localhost:5672 2013-11-06 16:28:23.265 6952 DEBUG qpid.messaging.io.ops [-] SENT[3974c20]: SessionAttach(name='94bd43e1-7716-42d1-aca8-8fadd24645f6:0') write_op /usr/lib/python2.6/site-packages/qpid/messaging/driver.py:686 2013-11-06 16:28:23.265 6952 DEBUG qpid.messaging.io.ops [-] SENT[3974c20]: SessionCommandPoint(command_id=serial(0), command_offset=0) write_op /usr/lib/python2.6/site-packages/qpid/messaging/driver.py:686 2013-11-06 16:28:23.267 6952 DEBUG qpid.messaging.io.ops [-] SENT[3974c20]: ExchangeQuery(name='glance', id=serial(0), sync=True) write_op /usr/lib/python2.6/site-packages/qpid/messaging/driver.py:686 2013-11-06 16:28:23.267 6952 DEBUG qpid.messaging.io.ops [-] SENT[3974c20]: QueueQuery(queue='glance', id=serial(1), sync=True) write_op /usr/lib/python2.6/site-packages/qpid/messaging/driver.py:686 2013-11-06 16:28:23.268 6952 DEBUG qpid.messaging.io.raw [-] SENT[3974c20]: '\x0f\x00\x008\x00\x00\x00\x00\x00\x00\x00\x00\x02\x01\x01\x00\x00&94bd43e1-7716-42d1-aca8-8fadd24645f6:0\x0f\x00\x00\x1c\x00\x00\x00\x00\x00\x00\x00\x00\x02\x07\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\x01\x00\x19\x00\x01\x00\x00\x00\x00\x00\x00\x07\x03\x01\x01\x01\x00\x06glance\x0f\x01\x00\x19\x00\x01\x00\x00\x00\x00\x00\x00\x08\x04\x01\x01\x01\x00\x06glance' writeable /usr/lib/python2.6/site-packages/qpid/messaging/driver.py:480 2013-11-06 16:28:23.269 6952 DEBUG qpid.messaging.io.raw [-] READ[3974c20]: '\x0f\x00\x008\x00\x00\x00\x00\x00\x00\x00\x00\x02\x02\x01\x00\x00&94bd43e1-7716-42d1-aca8-8fadd24645f6:0\x0f\x00\x00\x1c\x00\x00\x00\x00\x00\x00\x00\x00\x02\x07\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\x01\x00,\x00\x01\x00\x00\x00\x00\x00\x00\x03\x02\x01\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x12\x07\x01\x0b\x00\x05topic\x00\x00\x00\x04\x00\x00\x00\x00\x0f\x00\x00\x1a\x00\x00\x00\x00\x00\x00\x00\x00\x02\n\x01\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x0f\x01\x00\x1e\x00\x01\x00\x00\x00\x00\x00\x00\x03\x02\x01\x00\x03\x00\x00\x00\x00\x01\x00\x00\x00\x04\x08\x01\x00\x00\x0f\x00\x00\x1a\x00\x00\x00\x00\x00\x00\x00\x00\x02\n\x01\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x01' readable /usr/lib/python2.6/site-packages/qpid/messaging/driver.py:416 2013-11-06 16:28:23.269 6952 DEBUG qpid.messaging.io.ops [-] RCVD[3974c20]: SessionAttached(name='94bd43e1-7716-42d1-aca8-8fadd24645f6:0') write /usr/lib/python2.6/site-packages/qpid/messaging/driver.py:654 2013-11-06 16:28:23.270 6952 DEBUG qpid.messaging.io.ops [-] RCVD[3974c20]: SessionCommandPoint(command_id=serial(0), command_offset=0) write /usr/lib/python2.6/site-packages/qpid/messaging/driver.py:654 2013-11-06 16:28:23.270 6952 DEBUG qpid.messaging.io.ops [-] RCVD[3974c20]: ExecutionResult(command_id=serial(0), value=ExchangeQueryResult(type=u'topic', durable=True, arguments={}), id=serial(0)) write /usr/lib/python2.6/site-packages/qpid/messaging/driver.py:654 2013-11-06 16:28:23.270 6952 DEBUG qpid.messaging.io.ops [-] RCVD[3974c20]: SessionCompleted(commands=[0-0]) write /usr/lib/python2.6/site-packages/qpid/messaging/driver.py:654 2013-11-06 16:28:23.271 6952 DEBUG qpid.messaging.io.ops [-] RCVD[3974c20]: ExecutionResult(command_id=serial(1), value=QueueQueryResult(), id=serial(1)) write /usr/lib/python2.6/site-packages/qpid/messaging/driver.py:654 2013-11-06 16:28:23.271 6952 DEBUG qpid.messaging.io.ops [-] RCVD[3974c20]: SessionCompleted(commands=[0-1]) write /usr/lib/python2.6/site-packages/qpid/messaging/driver.py:654 2013-11-06 16:28:23.273 6952 DEBUG qpid.messaging.io.ops [-] SENT[3974c20]: MessageTransfer(destination='glance', id=serial(2), sync=True, headers=(DeliveryProperties(routing_key='notifications.info'), MessageProperties(content_type='amqp/map', application_headers={'qpid.subject': 'notifications.info'})), payload='\x00\x00\x02U\x00\x00\x00\x06\nevent_type\x95\x00\x0cimage.update\ttimestamp\x95\x00\x1a2013-11-06 14:28:23.256944\nmessage_id\x95\x00$221a17e8-1421-4104-a2b3-e9c83e160f2f\x08priority\x95\x00\x04INFO\x0cpublisher_id\x95\x00\x1fcougar12.scl.lab.tlv.redhat.com\x07payload\xa8\x00\x00\x01\x92\x00\x00\x00\x12\x06status\x95\x00\x06active\x04name\x95\x00\x08my_image\x04tags\xa9\x00\x00\x00\x04\x00\x00\x00\x00\x07deleted\x08\x00\x08checksum\x95\x00 338eac7c24238cb2e2d60deb6c31c3df\ncreated_at\x95\x00\x142013-11-06T10:28:27Z\x0bdisk_format\x95\x00\x03iso\nupdated_at\x95\x00\x142013-11-06T14:28:23Z\nproperties\xa8\x00\x00\x00\x04\x00\x00\x00\x00\x05owner\x95\x00 add3de2deaa445c1a1e71c1721bc8976\tprotected\x08\x00\x07min_ram1\x00\x00\x00\x00\x00\x00\x00\x00\x10container_format\x95\x00\x04bare\x08min_disk1\x00\x00\x00\x00\x00\x00\x00\x00\tis_public\x08\x00\ndeleted_at\xf0\x02id\x95\x00$149563cb-0ad5-4bcc-a933-a24744219e53\x04size1\x00\x00\x00\x00;p\x00\x00') write_op /usr/lib/python2.6/site-packages/qpid/messaging/driver.py:686 2013-11-06 16:28:23.274 6952 DEBUG qpid.messaging [-] SENT[397a5a8]: Message(properties={'qpid.subject': 'notifications.info'}, content={'event_type': 'image.update', 'timestamp': '2013-11-06 14:28:23.256944', 'message_id': '221a17e8-1421-4104-a2b3-e9c83e160f2f', 'priority': 'INFO', 'publisher_id': 'cougar12.scl.lab.tlv.redhat.com', 'payload': {'status': u'active', 'name': u'my_image', 'tags': [], 'deleted': False, 'checksum': u'338eac7c24238cb2e2d60deb6c31c3df', 'created_at': '2013-11-06T10:28:27Z', 'disk_format': u'iso', 'updated_at': '2013-11-06T14:28:23Z', 'properties': {}, 'owner': u'add3de2deaa445c1a1e71c1721bc8976', 'protected': False, 'min_ram': 0L, 'container_format': u'bare', 'min_disk': 0L, 'is_public': False, 'deleted_at': None, 'id': u'149563cb-0ad5-4bcc-a933-a24744219e53', 'size': 997195776L}}) send /usr/lib/python2.6/site-packages/qpid/messaging/driver.py:1280 2013-11-06 16:28:23.274 6952 DEBUG qpid.messaging.io.raw [-] SENT[3974c20]: '\x0b\x01\x00\x19\x00\x01\x00\x00\x00\x00\x00\x00\x04\x01\x01\x01\x01\x00\x06glance\x03\x02\x00b\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17\x04\x01\x00\x02\x12notifications.info\x00\x00\x007\x04\x03\x10\x01\x08amqp/map\x00\x00\x00&\x00\x00\x00\x01\x0cqpid.subject\x95\x00\x12notifications.info\x07\x03\x02e\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x02U\x00\x00\x00\x06\nevent_type\x95\x00\x0cimage.update\ttimestamp\x95\x00\x1a2013-11-06 14:28:23.256944\nmessage_id\x95\x00$221a17e8-1421-4104-a2b3-e9c83e160f2f\x08priority\x95\x00\x04INFO\x0cpublisher_id\x95\x00\x1fcougar12.scl.lab.tlv.redhat.com\x07payload\xa8\x00\x00\x01\x92\x00\x00\x00\x12\x06status\x95\x00\x06active\x04name\x95\x00\x08my_image\x04tags\xa9\x00\x00\x00\x04\x00\x00\x00\x00\x07deleted\x08\x00\x08checksum\x95\x00 338eac7c24238cb2e2d60deb6c31c3df\ncreated_at\x95\x00\x142013-11-06T10:28:27Z\x0bdisk_format\x95\x00\x03iso\nupdated_at\x95\x00\x142013-11-06T14:28:23Z\nproperties\xa8\x00\x00\x00\x04\x00\x00\x00\x00\x05owner\x95\x00 add3de2deaa445c1a1e71c1721bc8976\tprotected\x08\x00\x07min_ram1\x00\x00\x00\x00\x00\x00\x00\x00\x10container_format\x95\x00\x04bare\x08min_disk1\x00\x00\x00\x00\x00\x00\x00\x00\tis_public\x08\x00\ndeleted_at\xf0\x02id\x95\x00$149563cb-0ad5-4bcc-a933-a24744219e53\x04size1\x00\x00\x00\x00;p\x00\x00' writeable /usr/lib/python2.6/site-packages/qpid/messaging/driver.py:480 2013-11-06 16:28:23.275 6952 DEBUG qpid.messaging.io.raw [-] READ[3974c20]: '\x0f\x00\x00\x1a\x00\x00\x00\x00\x00\x00\x00\x00\x02\n\x01\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x02' readable /usr/lib/python2.6/site-packages/qpid/messaging/driver.py:416 2013-11-06 16:28:23.275 6952 DEBUG qpid.messaging.io.ops [-] RCVD[3974c20]: SessionCompleted(commands=[0-2]) write /usr/lib/python2.6/site-packages/qpid/messaging/driver.py:654 2013-11-06 16:28:23.276 6952 DEBUG qpid.messaging [-] RACK[397a5a8]: Message(properties={'qpid.subject': 'notifications.info'}, content={'event_type': 'image.update', 'timestamp': '2013-11-06 14:28:23.256944', 'message_id': '221a17e8-1421-4104-a2b3-e9c83e160f2f', 'priority': 'INFO', 'publisher_id': 'cougar12.scl.lab.tlv.redhat.com', 'payload': {'status': u'active', 'name': u'my_image', 'tags': [], 'deleted': False, 'checksum': u'338eac7c24238cb2e2d60deb6c31c3df', 'created_at': '2013-11-06T10:28:27Z', 'disk_format': u'iso', 'updated_at': '2013-11-06T14:28:23Z', 'properties': {}, 'owner': u'add3de2deaa445c1a1e71c1721bc8976', 'protected': False, 'min_ram': 0L, 'container_format': u'bare', 'min_disk': 0L, 'is_public': False, 'deleted_at': None, 'id': u'149563cb-0ad5-4bcc-a933-a24744219e53', 'size': 997195776L}}) msg_acked /usr/lib/python2.6/site-packages/qpid/messaging/driver.py:1269 2013-11-06 16:28:23.277 6952 DEBUG qpid.messaging.io.ops [-] SENT[3974c20]: SessionDetach(name='94bd43e1-7716-42d1-aca8-8fadd24645f6:0') write_op /usr/lib/python2.6/site-packages/qpid/messaging/driver.py:686 2013-11-06 16:28:23.277 6952 DEBUG qpid.messaging.io.raw [-] SENT[3974c20]: '\x0f\x00\x008\x00\x00\x00\x00\x00\x00\x00\x00\x02\x03\x01\x00\x00&94bd43e1-7716-42d1-aca8-8fadd24645f6:0' writeable /usr/lib/python2.6/site-packages/qpid/messaging/driver.py:480 2013-11-06 16:28:23.278 6952 DEBUG qpid.messaging.io.raw [-] READ[3974c20]: '\x0f\x00\x009\x00\x00\x00\x00\x00\x00\x00\x00\x02\x04\x03\x00\x00&94bd43e1-7716-42d1-aca8-8fadd24645f6:0\x00' readable /usr/lib/python2.6/site-packages/qpid/messaging/driver.py:416 2013-11-06 16:28:23.278 6952 DEBUG qpid.messaging.io.ops [-] RCVD[3974c20]: SessionDetached(name='94bd43e1-7716-42d1-aca8-8fadd24645f6:0', code=0) write /usr/lib/python2.6/site-packages/qpid/messaging/driver.py:654 2013-11-06 16:28:23.279 6952 DEBUG qpid.messaging.io.ops [-] SENT[3974c20]: ConnectionClose(reply_code=200) write_op /usr/lib/python2.6/site-packages/qpid/messaging/driver.py:686 2013-11-06 16:28:23.280 6952 DEBUG qpid.messaging.io.raw [-] SENT[3974c20]: '\x0f\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x01\x0b\x01\x00\x00\xc8' writeable /usr/lib/python2.6/site-packages/qpid/messaging/driver.py:480 2013-11-06 16:28:23.280 6952 DEBUG qpid.messaging.io.raw [-] READ[3974c20]: '\x0f\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x01\x0c\x00\x00' readable /usr/lib/python2.6/site-packages/qpid/messaging/driver.py:416 2013-11-06 16:28:23.280 6952 DEBUG qpid.messaging.io.ops [-] RCVD[3974c20]: ConnectionCloseOk() write /usr/lib/python2.6/site-packages/qpid/messaging/driver.py:654 2013-11-06 16:28:23.281 6952 DEBUG glance.api.policy [862beb1a-c108-4739-a071-b916b854170f c7fdf6f628554d56aad363ad501ce412 add3de2deaa445c1a1e71c1721bc8976] Loaded policy rules: {u'context_is_admin': 'role:admin', u'default': '@', u'manage_image_cache': 'role:admin'} load_rules /usr/lib/python2.6/site-packages/glance/api/policy.py:75 2013-11-06 16:28:23.282 6952 DEBUG glance.api.policy [862beb1a-c108-4739-a071-b916b854170f c7fdf6f628554d56aad363ad501ce412 add3de2deaa445c1a1e71c1721bc8976] Loaded policy rules: {u'context_is_admin': 'role:admin', u'default': '@', u'manage_image_cache': 'role:admin'} load_rules /usr/lib/python2.6/site-packages/glance/api/policy.py:75 2013-11-06 16:28:23.282 6952 DEBUG glance.api.policy [862beb1a-c108-4739-a071-b916b854170f c7fdf6f628554d56aad363ad501ce412 add3de2deaa445c1a1e71c1721bc8976] Loaded policy rules: {u'context_is_admin': 'role:admin', u'default': '@', u'manage_image_cache': 'role:admin'} load_rules /usr/lib/python2.6/site-packages/glance/api/policy.py:75 Version-Release number of selected component (if applicable): openstack-glance-2013.2-1.el6ost.noarch How reproducible: everytime Steps to Reproduce: 1. configure the multiple location in glance with instructions from this page: https://github.com/mkollaro/openstack-testplans/blob/master/glance/multilocation.rst 2. create an image. 3. add the same location twice (run the same command): curl -i -X PATCH -H 'Content-Type: application/openstack-images-v2.1-json-patch' -H "X-Auth-Token: $AUTH" http://localhost:9292/v2/images/<image_id> -d '[{"op": "add", "path": "/locations/1", "value": {"url": "<image url>", "metadata": {}}}]' Actual results: | locations | [{u'url': u'http://mirrors.usc.edu/pub/linux/distributions/fedora/linux/releases/19/Live/x86_64/Fedora-Live-Desktop-x86_64-19-1.iso', u'metadata': {}}, {u'url': u'http://mirrors.usc.edu/pub/linux/distributions/fedora/linux/releases/19/Live/x86_64/Fedora-Live-Desktop-x86_64-19-1.iso', u'metadata': {}}] | Expected results: An error message should prevent the action. Additional info:
It is necessary to verify that location+metadata does not exist in the locations list. 1 URI with different metadata is considered a different location.
Verified on: RHEL7 openstack-glance-2014.1-2.el7ost.noarch Uploaded an image (/var/lib/glance/images/63aa.. Using curl added a second location to that image # curl -i -X PATCH -H 'Content-Type: application/openstack-images-v2.1-json-patch' -H "X-Auth-Token: $AUTH" http://10.35.160.71:9292/v2/images/63aab139-519f-4161-8dc8-5474f05ac05e -d '[{"op": "add", "path": "/locations/1", "value": {"url": "http://mirrors.usc.edu/pub/linux/distributions/fedora/linux/releases/19/Live/x86_64/Fedora-Live-Desktop-x86_64-19-1.iso", "metadata": {}}}]' # glance --os-image-api-version 2 image-show 63aab139-519f-4161-8dc8-5474f05ac05e .... | | locations | [{u'url': u'file:///var/lib/glance/images/63aab139-519f-4161-8dc8-5474f05ac05e', u'metadata': {}}, {u'url': u'http://mirrors.usc.edu/pub/linux/distributions/fedora/linux/releases/19/Live/x86_64/Fedora-Live-Desktop-x86_64-19-1.iso', u'metadata': {}}] | | min_disk | 0 Running same curl command again (same location twice) got expected error: HTTP/1.1 400 Bad Request Content-Length: 273 Content-Type: text/html; charset=UTF-8 X-Openstack-Request-Id: req-b2c2872b-1570-4512-9b03-cfba9128efb1 Date: Tue, 10 Jun 2014 08:42:18 GMT <html> <head> <title>400 Bad Request</title> </head> <body> <h1>400 Bad Request</h1> The location http://mirrors.usc.edu/pub/linux/distributions/fedora/linux/releases/19/Live/x86_64/Fedora-Live-Desktop-x86_64-19-1.iso already exists<br /><br /> </body> </html>[root@puma31 ~(keystone_admin)]# Additional testing used curl to add another location (new unique URL), a third image location was added successfully. | locations | [{u'url': u'file:///var/lib/glance/images/63aab139-519f-4161-8dc8-5474f05ac05e', u'metadata': {}}, {u'url': u'http://mirrors.usc.edu/pub/linux/distributions/fedora/linux/releases/19/Live/x86_64/Fedora-Live-KDE-x86_64-19-1.iso', u'metadata': {}}, {u'url': u'http://mirrors.usc.edu/pub/linux/distributions/fedora/linux/releases/19/Live/x86_64/Fedora-Live-Desktop-x86_64-19-1.iso', u'metadata': {}}] | Attaching glance api.log
Created attachment 907095 [details] Glance API.log
Since the problem described in this bug report should be resolved in a recent advisory, it has been closed with a resolution of ERRATA. For information on the advisory, and where to find the updated files, follow the link below. If the solution does not work for you, open a new bug report. http://rhn.redhat.com/errata/RHEA-2014-0851.html
Cancelling old needinfo request.