← Back to team overview

yahoo-eng-team team mailing list archive

[Bug 1715463] Re: binary/name gets confused under upgrades of osapi_compute and metadata when using wsgi files

 

Reviewed:  https://review.openstack.org/501359
Committed: https://git.openstack.org/cgit/openstack/nova/commit/?id=0b4a021e4224981e83dca67e7519458f9939f3cd
Submitter: Zuul
Branch:    master

commit 0b4a021e4224981e83dca67e7519458f9939f3cd
Author: Erik Berg <openstack@xxxxxxxxxxxxxxxxxx>
Date:   Wed Sep 6 18:38:29 2017 +0000

    Fix binary name
    
    Before an upgrade, we have these type of entries in the db.
    
    MariaDB [nova]> SELECT id, host, `binary`, deleted, version FROM services;
    +----+--------------+--------------------+---------+---------+
    | id | host         | binary             | deleted | version |
    +----+--------------+--------------------+---------+---------+
    |  5 | r1-n-os-api  | nova-osapi_compute | 0       |      16 |
    | 21 | r1-n-m-api   | nova-metadata      | 0       |      16 |
    
    The wsgi files we run basically boil down to something like
    
      NAME=metadata
      return wsgi_app.init_application(NAME)
    
    In the wsgi_app.py we see this function
    
      service_ref = objects.Service.get_by_host_and_binary(ctxt, host, name)
    
    Which results in a really big query, which again comes down to
    
      SELECT host, `binary` FROM services
        WHERE host = 'r1-n-m-api' AND `binary` == 'metadata'
    
    No results. service_ref is set to None. Carry on.
    
      if service_ref:
        #Nope.
      else:
        try:
          ...
          service_obj.host = host
          service_obj.binary = 'nova-%s' % name
          service_obj.create()
    
    Which results in a INSERT statement something like this;
    
      INSERT INTO services(host, `binary`, report_count, disabled, deleted, version)
        VALUES ('r1-n-m-api', 'nova-metadata', 0, 0, 0, 22)
    
      ERROR 1062 (23000): Duplicate entry 'r1-n-m-api-nova-metadata-0' for key 'uniq_services0host0binary0deleted'
    
    So the first suggested fix is to prepend 'nova-' to the name, and make both
    queries ask for 'nova-metadata'.  There's also a check that it doesn't start
    with 'nova-', incase someone decides to prepend 'nova-' to the NAME= in the
    wsgi-file. Which migth be a litte overkill, but just a safeguard none the less.
    
    Change-Id: I58cf9a0115a98c78e5d2fb57c41c13ba6fac0fad
    Closes-bug: 1715463


** Changed in: nova
       Status: In Progress => Fix Released

-- 
You received this bug notification because you are a member of Yahoo!
Engineering Team, which is subscribed to OpenStack Compute (nova).
https://bugs.launchpad.net/bugs/1715463

Title:
  binary/name gets confused under upgrades of osapi_compute and metadata
  when using wsgi files

Status in OpenStack Compute (nova):
  Fix Released

Bug description:
  Before an upgrade, we have these type of entries in the db.

  MariaDB [nova]> SELECT id, host, `binary`, deleted, version FROM services;
  +----+--------------+--------------------+---------+---------+
  | id | host         | binary             | deleted | version |
  +----+--------------+--------------------+---------+---------+
  |  5 | r1-n-os-api  | nova-osapi_compute | 0       |      16 |
  | 21 | r1-n-m-api   | nova-metadata      | 0       |      16 |

  The wsgi files we run basically boil down to something like

    NAME=metadata
    return wsgi_app.init_application(NAME)

  In the wsgi_app.py we see this function

    service_ref = objects.Service.get_by_host_and_binary(ctxt, host,
  name)

  Which results in a really big query, which again comes down to

    SELECT host, `binary` FROM services
      WHERE host = 'r1-n-m-api' AND `binary` == 'metadata'

  No results. service_ref is set to None. Carry on.

    if service_ref:
      #Nope.
    else:
      try:
        ...
        service_obj.host = host
        service_obj.binary = 'nova-%s' % name
        service_obj.create()

  Which results in a INSERT statement something like this;

    INSERT INTO services(host, `binary`, report_count, disabled, deleted, version)
      VALUES ('r1-n-m-api', 'nova-metadata', 0, 0, 0, 22)

    ERROR 1062 (23000): Duplicate entry 'r1-n-m-api-nova-metadata-0' for
  key 'uniq_services0host0binary0deleted'

To manage notifications about this bug go to:
https://bugs.launchpad.net/nova/+bug/1715463/+subscriptions


References