I can duplicate this. I am still investigating why a new version of glance may have caused this to manifest itself, but from what I can tell, the issue is that the s3 proxy code sets image['status'] to queued, but when it updates the status, it is actually updating image['properties']['image_state'].
From nova/image/s3.py (lines 153-157):
metadata.update({'disk_format': image_format,
'container_format': image_format,
'status': 'queued',
'is_public': True,
'properties': properties})
This updates the images table and sets the status to queued. Then later (in various places, but line 200 is where it is set to available):
with open(unz_filename) as image_file:
self.service.update(context, image_id, metadata, image_file)
metadata['properties']['image_state'] = 'available'
self.service.update(context, image_id, metadata)
Then finally the image is returned on line 207.
Checking the DB confirms these findings:
mysql> select * from image_properties where image_id = 4;
+----+----------+----------------+-------------------------------------------------------------+---------------------+---------------------+------------+---------+
| id | image_id | name | value | created_at | updated_at | deleted_at | deleted |
+----+----------+----------------+-------------------------------------------------------------+---------------------+---------------------+------------+---------+
| 21 | 4 | architecture | x86_64 | 2011-04-28 16:10:20 | NULL | NULL | 0 |
| 18 | 4 | image_location | uec-publish-test/maverick-server-uec-amd64.img.manifest.xml | 2011-04-28 16:10:20 | NULL | NULL | 0 |
| 19 | 4 | image_state | available | 2011-04-28 16:10:20 | 2011-04-28 16:10:44 | NULL | 0 |
| 17 | 4 | kernel_id | 3 | 2011-04-28 16:10:20 | NULL | NULL | 0 |
| 20 | 4 | project_id | sandbox | 2011-04-28 16:10:20 | NULL | NULL | 0 |
+----+----------+----------------+-------------------------------------------------------------+---------------------+---------------------+------------+---------+
5 rows in set (0.00 sec)
mysql> select * from images where id = 4;
+----+------+------------+--------+-----------+---------------------------------+---------------------+---------------------+------------+---------+-------------+------------------+----------------------------------+
| id | name | size | status | is_public | location | created_at | updated_at | deleted_at | deleted | disk_format | container_format | checksum |
+----+------+------------+--------+-----------+---------------------------------+---------------------+---------------------+------------+---------+-------------+------------------+----------------------------------+
| 4 | NULL | 1476395008 | queued | 1 | file:///var/lib/glance/images/4 | 2011-04-28 16:10:20 | 2011-04-28 16:10:44 | NULL | 0 | ami | ami | 0bf9f38f48b0140cf84d3f26afd5666f |
+----+------+------------+--------+-----------+---------------------------------+---------------------+---------------------+------------+---------+-------------+------------------+----------------------------------+
1 row in set (0.00 sec)
Running:
update images set status = 'active' where id = 4;
or alteratively
update images set status = 'active' where status = 'queued'
would do it as well, but make sure that you are not actively uploading any images when you run that or you may end up breaking something :-)
The above should be a work to fix it, and hopefully a patch will be released soon :-)