public static async Task ClearAllData(string prefix)
        {
            var keyPrefix = prefix is null ? "" : (prefix + ":");

            using (var client = CreateTestClient())
            {
                var         deleteReqs = new List <WriteRequest>();
                ScanRequest request    = new ScanRequest(TableName)
                {
                    ConsistentRead           = true,
                    ProjectionExpression     = "#namespace, #key",
                    ExpressionAttributeNames = new Dictionary <string, string>()
                    {
                        { "#namespace", DynamoDB.DataStorePartitionKey },
                        { "#key", DynamoDB.DataStoreSortKey }
                    }
                };
                await DynamoDBHelpers.IterateScan(client, request,
                                                  item =>
                {
                    if (item[DynamoDB.DataStorePartitionKey].S.StartsWith(keyPrefix))
                    {
                        deleteReqs.Add(new WriteRequest(new DeleteRequest(item)));
                    }
                });

                await DynamoDBHelpers.BatchWriteRequestsAsync(client, TableName, deleteReqs);
            }
        }
示例#2
0
        public async Task InitAsync(FullDataSet <SerializedItemDescriptor> allData)
        {
            // Start by reading the existing keys; we will later delete any of these that weren't in allData.
            var unusedOldKeys = await ReadExistingKeys(allData.Data.Select(collection => collection.Key));

            var requests = new List <WriteRequest>();
            var numItems = 0;

            // Insert or update every provided item
            foreach (var collection in allData.Data)
            {
                var kind = collection.Key;
                foreach (var keyAndItem in collection.Value.Items)
                {
                    var encodedItem = MarshalItem(kind, keyAndItem.Key, keyAndItem.Value);
                    if (!CheckSizeLimit(encodedItem))
                    {
                        continue;
                    }
                    requests.Add(new WriteRequest(new PutRequest(encodedItem)));

                    var combinedKey = new Tuple <string, string>(NamespaceForKind(kind), keyAndItem.Key);
                    unusedOldKeys.Remove(combinedKey);

                    numItems++;
                }
            }

            // Now delete any previously existing items whose keys were not in the current data
            foreach (var combinedKey in unusedOldKeys)
            {
                if (combinedKey.Item1 != InitedKey)
                {
                    var keys = MakeKeysMap(combinedKey.Item1, combinedKey.Item2);
                    requests.Add(new WriteRequest(new DeleteRequest(keys)));
                }
            }

            // Now set the special key that we check in initializedInternal()
            var initedItem = MakeKeysMap(InitedKey, InitedKey);

            requests.Add(new WriteRequest(new PutRequest(initedItem)));

            await DynamoDBHelpers.BatchWriteRequestsAsync(_client, _tableName, requests);

            _log.Info("Initialized data store with {0} items", numItems);
        }