/// <summary> /// A utility method for cleaning up expired sessions that IIS failed to delete. The method performs a scan on the table /// with a condition that the expiration date is in the past and calls delete on all the keys returned. Scans can be costly on performance /// so use this method sparingly like a nightly or weekly clean job. /// </summary> /// <param name="dbClient">The AmazonDynamoDB client used to find a delete expired sessions.</param> /// <param name="tableName">The table to search.</param> public static void DeleteExpiredSessions(IAmazonDynamoDB dbClient, string tableName) { Table table = Table.LoadTable(dbClient, tableName, Table.DynamoDBConsumer.SessionStateProvider, DynamoDBEntryConversion.V1); ScanFilter filter = new ScanFilter(); filter.AddCondition(ATTRIBUTE_EXPIRES, ScanOperator.LessThan, DateTime.Now); ScanOperationConfig config = new ScanOperationConfig(); config.AttributesToGet = new List <string> { ATTRIBUTE_SESSION_ID }; config.Select = SelectValues.SpecificAttributes; config.Filter = filter; DocumentBatchWrite batchWrite = table.CreateBatchWrite(); Search search = table.Scan(config); do { List <Document> page = search.GetNextSet(); foreach (var document in page) { batchWrite.AddItemToDelete(document); } } while (!search.IsDone); batchWrite.Execute(); }
private void TestMultiTableDocumentBatchWrite(Table hashTable, Table hashRangeTable) { var multiTableDocumentBatchWrite = new MultiTableDocumentBatchWrite(); var doc1a = new Document(); doc1a["Id"] = 5101; doc1a["Data"] = Guid.NewGuid().ToString(); var doc1b = new Document(); doc1b["Id"] = 5102; doc1b["Data"] = Guid.NewGuid().ToString(); { var writer = new DocumentBatchWrite(hashTable); writer.AddDocumentToPut(doc1a); writer.AddDocumentToPut(doc1b); multiTableDocumentBatchWrite.AddBatch(writer); } var doc2a = new Document(); doc2a["Id"] = 5201; doc2a["Data"] = Guid.NewGuid().ToString(); var doc2b = new Document(); doc2b["Id"] = 5202; doc2b["Data"] = Guid.NewGuid().ToString(); { var writer = new DocumentBatchWrite(hashTable); writer.AddDocumentToPut(doc2a); writer.AddDocumentToPut(doc2b); multiTableDocumentBatchWrite.AddBatch(writer); } var doc3a = new Document(); doc3a["Name"] = "Gunnar"; doc3a["Age"] = 77; doc3a["Job"] = "Retired"; doc3a["Data"] = Guid.NewGuid().ToString(); { var writer = new DocumentBatchWrite(hashRangeTable); writer.AddDocumentToPut(doc3a); multiTableDocumentBatchWrite.AddBatch(writer); } multiTableDocumentBatchWrite.Execute(); Document getDoc; getDoc = hashTable.GetItem(5101); Assert.AreEqual(doc1a["Data"].AsString(), getDoc["Data"].AsString()); getDoc = hashTable.GetItem(5102); Assert.AreEqual(doc1b["Data"].AsString(), getDoc["Data"].AsString()); getDoc = hashTable.GetItem(5201); Assert.AreEqual(doc2a["Data"].AsString(), getDoc["Data"].AsString()); getDoc = hashTable.GetItem(5202); Assert.AreEqual(doc2b["Data"].AsString(), getDoc["Data"].AsString()); getDoc = hashRangeTable.GetItem("Gunnar", 77); Assert.AreEqual(doc3a["Data"].AsString(), getDoc["Data"].AsString()); multiTableDocumentBatchWrite = new MultiTableDocumentBatchWrite(); { var deleteWriter = new DocumentBatchWrite(hashTable); deleteWriter.AddItemToDelete(doc1a); deleteWriter.AddItemToDelete(doc1b); deleteWriter.AddItemToDelete(doc2a); deleteWriter.AddItemToDelete(doc2b); multiTableDocumentBatchWrite.AddBatch(deleteWriter); } { var deleteWriter = new DocumentBatchWrite(hashRangeTable); deleteWriter.AddItemToDelete(doc3a); multiTableDocumentBatchWrite.AddBatch(deleteWriter); } multiTableDocumentBatchWrite.Execute(); }