private static void SetSessionToken(SessionContainerState self, ResourceId resourceId, string collectionName, string encodedToken) { string partitionKeyRangeId; ISessionToken token; if (VersionUtility.IsLaterThan(HttpConstants.Versions.CurrentVersion, HttpConstants.VersionDates.v2015_12_16)) { string[] tokenParts = encodedToken.Split(':'); partitionKeyRangeId = tokenParts[0]; token = SessionTokenHelper.Parse(tokenParts[1], HttpConstants.Versions.CurrentVersion); } else { //todo: elasticcollections remove after first upgrade. partitionKeyRangeId = "0"; token = SessionTokenHelper.Parse(encodedToken, HttpConstants.Versions.CurrentVersion); } DefaultTrace.TraceVerbose("Update Session token {0} {1} {2}", resourceId.UniqueDocumentCollectionId, collectionName, token); bool isKnownCollection = false; self.rwlock.EnterReadLock(); try { isKnownCollection = self.collectionNameByResourceId.TryGetValue(collectionName, out ulong resolvedCollectionResourceId) && self.collectionResourceIdByName.TryGetValue(resourceId.UniqueDocumentCollectionId, out string resolvedCollectionName) && resolvedCollectionResourceId == resourceId.UniqueDocumentCollectionId && resolvedCollectionName == collectionName; if (isKnownCollection) { SessionContainer.AddSessionToken(self, resourceId.UniqueDocumentCollectionId, partitionKeyRangeId, token); } } finally { self.rwlock.ExitReadLock(); } if (!isKnownCollection) { self.rwlock.EnterWriteLock(); try { if (self.collectionNameByResourceId.TryGetValue(collectionName, out ulong resolvedCollectionResourceId)) { _ = self.sessionTokensRIDBased.TryRemove(resolvedCollectionResourceId, out _); _ = self.collectionResourceIdByName.TryRemove(resolvedCollectionResourceId, out _); } self.collectionNameByResourceId[collectionName] = resourceId.UniqueDocumentCollectionId; self.collectionResourceIdByName[resourceId.UniqueDocumentCollectionId] = collectionName; SessionContainer.AddSessionToken(self, resourceId.UniqueDocumentCollectionId, partitionKeyRangeId, token); } finally { self.rwlock.ExitWriteLock(); } } }
private void SetSessionToken(ResourceId resourceId, string collectionName, string encodedToken) { string partitionKeyRangeId; ISessionToken token; if (VersionUtility.IsLaterThan(HttpConstants.Versions.CurrentVersion, HttpConstants.Versions.v2015_12_16)) { string[] tokenParts = encodedToken.Split(':'); partitionKeyRangeId = tokenParts[0]; token = SessionTokenHelper.Parse(tokenParts[1], HttpConstants.Versions.CurrentVersion); } else { //todo: elasticcollections remove after first upgrade. partitionKeyRangeId = "0"; token = SessionTokenHelper.Parse(encodedToken, HttpConstants.Versions.CurrentVersion); } DefaultTrace.TraceVerbose("Update Session token {0} {1} {2}", resourceId.UniqueDocumentCollectionId, collectionName, token); bool isKnownCollection = false; this.rwlock.EnterReadLock(); try { ulong resolvedCollectionResourceId; string resolvedCollectionName; isKnownCollection = this.collectionNameByResourceId.TryGetValue(collectionName, out resolvedCollectionResourceId) && this.collectionResourceIdByName.TryGetValue(resourceId.UniqueDocumentCollectionId, out resolvedCollectionName) && resolvedCollectionResourceId == resourceId.UniqueDocumentCollectionId && resolvedCollectionName == collectionName; if (isKnownCollection) { this.AddSessionToken(resourceId.UniqueDocumentCollectionId, partitionKeyRangeId, token); } } finally { this.rwlock.ExitReadLock(); } if (!isKnownCollection) { this.rwlock.EnterWriteLock(); try { ulong resolvedCollectionResourceId; if (this.collectionNameByResourceId.TryGetValue(collectionName, out resolvedCollectionResourceId)) { string ignoreString; ConcurrentDictionary <string, ISessionToken> ignored; this.sessionTokensRIDBased.TryRemove(resolvedCollectionResourceId, out ignored); this.collectionResourceIdByName.TryRemove(resolvedCollectionResourceId, out ignoreString); } this.collectionNameByResourceId[collectionName] = resourceId.UniqueDocumentCollectionId; this.collectionResourceIdByName[resourceId.UniqueDocumentCollectionId] = collectionName; this.AddSessionToken(resourceId.UniqueDocumentCollectionId, partitionKeyRangeId, token); } finally { this.rwlock.ExitWriteLock(); } } }
private static ISessionToken ResolvePartitionLocalSessionToken(SessionContainerState self, DocumentServiceRequest request, string partitionKeyRangeId) { return(SessionTokenHelper.ResolvePartitionLocalSessionToken(request, partitionKeyRangeId, SessionContainer.GetPartitionKeyRangeIdToTokenMap(self, request))); }
public ISessionToken ResolvePartitionLocalSessionToken(DocumentServiceRequest request, string partitionKeyRangeId) { return(SessionTokenHelper.ResolvePartitionLocalSessionToken(request, partitionKeyRangeId, this.GetPartitionKeyRangeIdToTokenMap(request))); }