update SLO delete error handling

* ensure all responses are 200 OK
* report missing sub-SLO manifests or other error messages in bulk
  delete response

Change-Id: Iaf88c94bc7114ff3c9751f9f31f8f748de911f8a
Merge "update SLO delete error handling"
Refactor on-disk knowledge out of object server

Refactor on-disk knowledge out of the object server by pushing the
async update pickle creation to the new DiskFileManager class (name is
not the best, so suggestions welcome), along with the REPLICATOR
method logic. We also move the mount checking and thread pool storage
to the new ondisk.Devices object, which then also becomes the new home
of the audit_location_generator method.

For the object server, a new setup() method is now called at the end
of the controller's construction, and the _diskfile() method has been
renamed to get_diskfile(), to allow implementation specific behavior.

Change-Id: Id945276037dbbeb8a778753e47a7316cd408eac7
Signed-off-by: Peter Portante <peter.portante@redhat.com>
Use new ondisk.Devices where possible

We also remove the unused mount_check attribute from the recon
middleware.

Change-Id: Icc593fd548a6e2d9bc5c8178f78424b1d6473f05
Signed-off-by: Peter Portante <peter.portante@redhat.com>
Add an __str__ method to brokers

This was a part of the unfortunate review #28009 that floundered
upon adding an is_good() method. However, I think the part about
making brokers indentifiable has a merit. Alternative back-end
implementations may supply something other than a filename here,
for example a cluster name and a volume name.

Note that I'm not sure if correct coercion would occur when
brokers are bounced through dictionaries, hence explicit str().
This could be rectified.

Change-Id: I329788ebd1fbe39ffadcf9f9d5194a74a88dde58
Remove thorny os.path.exists(broker.db_file)

This was known as "clean up the initialise method" (in order to
get rid of db_file), but unfortunately this requires redoing
the deleting of account and container entities as well, because
just one os.path.exists() was in an unlucky place. This opens
a small can of worms.

Doubly unfortunately, however, is that this patch badly conflicts
with the loader ("get_backend()"). This is because we are adding
exceptions and there's no way to load them alongside the back-end
broker class. There isn't one, right? So, we're likely to change
this bunch of new exceptions to the hated returned error codes.

Exceptions are a small detail, however. The meat of the patch
remains and is quite hazardous in respect to regressions. This
needs a very careful review.

Change-Id: I54d54eb8984d6bca4be912e7451f82e11b2db6ca
Drop knowledge of db from node servers

Since the draft of this patch was posted, a promising approach
was suggested by ondisk.py. It allows us to not to attempt to
shoehorn the use of replicators and auditors into the broker API
which knows of no databases. Accordingly, this version is more
aggressive and not only gets rid of ".db" suffix, but the
whole hash and path calculations in servers.

Change-Id: I79a8c7bb82a20554080be06b211a8e06edc51c6d
Move REPLICATE methods above __call__ to match obj

Move the REPLICATE methods in both the container and the account
server to just before the __call__ method to indicate internal backend
API, and parallel the layout in the object server code.

Change-Id: Ib5c1cb16c03e234a0079e6aface90f9282fc28ee
Signed-off-by: Peter Portante <peter.portante@redhat.com>
Account Backend API

Change-Id: I0c566bd8e3f97a3eed88a094f60ef982ee3e4fa1
Signed-off-by: Peter Portante <peter.portante@redhat.com>
Container Backend API

Change-Id: I9fd4887a11e2436f69e73167f1f3d9a2bbc57c8a
Signed-off-by: Peter Portante <peter.portante@redhat.com>