public PartitionSynchronizerCore( ContainerInternal container, DocumentServiceLeaseContainer leaseContainer, DocumentServiceLeaseManager leaseManager, int degreeOfParallelism, Routing.PartitionKeyRangeCache partitionKeyRangeCache, string containerRid) { this.container = container; this.leaseContainer = leaseContainer; this.leaseManager = leaseManager; this.degreeOfParallelism = degreeOfParallelism; this.partitionKeyRangeCache = partitionKeyRangeCache; this.containerRid = containerRid; }
public async Task GetChangeFeedTokensAsyncReturnsOnePerPartitionKeyRange() { // Setting mock to have 3 ranges, to generate 3 tokens MultiRangeMockDocumentClient documentClient = new MultiRangeMockDocumentClient(); CosmosClient client = MockCosmosUtil.CreateMockCosmosClient(); Mock <CosmosClientContext> mockContext = new Mock <CosmosClientContext>(); mockContext.Setup(x => x.ClientOptions).Returns(MockCosmosUtil.GetDefaultConfiguration()); mockContext.Setup(x => x.DocumentClient).Returns(documentClient); mockContext.Setup(x => x.DocumentQueryClient).Returns(Mock.Of <IDocumentQueryClient>()); mockContext.Setup(x => x.CosmosSerializer).Returns(MockCosmosUtil.Serializer); mockContext.Setup(x => x.Client).Returns(client); mockContext.Setup(x => x.CreateLink(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>())).Returns(UriFactory.CreateDocumentCollectionUri("test", "test")); DatabaseCore db = new DatabaseCore(mockContext.Object, "test"); ContainerCore container = new ContainerCore(mockContext.Object, db, "test"); IEnumerable <string> tokens = await container.GetChangeFeedTokensAsync(); Assert.AreEqual(3, tokens.Count()); Routing.PartitionKeyRangeCache pkRangeCache = await documentClient.GetPartitionKeyRangeCacheAsync(); foreach (string token in tokens) { // Validate that each token represents a StandByFeedContinuationToken with a single Range List <CompositeContinuationToken> deserialized = JsonConvert.DeserializeObject <List <CompositeContinuationToken> >(token); Assert.AreEqual(1, deserialized.Count); CompositeContinuationToken compositeToken = deserialized[0]; IReadOnlyList <Documents.PartitionKeyRange> rangesForTheToken = await pkRangeCache.TryGetOverlappingRangesAsync("", compositeToken.Range); // Token represents one range Assert.AreEqual(1, rangesForTheToken.Count); Assert.AreEqual(rangesForTheToken[0].MinInclusive, compositeToken.Range.Min); Assert.AreEqual(rangesForTheToken[0].MaxExclusive, compositeToken.Range.Max); } }