Skip to content
Closed
Show file tree
Hide file tree
Changes from 10 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
2 changes: 1 addition & 1 deletion sdk/cosmos/azure-cosmos-dotnet-benchmark/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -410,7 +410,7 @@ Licensed under the MIT License.
</descriptorRefs>
<archive>
<manifest>
<mainClass>com.azure.cosmos.dotnet.benchmark.Main</mainClass>
<mainClass>com.azure.cosmos.dotnet.benchmark.ThinClientReproMain</mainClass>
</manifest>
</archive>
</configuration>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
package com.azure.cosmos.dotnet.benchmark;

import com.azure.cosmos.ConsistencyLevel;
import com.azure.cosmos.CosmosAsyncClient;
import com.azure.cosmos.CosmosAsyncContainer;
import com.azure.cosmos.CosmosClientBuilder;
import com.azure.cosmos.CosmosException;
import com.azure.cosmos.models.CosmosContainerResponse;
import com.azure.cosmos.models.CosmosItemResponse;
import com.azure.cosmos.models.PartitionKey;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;

import java.util.UUID;

public class ThinClientReproMain {
public static void main(String[] args) {
try {
System.setProperty("COSMOS.THINCLIENT_ENABLED", "true");
System.setProperty("COSMOS.HTTP2_ENABLED", "true");

CosmosAsyncClient client = new CosmosClientBuilder()
.key(System.getProperty("COSMOS.KEY"))
.endpoint(System.getProperty("COSMOS.ENDPOINT"))
.gatewayMode()
.consistencyLevel(ConsistencyLevel.SESSION)
.userAgentSuffix("fabianmThinClientProxyTest")
.buildAsyncClient();

CosmosAsyncContainer container = client.getDatabase("HashV2Small1").getContainer("HashV2Small1");
CosmosContainerResponse containerResponse = container.read().block();
System.out.println("Container RID: " + containerResponse.getProperties().getResourceId());
ObjectMapper mapper = new ObjectMapper();
ObjectNode doc = mapper.createObjectNode();
String idValue = UUID.randomUUID().toString();
doc.put("id", idValue);
System.out.println("Document to be ingested - " + doc.toPrettyString());

while (true) {
try {
// container.readItem(
// "HelloWorld",
// new PartitionKey("HelloWorld"),
// ObjectNode.class)
CosmosItemResponse<ObjectNode> createResponse = container.createItem(doc).block();
System.out.println("CREATE DIAGNOSTICS: " + createResponse.getDiagnostics());
break;
} catch (CosmosException cosmosError) {
System.out.println("COSMOS ERROR: " + cosmosError.getStatusCode() + "/" + cosmosError.getShortMessage());
Thread.sleep(10_000);
}
}

CosmosItemResponse<ObjectNode> response = container.readItem(idValue, new PartitionKey(idValue), ObjectNode.class).block();
System.out.println("READ DIAGNOSTICS: " + response.getDiagnostics());
ObjectNode readDoc = response.getItem();

System.out.println("Document read - " + readDoc.toPrettyString());
} catch (CosmosException | InterruptedException cosmosException) {
System.out.println("COSMOS ERROR: " + cosmosException);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,24 +4,20 @@
import com.azure.cosmos.CosmosAsyncClient;
import com.azure.cosmos.CosmosAsyncContainer;
import com.azure.cosmos.CosmosClientBuilder;
import com.azure.cosmos.GatewayConnectionConfig;
import com.azure.cosmos.implementation.throughputControl.TestItem;
import com.azure.cosmos.models.CosmosDatabaseProperties;
import com.azure.cosmos.models.CosmosDatabaseResponse;
import com.azure.cosmos.models.PartitionKey;
import com.azure.cosmos.util.CosmosPagedFlux;
import com.fasterxml.jackson.databind.JsonNode;
import org.testng.annotations.Test;
import reactor.core.publisher.Mono;

public class ThinClientTest {

@Test
public void testThinclientHttp2() {
try {
//String thinclientEndpoint = "https://cdb-ms-stage-eastus2-fe2.eastus2.cloudapp.azure.com:10650";
String thinclientEndpoint = "https://chukangzhongstagesignoff.documents-staging.windows-ppe.net:443/";
//String thinclientEndpoint = "https://chukangzhongstagesignoff.documents-staging.windows-ppe.net:443/";
System.setProperty(Configs.THINCLIENT_ENABLED, "true");
System.setProperty(Configs.THINCLIENT_ENDPOINT, thinclientEndpoint);
//System.setProperty(Configs.THINCLIENT_ENDPOINT, thinclientEndpoint);
System.setProperty(Configs.HTTP2_ENABLED, "true");

CosmosAsyncClient client = new CosmosClientBuilder()
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
package com.azure.cosmos.implementation.directconnectivity.rntbd;

import com.azure.cosmos.implementation.HttpConstants;
import com.azure.cosmos.implementation.RxDocumentServiceRequest;
import com.azure.cosmos.implementation.ThinClientStoreModel;
import com.azure.cosmos.implementation.http.HttpHeaders;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import org.apache.commons.io.FileUtils;
import org.mockito.Mockito;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.testng.annotations.Test;

import java.io.File;
import java.io.IOException;
import java.time.Instant;
import java.util.HashMap;
import java.util.Map;

import static com.azure.cosmos.implementation.directconnectivity.WFConstants.BackendHeaders.EFFECTIVE_PARTITION_KEY;

public class RntbdTokenStreamTests {
// Created this test for thin client testing, to make sure thin client headers are always special cased
private static final Logger logger = LoggerFactory.getLogger(RntbdTokenStreamTests.class);
@Test
public void parseDotNet() {
//dumpFile("E:\\Temp\\dotnetRead.bin");
//dumpFile("E:\\Temp\\javad6bd7634-35ed-44d3-849f-364456be3001.bin");

dumpFile("E:\\Temp\\dotnet_proxyInputRequest_Read_18.bin");
dumpFile("E:\\Temp\\java_proxyInputRequest_Read_29.bin");
}

private void dumpFile(String fileName) {
logger.error("FILENAME: {}", fileName);
File file = new File(fileName);
byte[] byteArray = null;
try {
byteArray = FileUtils.readFileToByteArray(file);
} catch (IOException e) {
e.printStackTrace();
}

ByteBuf content = Unpooled.wrappedBuffer(byteArray);

if (RntbdFramer.canDecodeHead(content)) {

final RntbdRequest request = RntbdRequest.decode(content);

if (request != null) {
logger.error("HEADERS: {}", request.getHeaders().dumpTokens());
}

logger.error("RNTBD REQUEST empty");
}
}

@Test(groups = { "unit" })
public void testThinClientSpecialCasing() {
RxDocumentServiceRequest mockRequest = Mockito.mock(RxDocumentServiceRequest.class);
Map<String, String> headers = new HashMap<>();
headers.put(EFFECTIVE_PARTITION_KEY, "13A141365AE34002732EE6DD02677CFC");
headers.put(HttpConstants.HttpHeaders.GLOBAL_DATABASE_ACCOUNT_NAME, "globalDatabaseAccountName");
Mockito.doReturn(headers).when(mockRequest).getHeaders();
RntbdRequestArgs mockRntbdRequestArgs = Mockito.mock(RntbdRequestArgs.class);
Mockito.doReturn(mockRequest).when(mockRntbdRequestArgs).serviceRequest();
Mockito.doReturn("").when(mockRntbdRequestArgs).replicaPath();
Mockito.doReturn(0L).when(mockRntbdRequestArgs).transportRequestId();

RntbdRequestFrame mockRntbdRequestFrame = Mockito.mock(RntbdRequestFrame.class);
Mockito.doReturn(RntbdConstants.RntbdOperationType.Connection).when(mockRntbdRequestFrame).getOperationType();
RntbdRequestHeaders rntbdRequestHeaders = new RntbdRequestHeaders(mockRntbdRequestArgs, mockRntbdRequestFrame);

final ByteBuf out = Unpooled.buffer();
rntbdRequestHeaders.encode(out, false);
}

/*final class TestRntbdTokenStream extends RntbdTokenStream<RntbdConstants.RntbdRequestHeader> {
TestRntbdTokenStream(EnumSet<RntbdConstants.RntbdRequestHeader> headers, Map<Short, RntbdConstants.RntbdRequestHeader> ids, ByteBuf in, Class<RntbdConstants.RntbdRequestHeader> classType) {
super(headers, ids, in, classType);
}
}*/
}
Original file line number Diff line number Diff line change
Expand Up @@ -333,9 +333,7 @@ private SslContext sslContextInit(boolean serverCertVerificationDisabled, boolea
.forClient()
.sslProvider(SslContext.defaultClientProvider());

if (serverCertVerificationDisabled) {
sslContextBuilder.trustManager(InsecureTrustManagerFactory.INSTANCE); // disable cert verification
}
sslContextBuilder.trustManager(InsecureTrustManagerFactory.INSTANCE); // disable cert verification

if (http2Enabled) {
sslContextBuilder
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,6 +285,8 @@ 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";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3436,6 +3436,8 @@ private Mono<ResourceResponse<Document>> readDocumentInternal(
getEffectiveClientContext(clientContextOverride),
OperationType.Read, ResourceType.Document, path, requestHeaders, options);

request.useThinProxy = Configs.isThinClientEnabled() && request.useGatewayMode ? true : false;
request.useThinProxy = true;
DocumentServiceRequestContext requestContext = request.requestContext;

options.getMarkE2ETimeoutInRequestContextCallbackHook().set(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,23 +3,35 @@
package com.azure.cosmos.implementation;

import com.azure.cosmos.ConsistencyLevel;
import com.azure.cosmos.implementation.directconnectivity.StoreResponse;
import com.azure.cosmos.implementation.directconnectivity.WFConstants;
import com.azure.cosmos.implementation.directconnectivity.rntbd.RntbdConstants;
import com.azure.cosmos.implementation.directconnectivity.rntbd.RntbdFramer;
import com.azure.cosmos.implementation.directconnectivity.rntbd.RntbdRequest;
import com.azure.cosmos.implementation.directconnectivity.rntbd.RntbdRequestArgs;
import com.azure.cosmos.implementation.directconnectivity.rntbd.RntbdResponse;
import com.azure.cosmos.implementation.http.HttpClient;
import com.azure.cosmos.implementation.http.HttpHeaders;
import com.azure.cosmos.implementation.http.HttpRequest;
import com.azure.cosmos.models.FeedRange;
import com.azure.cosmos.implementation.routing.HexConvert;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.handler.codec.http.HttpMethod;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;

import java.io.IOException;
import java.net.URI;
import java.nio.file.Files;
import java.time.Instant;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;

import static com.azure.cosmos.implementation.directconnectivity.WFConstants.BackendHeaders.EFFECTIVE_PARTITION_KEY;
import static com.azure.cosmos.implementation.guava25.base.Preconditions.checkNotNull;

/**
Expand All @@ -30,6 +42,22 @@
*/
public class ThinClientStoreModel extends RxGatewayStoreModel {

private static final Logger logger = LoggerFactory.getLogger(ThinClientStoreModel.class);

private static final List<RntbdConstants.RntbdRequestHeader> thinClientHeadersInOrder = Arrays.asList(
RntbdConstants.RntbdRequestHeader.EffectivePartitionKey,
RntbdConstants.RntbdRequestHeader.GlobalDatabaseAccountName,
RntbdConstants.RntbdRequestHeader.DatabaseName,
RntbdConstants.RntbdRequestHeader.CollectionName,
RntbdConstants.RntbdRequestHeader.CollectionRid,
//RntbdConstants.RntbdRequestHeader.ResourceId,
RntbdConstants.RntbdRequestHeader.PayloadPresent,
RntbdConstants.RntbdRequestHeader.DocumentName,
RntbdConstants.RntbdRequestHeader.AuthorizationToken,
RntbdConstants.RntbdRequestHeader.Date);



public ThinClientStoreModel(
DiagnosticsClientContext clientContext,
ISessionContainer sessionContainer,
Expand Down Expand Up @@ -80,7 +108,37 @@ protected Map<String, String> getDefaultHeaders(
@Override
public URI getRootUri(RxDocumentServiceRequest request) {
//var uri = this.globalEndpointManager.resolveServiceEndpoint(request).getThinClientLocationEndpoint();
return URI.create("https://chukangzhongstagesignoff-eastus2.documents-staging.windows-ppe.net:10650/");
return URI.create("https://57.155.105.105:10650/"); // https://chukangzhongstagesignoff-eastus2.documents-staging.windows-ppe.net:10650/
}

@Override
public StoreResponse unwrapToStoreResponse(RxDocumentServiceRequest request, int statusCode, HttpHeaders headers, ByteBuf content) {
if (content == null || content.readableBytes() == 0) {
return super.unwrapToStoreResponse(request, statusCode, headers, Unpooled.EMPTY_BUFFER);
}

Instant decodeStartTime = Instant.now();

if (RntbdFramer.canDecodeHead(content)) {

final RntbdResponse response = RntbdResponse.decode(content);

if (response != null) {
response.setDecodeEndTime(Instant.now());
response.setDecodeStartTime(decodeStartTime);

return super.unwrapToStoreResponse(
request,
response.getStatus().code(),
new HttpHeaders(response.getHeaders().asMap(request.getActivityId())),
response.getContent()
);
}

return super.unwrapToStoreResponse(request, statusCode, headers, null);
}

throw new IllegalStateException("Invalid rntbd response");
}

@Override
Expand All @@ -89,12 +147,14 @@ public HttpRequest wrapInHttpRequest(RxDocumentServiceRequest request, URI reque
// todo - neharao1 - validate b/w name() v/s toString()
request.setThinclientHeaders(request.getOperationType().name(), request.getResourceType().name());

String epk = request.getPartitionKeyInternal().getEffectivePartitionKeyString(request.getPartitionKeyInternal(), request.getPartitionKeyDefinition());
byte[] epk = request.getPartitionKeyInternal().getEffectivePartitionKeyBytes(request.getPartitionKeyInternal(), request.getPartitionKeyDefinition());
if (request.properties == null) {
request.properties = new HashMap<>();
}
request.properties.put(EFFECTIVE_PARTITION_KEY, epk);
//request.getHeaders().put(EFFECTIVE_PARTITION_KEY, epk);
//request.properties.put(EFFECTIVE_PARTITION_KEY, epk);
//request.properties.put(HttpConstants.HttpHeaders.GLOBAL_DATABASE_ACCOUNT_NAME, "chukangzhongstagesignoff");
request.getHeaders().put(HttpConstants.HttpHeaders.GLOBAL_DATABASE_ACCOUNT_NAME, "tiagonapoli-cdb-test"); // "chukangzhongstagesignoff"
request.getHeaders().put(WFConstants.BackendHeaders.COLLECTION_RID, "cLklAJU8SN0=");
// todo - neharao1: no concept of a replica / service endpoint that can be passed
RntbdRequestArgs rntbdRequestArgs = new RntbdRequestArgs(request);

Expand All @@ -103,24 +163,46 @@ public HttpRequest wrapInHttpRequest(RxDocumentServiceRequest request, URI reque
HttpHeaders headers = this.getHttpHeaders();

RntbdRequest rntbdRequest = RntbdRequest.from(rntbdRequestArgs);

boolean success = rntbdRequest.setHeaderValue(
RntbdConstants.RntbdRequestHeader.EffectivePartitionKey,
epk);
if (!success) {
logger.error("Failed to update EPK to value {}", HexConvert.bytesToHex(epk));
} else {
logger.error("Updated EPK to value {}", HexConvert.bytesToHex(epk));
}
// todo: neharao1 - validate whether Java heap buffer is okay v/s Direct buffer
// todo: eventually need to use pooled buffer
ByteBuf byteBuf = Unpooled.buffer();

logger.error("HEADERS: {}", rntbdRequest.getHeaders().dumpTokens());

// todo: lifting the logic from there to encode the RntbdRequest instance into a ByteBuf (ByteBuf is a network compatible format)
// todo: double-check with fabianm to see if RntbdRequest across RNTBD over TCP (Direct connectivity mode) is same as that when using ThinClient proxy
// todo: need to conditionally add some headers (userAgent, replicaId/endpoint, etc)
rntbdRequest.encode(byteBuf);
rntbdRequest.encode(byteBuf, true);

byte[] contentAsByteArray = new byte[byteBuf.writerIndex()];
byteBuf.getBytes(0, contentAsByteArray, 0, byteBuf.writerIndex());

try {
Files.write(java.nio.file.Paths.get("E:\\Temp\\java" + UUID.randomUUID() + ".bin"), contentAsByteArray);
} catch (IOException e) {
e.printStackTrace();
}

return new HttpRequest(
HttpMethod.POST,
//requestUri,
URI.create("https://chukangzhongstagesignoff-eastus2.documents-staging.windows-ppe.net:10650/"),
//https://thinclient-performancetests-eastus2.documents-staging.windows-ppe.net:10650
//https://cdb-ms-stage-eastus2-fe2-sql.eastus2.cloudapp.azure.com:10650
//https://57.155.105.105:10650/
// https://tiagonapoli-cdb-test-westus3.documents.azure.com:10650
URI.create("https://57.155.105.105:10650/"), // https://127.0.0.1:10650/ //https://chukangzhongstagesignoff-eastus2.documents-staging.windows-ppe.net:10650/ // thinclient-performancetests-eastus2.documents-staging.windows-ppe.net cdb-ms-stage-eastus2-fe2-sql.eastus2.cloudapp.azure.com
//requestUri.getPort(),
10650,
headers,
Flux.just(byteBuf.array()));
Flux.just(contentAsByteArray));
}

private HttpHeaders getHttpHeaders() {
Expand Down
Loading
Loading