[Pkg-owncloud-commits] [owncloud] 197/258: extract batchDelete(), better comments
David Prévot
taffit at moszumanska.debian.org
Sat Oct 11 17:22:36 UTC 2014
This is an automated email from the git hooks/post-receive script.
taffit pushed a commit to branch master
in repository owncloud.
commit 413bd5406c3e0288231c6ff2b4ab93b794d16259
Author: Jörn Friedrich Dreyer <jfd at butonic.de>
Date: Mon Oct 6 11:08:21 2014 +0200
extract batchDelete(), better comments
---
apps/files_external/lib/amazons3.php | 62 ++++++++++++++++++------------------
1 file changed, 31 insertions(+), 31 deletions(-)
diff --git a/apps/files_external/lib/amazons3.php b/apps/files_external/lib/amazons3.php
index 5fc3c48..bbb1b14 100644
--- a/apps/files_external/lib/amazons3.php
+++ b/apps/files_external/lib/amazons3.php
@@ -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);
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-owncloud/owncloud.git
More information about the Pkg-owncloud-commits
mailing list