Exemplo n.º 1
0
        public void CreateIfNotExist()
        {
            var request = new DescribeTableRequest {
                TableName = _config.TableName
            };

            try
            {
                _client.DescribeTable(request);
            }
            catch (ResourceNotFoundException)
            {
                CreateTable();
            }
        }
Exemplo n.º 2
0
 public DescribeTableResponse DescribeTable(string tableName)
 {
     return(_service.DescribeTable(new DescribeTableRequest()
     {
         TableName = tableName
     }));
 }
Exemplo n.º 3
0
        public void Create_Table_with_AWSSDK()
        {
            db.DeleteTable <Todo>();
            var request = new CreateTableRequest
            {
                TableName = "Todo",
                KeySchema = new List <KeySchemaElement>
                {
                    new KeySchemaElement("Id", KeyType.HASH),
                },
                AttributeDefinitions = new List <AttributeDefinition>
                {
                    new AttributeDefinition("Id", ScalarAttributeType.N),
                },
                ProvisionedThroughput = new ProvisionedThroughput
                {
                    ReadCapacityUnits  = 10,
                    WriteCapacityUnits = 5,
                }
            };

            awsDb.CreateTable(request);

            while (true)
            {
                try
                {
                    var descResponse = awsDb.DescribeTable(new DescribeTableRequest("Todo"));
                    if (descResponse.Table.TableStatus == DynamoStatus.Active)
                    {
                        break;
                    }

                    Thread.Sleep(TimeSpan.FromSeconds(2));
                }
                catch (ResourceNotFoundException)
                {
                    // DescribeTable is eventually consistent. So you might get resource not found.
                }
            }

            var listResponse = awsDb.ListTables(new ListTablesRequest());
            var tableNames   = listResponse.TableNames;

            tableNames.PrintDump();
        }
Exemplo n.º 4
0
        public static void DeleteTables(IAmazonDynamoDB client, Predicate <string> tableNameMatch)
        {
            try
            {
                var tableNames = client.ListTables().TableNames;
                foreach (var tableName in tableNames)
                {
                    DescribeTableResponse descResponse = client.DescribeTable(new DescribeTableRequest {
                        TableName = tableName
                    });
                    if (descResponse.Table == null)
                    {
                        continue;
                    }

                    TableDescription table = descResponse.Table;

                    if (table.TableStatus == TableStatus.ACTIVE && tableNameMatch(table.TableName))
                    {
                        Console.WriteLine("Table: {0}, {1}, {2}, {3}", table.TableName, table.TableStatus, table.ProvisionedThroughput.ReadCapacityUnits, table.ProvisionedThroughput.WriteCapacityUnits);
                        Console.WriteLine("Deleting table " + table.TableName + "...");
                        try
                        {
                            client.DeleteTable(new DeleteTableRequest {
                                TableName = table.TableName
                            });
                            WaitUntilTableDeleted(table.TableName, client);
                            Console.WriteLine("Succeeded!");
                        }
                        catch
                        {
                            Console.WriteLine("Failed!");
                        }
                    }
                }
                Console.WriteLine(tableNames.Count);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
                throw;
            }
        }
Exemplo n.º 5
0
        public static TableStatus GetTableStatus(string tableName, IAmazonDynamoDB client)
        {
            try
            {
                var table = client.DescribeTable(new DescribeTableRequest
                {
                    TableName = tableName
                }).Table;

                return(table.TableStatus);
            }
            catch (AmazonDynamoDBException db)
            {
                if (db.ErrorCode == "ResourceNotFoundException")
                {
                    return(null);
                }

                throw;
            }
        }
 private Amazon.DynamoDBv2.Model.DescribeTableResponse CallAWSServiceOperation(IAmazonDynamoDB client, Amazon.DynamoDBv2.Model.DescribeTableRequest request)
 {
     Utils.Common.WriteVerboseEndpointMessage(this, client.Config, "Amazon DynamoDB", "DescribeTable");
     try
     {
         #if DESKTOP
         return(client.DescribeTable(request));
         #elif CORECLR
         return(client.DescribeTableAsync(request).GetAwaiter().GetResult());
         #else
                 #error "Unknown build edition"
         #endif
     }
     catch (AmazonServiceException exc)
     {
         var webException = exc.InnerException as System.Net.WebException;
         if (webException != null)
         {
             throw new Exception(Utils.Common.FormatNameResolutionFailureMessage(client.Config, webException.Message), webException);
         }
         throw;
     }
 }
Exemplo n.º 7
0
        public static void DeleteTables(IAmazonDynamoDB client, Predicate<string> tableNameMatch)
        {
            try
            {
                var tableNames = client.ListTables().TableNames;
                foreach (var tableName in tableNames)
                {
                    DescribeTableResponse descResponse = client.DescribeTable(new DescribeTableRequest { TableName = tableName });
                    if (descResponse.Table == null)
                        continue;

                    TableDescription table = descResponse.Table;

                    if (table.TableStatus == TableStatus.ACTIVE && tableNameMatch(table.TableName))
                    {
                        Console.WriteLine("Table: {0}, {1}, {2}, {3}", table.TableName, table.TableStatus, table.ProvisionedThroughput.ReadCapacityUnits, table.ProvisionedThroughput.WriteCapacityUnits);
                        Console.WriteLine("Deleting table " + table.TableName + "...");
                        try
                        {
                            client.DeleteTable(new DeleteTableRequest { TableName = table.TableName });
                            WaitUntilTableDeleted(table.TableName, client);
                            Console.WriteLine("Succeeded!");
                        }
                        catch
                        {
                            Console.WriteLine("Failed!");
                        }
                    }
                }
                Console.WriteLine(tableNames.Count);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
                throw;
            }
        }
Exemplo n.º 8
0
        public static TableStatus GetTableStatus(string tableName, IAmazonDynamoDB client)
        {
            try
            {
                var table = client.DescribeTable(new DescribeTableRequest
                {
                    TableName = tableName
                }).Table;

                return table.TableStatus;
            }
            catch (AmazonDynamoDBException db)
            {
                if (db.ErrorCode == "ResourceNotFoundException")
                    return null;

                throw;
            }
        }
Exemplo n.º 9
0
        public void CreateNewTable(Type entity, Type entityBaseType)
        {
            if (dynamoService == null || entity == null || !entityBaseType.IsAssignableFrom(entity))
            {
                return;
            }

            try
            {
                DynamoDBTableAttribute attr = entity.GetCustomAttribute <DynamoDBTableAttribute>();

                if (attr == null)
                {
                    return;
                }

                string tableName = attr.TableName.ToLower();

                if (CheckTableExists(tableName))
                {
                    ConsoleHelper.Write("\nTable ");
                    ConsoleHelper.Write(tableName.ToUpper(), ConsoleColor.Yellow);
                    ConsoleHelper.Write(string.Format(" is active in dynamoDB - {0}", dynamoService.DynamoServiceUrl));
                    return;
                }

                dynamoService.RestartDynamoDBContext();

                using (IAmazonDynamoDB client = dynamoService.DynamoClient)
                {
                    CreateTableRequest createTableRequest = new CreateTableRequest();
                    createTableRequest.TableName             = tableName;
                    createTableRequest.ProvisionedThroughput = new ProvisionedThroughput()
                    {
                        ReadCapacityUnits = 1, WriteCapacityUnits = 1
                    };

                    List <KeySchemaElement>    keySchemas           = new List <KeySchemaElement>();
                    List <AttributeDefinition> attributeDefinitions = new List <AttributeDefinition>();

                    Attribute hashAttr  = null;
                    Attribute rangeAttr = null;

                    foreach (PropertyInfo property in entity.GetProperties())
                    {
                        hashAttr  = property.GetCustomAttribute(typeof(DynamoDBHashKeyAttribute), false);
                        rangeAttr = property.GetCustomAttribute(typeof(DynamoDBRangeKeyAttribute), false);

                        if (hashAttr != null)
                        {
                            keySchemas.Add(new KeySchemaElement(property.Name, KeyType.HASH));
                            attributeDefinitions.Add(new AttributeDefinition(property.Name, TypeToScalarAttributeType(property.GetType())));
                        }
                        else if (rangeAttr != null)
                        {
                            keySchemas.Add(new KeySchemaElement(property.Name, KeyType.RANGE));
                            attributeDefinitions.Add(new AttributeDefinition(property.Name, TypeToScalarAttributeType(property.GetType())));
                        }
                    }

                    createTableRequest.KeySchema            = keySchemas;
                    createTableRequest.AttributeDefinitions = attributeDefinitions;

                    CreateTableResponse createTableResponse = client.CreateTable(createTableRequest);

                    TableDescription tableDescription = createTableResponse.TableDescription;

                    ConsoleHelper.Write("\n\nTable ");
                    ConsoleHelper.Write(tableName.ToUpper(), ConsoleColor.Yellow);
                    ConsoleHelper.Write(" creation command sent to Amazon...");

                    string tableStatus = tableDescription.TableStatus.Value.ToLower();

                    while (!ACTIVE_STATUS.Equals(tableStatus))
                    {
                        ConsoleHelper.Write("\nTable ");
                        ConsoleHelper.Write(tableName.ToUpper(), ConsoleColor.Yellow);
                        ConsoleHelper.WriteLine(" is not yet active, waiting...");

                        //Waiting for the table to be created in amazon or locally, check again each x milliseconds
                        Thread.Sleep(2000);

                        DescribeTableRequest  describeTableRequest  = new DescribeTableRequest(tableName);
                        DescribeTableResponse describeTableResponse = client.DescribeTable(describeTableRequest);

                        tableDescription = describeTableResponse.Table;
                        tableStatus      = tableDescription.TableStatus.Value.ToLower();

                        ConsoleHelper.Write("\nLatest status of table ");
                        ConsoleHelper.Write(string.Format("{0}: ", tableName.ToUpper()), ConsoleColor.Yellow);
                        ConsoleHelper.Write(tableStatus.ToUpper(), ConsoleColor.Green);
                    }

                    ConsoleHelper.Write("\nCreation complete for table ");
                    ConsoleHelper.Write(tableName.ToUpper(), ConsoleColor.Yellow);
                    ConsoleHelper.Write(", final status: ");
                    ConsoleHelper.Write(tableStatus.ToUpper(), ConsoleColor.Green);
                }
            }
            catch (AmazonDynamoDBException exception)
            {
                ConsoleHelper.Write(string.Format("\nException while creating new dynamoDB table: {0}.", exception.Message), ConsoleColor.Red);
                ConsoleHelper.Write(string.Format(" Error code: {0}, error type: {1}", exception.ErrorCode, exception.ErrorType), ConsoleColor.Red);
            }
        }