Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
70 commits
Select commit Hold shift + click to select a range
c2c7dc7
progress
nehrao1 Nov 24, 2024
6600a6b
add separate endpoint
nehrao1 Dec 1, 2024
0e6d796
start
nehrao1 Dec 2, 2024
0a06791
progress
nehrao1 Dec 3, 2024
ace2685
push progress
nehrao1 Dec 16, 2024
a570c83
Update ThinClientStoreModel.java
FabianMeiswinkel Dec 16, 2024
27318e5
Skeleton for ThinClientStoreModel and RNTBD serialization
FabianMeiswinkel Dec 17, 2024
63a1816
Merge pull request #1 from FabianMeiswinkel/users/fabianm/RntbdSerial…
nehrao1 Dec 18, 2024
4733a68
fix env var
nehrao1 Dec 19, 2024
2e0672d
Adding serialization skeleton in ThinClientStoreModel
jeet1995 Dec 21, 2024
33eded2
Merge pull request #2 from jeet1995/thinclientStoreModel
nehrao1 Dec 22, 2024
b2b9b8f
progress
nehrao1 Dec 26, 2024
2ee9484
pr comments
nehrao1 Jan 6, 2025
54c6777
cleanup
nehrao1 Jan 6, 2025
7b3f273
Merge branch 'main' of https://github.com/Azure/azure-sdk-for-java in…
nehrao1 Jan 6, 2025
10f342a
changelog
nehrao1 Jan 6, 2025
2bb95f1
cleanup
nehrao1 Jan 6, 2025
e5dc25b
test
nehrao1 Jan 6, 2025
606a427
pr comments
nehrao1 Jan 10, 2025
4f0dba8
fix
nehrao1 Jan 13, 2025
7f2b881
merge main
nehrao1 Jan 13, 2025
f7ed838
Merge branch 'main' of https://github.com/Azure/azure-sdk-for-java in…
nehrao1 Jan 13, 2025
1aa70bd
changelog
nehrao1 Jan 13, 2025
e414cd5
fix test
nehrao1 Jan 13, 2025
a6cbb07
Merge branch 'thinclientAPI' into thinclientEndpointDiscovery
nehrao1 Jan 13, 2025
c74405c
progress
nehrao1 Jan 15, 2025
da31f66
progress
nehrao1 Jan 16, 2025
513bd42
merge main
nehrao1 Jan 21, 2025
8c39fca
fix
nehrao1 Jan 21, 2025
b195862
test
nehrao1 Jan 21, 2025
0e561a9
progress
nehrao1 Jan 26, 2025
f589cd4
progress
nehrao1 Jan 27, 2025
a32bf7d
progress
nehrao1 Jan 27, 2025
90071c1
progress
nehrao1 Jan 29, 2025
5f0b5e0
progress
nehrao1 Jan 31, 2025
77e6b5e
progress
nehrao1 Jan 31, 2025
fd076fa
Adding ConsolidatedLocationEndpoints to encapsulate thin proxy locati…
jeet1995 Feb 1, 2025
bf2a3b9
Adding ConsolidatedLocationEndpoints to encapsulate thin proxy locati…
jeet1995 Feb 1, 2025
93a590a
Fixing unit tests.
jeet1995 Feb 1, 2025
2d3e83e
Fixing unit tests.
jeet1995 Feb 1, 2025
d3dd778
Fixing unit tests.
jeet1995 Feb 1, 2025
089a43a
Fixing unit tests.
jeet1995 Feb 1, 2025
1558260
Fixing unit tests.
jeet1995 Feb 1, 2025
a890f7a
Remove azure-cosmos dependency.
jeet1995 Feb 1, 2025
4aafa53
Fixing unit tests.
jeet1995 Feb 1, 2025
1472a5f
Fixing unit tests.
jeet1995 Feb 2, 2025
e6540a6
Fixing CI / live tests pipeline.
jeet1995 Feb 2, 2025
d43a3b8
Fixing CI / live tests pipeline.
jeet1995 Feb 2, 2025
b18feed
fixing rntbd request
nehrao1 Feb 5, 2025
ed53372
Merge pull request #3 from jeet1995/thinclientEndpointDiscoveryRefactor
nehrao1 Feb 6, 2025
9deb80b
progress
nehrao1 Feb 6, 2025
6959d2d
fix
nehrao1 Feb 6, 2025
52ca426
fix
nehrao1 Feb 7, 2025
1002537
fix
nehrao1 Feb 11, 2025
ce8ff80
Quick fix ordering rntbd tokens
FabianMeiswinkel Feb 11, 2025
4a456ae
Changing rntbd header order
FabianMeiswinkel Feb 11, 2025
81a8866
Hack to make the dotnet-benchmark a simple repro for test against loc…
FabianMeiswinkel Feb 11, 2025
ccca04a
Iterating on quick and dirty test
FabianMeiswinkel Feb 13, 2025
5d820ca
QuickAndDirty integration for Create/Read works now
FabianMeiswinkel Feb 14, 2025
d8f916b
Merge pull request #6 from FabianMeiswinkel/users/fabianm/rntbdOrdering
nehrao1 Feb 16, 2025
9318009
merge main
nehrao1 Mar 14, 2025
9dd5907
fix merge, remove unused imports, remove whitespace
nehrao1 Mar 14, 2025
b41558c
fixes to minimize diff
nehrao1 Mar 14, 2025
2f44f73
fix build issues
nehrao1 Mar 17, 2025
e773a1e
start adding thinclient endpoints
nehrao1 Mar 18, 2025
5def354
route requests to thin client store model
nehrao1 Mar 20, 2025
ef621a5
fix issue causing encoding failure
nehrao1 Mar 24, 2025
ea75b0d
working without hardcoding RNTBD tokens
nehrao1 Apr 1, 2025
9f85a01
cleanup
nehrao1 Apr 1, 2025
823aad9
get globalDatabaseAccountName from GlobalEndpointManager
nehrao1 Apr 1, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -168,12 +168,12 @@ public void http2MaxConcurrentStreams() {
@Test(groups = { "unit" })
public void thinClientEnabledTest() {
Configs config = new Configs();
assertThat(config.getThinclientEnabled()).isFalse();
assertThat(config.isThinClientEnabled()).isFalse();

System.clearProperty("COSMOS.THINCLIENT_ENABLED");
System.setProperty("COSMOS.THINCLIENT_ENABLED", "true");
try {
assertThat(config.getThinclientEnabled()).isTrue();
assertThat(config.isThinClientEnabled()).isTrue();
} finally {
System.clearProperty("COSMOS.THINCLIENT_ENABLED");
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package com.azure.cosmos.implementation;

import com.azure.cosmos.ConsistencyLevel;
import com.azure.cosmos.CosmosAsyncClient;
import com.azure.cosmos.CosmosAsyncContainer;
import com.azure.cosmos.CosmosClientBuilder;
import com.azure.cosmos.implementation.throughputControl.TestItem;
import com.azure.cosmos.models.CosmosItemResponse;
import com.azure.cosmos.models.PartitionKey;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import org.testng.annotations.Test;

import java.util.UUID;

import static java.lang.Thread.sleep;

public class ThinClientTest {

@Test
public void testThinclientHttp2() {
try {
System.setProperty(Configs.THINCLIENT_ENABLED, "true");
System.setProperty(Configs.HTTP2_ENABLED, "true");

CosmosAsyncClient client = new CosmosClientBuilder()
.key(TestConfigurations.MASTER_KEY)
.endpoint(TestConfigurations.HOST)
.gatewayMode()
.consistencyLevel(ConsistencyLevel.SESSION)
.buildAsyncClient();

CosmosAsyncContainer container = client.getDatabase("updatedd-thin-client-test-db").getContainer("thin-client-test-container-1");
TestItem testItem = TestItem.createNewItem();
System.out.println(testItem.getId());
container.createItem(testItem).block();
container.readItem(testItem.getId(), new PartitionKey(testItem.getPk()), TestItem.class).block();
container.deleteItem(testItem.getId(), new PartitionKey(testItem.getPk())).block();
} finally {
System.clearProperty(Configs.THINCLIENT_ENABLED);
System.clearProperty(Configs.HTTP2_ENABLED);
}

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

public class TestItem {
private String id;
private String pk;
private String mypk;
private String prop;

Expand All @@ -15,6 +16,7 @@ public TestItem() {

public TestItem(String id, String mypk, String prop) {
this.id = id;
this.pk = mypk;
this.mypk = mypk;
this.prop = prop;
}
Expand All @@ -31,6 +33,8 @@ public void setId(String id) {
this.id = id;
}

public String getPk() { return pk; }

public String getMypk() {
return mypk;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,10 +46,10 @@ public class Configs {
private static final String UNAVAILABLE_LOCATIONS_EXPIRATION_TIME_IN_SECONDS = "COSMOS.UNAVAILABLE_LOCATIONS_EXPIRATION_TIME_IN_SECONDS";
private static final String GLOBAL_ENDPOINT_MANAGER_INITIALIZATION_TIME_IN_SECONDS = "COSMOS.GLOBAL_ENDPOINT_MANAGER_MAX_INIT_TIME_IN_SECONDS";
private static final String DEFAULT_THINCLIENT_ENDPOINT = "";
private static final String THINCLIENT_ENDPOINT = "COSMOS.THINCLIENT_ENDPOINT";
public static final String THINCLIENT_ENDPOINT = "COSMOS.THINCLIENT_ENDPOINT";
private static final String THINCLIENT_ENDPOINT_VARIABLE = "COSMOS_THINCLIENT_ENDPOINT";
private static final boolean DEFAULT_THINCLIENT_ENABLED = false;
private static final String THINCLIENT_ENABLED = "COSMOS.THINCLIENT_ENABLED";
public static final String THINCLIENT_ENABLED = "COSMOS.THINCLIENT_ENABLED";
private static final String THINCLIENT_ENABLED_VARIABLE = "COSMOS_THINCLIENT_ENABLED";

private static final String MAX_HTTP_BODY_LENGTH_IN_BYTES = "COSMOS.MAX_HTTP_BODY_LENGTH_IN_BYTES";
Expand Down Expand Up @@ -312,7 +312,7 @@ public class Configs {

// Flag to indicate whether enabled http2 for gateway
private static final boolean DEFAULT_HTTP2_ENABLED = false;
private static final String HTTP2_ENABLED = "COSMOS.HTTP2_ENABLED";
public static final String HTTP2_ENABLED = "COSMOS.HTTP2_ENABLED";
private static final String HTTP2_ENABLED_VARIABLE = "COSMOS_HTTP2_ENABLED";

// Config to indicate the maximum number of live connections to keep in the pool for http2
Expand Down Expand Up @@ -434,7 +434,7 @@ public URI getThinclientEndpoint() {
return URI.create(DEFAULT_THINCLIENT_ENDPOINT);
}

public static boolean getThinclientEnabled() {
public static boolean isThinClientEnabled() {
String valueFromSystemProperty = System.getProperty(THINCLIENT_ENABLED);
if (valueFromSystemProperty != null && !valueFromSystemProperty.isEmpty()) {
return Boolean.parseBoolean(valueFromSystemProperty);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,8 @@ public static final class Properties {
public static final String Name = "name";
public static final String WRITABLE_LOCATIONS = "writableLocations";
public static final String READABLE_LOCATIONS = "readableLocations";
public static final String THINCLIENT_WRITABLE_LOCATIONS = "thinClientWritableLocations";
public static final String THINCLIENT_READABLE_LOCATIONS = "thinClientReadableLocations";
public static final String DATABASE_ACCOUNT_ENDPOINT = "databaseAccountEndpoint";

//Authorization
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -251,6 +251,46 @@ public void setReadableLocations(Iterable<DatabaseAccountLocation> locations) {
this.set(Constants.Properties.READABLE_LOCATIONS, locations);
}

/**
* Gets the list of thin client readable locations for this database account.
*
* @return the list of thin client readable locations.
*/
public Iterable<DatabaseAccountLocation> getThinClientReadableLocations() {
return super.getCollection(Constants.Properties.THINCLIENT_READABLE_LOCATIONS, DatabaseAccountLocation.class);
}

/**
* Sets the list of thin client readable locations for this database account.
* <p>
* The list of thin client readable locations are returned by the service.
*
* @param locations the list of thin client readable locations.
*/
public void setThinClientReadableLocations(Iterable<DatabaseAccountLocation> locations) {
this.set(Constants.Properties.THINCLIENT_READABLE_LOCATIONS, locations);
}

/**
* Gets the list of thin client writable locations for this database account.
*
* @return the list of thin client writable locations.
*/
public Iterable<DatabaseAccountLocation> getThinClientWritableLocations() {
return super.getCollection(Constants.Properties.THINCLIENT_WRITABLE_LOCATIONS, DatabaseAccountLocation.class);
}

/**
* Sets the list of thin client writable locations for this database account.
* <p>
* The list of thin client writable locations are returned by the service.
*
* @param locations the list of thin clientwritable locations.
*/
public void setThinClientWritableLocations(Iterable<DatabaseAccountLocation> locations) {
this.set(Constants.Properties.THINCLIENT_WRITABLE_LOCATIONS, locations);
}

/**
* Gets if enable multiple write locations is set.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -330,8 +330,10 @@ private Mono<Void> startRefreshLocationTimerAsync(boolean initialization) {
}

logger.debug("startRefreshLocationTimerAsync() - Invoking refresh, I was registered on [{}]", now);
Mono<DatabaseAccount> databaseAccountObs = GlobalEndpointManager.getDatabaseAccountFromAnyLocationsAsync(this.defaultEndpoint, new ArrayList<>(this.getEffectivePreferredRegions()),
this::getDatabaseAccountAsync);
Mono<DatabaseAccount> databaseAccountObs = GlobalEndpointManager.getDatabaseAccountFromAnyLocationsAsync(
this.defaultEndpoint,
new ArrayList<>(this.getEffectivePreferredRegions()),
this::getDatabaseAccountAsync);

return databaseAccountObs.flatMap(dbAccount -> {
logger.info("db account retrieved {}", dbAccount);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -255,6 +255,8 @@ public static class HttpHeaders {
public static final String POPULATE_INDEX_METRICS = "x-ms-cosmos-populateindexmetrics";
public static final String INDEX_UTILIZATION = "x-ms-cosmos-index-utilization";
public static final String QUERY_EXECUTION_INFO = "x-ms-cosmos-query-execution-info";
public static final String START_EPK_HASH = "x-ms-cosmos-start-epk-hash";
public static final String END_EPK_HASH = "x-ms-cosmos-end-epk-hash";

// Batch operations
public static final String IS_BATCH_ATOMIC = "x-ms-cosmos-batch-atomic";
Expand Down Expand Up @@ -283,11 +285,12 @@ public static class HttpHeaders {
// Priority Level for throttling
public static final String PRIORITY_LEVEL = "x-ms-cosmos-priority-level";

public static final String GLOBAL_DATABASE_ACCOUNT_NAME = "GlobalDatabaseAccountName";

// Thinclient headers
public static final String THINCLIENT_PROXY_OPERATION_TYPE = "x-ms-thinclient-proxy-operation-type";
public static final String THINCLIENT_PROXY_RESOURCE_TYPE = "x-ms-thinclient-proxy-resource-type";

public static final String GLOBAL_DATABASE_ACCOUNT_NAME = "GlobalDatabaseAccountName";
public static final String THINCLIENT_OPT_IN = "x-ms-cosmos-use-thinclient";
}

public static class A_IMHeaderValues {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@
import com.azure.cosmos.implementation.query.PipelinedQueryExecutionContextBase;
import com.azure.cosmos.implementation.query.QueryInfo;
import com.azure.cosmos.implementation.routing.CollectionRoutingMap;
import com.azure.cosmos.implementation.routing.LocationCache;
import com.azure.cosmos.implementation.routing.PartitionKeyAndResourceTokenPair;
import com.azure.cosmos.implementation.routing.PartitionKeyInternal;
import com.azure.cosmos.implementation.routing.PartitionKeyInternalHelper;
Expand Down Expand Up @@ -211,6 +212,7 @@ public class RxDocumentClientImpl implements AsyncDocumentClient, IAuthorization
private String firstResourceTokenFromPermissionFeed = StringUtils.EMPTY;
private RxClientCollectionCache collectionCache;
private RxGatewayStoreModel gatewayProxy;
private RxGatewayStoreModel thinProxy;
private RxStoreModel storeModel;
private GlobalAddressResolver addressResolver;
private RxPartitionKeyRangeCache partitionKeyRangeCache;
Expand Down Expand Up @@ -261,6 +263,7 @@ public class RxDocumentClientImpl implements AsyncDocumentClient, IAuthorization
private final boolean isRegionScopedSessionCapturingEnabledOnClientOrSystemConfig;
private List<CosmosOperationPolicy> operationPolicies;
private AtomicReference<CosmosAsyncClient> cachedCosmosAsyncClientSnapshot;
private final boolean isThinClientEnabled;

public RxDocumentClientImpl(URI serviceEndpoint,
String masterKeyOrResourceToken,
Expand Down Expand Up @@ -489,6 +492,7 @@ private RxDocumentClientImpl(URI serviceEndpoint,
this.connectionSharingAcrossClientsEnabled = connectionSharingAcrossClientsEnabled;
this.configs = configs;
this.masterKeyOrResourceToken = masterKeyOrResourceToken;
this.isThinClientEnabled = Configs.isThinClientEnabled();
this.serviceEndpoint = serviceEndpoint;
this.credential = credential;
this.tokenCredential = tokenCredential;
Expand Down Expand Up @@ -669,6 +673,14 @@ private void updateGatewayProxy() {
(this.gatewayProxy).setSessionContainer(this.sessionContainer);
}

private void updateThinProxy() {
(this.thinProxy).setGatewayServiceConfigurationReader(this.gatewayConfigurationReader);
(this.thinProxy).setCollectionCache(this.collectionCache);
(this.thinProxy).setPartitionKeyRangeCache(this.partitionKeyRangeCache);
(this.thinProxy).setUseMultipleWriteLocations(this.useMultipleWriteLocations);
(this.thinProxy).setSessionContainer(this.sessionContainer);
}

public void init(CosmosClientMetadataCachesSnapshot metadataCachesSnapshot, Function<HttpClient, HttpClient> httpClientInterceptor) {
try {

Expand All @@ -685,6 +697,12 @@ public void init(CosmosClientMetadataCachesSnapshot metadataCachesSnapshot, Func
this.reactorHttpClient,
this.apiType);

this.thinProxy = createThinProxy(this.sessionContainer,
this.consistencyLevel,
this.userAgentContainer,
this.globalEndpointManager,
this.reactorHttpClient);

this.globalEndpointManager.init();

DatabaseAccount databaseAccountSnapshot = this.initializeGatewayConfigurationReader();
Expand Down Expand Up @@ -712,6 +730,7 @@ public void init(CosmosClientMetadataCachesSnapshot metadataCachesSnapshot, Func
collectionCache);

updateGatewayProxy();
updateThinProxy();
clientTelemetry = new ClientTelemetry(
this,
null,
Expand Down Expand Up @@ -827,6 +846,20 @@ RxGatewayStoreModel createRxGatewayProxy(ISessionContainer sessionContainer,
apiType);
}

ThinClientStoreModel createThinProxy(ISessionContainer sessionContainer,
ConsistencyLevel consistencyLevel,
UserAgentContainer userAgentContainer,
GlobalEndpointManager globalEndpointManager,
HttpClient httpClient) {
return new ThinClientStoreModel(
this,
sessionContainer,
consistencyLevel,
userAgentContainer,
globalEndpointManager,
httpClient);
}

private HttpClient httpClient() {
HttpClientConfig httpClientConfig = new HttpClientConfig(this.configs)
.withMaxIdleConnectionTimeout(this.connectionPolicy.getIdleHttpConnectionTimeout())
Expand Down Expand Up @@ -1870,6 +1903,8 @@ private Mono<Tuple2<RxDocumentServiceRequest, Utils.ValueHolder<DocumentCollecti
getEffectiveClientContext(clientContextOverride),
operationType, ResourceType.Document, path, requestHeaders, options, content);

request.useThinProxy = Configs.isThinClientEnabled() && this.connectionPolicy.getConnectionMode() == ConnectionMode.GATEWAY ? true : false;

if (operationType.isWriteOperation() && options != null && options.getNonIdempotentWriteRetriesEnabled() != null && options.getNonIdempotentWriteRetriesEnabled()) {
request.setNonIdempotentWriteRetriesEnabled(true);
}
Expand Down Expand Up @@ -2033,6 +2068,10 @@ private RxDocumentServiceRequest addBatchHeaders(RxDocumentServiceRequest reques
* @return Mono, which on subscription will populate the headers in the request passed in the argument.
*/
public Mono<RxDocumentServiceRequest> populateHeadersAsync(RxDocumentServiceRequest request, RequestVerb httpMethod) {
// if thin client enabled, populate thin client header so we can get thin client read and writeable locations
if (request.useThinProxy) {
request.getHeaders().put(HttpConstants.HttpHeaders.THINCLIENT_OPT_IN, "true");
}
request.getHeaders().put(HttpConstants.HttpHeaders.X_DATE, Utils.nowAsRFC1123());
if (this.masterKeyOrResourceToken != null || this.resourceTokensMap != null
|| this.cosmosAuthorizationTokenResolver != null || this.credential != null) {
Expand Down Expand Up @@ -3405,6 +3444,7 @@ private Mono<ResourceResponse<Document>> readDocumentInternal(
getEffectiveClientContext(clientContextOverride),
OperationType.Read, ResourceType.Document, path, requestHeaders, options);

request.useThinProxy = Configs.isThinClientEnabled() && this.connectionPolicy.getConnectionMode() == ConnectionMode.GATEWAY ? true : false;
DocumentServiceRequestContext requestContext = request.requestContext;

options.getMarkE2ETimeoutInRequestContextCallbackHook().set(
Expand Down Expand Up @@ -5696,6 +5736,7 @@ public Flux<DatabaseAccount> getDatabaseAccountFromEndpoint(URI endpoint) {
return Flux.defer(() -> {
RxDocumentServiceRequest request = RxDocumentServiceRequest.create(this,
OperationType.Read, ResourceType.DatabaseAccount, "", null, (Object) null);
request.useThinProxy = this.isThinClientEnabled && this.connectionPolicy.getConnectionMode() == ConnectionMode.GATEWAY ? true : false;
return this.populateHeadersAsync(request, RequestVerb.GET)
.flatMap(requestPopulated -> {

Expand All @@ -5721,6 +5762,15 @@ public Flux<DatabaseAccount> getDatabaseAccountFromEndpoint(URI endpoint) {
* @return RxStoreModel
*/
private RxStoreModel getStoreProxy(RxDocumentServiceRequest request) {
// TODO: remove, for testing
if (request.isMetadataRequest()) {
return this.gatewayProxy;
}

if (request.useThinProxy) {
return this.thinProxy;
}

// If a request is configured to always use GATEWAY mode(in some cases when targeting .NET Core)
// we return the GATEWAY store model
if (request.useGatewayMode) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ public class RxDocumentServiceRequest implements Cloneable {
public String throughputControlGroupName;
public volatile boolean intendedCollectionRidPassedIntoSDK = false;
private volatile Duration responseTimeout;
public volatile boolean useThinProxy = false;

private volatile boolean nonIdempotentWriteRetriesEnabled = false;

Expand Down Expand Up @@ -1185,9 +1186,11 @@ public void setEffectivePartitionKey(String effectivePartitionKey) {
this.effectivePartitionKey = effectivePartitionKey;
}

public void setThinclientHeaders(String operationType, String resourceType) {
public void setThinclientHeaders(String operationType, String resourceType, String globalDatabaseAccountName, String resourceId) {
this.headers.put(HttpConstants.HttpHeaders.THINCLIENT_PROXY_OPERATION_TYPE, operationType);
this.headers.put(HttpConstants.HttpHeaders.THINCLIENT_PROXY_RESOURCE_TYPE, resourceType);
this.headers.put(HttpConstants.HttpHeaders.GLOBAL_DATABASE_ACCOUNT_NAME, globalDatabaseAccountName);
this.headers.put(WFConstants.BackendHeaders.COLLECTION_RID, resourceId);
}

public RxDocumentServiceRequest setHttpTransportSerializer(HttpTransportSerializer transportSerializer) {
Expand Down
Loading
Loading