Commit f664a31d authored by Jörn Friedrich Dreyer's avatar Jörn Friedrich Dreyer Committed by Vincent Petry
Browse files

extract batchDelete(), better comments

parent 0d0c9d0b
......@@ -72,6 +72,9 @@ class AmazonS3 extends \OC\Files\Storage\Common {
return $path;
}
/**
* when running the tests wait to let the buckets catch up
*/
private function testTimeout() {
if ($this->test) {
sleep($this->timeout);
......@@ -208,51 +211,48 @@ class AmazonS3 extends \OC\Files\Storage\Common {
return false;
}
return $this->batchDelete($path);
}
protected function clearBucket() {
try {
do { // batches of 1000
// Since there are no real directories on S3, we need
// to delete all objects prefixed with the path.
$objects = $this->connection->listObjects(array(
'Bucket' => $this->bucket,
'Prefix' => $path . '/'
));
$this->connection->clearBucket($this->bucket);
return true;
// clearBucket() is not working with Ceph, so if it fails we try the slower approach
} catch (\Exception $e) {
return $this->batchDelete();
}
return false;
}
private function batchDelete ($path = null) {
$params = array(
'Bucket' => $this->bucket
);
if ($path !== null) {
$params['Prefix'] = $path . '/';
}
try {
// Since there are no real directories on S3, we need
// to delete all objects prefixed with the path.
do {
// instead of the iterator, manually loop over the list ...
$objects = $this->connection->listObjects($params);
// ... so we can delete the files in batches
$this->connection->deleteObjects(array(
'Bucket' => $this->bucket,
'Objects' => $objects['Contents']
));
$this->testTimeout();
// we reached the end when the list is no longer truncated
} while ($objects['IsTruncated']);
} catch (S3Exception $e) {
\OCP\Util::logException('files_external', $e);
return false;
}
return true;
}
protected function clearBucket() {
try {
$this->connection->clearBucket($this->bucket);
// clearBucket() is not working with Ceph, so if it fails we try the slower approach
} catch (\Exception $e) {
try {
do { // batches of 1000
$objects = $this->connection->listObjects(array(
'Bucket' => $this->bucket
));
$this->connection->deleteObjects(array(
'Bucket' => $this->bucket,
'Objects' => $objects['Contents'] // delete 1000 objects in one http call
));
$this->testTimeout();
} while ($objects['IsTruncated']);
} catch (S3Exception $e) {
\OCP\Util::logException('files_external', $e);
return false;
}
}
}
public function opendir($path) {
$path = $this->normalizePath($path);
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment