summaryrefslogtreecommitdiffstats
path: root/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Batch/BatchCommandTransfer.php
diff options
context:
space:
mode:
authorThomas Müller <thomas.mueller@tmit.eu>2013-07-22 11:40:28 +0200
committerThomas Müller <thomas.mueller@tmit.eu>2013-07-22 11:40:28 +0200
commit7b28f5a82cbb201110304a5c908c19701240c0d7 (patch)
tree33852cdd1d3e7f944ee3b7ee636a80201b03f098 /apps/files_external/3rdparty/aws-sdk-php/Guzzle/Batch/BatchCommandTransfer.php
parent5cba09e93153bc7f345a878b341fd4eed8bb635f (diff)
parent342a54bf7b31fe21362bac59cfa80a5d30ce9362 (diff)
downloadnextcloud-server-7b28f5a82cbb201110304a5c908c19701240c0d7.tar.gz
nextcloud-server-7b28f5a82cbb201110304a5c908c19701240c0d7.zip
Merge branch 'master' into ext-fs-irods-master
Diffstat (limited to 'apps/files_external/3rdparty/aws-sdk-php/Guzzle/Batch/BatchCommandTransfer.php')
-rw-r--r--apps/files_external/3rdparty/aws-sdk-php/Guzzle/Batch/BatchCommandTransfer.php75
1 files changed, 75 insertions, 0 deletions
diff --git a/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Batch/BatchCommandTransfer.php b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Batch/BatchCommandTransfer.php
new file mode 100644
index 00000000000..d55ac7d1f32
--- /dev/null
+++ b/apps/files_external/3rdparty/aws-sdk-php/Guzzle/Batch/BatchCommandTransfer.php
@@ -0,0 +1,75 @@
+<?php
+
+namespace Guzzle\Batch;
+
+use Guzzle\Batch\BatchTransferInterface;
+use Guzzle\Batch\BatchDivisorInterface;
+use Guzzle\Common\Exception\InvalidArgumentException;
+use Guzzle\Service\Command\CommandInterface;
+use Guzzle\Service\Exception\InconsistentClientTransferException;
+
+/**
+ * Efficiently transfers multiple commands in parallel per client
+ * This class is to be used with {@see Guzzle\Batch\BatchInterface}
+ */
+class BatchCommandTransfer implements BatchTransferInterface, BatchDivisorInterface
+{
+ /** @var int Size of each command batch */
+ protected $batchSize;
+
+ /**
+ * @param int $batchSize Size of each batch
+ */
+ public function __construct($batchSize = 50)
+ {
+ $this->batchSize = $batchSize;
+ }
+
+ /**
+ * Creates batches by grouping commands by their associated client
+ * {@inheritdoc}
+ */
+ public function createBatches(\SplQueue $queue)
+ {
+ $groups = new \SplObjectStorage();
+ foreach ($queue as $item) {
+ if (!$item instanceof CommandInterface) {
+ throw new InvalidArgumentException('All items must implement Guzzle\Service\Command\CommandInterface');
+ }
+ $client = $item->getClient();
+ if (!$groups->contains($client)) {
+ $groups->attach($client, new \ArrayObject(array($item)));
+ } else {
+ $groups[$client]->append($item);
+ }
+ }
+
+ $batches = array();
+ foreach ($groups as $batch) {
+ $batches = array_merge($batches, array_chunk($groups[$batch]->getArrayCopy(), $this->batchSize));
+ }
+
+ return $batches;
+ }
+
+ public function transfer(array $batch)
+ {
+ if (empty($batch)) {
+ return;
+ }
+
+ // Get the client of the first found command
+ $client = reset($batch)->getClient();
+
+ // Keep a list of all commands with invalid clients
+ $invalid = array_filter($batch, function ($command) use ($client) {
+ return $command->getClient() !== $client;
+ });
+
+ if (!empty($invalid)) {
+ throw new InconsistentClientTransferException($invalid);
+ }
+
+ $client->execute($batch);
+ }
+}