swift-container-info explodes when investigating quarantined containers
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
OpenStack Object Storage (swift) |
Confirmed
|
Medium
|
Unassigned |
Bug Description
This analysis was performed on Swift 2.7.0.
Suppose a container is quarantined. One of the fist things you want to do is check where it came from initially. So reach for swift-container
$ cd /srv/node/
$ ls -l
total 20
-rw------- 1 swift swift 18432 Aug 15 2016 3a7b4bae41a17d0
$ sudo swift-container
Traceback (most recent call last):
File "/usr/bin/
print_
File "/usr/lib/
info = broker.get_info()
File "/usr/lib/
with self.get() as conn:
File "/usr/lib/
return self.gen.next()
File "/usr/lib/
self.
File "/usr/lib/
renamer(
File "/usr/lib/
os.rename(old, new)
OSError: [Errno 16] Device or resource busy
ok that was bad - not only do we not get any useful info but it has tried to re-quarantine the container (and in the process mv the directory I am in...yikes, and hence the error):
$ ls -l
total 20
-rw------- 1 swift swift 18432 Aug 15 2016 3a7b4bae41a17d0
drwxr-xr-x 3 root root 24 Jun 16 06:55 quarantined
This comes about because swift-container
- calls print_info which creates a ContainerBroker and...
- calls ContainerBroker
- DatabaseBroker.get calls self.possibly_
So the innocuous 'get_info' has dramatic side effects (possibly_
We probably need to amend get_info e.g get_info(
...probably applies to accounts too (as code looks similar)