Updater quarantines bad asyncs to wrong policy data dir
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
OpenStack Object Storage (swift) |
New
|
Undecided
|
Unassigned |
Bug Description
When working on an out-of-tree tool to inspect some unprocessible async updates we borrowed some updater quarantine code and I noticed in review that it wasn't using the policy to create the quarantine directory which seemed un-idiomatic. I think this behavior of the updater on master is wrong:
vagrant@saio:~$ echo 'test1' > test
vagrant@saio:~$ swift upload test test -H 'x-storage-policy: ec'
test
vagrant@saio:~$ swift-init stop container-server -c 1
Signal container-server pid: 36926 signal: Signals.SIGTERM
container-server (36926) appears to have stopped
vagrant@saio:~$ swift-init stop container-server -c 2
Signal container-server pid: 36927 signal: Signals.SIGTERM
container-server (36927) appears to have stopped
vagrant@saio:~$ echo 'test2' > test
vagrant@saio:~$ swift upload test test
test
vagrant@saio:~$ find /srv/node*
/srv/node2/
/srv/node2/
/srv/node2/
/srv/node3/
/srv/node3/
/srv/node3/
vagrant@saio:~$ : > /srv/node2/
vagrant@saio:~$ swift-init container-server restart
Signal container-server pid: 36928 signal: Signals.SIGTERM
Signal container-server pid: 36929 signal: Signals.SIGTERM
container-server (36928) appears to have stopped
container-server (36929) appears to have stopped
WARNING: Unable to modify max process limit. Running as non-root?
Starting container-
Starting container-
Starting container-
Starting container-
vagrant@saio:~$ swift-init object-updater once -nv
WARNING: Unable to modify max process limit. Running as non-root?
Running object-updater once...
Running object-updater once...
Running object-updater once...
Running object-updater once...
...
object-6020: ERROR Pickle problem, quarantining /srv/node2/
...
vagrant@saio:~$ find /srv/node*
/srv/node2/
/srv/node2/
/srv/node2/
I think I'd actually expect these files to get moved into a path under /quarantined that matches their original path on disk, i.e.
/srv/node2/