Skip to content

Commit ef5f653

Browse files
authored
YQ-3439 added retries for CURLE_COULDNT_RESOLVE_HOST (#6732)
1 parent 98a74be commit ef5f653

15 files changed

+55
-21
lines changed

ydb/core/external_sources/object_storage.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -304,7 +304,8 @@ struct TObjectStorageExternalSource : public IExternalSource {
304304
}
305305

306306
auto httpGateway = NYql::IHTTPGateway::Make();
307-
auto s3Lister = NYql::NS3Lister::MakeS3Lister(httpGateway, NYql::NS3Lister::TListingRequest{
307+
auto httpRetryPolicy = NYql::GetHTTPDefaultRetryPolicy(NYql::THttpRetryPolicyOptions{.RetriedCurlCodes = NYql::FqRetriedCurlCodes()});
308+
auto s3Lister = NYql::NS3Lister::MakeS3Lister(httpGateway, httpRetryPolicy, NYql::NS3Lister::TListingRequest{
308309
.Url = meta->DataSourceLocation,
309310
.AuthInfo = authInfo,
310311
.Pattern = meta->TableLocation,

ydb/core/kqp/host/kqp_host.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1695,6 +1695,7 @@ class TKqpHost : public IKqpHost {
16951695
state->Configuration->AllowAtomicUploadCommit = queryType == EKikimrQueryType::Script;
16961696
state->Configuration->Init(FederatedQuerySetup->S3GatewayConfig, TypesCtx);
16971697
state->Gateway = FederatedQuerySetup->HttpGateway;
1698+
state->GatewayRetryPolicy = NYql::GetHTTPDefaultRetryPolicy(NYql::THttpRetryPolicyOptions{.RetriedCurlCodes = NYql::FqRetriedCurlCodes()});
16981699
state->ExecutorPoolId = AppData()->UserPoolId;
16991700

17001701
auto dataSource = NYql::CreateS3DataSource(state);

ydb/library/yql/providers/common/http_gateway/yql_http_default_retry_policy.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@ std::unordered_set<CURLcode> FqRetriedCurlCodes() {
2929
CURLE_SEND_ERROR,
3030
CURLE_RECV_ERROR,
3131
CURLE_NO_CONNECTION_AVAILABLE,
32-
CURLE_GOT_NOTHING
32+
CURLE_GOT_NOTHING,
33+
CURLE_COULDNT_RESOLVE_HOST
3334
};
3435
}
3536

ydb/library/yql/providers/s3/actors/yql_s3_raw_read_actor.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@ class TS3ReadActor : public NActors::TActorBootstrapped<TS3ReadActor>, public ID
111111
FileQueueBatchSizeLimit,
112112
FileQueueBatchObjectCountLimit,
113113
Gateway,
114+
RetryPolicy,
114115
Url,
115116
AuthInfo,
116117
Pattern,

ydb/library/yql/providers/s3/actors/yql_s3_read_actor.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1319,6 +1319,7 @@ class TS3StreamReadActor : public TActorBootstrapped<TS3StreamReadActor>, public
13191319
FileQueueBatchSizeLimit,
13201320
FileQueueBatchObjectCountLimit,
13211321
Gateway,
1322+
RetryPolicy,
13221323
Url,
13231324
AuthInfo,
13241325
Pattern,

ydb/library/yql/providers/s3/actors/yql_s3_read_actor.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ NActors::IActor* CreateS3FileQueueActor(
2424
ui64 batchSizeLimit,
2525
ui64 batchObjectCountLimit,
2626
IHTTPGateway::TPtr gateway,
27+
IHTTPGateway::TRetryPolicy::TPtr retryPolicy,
2728
TString url,
2829
TS3Credentials::TAuthInfo authInfo,
2930
TString pattern,

ydb/library/yql/providers/s3/actors/yql_s3_source_queue.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,7 @@ class TS3FileQueueActor : public NActors::TActorBootstrapped<TS3FileQueueActor>
171171
ui64 batchSizeLimit,
172172
ui64 batchObjectCountLimit,
173173
IHTTPGateway::TPtr gateway,
174+
IHTTPGateway::TRetryPolicy::TPtr retryPolicy,
174175
TString url,
175176
TS3Credentials::TAuthInfo authInfo,
176177
TString pattern,
@@ -186,6 +187,7 @@ class TS3FileQueueActor : public NActors::TActorBootstrapped<TS3FileQueueActor>
186187
, BatchSizeLimit(batchSizeLimit)
187188
, BatchObjectCountLimit(batchObjectCountLimit)
188189
, Gateway(std::move(gateway))
190+
, RetryPolicy(std::move(retryPolicy))
189191
, Url(std::move(url))
190192
, AuthInfo(std::move(authInfo))
191193
, Pattern(std::move(pattern))
@@ -488,6 +490,7 @@ class TS3FileQueueActor : public NActors::TActorBootstrapped<TS3FileQueueActor>
488490
CurrentDirectoryPathIndex = object.GetPathIndex();
489491
MaybeLister = NS3Lister::MakeS3Lister(
490492
Gateway,
493+
RetryPolicy,
491494
NS3Lister::TListingRequest{
492495
Url,
493496
AuthInfo,
@@ -611,6 +614,7 @@ class TS3FileQueueActor : public NActors::TActorBootstrapped<TS3FileQueueActor>
611614
THashSet<NActors::TActorId> UpdatedConsumers;
612615

613616
const IHTTPGateway::TPtr Gateway;
617+
const IHTTPGateway::TRetryPolicy::TPtr RetryPolicy;
614618
const TString Url;
615619
const TS3Credentials::TAuthInfo AuthInfo;
616620
const TString Pattern;
@@ -632,6 +636,7 @@ NActors::IActor* CreateS3FileQueueActor(
632636
ui64 batchSizeLimit,
633637
ui64 batchObjectCountLimit,
634638
IHTTPGateway::TPtr gateway,
639+
IHTTPGateway::TRetryPolicy::TPtr retryPolicy,
635640
TString url,
636641
TS3Credentials::TAuthInfo authInfo,
637642
TString pattern,
@@ -648,6 +653,7 @@ NActors::IActor* CreateS3FileQueueActor(
648653
batchSizeLimit,
649654
batchObjectCountLimit,
650655
gateway,
656+
retryPolicy,
651657
url,
652658
authInfo,
653659
pattern,

ydb/library/yql/providers/s3/actors/yql_s3_source_queue.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ NActors::IActor* CreateS3FileQueueActor(
2222
ui64 batchSizeLimit,
2323
ui64 batchObjectCountLimit,
2424
IHTTPGateway::TPtr gateway,
25+
IHTTPGateway::TRetryPolicy::TPtr retryPolicy,
2526
TString url,
2627
TS3Credentials::TAuthInfo authInfo,
2728
TString pattern,

ydb/library/yql/providers/s3/object_listers/yql_s3_list.cpp

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,7 @@ class TS3Lister : public IS3Lister {
243243

244244
TS3Lister(
245245
const IHTTPGateway::TPtr& httpGateway,
246+
const IHTTPGateway::TRetryPolicy::TPtr& retryPolicy,
246247
const TListingRequest& listingRequest,
247248
const TMaybe<TString>& delimiter,
248249
size_t maxFilesPerQuery,
@@ -265,7 +266,7 @@ class TS3Lister : public IS3Lister {
265266
NewPromise<TMaybe<TListingContext>>(),
266267
std::make_shared<TListEntries>(),
267268
IHTTPGateway::TWeakPtr(httpGateway),
268-
GetHTTPDefaultRetryPolicy(),
269+
retryPolicy,
269270
CreateGuidAsString(),
270271
std::move(request),
271272
delimiter,
@@ -391,7 +392,7 @@ class TS3Lister : public IS3Lister {
391392
NewPromise<TMaybe<TListingContext>>(),
392393
std::make_shared<TListEntries>(),
393394
ctx.GatewayWeak,
394-
GetHTTPDefaultRetryPolicy(),
395+
ctx.RetryPolicy,
395396
CreateGuidAsString(),
396397
ctx.ListingRequest,
397398
ctx.Delimiter,
@@ -457,15 +458,16 @@ class TS3ParallelLimitedListerFactory : public IS3ListerFactory {
457458

458459
TFuture<NS3Lister::IS3Lister::TPtr> Make(
459460
const IHTTPGateway::TPtr& httpGateway,
461+
const IHTTPGateway::TRetryPolicy::TPtr& retryPolicy,
460462
const NS3Lister::TListingRequest& listingRequest,
461463
const TMaybe<TString>& delimiter,
462464
bool allowLocalFiles) override {
463465
auto acquired = Semaphore->AcquireAsync();
464466
return acquired.Apply(
465-
[ctx = SharedCtx, httpGateway, listingRequest, delimiter, allowLocalFiles](const auto& f) {
467+
[ctx = SharedCtx, httpGateway, retryPolicy, listingRequest, delimiter, allowLocalFiles](const auto& f) {
466468
return std::shared_ptr<NS3Lister::IS3Lister>(new TListerLockReleaseWrapper{
467469
NS3Lister::MakeS3Lister(
468-
httpGateway, listingRequest, delimiter, allowLocalFiles, ctx),
470+
httpGateway, retryPolicy, listingRequest, delimiter, allowLocalFiles, ctx),
469471
std::make_unique<TAsyncSemaphore::TAutoRelease>(
470472
f.GetValue()->MakeAutoRelease())});
471473
});
@@ -507,13 +509,14 @@ class TS3ParallelLimitedListerFactory : public IS3ListerFactory {
507509

508510
IS3Lister::TPtr MakeS3Lister(
509511
const IHTTPGateway::TPtr& httpGateway,
512+
const IHTTPGateway::TRetryPolicy::TPtr& retryPolicy,
510513
const TListingRequest& listingRequest,
511514
const TMaybe<TString>& delimiter,
512515
bool allowLocalFiles,
513516
TSharedListingContextPtr sharedCtx) {
514517
if (listingRequest.Url.substr(0, 7) != "file://") {
515518
return std::make_shared<TS3Lister>(
516-
httpGateway, listingRequest, delimiter, 1000, std::move(sharedCtx));
519+
httpGateway, retryPolicy, listingRequest, delimiter, 1000, std::move(sharedCtx));
517520
}
518521

519522
if (!allowLocalFiles) {

ydb/library/yql/providers/s3/object_listers/yql_s3_list.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,7 @@ class IS3Lister : public TIterator<NThreading::TFuture<TListResult>> {
165165

166166
IS3Lister::TPtr MakeS3Lister(
167167
const IHTTPGateway::TPtr& httpGateway,
168+
const IHTTPGateway::TRetryPolicy::TPtr& retryPolicy,
168169
const TListingRequest& listingRequest,
169170
const TMaybe<TString>& delimiter,
170171
bool allowLocalFiles,
@@ -176,6 +177,7 @@ class IS3ListerFactory {
176177

177178
virtual NThreading::TFuture<NS3Lister::IS3Lister::TPtr> Make(
178179
const IHTTPGateway::TPtr& httpGateway,
180+
const IHTTPGateway::TRetryPolicy::TPtr& retryPolicy,
179181
const NS3Lister::TListingRequest& listingRequest,
180182
const TMaybe<TString>& delimiter,
181183
bool allowLocalFiles) = 0;

ydb/library/yql/providers/s3/provider/yql_s3_dq_integration.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -540,6 +540,7 @@ class TS3DqIntegration: public TDqIntegrationBase {
540540
fileQueueBatchSizeLimit,
541541
fileQueueBatchObjectCountLimit,
542542
State_->Gateway,
543+
State_->GatewayRetryPolicy,
543544
connect.Url,
544545
GetAuthInfo(State_->CredentialsFactory, State_->Configuration->Tokens.at(cluster)),
545546
pathPattern,

ydb/library/yql/providers/s3/provider/yql_s3_io_discovery.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ class TS3IODiscoveryTransformer : public TGraphTransformerBase {
8888
State_->Configuration->RegexpCacheSize))
8989
, ListingStrategy_(MakeS3ListingStrategy(
9090
State_->Gateway,
91+
State_->GatewayRetryPolicy,
9192
ListerFactory_,
9293
State_->Configuration->MinDesiredDirectoriesOfFilesPerQuery,
9394
State_->Configuration->MaxInflightListsPerQuery,

ydb/library/yql/providers/s3/provider/yql_s3_listing_strategy.cpp

Lines changed: 25 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -134,14 +134,15 @@ class TFlatFileS3ListingStrategy : public TCollectingS3ListingStrategy {
134134
TFlatFileS3ListingStrategy(
135135
const IS3ListerFactory::TPtr& listerFactory,
136136
const IHTTPGateway::TPtr& httpGateway,
137+
const IHTTPGateway::TRetryPolicy::TPtr& retryPolicy,
137138
bool allowLocalFiles)
138139
: TCollectingS3ListingStrategy(
139-
[allowLocalFiles, httpGateway, listerFactory](
140+
[allowLocalFiles, httpGateway, retryPolicy, listerFactory](
140141
const TListingRequest& listingRequest,
141142
TS3ListingOptions options) {
142143
Y_UNUSED(options);
143144
return listerFactory->Make(
144-
httpGateway, listingRequest, Nothing(), allowLocalFiles);
145+
httpGateway, retryPolicy, listingRequest, Nothing(), allowLocalFiles);
145146
},
146147
"TFlatFileS3ListingStrategy") { }
147148
};
@@ -151,14 +152,15 @@ class TDirectoryS3ListingStrategy : public TCollectingS3ListingStrategy {
151152
TDirectoryS3ListingStrategy(
152153
const IS3ListerFactory::TPtr& listerFactory,
153154
const IHTTPGateway::TPtr& httpGateway,
155+
const IHTTPGateway::TRetryPolicy::TPtr& retryPolicy,
154156
bool allowLocalFiles)
155157
: TCollectingS3ListingStrategy(
156-
[allowLocalFiles, httpGateway, listerFactory](
158+
[allowLocalFiles, httpGateway, retryPolicy, listerFactory](
157159
const TListingRequest& listingRequest,
158160
TS3ListingOptions options) {
159161
Y_UNUSED(options);
160162
return listerFactory->Make(
161-
httpGateway, listingRequest, "/", allowLocalFiles);
163+
httpGateway, retryPolicy, listingRequest, "/", allowLocalFiles);
162164
},
163165
"TDirectoryS3ListingStrategy") { }
164166
};
@@ -402,9 +404,10 @@ class TPartitionedDatasetS3ListingStrategy : public TCollectingS3ListingStrategy
402404
TPartitionedDatasetS3ListingStrategy(
403405
const IS3ListerFactory::TPtr& listerFactory,
404406
const IHTTPGateway::TPtr& httpGateway,
407+
const IHTTPGateway::TRetryPolicy::TPtr& retryPolicy,
405408
bool allowLocalFiles)
406409
: TCollectingS3ListingStrategy(
407-
[listerFactory, httpGateway, allowLocalFiles](
410+
[listerFactory, httpGateway, retryPolicy, allowLocalFiles](
408411
const TListingRequest& listingRequest,
409412
TS3ListingOptions options) {
410413
auto ptr = std::shared_ptr<IS3Lister>(
@@ -413,7 +416,7 @@ class TPartitionedDatasetS3ListingStrategy : public TCollectingS3ListingStrategy
413416
listingRequest.Prefix,
414417
options,
415418
TDirectoryS3ListingStrategy{
416-
listerFactory, httpGateway, allowLocalFiles}});
419+
listerFactory, httpGateway, retryPolicy, allowLocalFiles}});
417420
return MakeFuture(std::move(ptr));
418421
},
419422
"TPartitionedDatasetS3ListingStrategy") { }
@@ -557,10 +560,11 @@ class TUnPartitionedDatasetS3ListingStrategy : public TCollectingS3ListingStrate
557560
TUnPartitionedDatasetS3ListingStrategy(
558561
const IS3ListerFactory::TPtr& listerFactory,
559562
const IHTTPGateway::TPtr& httpGateway,
563+
const IHTTPGateway::TRetryPolicy::TPtr& retryPolicy,
560564
size_t minParallelism,
561565
bool allowLocalFiles)
562566
: TCollectingS3ListingStrategy(
563-
[listerFactory, httpGateway, minParallelism, allowLocalFiles](
567+
[listerFactory, httpGateway, retryPolicy, minParallelism, allowLocalFiles](
564568
const TListingRequest& listingRequest,
565569
TS3ListingOptions options) {
566570
auto ptr = std::shared_ptr<IS3Lister>(
@@ -579,7 +583,7 @@ class TUnPartitionedDatasetS3ListingStrategy : public TCollectingS3ListingStrate
579583
: listingRequest.Pattern.substr(
580584
0, NS3::GetFirstWildcardPos(listingRequest.Pattern))},
581585
TDirectoryS3ListingStrategy{
582-
listerFactory, httpGateway, allowLocalFiles},
586+
listerFactory, httpGateway, retryPolicy, allowLocalFiles},
583587
minParallelism,
584588
options.MaxResultSet});
585589
return MakeFuture(std::move(ptr));
@@ -893,11 +897,12 @@ class TConcurrentUnPartitionedDatasetS3ListingStrategy :
893897
TConcurrentUnPartitionedDatasetS3ListingStrategy(
894898
const IS3ListerFactory::TPtr& listerFactory,
895899
const IHTTPGateway::TPtr& httpGateway,
900+
const IHTTPGateway::TRetryPolicy::TPtr& retryPolicy,
896901
size_t minParallelism,
897902
size_t maxParallelOps,
898903
bool allowLocalFiles)
899904
: TCollectingS3ListingStrategy(
900-
[listerFactory, httpGateway, minParallelism, allowLocalFiles, maxParallelOps](
905+
[listerFactory, httpGateway, retryPolicy, minParallelism, allowLocalFiles, maxParallelOps](
901906
const TListingRequest& listingRequest,
902907
TS3ListingOptions options) {
903908
auto ptr = std::shared_ptr<IS3Lister>(
@@ -929,7 +934,7 @@ class TConcurrentUnPartitionedDatasetS3ListingStrategy :
929934
: listingRequest.Pattern.substr(
930935
0, NS3::GetFirstWildcardPos(listingRequest.Pattern))},
931936
TDirectoryS3ListingStrategy{
932-
listerFactory, httpGateway, allowLocalFiles},
937+
listerFactory, httpGateway, retryPolicy, allowLocalFiles},
933938
options.MaxResultSet,
934939
maxParallelOps});
935940
return MakeFuture(std::move(ptr));
@@ -943,10 +948,11 @@ class TConcurrentPartitionedDatasetS3ListingStrategy :
943948
TConcurrentPartitionedDatasetS3ListingStrategy(
944949
const IS3ListerFactory::TPtr& listerFactory,
945950
const IHTTPGateway::TPtr& httpGateway,
951+
const IHTTPGateway::TRetryPolicy::TPtr& retryPolicy,
946952
size_t maxParallelOps,
947953
bool allowLocalFiles)
948954
: TCollectingS3ListingStrategy(
949-
[listerFactory, httpGateway, allowLocalFiles, maxParallelOps](
955+
[listerFactory, httpGateway, retryPolicy, allowLocalFiles, maxParallelOps](
950956
const TListingRequest& listingRequest,
951957
TS3ListingOptions options) {
952958
auto ptr = std::shared_ptr<IS3Lister>(
@@ -974,12 +980,12 @@ class TConcurrentPartitionedDatasetS3ListingStrategy :
974980
: listingRequest.Pattern.substr(
975981
0, NS3::GetFirstWildcardPos(listingRequest.Pattern))},
976982
TDirectoryS3ListingStrategy{
977-
listerFactory, httpGateway, allowLocalFiles},
983+
listerFactory, httpGateway, retryPolicy, allowLocalFiles},
978984
options.MaxResultSet,
979985
maxParallelOps});
980986
return MakeFuture(std::move(ptr));
981987
},
982-
"TConcurrentUnPartitionedDatasetS3ListingStrategy") { }
988+
"TConcurrentPartitionedDatasetS3ListingStrategy") { }
983989
};
984990

985991

@@ -1024,6 +1030,7 @@ class TLoggingS3ListingStrategy : public IS3ListingStrategy {
10241030

10251031
IS3ListingStrategy::TPtr MakeS3ListingStrategy(
10261032
const IHTTPGateway::TPtr& httpGateway,
1033+
const IHTTPGateway::TRetryPolicy::TPtr& retryPolicy,
10271034
const IS3ListerFactory::TPtr& listerFactory,
10281035
ui64 minDesiredDirectoriesOfFilesPerQuery,
10291036
size_t maxParallelOps,
@@ -1032,7 +1039,7 @@ IS3ListingStrategy::TPtr MakeS3ListingStrategy(
10321039
std::make_shared<TCompositeS3ListingStrategy>(
10331040
std::vector<std::shared_ptr<IS3ListingStrategy>>{
10341041
std::make_shared<TFlatFileS3ListingStrategy>(
1035-
listerFactory, httpGateway, allowLocalFiles),
1042+
listerFactory, httpGateway, retryPolicy, allowLocalFiles),
10361043
std::make_shared<TConditionalS3ListingStrategy>(
10371044
std::initializer_list<TConditionalS3ListingStrategy::TPair>{
10381045
{[](const TS3ListingOptions& options) {
@@ -1042,6 +1049,7 @@ IS3ListingStrategy::TPtr MakeS3ListingStrategy(
10421049
std::make_shared<TPartitionedDatasetS3ListingStrategy>(
10431050
listerFactory,
10441051
httpGateway,
1052+
retryPolicy,
10451053
allowLocalFiles)},
10461054
{[](const TS3ListingOptions& options) {
10471055
return options.IsPartitionedDataset &&
@@ -1050,6 +1058,7 @@ IS3ListingStrategy::TPtr MakeS3ListingStrategy(
10501058
std::make_shared<TConcurrentPartitionedDatasetS3ListingStrategy>(
10511059
listerFactory,
10521060
httpGateway,
1061+
retryPolicy,
10531062
maxParallelOps,
10541063
allowLocalFiles)},
10551064
{[](const TS3ListingOptions& options) {
@@ -1059,6 +1068,7 @@ IS3ListingStrategy::TPtr MakeS3ListingStrategy(
10591068
std::make_shared<TUnPartitionedDatasetS3ListingStrategy>(
10601069
listerFactory,
10611070
httpGateway,
1071+
retryPolicy,
10621072
minDesiredDirectoriesOfFilesPerQuery,
10631073
allowLocalFiles)},
10641074
{[](const TS3ListingOptions& options) {
@@ -1068,6 +1078,7 @@ IS3ListingStrategy::TPtr MakeS3ListingStrategy(
10681078
std::make_shared<TConcurrentUnPartitionedDatasetS3ListingStrategy>(
10691079
listerFactory,
10701080
httpGateway,
1081+
retryPolicy,
10711082
minDesiredDirectoriesOfFilesPerQuery,
10721083
maxParallelOps,
10731084
allowLocalFiles)}})}));

ydb/library/yql/providers/s3/provider/yql_s3_listing_strategy.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ class IS3ListingStrategy {
3131

3232
IS3ListingStrategy::TPtr MakeS3ListingStrategy(
3333
const IHTTPGateway::TPtr& httpGateway,
34+
const IHTTPGateway::TRetryPolicy::TPtr& retryPolicy,
3435
const NS3Lister::IS3ListerFactory::TPtr& listerFactory,
3536
ui64 minDesiredDirectoriesOfFilesPerQuery,
3637
size_t maxParallelOps,

0 commit comments

Comments
 (0)