protected function execute(InputInterface $input, OutputInterface $output)
    {
        $this->dynamoDbClient = $this->getContainer()->get('queue.dynamodb_client');
        $this->tableName = $this->getContainer()->getParameter('container_stats_dynamodb.table_name');
        $tableName = $this->tableName;
        $updateTableJson = <<<JSON
{
    "TableName": "{$tableName}",
    "GlobalSecondaryIndexUpdates": [
        {
            "Create": {
                "IndexName": "sapiProjectId-sapiCreatedTime-index",
                "KeySchema": [
                    {
                        "AttributeName": "sapiProjectId",
                        "KeyType": "HASH"
                    },
                    {
                        "AttributeName": "sapiCreatedTime",
                        "KeyType": "RANGE"
                    }
                ],
                "Projection": {
                    "ProjectionType": "ALL"
                },
                "ProvisionedThroughput": {
                    "ReadCapacityUnits": 3,
                    "WriteCapacityUnits": 7
                }

            }
        }
    ],
    "AttributeDefinitions": [
        {
            "AttributeName": "sapiCreatedTime",
            "AttributeType": "S"
        },
        {
            "AttributeName": "sapiProjectId",
            "AttributeType": "S"
        }
    ]
}
JSON;
        $updateTableArgs = \json_decode($updateTableJson, true);
        try {
            $this->dynamoDbClient->updateTable($updateTableArgs);
            echo 'Index has been created' . "\n";
        } catch (DynamoDbException $e) {
            if (strpos($e->getMessage(), 'Attempting to create an index which already exists') !== false) {
                echo 'Index already exists' . "\n";
            } else {
                throw $e;
            }
        }
    }
Esempio n. 2
0
 /**
  * Executes the UpdateTable operation.
  *
  * @param string $tableName              The name of the table to be updated.
  * @param array  $provisionedThroughput  Represents the provisioned throughput settings for a specified table or index.
  * @param array  $globalSecondaryIndexes An array of one or more global secondary indexes on the table, together with provisioned throughput settings for each index.
  *
  * @return Guzzle\Service\Resource\Model
  *
  * @see http://docs.aws.amazon.com/aws-sdk-php/latest/class-Aws.DynamoDb.DynamoDbClient.html#_updateTable
  */
 public function updateTable($tableName, array $provisionedThroughput = null, array $globalSecondaryIndexes = null)
 {
     $args = ['TableName' => $tableName];
     if ($provisionedThroughput !== null) {
         $args['ProvisionedThroughput'] = $provisionedThroughput;
     }
     if ($globalSecondaryIndexes !== null) {
         $args['GlobalSecondaryIndexes'] = $globalSecondaryIndexes;
     }
     return $this->client->updateTable($args);
 }
Esempio n. 3
0
 /**
  * Update table via the update_table call
  * @param string $table The name of the table
  * @param Table\ProvisionedThroughput $provisionedThroughput
  * @return Table\TableDescription
  */
 public function updateTable($table, Table\ProvisionedThroughput $provisionedThroughput)
 {
     if (null !== $this->logger) {
         $this->log('Update table ' . $table);
     }
     $parameters = array('TableName' => $table, 'ProvisionedThroughput' => $provisionedThroughput->getForDynamoDB());
     if (null !== $this->logger) {
         $this->log('UpdateTable request paramaters : ' . print_r($parameters, true), Logger::DEBUG);
     }
     $response = $this->connector->updateTable($parameters);
     if (null !== $this->logger) {
         $this->log('UpdateTable request response : ' . print_r($response, true), Logger::DEBUG);
     }
 }
 /**
  * @depends testCreatesTable
  */
 public function testUpdatesTable()
 {
     self::log('Updating table');
     // Need to wait until the table is active
     $this->client->waitUntil('TableExists', $this->table, array('status' => 'active'));
     $this->client->updateTable(array('TableName' => $this->table, 'ProvisionedThroughput' => array('ReadCapacityUnits' => 20, 'WriteCapacityUnits' => 20)));
     // Wait until the table is active
     self::log('Waiting for the table to become active after updating');
     $this->client->waitUntil('table_exists', $this->table, array('status' => 'ACTIVE'));
     // Ensure the table is updated
     $result = $this->client->describeTable(array('TableName' => $this->table));
     // Ensure that the updates took effect
     $this->assertEquals(20, $result['Table']['ProvisionedThroughput']['ReadCapacityUnits']);
     $this->assertEquals(20, $result['Table']['ProvisionedThroughput']['WriteCapacityUnits']);
 }
 public function setThroughput($read, $write, $indexName = self::PRIMARY_INDEX)
 {
     $requestArgs = ["TableName" => $this->tableName];
     $updateObject = ['ReadCapacityUnits' => $read, 'WriteCapacityUnits' => $write];
     if ($indexName == self::PRIMARY_INDEX) {
         $requestArgs['ProvisionedThroughput'] = $updateObject;
     } else {
         $requestArgs['GlobalSecondaryIndexUpdates'] = [['Update' => ['IndexName' => $indexName, 'ProvisionedThroughput' => $updateObject]]];
     }
     try {
         $this->dbClient->updateTable($requestArgs);
     } catch (DynamoDbException $e) {
         if ($e->getAwsErrorCode() == "ValidationException" && $e->getAwsErrorType() == "client" && !$e->isConnectionError()) {
             mwarning("Throughput not updated, because new value is identical to old value!");
         } else {
             throw $e;
         }
     }
 }