glance member-create failed with HTTP 500 error

Bug #1462315 reported by Long Quan Sha
14
This bug affects 2 people
Affects Status Importance Assigned to Milestone
Glance
Fix Released
Undecided
Long Quan Sha

Bug Description

 At first, I run "glance member-create" and then "glance member-delete", they were successful. But when I run "glance member-create" again with the same parameters, it failed with HTTP 500 error.

[root@vm9 /]# glance member-create 2d2421ca-d4bd-4c69-91cf-5d167d20073a 95e0dd9ed89544428f1daa7071c6990f
[root@vm9 /]# glance member-delete 2d2421ca-d4bd-4c69-91cf-5d167d20073a 95e0dd9ed89544428f1daa7071c6990f
[root@vm9 /]# glance member-create 2d2421ca-d4bd-4c69-91cf-5d167d20073a 95e0dd9ed89544428f1daa7071c6990f
HTTPInternalServerError (HTTP 500)

 glance registry.log :

 File "/usr/lib/python2.7/site-packages/glance/registry/api/v1/members.py", line 269, in update
    self.db_api.image_member_create(req.context, values)
  File "/usr/lib/python2.7/site-packages/glance/db/sqlalchemy/api.py", line 1020, in image_member_create
    _image_member_update(context, memb_ref, values, session=session)
  File "/usr/lib/python2.7/site-packages/glance/db/sqlalchemy/api.py", line 1051, in _image_member_update
    memb_ref.save(session=session)

File "/usr/lib/python2.7/site-packages/glance/db/sqlalchemy/models.py", line 77, in save
    super(GlanceBase, self).save(session or db_api.get_session())
  File "/usr/lib/python2.7/site-packages/oslo_db/sqlalchemy/models.py", line 48, in save
    session.flush()
  File "/usr/lib64/python2.7/site-packages/sqlalchemy/orm/session.py", line 1919, in flush
    self._flush(objects)
  File "/usr/lib64/python2.7/site-packages/sqlalchemy/orm/session.py", line 2037, in _flush
    transaction.rollback(_capture_exception=True)
  File "/usr/lib64/python2.7/site-packages/sqlalchemy/util/langhelpers.py", line 60, in __exit__
    compat.reraise(exc_type, exc_value, exc_tb)
  File "/usr/lib64/python2.7/site-packages/sqlalchemy/orm/session.py", line 2001, in _flush
    flush_context.execute()
  File "/usr/lib64/python2.7/site-packages/sqlalchemy/orm/unitofwork.py", line 372, in execute
    rec.execute(self)
  File "/usr/lib64/python2.7/site-packages/sqlalchemy/orm/unitofwork.py", line 526, in execute
    uow
  File "/usr/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.py", line 65, in save_obj
    mapper, table, insert)
  File "/usr/lib64/python2.7/site-packages/sqlalchemy/orm/persistence.py", line 602, in _emit_insert_statements
    execute(statement, params)
  File "/usr/lib64/python2.7/site-packages/sqlalchemy/engine/base.py", line 729, in execute
    return meth(self, multiparams, params)
  File "/usr/lib64/python2.7/site-packages/sqlalchemy/sql/elements.py", line 322, in _execute_on_connection
    return connection._execute_clauseelement(self, multiparams, params)
  File "/usr/lib64/python2.7/site-packages/sqlalchemy/engine/base.py", line 826, in _execute_clauseelement
    compiled_sql, distilled_params
  File "/usr/lib64/python2.7/site-packages/sqlalchemy/engine/base.py", line 958, in _execute_context
    context)
  File "/usr/lib/python2.7/site-packages/oslo_db/sqlalchemy/compat/handle_error.py", line 261, in _handle_dbapi_exception
    e, statement, parameters, cursor, context)
  File "/usr/lib64/python2.7/site-packages/sqlalchemy/engine/base.py", line 1155, in _handle_dbapi_exception
    util.raise_from_cause(newraise, exc_info)
  File "/usr/lib64/python2.7/site-packages/sqlalchemy/util/compat.py", line 199, in raise_from_cause
    reraise(type(exception), exception, tb=exc_tb)
  File "/usr/lib64/python2.7/site-packages/sqlalchemy/engine/base.py", line 951, in _execute_context
    context)
  File "/usr/lib/python2.7/site-packages/ibm_db_sa/ibm_db.py", line 106, in do_execute
    cursor.execute(statement, parameters)
  File "/usr/lib64/python2.7/site-packages/ibm_db_dbi.py", line 1335, in execute
    self._execute_helper(parameters)
  File "/usr/lib64/python2.7/site-packages/ibm_db_dbi.py", line 1247, in _execute_helper
    raise self.messages[len(self.messages) - 1]

DBDuplicateEntry: (IntegrityError) ibm_db_dbi::IntegrityError: Statement Execute Failed: [IBM][CLI Driver][DB2/LINUXX8664] SQL0803N One or more values in the INSERT statement, UPDATE statement, or foreign key update caused by a DELETE statement are not valid because the primary key, unique constraint or unique index identified by "2" constrains table "GLANCE.IMAGE_MEMBERS" from having duplicate values for the index key. SQLSTATE=23505 SQLCODE=-803 'INSERT INTO image_members (created_at, updated_at, deleted_at, deleted, image_id, "member", can_share, status) VALUES (?, ?, ?, ?, ?, ?, ?, ?)' (datetime.datetime(2015, 6, 5, 10, 39, 9, 724699), datetime.datetime(2015, 6, 5, 10, 39, 9, 724711), None, '0', '2d2421ca-d4bd-4c69-91cf-5d167d20073a', '95e0dd9ed89544428f1daa7071c6990f', '0', 'pending')

Tags: db2
Long Quan Sha (shalq)
Changed in glance:
assignee: nobody → Long Quan Sha (shalq)
status: New → In Progress
Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix proposed to glance (master)

Fix proposed to branch: master
Review: https://review.openstack.org/190895

Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix merged to glance (master)

Reviewed: https://review.openstack.org/190895
Committed: https://git.openstack.org/cgit/openstack/glance/commit/?id=d6800e143ddff8898d693bbef65d2143544d7ad0
Submitter: Jenkins
Branch: master

commit d6800e143ddff8898d693bbef65d2143544d7ad0
Author: Long Quan Sha <email address hidden>
Date: Thu Jun 11 18:46:56 2015 +0800

    reuse the deleted image-member before create a new image-member

    If glance backend database is not MySQL or postgreSQL,the unique
    constraint of image-member only includes image-id and member.
    If then an image-member is deleted, then create it again with the
    same parameters, glance initiates a query to check if there is
    already an existing one, but the result doesn't include the record
    which was marked as deleted, glance will try to create a new one
    with the same parameters, it will fail with SQL0803N error. To fix
    this,we should check all existing image-member records including
    the deleted image-member before create image-member, then update it
    if it exists, otherwise create a new one.

    APIImpact

    Closes-Bug: #1462315
    Implements: bp reuse-the-deleted-image-member

    Change-Id: I84f88d133bf4ac6daa0ff5d148aed86c0ff2cb2d

Changed in glance:
status: In Progress → Fix Committed
Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix proposed to glance (stable/kilo)

Fix proposed to branch: stable/kilo
Review: https://review.openstack.org/226220

Thierry Carrez (ttx)
Changed in glance:
milestone: none → liberty-rc1
status: Fix Committed → Fix Released
Matt Riedemann (mriedem)
tags: added: db2
Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Change abandoned on glance (stable/kilo)

Change abandoned by Long Quan Sha (<email address hidden>) on branch: stable/kilo
Review: https://review.openstack.org/226220

Thierry Carrez (ttx)
Changed in glance:
milestone: liberty-rc1 → 11.0.0
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Duplicates of this bug

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.