示例#1
0
        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();
        }
示例#4
0
        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);
        }