Skip to content

Commit c9d1e16

Browse files
authored
Adding responseContinuationTokenLimitInKb support to the Spring SDK. (Azure#30980)
* Adding responseContinuationTokenLimitInKb support to the Spring SDK. * Updating the changelog. * Update README.md
1 parent d835b69 commit c9d1e16

File tree

15 files changed

+156
-6
lines changed

15 files changed

+156
-6
lines changed

sdk/cosmos/azure-spring-data-cosmos-test/src/test/java/com/azure/spring/data/cosmos/core/CosmosTemplateIT.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -940,6 +940,24 @@ public void queryWithMaxBufferedItemCount() throws ClassNotFoundException {
940940
assertEquals((int) ReflectionTestUtils.getField(maxBufferedItemCountCosmosTemplate, "maxBufferedItemCount"), 500);
941941
}
942942

943+
@Test
944+
public void queryWithResponseContinuationTokenLimitInKb() throws ClassNotFoundException {
945+
final CosmosConfig config = CosmosConfig.builder()
946+
.responseContinuationTokenLimitInKb(2000)
947+
.build();
948+
final CosmosTemplate responseContinuationTokenLimitInKbCosmosTemplate =
949+
createCosmosTemplate(config, TestConstants.DB_NAME);
950+
951+
final Criteria criteria = Criteria.getInstance(CriteriaType.IS_EQUAL, "firstName",
952+
Collections.singletonList(TEST_PERSON.getFirstName()), Part.IgnoreCaseType.NEVER);
953+
final CosmosQuery query = new CosmosQuery(criteria);
954+
955+
final long count = responseContinuationTokenLimitInKbCosmosTemplate.count(query, containerName);
956+
957+
assertEquals((int) ReflectionTestUtils.getField(responseContinuationTokenLimitInKbCosmosTemplate,
958+
"responseContinuationTokenLimitInKb"), 2000);
959+
}
960+
943961
@Test
944962
public void queryDatabaseWithQueryMerticsEnabled() throws ClassNotFoundException {
945963
final CosmosConfig config = CosmosConfig.builder()

sdk/cosmos/azure-spring-data-cosmos-test/src/test/java/com/azure/spring/data/cosmos/core/ReactiveCosmosTemplateIT.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -615,6 +615,28 @@ public void queryWithMaxBufferedItemCount() throws ClassNotFoundException {
615615
assertEquals((int) ReflectionTestUtils.getField(maxBufferedItemCountCosmosTemplate, "maxBufferedItemCount"), 500);
616616
}
617617

618+
@Test
619+
public void queryWithResponseContinuationTokenLimitInKb() throws ClassNotFoundException {
620+
final CosmosConfig config = CosmosConfig.builder()
621+
.responseContinuationTokenLimitInKb(2000)
622+
.build();
623+
final ReactiveCosmosTemplate responseContinuationTokenLimitInKbCosmosTemplate =
624+
createReactiveCosmosTemplate(config, TestConstants.DB_NAME);
625+
626+
final AuditableEntity entity = new AuditableEntity();
627+
entity.setId(UUID.randomUUID().toString());
628+
629+
auditableRepository.save(entity);
630+
631+
Criteria equals = Criteria.getInstance(CriteriaType.IS_EQUAL, "id", Collections.singletonList(entity.getId()), Part.IgnoreCaseType.NEVER);
632+
final SqlQuerySpec sqlQuerySpec = new FindQuerySpecGenerator().generateCosmos(new CosmosQuery(equals));
633+
final Flux<AuditableEntity> flux = responseContinuationTokenLimitInKbCosmosTemplate.runQuery(sqlQuerySpec, AuditableEntity.class, AuditableEntity.class);
634+
635+
StepVerifier.create(flux).expectNextCount(1).verifyComplete();
636+
assertEquals((int) ReflectionTestUtils.getField(responseContinuationTokenLimitInKbCosmosTemplate,
637+
"responseContinuationTokenLimitInKb"), 2000);
638+
}
639+
618640
@Test
619641
public void queryWithQueryMerticsEnabled() throws ClassNotFoundException {
620642
final CosmosConfig config = CosmosConfig.builder()

sdk/cosmos/azure-spring-data-cosmos-test/src/test/java/com/azure/spring/data/cosmos/repository/SecondaryTestRepositoryConfig.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,9 @@ public class SecondaryTestRepositoryConfig {
4040
@Value("${cosmos.secondary.maxBufferedItemCount}")
4141
private int maxBufferedItemCount;
4242

43+
@Value("${cosmos.secondary.responseContinuationTokenLimitInKb}")
44+
private int responseContinuationTokenLimitInKb;
45+
4346
@Bean
4447
public CosmosClientBuilder secondaryCosmosClientBuilder() {
4548
return new CosmosClientBuilder()
@@ -65,6 +68,7 @@ public ReactiveCosmosTemplate secondaryReactiveCosmosTemplate(@Qualifier("second
6568
.enableQueryMetrics(queryMetricsEnabled)
6669
.maxDegreeOfParallelism(maxDegreeOfParallelism)
6770
.maxBufferedItemCount(maxBufferedItemCount)
71+
.responseContinuationTokenLimitInKb(responseContinuationTokenLimitInKb)
6872
.build();
6973

7074
return new ReactiveCosmosTemplate(new CosmosFactory(client, getFirstDatabase()), config, mappingCosmosConverter);
@@ -83,6 +87,7 @@ public ReactiveCosmosTemplate secondaryReactiveCosmosTemplate1(@Qualifier("secon
8387
.enableQueryMetrics(queryMetricsEnabled)
8488
.maxDegreeOfParallelism(maxDegreeOfParallelism)
8589
.maxBufferedItemCount(maxBufferedItemCount)
90+
.responseContinuationTokenLimitInKb(responseContinuationTokenLimitInKb)
8691
.build();
8792

8893
return new ReactiveCosmosTemplate(new CosmosFactory(client, getSecondDatabase()), config, mappingCosmosConverter);

sdk/cosmos/azure-spring-data-cosmos-test/src/test/java/com/azure/spring/data/cosmos/repository/TestRepositoryConfig.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,9 @@ public class TestRepositoryConfig extends AbstractCosmosConfiguration {
4444
@Value("${cosmos.maxBufferedItemCount}")
4545
private int maxBufferedItemCount;
4646

47+
@Value("${cosmos.responseContinuationTokenLimitInKb}")
48+
private int responseContinuationTokenLimitInKb;
49+
4750
@Bean
4851
public ResponseDiagnosticsTestUtils responseDiagnosticsTestUtils() {
4952
return new ResponseDiagnosticsTestUtils();
@@ -64,6 +67,7 @@ public CosmosConfig cosmosConfig() {
6467
.enableQueryMetrics(queryMetricsEnabled)
6568
.maxDegreeOfParallelism(maxDegreeOfParallelism)
6669
.maxBufferedItemCount(maxBufferedItemCount)
70+
.responseContinuationTokenLimitInKb(responseContinuationTokenLimitInKb)
6771
.responseDiagnosticsProcessor(responseDiagnosticsTestUtils().getResponseDiagnosticsProcessor())
6872
.build();
6973
}

sdk/cosmos/azure-spring-data-cosmos-test/src/test/resources/application.properties

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ cosmos.queryMetricsEnabled=true
99
cosmos.maxDegreeOfParallelism=0
1010
# Max number of items to buffer
1111
cosmos.maxBufferedItemCount=0
12+
# Max size of the response continuation token
13+
cosmos.responseContinuationTokenLimitInKb=0
1214

1315
# Secondary DataSource Config
1416
cosmos.secondary.uri=${NEW_ACCOUNT_HOST}
@@ -21,5 +23,5 @@ cosmos.secondary.queryMetricsEnabled=true
2123
cosmos.secondary.maxDegreeOfParallelism=0
2224
# Max number of items to buffer
2325
cosmos.secondary.maxBufferedItemCount=0
24-
25-
26+
# Max size of the response continuation token
27+
cosmos.secondary.responseContinuationTokenLimitInKb=0

sdk/cosmos/azure-spring-data-cosmos/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
#### Features Added
1616
* Exposed `maxBufferedItemCount` feature from `CosmosQueryRequestOptions` through `application.properties` flag - See [PR 30921](https://github.com/Azure/azure-sdk-for-java/pull/30921)
17+
* Exposed `responseContinuationTokenLimitInKb` feature from `CosmosQueryRequestOptions` through `application.properties` flag - See [PR 30980](https://github.com/Azure/azure-sdk-for-java/pull/30980)
1718

1819
#### Bugs Fixed
1920
* Fixing pagination bug when performing a cross-partition query to fill every page and fix the total page count reporting. - See [PR 30694](https://github.com/Azure/azure-sdk-for-java/pull/30694)

sdk/cosmos/azure-spring-data-cosmos/README.md

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,7 @@ In addition to setting the flag, implement `ResponseDiagnosticsProcessor` to log
123123
Set `maxDegreeOfParallelism` flag to an integer in application.properties to allow parallel processing; setting the value to -1 will lead to the SDK deciding the optimal value.
124124
Set `maxBufferedItemCount` flag to an integer in application.properties to allow the user to set the max number of items that can be buffered during parallel query execution; if set to less than 0, the system automatically decides the number of items to buffer.
125125
NOTE: Setting this to a very high value can result in high memory consumption.
126+
Set `responseContinuationTokenLimitInKb` flag to an integer in application.properties to allow the user to limit the length of the continuation token in the query response. The continuation token contains both required and optional fields. The required fields are necessary for resuming the execution from where it was stoped. The optional fields may contain serialized index lookup work that was done but not yet utilized. This avoids redoing the work again in subsequent continuations and hence improve the query performance. Setting the maximum continuation size to 1KB, the Azure Cosmos DB service will only serialize required fields. Starting from 2KB, the Azure Cosmos DB service would serialize as much as it could fit till it reaches the maximum specified size.
126127

127128
```java readme-sample-AppConfiguration
128129
@Configuration
@@ -151,6 +152,9 @@ public class AppConfiguration extends AbstractCosmosConfiguration {
151152

152153
@Value("${azure.cosmos.maxBufferedItemCount}")
153154
private int maxBufferedItemCount;
155+
156+
@Value("${azure.cosmos.responseContinuationTokenLimitInKb}")
157+
private int responseContinuationTokenLimitInKb;
154158

155159
private AzureKeyCredential azureKeyCredential;
156160

@@ -171,6 +175,7 @@ public class AppConfiguration extends AbstractCosmosConfiguration {
171175
.enableQueryMetrics(queryMetricsEnabled)
172176
.maxDegreeOfParallelism(maxDegreeOfParallelism)
173177
.maxBufferedItemCount(maxBufferedItemCount)
178+
.responseContinuationTokenLimitInKb(responseContinuationTokenLimitInKb)
174179
.responseDiagnosticsProcessor(new ResponseDiagnosticsProcessorImplementation())
175180
.build();
176181
}
@@ -214,6 +219,7 @@ public CosmosConfig cosmosConfig() {
214219
.enableQueryMetrics(queryMetricsEnabled)
215220
.maxDegreeOfParallelism(maxDegreeOfParallelism)
216221
.maxBufferedItemCount(maxBufferedItemCount)
222+
.responseContinuationTokenLimitInKb(responseContinuationTokenLimitInKb)
217223
.responseDiagnosticsProcessor(new ResponseDiagnosticsProcessorImplementation())
218224
.build();
219225
}
@@ -692,6 +698,7 @@ public class SecondaryDatasourceConfiguration {
692698
.enableQueryMetrics(true)
693699
.maxDegreeOfParallelism(0)
694700
.maxBufferedItemCount(0)
701+
.responseContinuationTokenLimitInKb(0)
695702
.responseDiagnosticsProcessor(new ResponseDiagnosticsProcessorImplementation())
696703
.build();
697704
}
@@ -729,12 +736,13 @@ public CosmosConfig getCosmosConfig() {
729736
.enableQueryMetrics(true)
730737
.maxDegreeOfParallelism(0)
731738
.maxBufferedItemCount(0)
739+
.responseContinuationTokenLimitInKb(0)
732740
.responseDiagnosticsProcessor(new ResponseDiagnosticsProcessorImplementation())
733741
.build();
734742
}
735743
```
736744

737-
- Besides, if you want to define `queryMetricsEnabled`, `ResponseDiagnosticsProcessor`, `maxDegreeOfParallelism` or `maxBufferedItemCount` , you can create the `CosmosConfig` for your cosmos template.
745+
- Besides, if you want to define `queryMetricsEnabled`, `ResponseDiagnosticsProcessor`, `maxDegreeOfParallelism`, `maxBufferedItemCount` or `responseContinuationTokenLimitInKb` , you can create the `CosmosConfig` for your cosmos template.
738746

739747
```java
740748
@Bean("secondaryCosmosConfig")
@@ -743,6 +751,7 @@ public CosmosConfig getCosmosConfig() {
743751
.enableQueryMetrics(true)
744752
.maxDegreeOfParallelism(0)
745753
.maxBufferedItemCount(0)
754+
.responseContinuationTokenLimitInKb(0)
746755
.responseDiagnosticsProcessor(new ResponseDiagnosticsProcessorImplementation())
747756
.build();
748757
}

sdk/cosmos/azure-spring-data-cosmos/src/main/java/com/azure/spring/data/cosmos/config/CosmosConfig.java

Lines changed: 53 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ public class CosmosConfig {
2121

2222
private final int maxBufferedItemCount;
2323

24+
private final int responseContinuationTokenLimitInKb;
25+
2426
/**
2527
* Initialization
2628
*
@@ -49,6 +51,7 @@ public CosmosConfig(ResponseDiagnosticsProcessor responseDiagnosticsProcessor,
4951
this.queryMetricsEnabled = queryMetricsEnabled;
5052
this.maxDegreeOfParallelism = 0;
5153
this.maxBufferedItemCount = 0;
54+
this.responseContinuationTokenLimitInKb = 0;
5255
}
5356

5457
/**
@@ -69,6 +72,7 @@ public CosmosConfig(ResponseDiagnosticsProcessor responseDiagnosticsProcessor,
6972
this.queryMetricsEnabled = queryMetricsEnabled;
7073
this.maxDegreeOfParallelism = maxDegreeOfParallelism;
7174
this.maxBufferedItemCount = 0;
75+
this.responseContinuationTokenLimitInKb = 0;
7276
}
7377

7478
/**
@@ -91,6 +95,32 @@ public CosmosConfig(ResponseDiagnosticsProcessor responseDiagnosticsProcessor,
9195
this.queryMetricsEnabled = queryMetricsEnabled;
9296
this.maxDegreeOfParallelism = maxDegreeOfParallelism;
9397
this.maxBufferedItemCount = maxBufferedItemCount;
98+
this.responseContinuationTokenLimitInKb = 0;
99+
}
100+
101+
/**
102+
* Initialization
103+
*
104+
* @param responseDiagnosticsProcessor must not be {@literal null}
105+
* @param databaseThroughputConfig may be {@literal null}
106+
* @param queryMetricsEnabled must not be {@literal null}
107+
* @param maxDegreeOfParallelism must not be {@literal null}
108+
* @param maxBufferedItemCount must not be {@literal null}
109+
* @param responseContinuationTokenLimitInKb must not be {@literal null}
110+
*/
111+
@ConstructorProperties({"responseDiagnosticsProcessor", "databaseThroughputConfig", "queryMetricsEnabled", "maxDegreeOfParallelism", "maxBufferedItemCount", "responseContinuationTokenLimitInKb"})
112+
CosmosConfig(ResponseDiagnosticsProcessor responseDiagnosticsProcessor,
113+
DatabaseThroughputConfig databaseThroughputConfig,
114+
boolean queryMetricsEnabled,
115+
int maxDegreeOfParallelism,
116+
int maxBufferedItemCount,
117+
int responseContinuationTokenLimitInKb) {
118+
this.responseDiagnosticsProcessor = responseDiagnosticsProcessor;
119+
this.databaseThroughputConfig = databaseThroughputConfig;
120+
this.queryMetricsEnabled = queryMetricsEnabled;
121+
this.maxDegreeOfParallelism = maxDegreeOfParallelism;
122+
this.maxBufferedItemCount = maxBufferedItemCount;
123+
this.responseContinuationTokenLimitInKb = responseContinuationTokenLimitInKb;
94124
}
95125

96126
/**
@@ -129,6 +159,15 @@ public int getMaxBufferedItemCount() {
129159
return maxBufferedItemCount;
130160
}
131161

162+
/**
163+
* Gets the value of responseContinuationTokenLimitInKb
164+
*
165+
* @return int, value of responseContinuationTokenLimitInKb
166+
*/
167+
public int getResponseContinuationTokenLimitInKb() {
168+
return responseContinuationTokenLimitInKb;
169+
}
170+
132171
/**
133172
* Gets the database throughput configuration.
134173
*
@@ -156,6 +195,7 @@ public static class CosmosConfigBuilder {
156195
private boolean queryMetricsEnabled;
157196
private int maxDegreeOfParallelism;
158197
private int maxBufferedItemCount;
198+
private int responseContinuationTokenLimitInKb;
159199
CosmosConfigBuilder() {
160200
}
161201

@@ -205,6 +245,17 @@ public CosmosConfigBuilder maxBufferedItemCount(int maxBufferedItemCount) {
205245
return this;
206246
}
207247

248+
/**
249+
* Set responseContinuationTokenLimitInKb
250+
*
251+
* @param responseContinuationTokenLimitInKb value to initialize
252+
* @return CosmosConfigBuilder
253+
*/
254+
public CosmosConfigBuilder responseContinuationTokenLimitInKb(int responseContinuationTokenLimitInKb) {
255+
this.responseContinuationTokenLimitInKb = responseContinuationTokenLimitInKb;
256+
return this;
257+
}
258+
208259
/**
209260
* Enable database throughput
210261
*
@@ -224,7 +275,7 @@ public CosmosConfigBuilder enableDatabaseThroughput(boolean autoscale, int reque
224275
*/
225276
public CosmosConfig build() {
226277
return new CosmosConfig(this.responseDiagnosticsProcessor, this.databaseThroughputConfig, this.queryMetricsEnabled,
227-
this.maxDegreeOfParallelism, this.maxBufferedItemCount);
278+
this.maxDegreeOfParallelism, this.maxBufferedItemCount, this.responseContinuationTokenLimitInKb);
228279
}
229280

230281
@Override
@@ -235,6 +286,7 @@ public String toString() {
235286
+ ", queryMetricsEnabled=" + queryMetricsEnabled
236287
+ ", maxDegreeOfParallelism=" + maxDegreeOfParallelism
237288
+ ", maxBufferedItemCount=" + maxBufferedItemCount
289+
+ ", responseContinuationTokenLimitInKb=" + responseContinuationTokenLimitInKb
238290
+ '}';
239291
}
240292
}

sdk/cosmos/azure-spring-data-cosmos/src/main/java/com/azure/spring/data/cosmos/core/CosmosTemplate.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ public class CosmosTemplate implements CosmosOperations, ApplicationContextAware
7979
private final boolean queryMetricsEnabled;
8080
private final int maxDegreeOfParallelism;
8181
private final int maxBufferedItemCount;
82+
private final int responseContinuationTokenLimitInKb;
8283
private final CosmosAsyncClient cosmosAsyncClient;
8384
private final DatabaseThroughputConfig databaseThroughputConfig;
8485

@@ -134,6 +135,7 @@ public CosmosTemplate(CosmosFactory cosmosFactory,
134135
this.queryMetricsEnabled = cosmosConfig.isQueryMetricsEnabled();
135136
this.maxDegreeOfParallelism = cosmosConfig.getMaxDegreeOfParallelism();
136137
this.maxBufferedItemCount = cosmosConfig.getMaxBufferedItemCount();
138+
this.responseContinuationTokenLimitInKb = cosmosConfig.getResponseContinuationTokenLimitInKb();
137139
this.databaseThroughputConfig = cosmosConfig.getDatabaseThroughputConfig();
138140
}
139141

@@ -292,6 +294,7 @@ public <T> T findById(String containerName, Object id, Class<T> domainType) {
292294
options.setQueryMetricsEnabled(this.queryMetricsEnabled);
293295
options.setMaxDegreeOfParallelism(this.maxDegreeOfParallelism);
294296
options.setMaxBufferedItemCount(this.maxBufferedItemCount);
297+
options.setResponseContinuationTokenLimitInKb(this.responseContinuationTokenLimitInKb);
295298
return cosmosAsyncClient
296299
.getDatabase(this.databaseName)
297300
.getContainer(containerName)
@@ -418,6 +421,7 @@ public <T> Iterable<T> findAll(PartitionKey partitionKey, final Class<T> domainT
418421
cosmosQueryRequestOptions.setQueryMetricsEnabled(this.queryMetricsEnabled);
419422
cosmosQueryRequestOptions.setMaxDegreeOfParallelism(this.maxDegreeOfParallelism);
420423
cosmosQueryRequestOptions.setMaxBufferedItemCount(this.maxBufferedItemCount);
424+
cosmosQueryRequestOptions.setResponseContinuationTokenLimitInKb(this.responseContinuationTokenLimitInKb);
421425

422426
return cosmosAsyncClient
423427
.getDatabase(this.databaseName)
@@ -745,6 +749,7 @@ private <T> Slice<T> sliceQuery(SqlQuerySpec querySpec,
745749
cosmosQueryRequestOptions.setQueryMetricsEnabled(this.queryMetricsEnabled);
746750
cosmosQueryRequestOptions.setMaxDegreeOfParallelism(this.maxDegreeOfParallelism);
747751
cosmosQueryRequestOptions.setMaxBufferedItemCount(this.maxBufferedItemCount);
752+
cosmosQueryRequestOptions.setResponseContinuationTokenLimitInKb(this.responseContinuationTokenLimitInKb);
748753
partitionKeyValue.ifPresent(o -> {
749754
LOGGER.debug("Setting partition key {}", o);
750755
cosmosQueryRequestOptions.setPartitionKey(new PartitionKey(o));
@@ -892,6 +897,7 @@ private Long getCountValue(SqlQuerySpec querySpec, String containerName) {
892897
options.setQueryMetricsEnabled(this.queryMetricsEnabled);
893898
options.setMaxDegreeOfParallelism(this.maxDegreeOfParallelism);
894899
options.setMaxBufferedItemCount(this.maxBufferedItemCount);
900+
options.setResponseContinuationTokenLimitInKb(this.responseContinuationTokenLimitInKb);
895901

896902
return executeQuery(querySpec, containerName, options)
897903
.publishOn(Schedulers.parallel())
@@ -922,6 +928,7 @@ private <T> Flux<JsonNode> findItemsAsFlux(@NonNull CosmosQuery query,
922928
cosmosQueryRequestOptions.setQueryMetricsEnabled(this.queryMetricsEnabled);
923929
cosmosQueryRequestOptions.setMaxDegreeOfParallelism(this.maxDegreeOfParallelism);
924930
cosmosQueryRequestOptions.setMaxBufferedItemCount(this.maxBufferedItemCount);
931+
cosmosQueryRequestOptions.setResponseContinuationTokenLimitInKb(this.responseContinuationTokenLimitInKb);
925932
Optional<Object> partitionKeyValue = query.getPartitionKeyValue(domainType);
926933
partitionKeyValue.ifPresent(o -> {
927934
LOGGER.debug("Setting partition key {}", o);
@@ -951,6 +958,7 @@ private Flux<JsonNode> getJsonNodeFluxFromQuerySpec(
951958
cosmosQueryRequestOptions.setQueryMetricsEnabled(this.queryMetricsEnabled);
952959
cosmosQueryRequestOptions.setMaxDegreeOfParallelism(this.maxDegreeOfParallelism);
953960
cosmosQueryRequestOptions.setMaxBufferedItemCount(this.maxBufferedItemCount);
961+
cosmosQueryRequestOptions.setResponseContinuationTokenLimitInKb(this.responseContinuationTokenLimitInKb);
954962

955963
return cosmosAsyncClient
956964
.getDatabase(this.databaseName)

0 commit comments

Comments
 (0)