public Task RequeuePlayerFeedRow(PlayerFeedRow playerFeedRow, bool syncFoundChanges) { var batchOperation = new TableBatchOperation(); batchOperation.Delete(playerFeedRow); batchOperation.Insert(playerFeedRow.CreateRequeuedRow(DateTime.UtcNow, syncFoundChanges)); return(_playerFeedsTable.ExecuteBatchAsync(batchOperation)); }
public void CreateRow() { var playerFeed = new PlayerFeed { Url = "a" }; var playerFeedRow = PlayerFeedRow.CreateRow(playerFeed, DateTime.UtcNow); Assert.AreEqual("0", playerFeedRow.PartitionKey); Assert.AreEqual("a", playerFeedRow.Url); Assert.IsNull(playerFeedRow.LastSyncTimeUtc); Assert.IsNull(playerFeedRow.LastSyncWithChangesTimeUtc); }
public PlayerFeedsSyncResult( IEnumerable <PlayerFeedRow> playerFeedRows, IEnumerable <PlayerFeed> playerFeeds) { var playerFeedRowsByID = playerFeedRows.ToDictionary(r => r.Url); var playerFeedsByID = playerFeeds.ToDictionary(f => f.Url); DefunctPlayerFeedRows = playerFeedRowsByID.Values .Where(r => !playerFeedsByID.ContainsKey(r.Url)) .ToArray(); NewPlayerFeedRows = PlayerFeedRow.CreateRows(playerFeedsByID.Values .Where(f => !playerFeedRowsByID.ContainsKey(f.Url))) .ToArray(); }
public Task <IList <PlayerFeedRow> > GetNextPlayerFeedRows( int rowLimit, TimeSpan minimumTimeSinceLastSync) { // Rows are always returned in ascending order by partition key, then row key. A row's row key // equals the ticks of the row's last sync time, so this returns the rows most needing a sync. string rowKeyCutoff = PlayerFeedRow.GetRowKey(DateTime.UtcNow.Subtract(minimumTimeSinceLastSync)); var query = new TableQuery <PlayerFeedRow>().Where( TableQuery.CombineFilters( TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, "0"), TableOperators.And, TableQuery.GenerateFilterCondition("RowKey", QueryComparisons.LessThanOrEqual, rowKeyCutoff))) .Take(rowLimit); return(_playerFeedsTable.ExecuteQueryAsync(query)); }
public void CreateRows() { var playerFeeds = Enumerable.Range(0, 26) .Select(i => new PlayerFeed { Url = ((char)('a' + i)).ToString() }); var playerFeedRows = PlayerFeedRow.CreateRows(playerFeeds).ToArray(); Assert.AreEqual(26, playerFeedRows.Length); CollectionAssert.AreEqual( playerFeeds.Select(f => f.Url).ToArray(), playerFeedRows.Select(r => r.Url).ToArray()); Assert.IsTrue(playerFeedRows.All(r => r.PartitionKey == "0")); Assert.AreEqual(playerFeedRows.Length, playerFeedRows.Select(r => r.RowKey).Distinct().Count()); }
public void CreateRequeuedRow() { var rowKeyTimeUtc = DateTime.UtcNow; var requeuedRowKeyTimeUtc = DateTime.UtcNow.AddTicks(1); var playerFeed = new PlayerFeed { Url = "a" }; var playerFeedRow = PlayerFeedRow.CreateRow(playerFeed, rowKeyTimeUtc); var requeuedPlayerFeedRow = playerFeedRow.CreateRequeuedRow( syncTimeUtc: requeuedRowKeyTimeUtc, syncFoundChanges: true); Assert.AreEqual(requeuedRowKeyTimeUtc, requeuedPlayerFeedRow.LastSyncTimeUtc); Assert.AreEqual(requeuedRowKeyTimeUtc, requeuedPlayerFeedRow.LastSyncWithChangesTimeUtc); var reRequeuedRowKeyTimeUtc = DateTime.UtcNow.AddTicks(2); var reRequeuedPlayerFeedRow = requeuedPlayerFeedRow.CreateRequeuedRow( syncTimeUtc: reRequeuedRowKeyTimeUtc, syncFoundChanges: false); Assert.AreEqual(reRequeuedRowKeyTimeUtc, reRequeuedPlayerFeedRow.LastSyncTimeUtc); Assert.AreEqual(requeuedRowKeyTimeUtc, reRequeuedPlayerFeedRow.LastSyncWithChangesTimeUtc); }