/// <summary> /// Initiates a Search object to Scan a DynamoDB table, with the /// specified config. /// /// No calls are made until the Search object is used. /// </summary> /// <param name="config">Configuration to use.</param> /// <returns>Resultant Search container.</returns> public Search Scan(ScanOperationConfig config) { var currentConfig = config ?? new ScanOperationConfig(); Search ret = new Search(SearchType.Scan); ret.SourceTable = this; ret.TableName = TableName; ret.Limit = currentConfig.Limit; ret.Filter = currentConfig.Filter; ret.AttributesToGet = currentConfig.AttributesToGet; return ret; }
/// <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(AmazonDynamoDB dbClient, string tableName) { Table table = Table.LoadTable(dbClient, tableName, Table.DynamoDBConsumer.SessionStateProvider); ScanFilter filter = new ScanFilter(); filter.AddCondition(ATTRIBUTE_EXPIRES, ScanOperator.LessThan, DateTime.Now); ScanOperationConfig config = new ScanOperationConfig(); config.AttributesToGet = new List<string>(); config.AttributesToGet.Add(ATTRIBUTE_SESSION_ID); config.Filter = filter; Search search = table.Scan(config); do { List<Document> page = search.GetNextSet(); foreach (var document in page) { table.DeleteItem(document); } } while (!search.IsDone); }