[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