rewrote initialisation, added testing workaround
This commit is contained in:
parent
020803aa7e
commit
203df66c00
|
@ -36,6 +36,8 @@ class AmazonS3 extends \OC\Files\Storage\Common {
|
||||||
private $connection;
|
private $connection;
|
||||||
private $bucket;
|
private $bucket;
|
||||||
private static $tmpFiles = array();
|
private static $tmpFiles = array();
|
||||||
|
private $test = false;
|
||||||
|
private $timeout = 15;
|
||||||
|
|
||||||
private function normalizePath($path) {
|
private function normalizePath($path) {
|
||||||
$path = trim($path, '/');
|
$path = trim($path, '/');
|
||||||
|
@ -47,44 +49,54 @@ class AmazonS3 extends \OC\Files\Storage\Common {
|
||||||
return $path;
|
return $path;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function testTimeout() {
|
||||||
|
if ($this->test) {
|
||||||
|
sleep($this->timeout);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public function __construct($params) {
|
public function __construct($params) {
|
||||||
if ( ! isset($params['key']) || ! isset($params['secret']) || ! isset($params['bucket'])) {
|
if ( ! isset($params['key']) || ! isset($params['secret']) || ! isset($params['bucket'])) {
|
||||||
throw new \Exception("Access Key, Secret and Bucket have to be configured.");
|
throw new \Exception("Access Key, Secret and Bucket have to be configured.");
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->id = 'amazon::' . $params['key'] . md5($params['secret']);
|
$this->id = 'amazon::' . $params['key'] . md5($params['secret']);
|
||||||
|
|
||||||
$this->bucket = $params['bucket'];
|
$this->bucket = $params['bucket'];
|
||||||
$scheme = ($params['use_ssl'] === 'false') ? 'http' : 'https';
|
$scheme = ($params['use_ssl'] === 'false') ? 'http' : 'https';
|
||||||
|
$this->test = ( isset($params['test'])) ? true : false;
|
||||||
if (isset($params['hostname']) && isset($params['port'])) {
|
$this->timeout = ( ! isset($params['timeout'])) ? 15 : $params['timeout'];
|
||||||
$base_url = $scheme.'://'.$params['hostname'].':'.$params['port'].'/';
|
$params['region'] = ( ! isset($params['region'])) ? 'eu-west-1' : $params['region'];
|
||||||
$this->connection = S3Client::factory(array(
|
$params['hostname'] = ( !isset($params['hostname'])) ? 's3.amazonaws.com' : $params['hostname'];
|
||||||
'key' => $params['key'],
|
if ( ! isset($params['port'])) {
|
||||||
'secret' => $params['secret'],
|
$params['port'] = ($params['use_ssl'] === 'false') ? 80 : 443;
|
||||||
'base_url' => $base_url
|
|
||||||
));
|
|
||||||
} else {
|
|
||||||
if ( ! isset($params['region'])) {
|
|
||||||
$params['region'] = 'us-west-1';
|
|
||||||
}
|
}
|
||||||
|
$base_url = $scheme.'://'.$params['hostname'].':'.$params['port'].'/';
|
||||||
|
|
||||||
$this->connection = S3Client::factory(array(
|
$this->connection = S3Client::factory(array(
|
||||||
'key' => $params['key'],
|
'key' => $params['key'],
|
||||||
'secret' => $params['secret'],
|
'secret' => $params['secret'],
|
||||||
'scheme' => $scheme,
|
'base_url' => $base_url,
|
||||||
'region' => $params['region']
|
'region' => $params['region']
|
||||||
));
|
));
|
||||||
}
|
|
||||||
|
|
||||||
if (! $this->connection->isValidBucketName($this->bucket)) {
|
if (! $this->connection->isValidBucketName($this->bucket)) {
|
||||||
throw new \Exception("The configured bucket name is invalid.");
|
throw new \Exception("The configured bucket name is invalid.");
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( ! $this->connection->doesBucketExist($this->bucket)) {
|
if ( ! $this->connection->doesBucketExist($this->bucket)) {
|
||||||
|
try {
|
||||||
$result = $this->connection->createBucket(array(
|
$result = $this->connection->createBucket(array(
|
||||||
'Bucket' => $this->bucket
|
'Bucket' => $this->bucket
|
||||||
));
|
));
|
||||||
while ( ! $this->connection->doesBucketExist($this->bucket)) {
|
$this->connection->waitUntilBucketExists(array(
|
||||||
sleep(1);
|
'Bucket' => $this->bucket,
|
||||||
|
'waiter.interval' => 1,
|
||||||
|
'waiter.max_attempts' => 15
|
||||||
|
));
|
||||||
|
$this->testTimeout();
|
||||||
|
} catch (S3Exception $e) {
|
||||||
|
throw new \Exception("Creation of bucket failed.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -96,6 +108,7 @@ class AmazonS3 extends \OC\Files\Storage\Common {
|
||||||
'ContentType' => 'httpd/unix-directory',
|
'ContentType' => 'httpd/unix-directory',
|
||||||
'ContentLength' => 0
|
'ContentLength' => 0
|
||||||
));
|
));
|
||||||
|
$this->testTimeout();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -114,6 +127,7 @@ class AmazonS3 extends \OC\Files\Storage\Common {
|
||||||
'ContentType' => 'httpd/unix-directory',
|
'ContentType' => 'httpd/unix-directory',
|
||||||
'ContentLength' => 0
|
'ContentLength' => 0
|
||||||
));
|
));
|
||||||
|
$this->testTimeout();
|
||||||
} catch (S3Exception $e) {
|
} catch (S3Exception $e) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -168,6 +182,7 @@ class AmazonS3 extends \OC\Files\Storage\Common {
|
||||||
'Bucket' => $this->bucket,
|
'Bucket' => $this->bucket,
|
||||||
'Key' => $path . '/'
|
'Key' => $path . '/'
|
||||||
));
|
));
|
||||||
|
$this->testTimeout();
|
||||||
} catch (S3Exception $e) {
|
} catch (S3Exception $e) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -276,6 +291,7 @@ class AmazonS3 extends \OC\Files\Storage\Common {
|
||||||
'Bucket' => $this->bucket,
|
'Bucket' => $this->bucket,
|
||||||
'Key' => $path
|
'Key' => $path
|
||||||
));
|
));
|
||||||
|
$this->testTimeout();
|
||||||
} catch (S3Exception $e) {
|
} catch (S3Exception $e) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -373,12 +389,14 @@ class AmazonS3 extends \OC\Files\Storage\Common {
|
||||||
'Metadata' => $metadata,
|
'Metadata' => $metadata,
|
||||||
'CopySource' => $this->bucket . '/' . $path
|
'CopySource' => $this->bucket . '/' . $path
|
||||||
));
|
));
|
||||||
|
$this->testTimeout();
|
||||||
} else {
|
} else {
|
||||||
$result = $this->connection->putObject(array(
|
$result = $this->connection->putObject(array(
|
||||||
'Bucket' => $this->bucket,
|
'Bucket' => $this->bucket,
|
||||||
'Key' => $path,
|
'Key' => $path,
|
||||||
'Metadata' => $metadata
|
'Metadata' => $metadata
|
||||||
));
|
));
|
||||||
|
$this->testTimeout();
|
||||||
}
|
}
|
||||||
} catch (S3Exception $e) {
|
} catch (S3Exception $e) {
|
||||||
return false;
|
return false;
|
||||||
|
@ -398,6 +416,7 @@ class AmazonS3 extends \OC\Files\Storage\Common {
|
||||||
'Key' => $path2,
|
'Key' => $path2,
|
||||||
'CopySource' => $this->bucket . '/' . $path1
|
'CopySource' => $this->bucket . '/' . $path1
|
||||||
));
|
));
|
||||||
|
$this->testTimeout();
|
||||||
} catch (S3Exception $e) {
|
} catch (S3Exception $e) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -412,6 +431,7 @@ class AmazonS3 extends \OC\Files\Storage\Common {
|
||||||
'Key' => $path2 . '/',
|
'Key' => $path2 . '/',
|
||||||
'CopySource' => $this->bucket . '/' . $path1 . '/'
|
'CopySource' => $this->bucket . '/' . $path1 . '/'
|
||||||
));
|
));
|
||||||
|
$this->testTimeout();
|
||||||
} catch (S3Exception $e) {
|
} catch (S3Exception $e) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -491,6 +511,7 @@ class AmazonS3 extends \OC\Files\Storage\Common {
|
||||||
'ContentType' => \OC_Helper::getMimeType($tmpFile),
|
'ContentType' => \OC_Helper::getMimeType($tmpFile),
|
||||||
'ContentLength' => filesize($tmpFile)
|
'ContentLength' => filesize($tmpFile)
|
||||||
));
|
));
|
||||||
|
$this->testTimeout();
|
||||||
|
|
||||||
unlink($tmpFile);
|
unlink($tmpFile);
|
||||||
$this->touch(dirname(self::$tmpFiles[$tmpFile]));
|
$this->touch(dirname(self::$tmpFiles[$tmpFile]));
|
||||||
|
|
|
@ -59,9 +59,8 @@ class AmazonS3 extends Storage {
|
||||||
'Bucket' => $this->config['amazons3']['bucket']
|
'Bucket' => $this->config['amazons3']['bucket']
|
||||||
));
|
));
|
||||||
|
|
||||||
while($connection->doesBucketExist($this->config['amazons3']['bucket'])) {
|
//wait some seconds for completing the replication
|
||||||
sleep(1);
|
sleep(30);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -54,8 +54,9 @@ return array(
|
||||||
//'hostname' => 'your.host.name',
|
//'hostname' => 'your.host.name',
|
||||||
//'port' => '443',
|
//'port' => '443',
|
||||||
//'use_ssl' => 'true',
|
//'use_ssl' => 'true',
|
||||||
//'use_path_style' => 'false',
|
//'region' => 'eu-west-1',
|
||||||
//'region' => 'us-west-1'
|
//'test'=>'true',
|
||||||
|
//'timeout'=>20
|
||||||
),
|
),
|
||||||
'dropbox' => array (
|
'dropbox' => array (
|
||||||
'run'=>false,
|
'run'=>false,
|
||||||
|
|
Loading…
Reference in New Issue