Skip to content

Commit 0f976ef

Browse files
Adding preferred region option in ctl workload for DR drill (Azure#23115)
* Adding preferred region option in ctl workload for DR drill * Adding preferred list config for all workloads * resolving comments
1 parent 7410409 commit 0f976ef

File tree

6 files changed

+46
-10
lines changed

6 files changed

+46
-10
lines changed

sdk/cosmos/azure-cosmos-benchmark/ctl/run_benchmark.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,9 +95,9 @@ additional_benchmark_options="-documentDataFieldSize 10 -documentDataFieldCount
9595
additional_benchmark_options="$additional_benchmark_options -maxConnectionPoolSize $gateway_connection_poolsize"
9696

9797
if [ -z "$ctl_graphite_endpoint" ]; then
98-
java -Xmx8g -Xms8g $jvm_opt -Dcosmos.directModeProtocol=$protocol -Dazure.cosmos.directModeProtocol=$protocol -DCOSMOS.ENVIRONMENT_NAME=$ctl_env -DCOSMOS.CLIENT_TELEMETRY_ENDPOINT=$ctl_client_telemetry_endpoint -jar "$jar_file" -serviceEndpoint "$service_endpoint" -masterKey "$master_key" -databaseId "$db_name" -collectionId "$col_name" -readWriteQueryPct "$read_write_query_pct" -diagnosticsThresholdDuration "$diagnostics_threshold_duration" -numberOfCollectionForCtl "$number_Of_collection" -throughput $throughput -consistencyLevel $consistency_level -concurrency $concurrency -numberOfOperations $number_of_operations -operation $operation -connectionMode $connection_mode -maxRunningTimeDuration $max_running_time_duration -numberOfPreCreatedDocuments $number_of_precreated_documents $additional_benchmark_options 2>&1 | tee -a "$log_filename"
98+
java -Xmx8g -Xms8g $jvm_opt -Dcosmos.directModeProtocol=$protocol -Dazure.cosmos.directModeProtocol=$protocol -DCOSMOS.ENVIRONMENT_NAME=$ctl_env -DCOSMOS.CLIENT_TELEMETRY_ENDPOINT=$ctl_client_telemetry_endpoint -jar "$jar_file" -serviceEndpoint "$service_endpoint" -masterKey "$master_key" -databaseId "$db_name" -collectionId "$col_name" -readWriteQueryPct "$read_write_query_pct" -diagnosticsThresholdDuration "$diagnostics_threshold_duration" -numberOfCollectionForCtl "$number_Of_collection" -throughput $throughput -consistencyLevel $consistency_level -concurrency $concurrency -numberOfOperations $number_of_operations -operation $operation -connectionMode $connection_mode -maxRunningTimeDuration $max_running_time_duration -numberOfPreCreatedDocuments $number_of_precreated_documents -preferredRegionsList $ctl_preferred_regions $additional_benchmark_options 2>&1 | tee -a "$log_filename"
9999
else
100-
java -Xmx8g -Xms8g $jvm_opt -Dcosmos.directModeProtocol=$protocol -Dazure.cosmos.directModeProtocol=$protocol -DCOSMOS.ENVIRONMENT_NAME=$ctl_env -DCOSMOS.CLIENT_TELEMETRY_ENDPOINT=$ctl_client_telemetry_endpoint -jar "$jar_file" -serviceEndpoint "$service_endpoint" -masterKey "$master_key" -databaseId "$db_name" -collectionId "$col_name" -readWriteQueryPct "$read_write_query_pct" -diagnosticsThresholdDuration "$diagnostics_threshold_duration" -numberOfCollectionForCtl "$number_Of_collection" -throughput $throughput -consistencyLevel $consistency_level -concurrency $concurrency -numberOfOperations $number_of_operations -operation $operation -connectionMode $connection_mode -maxRunningTimeDuration $max_running_time_duration -graphiteEndpoint $ctl_graphite_endpoint -numberOfPreCreatedDocuments $number_of_precreated_documents $ctl_accountNameInGraphiteReporter $additional_benchmark_options 2>&1 | tee -a "$log_filename"
100+
java -Xmx8g -Xms8g $jvm_opt -Dcosmos.directModeProtocol=$protocol -Dazure.cosmos.directModeProtocol=$protocol -DCOSMOS.ENVIRONMENT_NAME=$ctl_env -DCOSMOS.CLIENT_TELEMETRY_ENDPOINT=$ctl_client_telemetry_endpoint -jar "$jar_file" -serviceEndpoint "$service_endpoint" -masterKey "$master_key" -databaseId "$db_name" -collectionId "$col_name" -readWriteQueryPct "$read_write_query_pct" -diagnosticsThresholdDuration "$diagnostics_threshold_duration" -numberOfCollectionForCtl "$number_Of_collection" -throughput $throughput -consistencyLevel $consistency_level -concurrency $concurrency -numberOfOperations $number_of_operations -operation $operation -connectionMode $connection_mode -maxRunningTimeDuration $max_running_time_duration -graphiteEndpoint $ctl_graphite_endpoint -numberOfPreCreatedDocuments $number_of_precreated_documents -preferredRegionsList $ctl_preferred_regions $ctl_accountNameInGraphiteReporter $additional_benchmark_options 2>&1 | tee -a "$log_filename"
101101
fi
102102

103103
end=$(date +%s)

sdk/cosmos/azure-cosmos-benchmark/src/main/java/com/azure/cosmos/benchmark/AsynReadWithMultipleClients.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,7 @@ private void createClients() {
194194
CosmosClientBuilder cosmosClientBuilder = new CosmosClientBuilder()
195195
.endpoint(endpoint)
196196
.key(key)
197+
.preferredRegions(this.configuration.getPreferredRegionsList())
197198
.consistencyLevel(configuration.getConsistencyLevel())
198199
.connectionSharingAcrossClientsEnabled(true)
199200
.contentResponseOnWriteEnabled(Boolean.parseBoolean(configuration.isContentResponseOnWriteEnabled()));

sdk/cosmos/azure-cosmos-benchmark/src/main/java/com/azure/cosmos/benchmark/AsyncBenchmark.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ abstract class AsyncBenchmark<T> {
7979
CosmosClientBuilder cosmosClientBuilder = new CosmosClientBuilder()
8080
.endpoint(cfg.getServiceEndpoint())
8181
.key(cfg.getMasterKey())
82+
.preferredRegions(cfg.getPreferredRegionsList())
8283
.consistencyLevel(cfg.getConsistencyLevel())
8384
.contentResponseOnWriteEnabled(Boolean.parseBoolean(cfg.isContentResponseOnWriteEnabled()));
8485
if (cfg.getConnectionMode().equals(ConnectionMode.DIRECT)) {

sdk/cosmos/azure-cosmos-benchmark/src/main/java/com/azure/cosmos/benchmark/Configuration.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,9 @@
2727
import java.net.InetAddress;
2828
import java.net.UnknownHostException;
2929
import java.time.Duration;
30+
import java.util.ArrayList;
3031
import java.util.Arrays;
32+
import java.util.List;
3133

3234
public class Configuration {
3335

@@ -91,6 +93,10 @@ public class Configuration {
9193
@Parameter(names = "-manageDatabase", description = "Control switch for creating/deleting underlying database resource")
9294
private boolean manageDatabase = false;
9395

96+
@Parameter(names = "-preferredRegionsList", listConverter = PreferredRegionsConverter.class, description = "Comma" +
97+
" separated preferred regions list")
98+
private List<String> preferredRegionsList;
99+
94100
@Parameter(names = "-operation", description = "Type of Workload:\n"
95101
+ "\tReadThroughput- run a READ workload that prints only throughput *\n"
96102
+ "\tReadThroughputWithMultipleClients - run a READ workload that prints throughput and latency for multiple client read.*\n"
@@ -445,6 +451,10 @@ public String toString() {
445451
return ToStringBuilder.reflectionToString(this, ToStringStyle.MULTI_LINE_STYLE);
446452
}
447453

454+
public List<String> getPreferredRegionsList() {
455+
return preferredRegionsList;
456+
}
457+
448458
public void tryGetValuesFromSystem() {
449459
serviceEndpoint = StringUtils.defaultString(Strings.emptyToNull(System.getenv().get("SERVICE_END_POINT")),
450460
serviceEndpoint);
@@ -483,6 +493,11 @@ public void tryGetValuesFromSystem() {
483493
String throughputValue = StringUtils.defaultString(
484494
Strings.emptyToNull(System.getenv().get("THROUGHPUT")), Integer.toString(throughput));
485495
throughput = Integer.parseInt(throughputValue);
496+
497+
if (StringUtils.isNotEmpty(System.getenv().get("PREFERRED_REGIONS_LIST"))) {
498+
PreferredRegionsConverter preferredRegionsConverter = new PreferredRegionsConverter();
499+
preferredRegionsList = preferredRegionsConverter.convert(System.getenv().get("PREFERRED_REGIONS_LIST"));
500+
}
486501
}
487502

488503
private synchronized MeterRegistry azureMonitorMeterRegistry(String instrumentationKey) {
@@ -592,4 +607,18 @@ public String[] tagsAsPrefix() {
592607

593608
return this.graphiteMeterRegistry;
594609
}
610+
611+
private class PreferredRegionsConverter implements IStringConverter<List<String>> {
612+
@Override
613+
public List<String> convert(String preferredRegionsList) {
614+
List<String> preferredRegions = null;
615+
if (StringUtils.isNotEmpty(preferredRegionsList)) {
616+
String[] preferredArray = preferredRegionsList.split(",");
617+
if (preferredArray != null && preferredArray.length > 0) {
618+
preferredRegions = new ArrayList<>(Arrays.asList(preferredArray));
619+
}
620+
}
621+
return preferredRegions;
622+
}
623+
}
595624
}

sdk/cosmos/azure-cosmos-benchmark/src/main/java/com/azure/cosmos/benchmark/SyncBenchmark.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ public T apply(T o, Throwable throwable) {
106106

107107
CosmosClientBuilder cosmosClientBuilder = new CosmosClientBuilder()
108108
.endpoint(cfg.getServiceEndpoint())
109+
.preferredRegions(cfg.getPreferredRegionsList())
109110
.key(cfg.getMasterKey())
110111
.consistencyLevel(cfg.getConsistencyLevel())
111112
.contentResponseOnWriteEnabled(Boolean.parseBoolean(cfg.isContentResponseOnWriteEnabled()));

sdk/cosmos/azure-cosmos-benchmark/src/main/java/com/azure/cosmos/benchmark/ctl/AsyncCtlWorkload.java

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,18 @@
3131
import com.codahale.metrics.jvm.GarbageCollectorMetricSet;
3232
import com.codahale.metrics.jvm.MemoryUsageGaugeSet;
3333
import io.micrometer.core.instrument.MeterRegistry;
34+
import org.apache.commons.lang3.RandomStringUtils;
35+
import org.apache.commons.lang3.StringUtils;
36+
import org.mpierce.metrics.reservoir.hdrhistogram.HdrHistogramResetOnSnapshotReservoir;
37+
import org.slf4j.Logger;
38+
import org.slf4j.LoggerFactory;
39+
import reactor.core.publisher.BaseSubscriber;
40+
import reactor.core.publisher.Flux;
41+
import reactor.core.publisher.Mono;
42+
import reactor.core.scheduler.Schedulers;
43+
3444
import java.util.ArrayList;
45+
import java.util.Arrays;
3546
import java.util.HashMap;
3647
import java.util.List;
3748
import java.util.Map;
@@ -40,14 +51,6 @@
4051
import java.util.concurrent.Semaphore;
4152
import java.util.concurrent.TimeUnit;
4253
import java.util.concurrent.atomic.AtomicLong;
43-
import org.apache.commons.lang3.RandomStringUtils;
44-
import org.mpierce.metrics.reservoir.hdrhistogram.HdrHistogramResetOnSnapshotReservoir;
45-
import org.slf4j.Logger;
46-
import org.slf4j.LoggerFactory;
47-
import reactor.core.publisher.BaseSubscriber;
48-
import reactor.core.publisher.Flux;
49-
import reactor.core.publisher.Mono;
50-
import reactor.core.scheduler.Schedulers;
5154

5255

5356
public class AsyncCtlWorkload {
@@ -87,6 +90,7 @@ public AsyncCtlWorkload(Configuration cfg) {
8790
CosmosClientBuilder cosmosClientBuilder = new CosmosClientBuilder()
8891
.endpoint(cfg.getServiceEndpoint())
8992
.key(cfg.getMasterKey())
93+
.preferredRegions(cfg.getPreferredRegionsList())
9094
.consistencyLevel(cfg.getConsistencyLevel())
9195
.clientTelemetryEnabled(true)
9296
.contentResponseOnWriteEnabled(Boolean.parseBoolean(cfg.isContentResponseOnWriteEnabled()));

0 commit comments

Comments
 (0)