Container updater crashes the account server repeatedly
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
OpenStack Object Storage (swift) |
New
|
Undecided
|
Unassigned |
Bug Description
The story starts with logs having a lot of these:
Jan 12 03:39:55 wb-sdc-controller02 account-server: ERROR __call__ error with PUT /sdd/504/
Jan 12 03:39:55 wb-sdc-controller02 account-server: 172.20.164.39 - - [11/Jan/
As seen in the path, updater thinks it's updating an account for gnocchi,
but active account of gnocchi uses a different ID.
I deduce that the operator did something to re-deploy Gnocchi in such
a way that old account was eliminated and a new one re-established.
However, the container was not completely cleared up, orphaned, and
it had an outstanding update.
In this situation, updater keeps trying to process the orphan container,
but receives 500 from the account server, and thus loops over and over.
Here's a human-readable traceback:
ERROR __call__ error with PUT /sdb/542/
Traceback (most recent call last):
File "/usr/lib/
res = getattr(self, req.method)(req)
File "/usr/lib/
resp = func(ctrl, *args, **kwargs)
File "/usr/lib/
container_
File "/usr/lib/
self.
File "/usr/lib/
raise DatabaseConnect
DatabaseConnect
DB doesn't exist
The problem is identified in Swift 2.17.1.
Suggestion:
- verify that the current master is susceptible to this
- stuff the traceback in the account server, return 404 instead of 500
- continue the development of the dark data plugin which can clean up
orphaned containers and objects when accounts get removed.
description: | updated |
Seems related to https:/ /review. opendev. org/#/c/ 704435/
Discussion on the best solution is still ongoing. Best idea we had[1] for now is to re-create the account in a DELETED state so that the reaper can make another pass at cleaning objects.
[1] http:// eavesdrop. openstack. org/irclogs/ %23openstack- swift/% 23openstack- swift.2020- 01-27.log. html#t2020- 01-27T21: 58:26