diff --git a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/SessionContainer.java b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/SessionContainer.java index b329bec6200a..51439b6afeea 100644 --- a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/SessionContainer.java +++ b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/SessionContainer.java @@ -109,6 +109,13 @@ private ConcurrentHashMap getPartitionKeyRangeIdToTokenMa public String resolveGlobalSessionToken(RxDocumentServiceRequest request) { ConcurrentHashMap partitionKeyRangeIdToTokenMap = this.getPartitionKeyRangeIdToTokenMap(request); if (partitionKeyRangeIdToTokenMap != null) { + String partitionKeyRangeId = request.getHeaders().get(HttpConstants.HttpHeaders.PARTITION_KEY_RANGE_ID); + if (StringUtils.isNotEmpty(partitionKeyRangeId) && partitionKeyRangeIdToTokenMap.get(partitionKeyRangeId) != null) { + StringBuilder result = new StringBuilder() + .append(partitionKeyRangeId).append(":").append(partitionKeyRangeIdToTokenMap.get(partitionKeyRangeId).convertToString()); + return result.toString(); + } + return SessionContainer.getCombinedSessionToken(partitionKeyRangeIdToTokenMap); } diff --git a/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/implementation/SessionContainerTest.java b/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/implementation/SessionContainerTest.java index 2edbbf69fe94..e2308513ecd9 100644 --- a/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/implementation/SessionContainerTest.java +++ b/sdk/cosmos/azure-cosmos/src/test/java/com/azure/cosmos/implementation/SessionContainerTest.java @@ -68,6 +68,17 @@ public void sessionContainer() throws Exception { sessionToken = sessionContainer.resolvePartitionLocalSessionToken(request, resolvedPKRange.getId()); assertThat(sessionToken.getLSN()).isEqualTo(2); + + String globalSessionToken = sessionContainer.resolveGlobalSessionToken(request); + assertThat(globalSessionToken).isEqualTo("range_0:1#0#4=90#5=2,range_1:1#1#4=90#5=2,range_4:1#4#4=90#5=2,range_2:1#2#4=90#5=2,range_3:1#3#4=90#5=2"); + + request.getHeaders().put(HttpConstants.HttpHeaders.PARTITION_KEY_RANGE_ID, "not_found"); + globalSessionToken = sessionContainer.resolveGlobalSessionToken(request); + assertThat(globalSessionToken).isEqualTo("range_0:1#0#4=90#5=2,range_1:1#1#4=90#5=2,range_4:1#4#4=90#5=2,range_2:1#2#4=90#5=2,range_3:1#3#4=90#5=2"); + + request.getHeaders().put(HttpConstants.HttpHeaders.PARTITION_KEY_RANGE_ID, "range_1"); + globalSessionToken = sessionContainer.resolveGlobalSessionToken(request); + assertThat(globalSessionToken).isEqualTo("range_1:1#1#4=90#5=2"); } @Test(groups = "unit")