Skip to content

Commit 48199c7

Browse files
Hor911EgorkaZ
authored andcommitted
Dynamic listing mass fix (ydb-platform#1913)
1 parent ac466f7 commit 48199c7

29 files changed

Lines changed: 687 additions & 219 deletions

ydb/core/fq/libs/checkpointing/checkpoint_coordinator.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -571,6 +571,16 @@ void TCheckpointCoordinator::Handle(NActors::TEvInterconnect::TEvNodeConnected::
571571
}
572572
}
573573

574+
void TCheckpointCoordinator::Handle(NActors::TEvents::TEvUndelivered::TPtr& ev) {
575+
CC_LOG_D("Handle undelivered");
576+
577+
if (const auto actorIt = AllActors.find(ev->Sender); actorIt != AllActors.end()) {
578+
actorIt->second->EventsQueue.HandleUndelivered(ev);
579+
}
580+
581+
NYql::TTaskControllerImpl<TCheckpointCoordinator>::OnUndelivered(ev);
582+
}
583+
574584
void TCheckpointCoordinator::Handle(NActors::TEvents::TEvPoison::TPtr& ev) {
575585
CC_LOG_D("Got TEvPoison");
576586
Send(ev->Sender, new NActors::TEvents::TEvPoisonTaken(), 0, ev->Cookie);

ydb/core/fq/libs/checkpointing/checkpoint_coordinator.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ class TCheckpointCoordinator : public NYql::TTaskControllerImpl<TCheckpointCoord
6060
void Handle(NActors::TEvents::TEvPoison::TPtr&);
6161
void Handle(NActors::TEvInterconnect::TEvNodeDisconnected::TPtr& ev);
6262
void Handle(NActors::TEvInterconnect::TEvNodeConnected::TPtr& ev);
63+
void Handle(NActors::TEvents::TEvUndelivered::TPtr& ev);
6364
void Handle(const TEvCheckpointCoordinator::TEvRunGraph::TPtr&);
6465
void HandleException(const std::exception& err);
6566

@@ -89,13 +90,13 @@ class TCheckpointCoordinator : public NYql::TTaskControllerImpl<TCheckpointCoord
8990
hFunc(NYql::NDq::TEvRetryQueuePrivate::TEvRetry, Handle)
9091

9192
hFunc(NActors::TEvents::TEvPoison, Handle)
92-
hFunc(NActors::TEvents::TEvUndelivered, NYql::TTaskControllerImpl<TCheckpointCoordinator>::OnUndelivered)
9393
hFunc(NActors::TEvents::TEvWakeup, NYql::TTaskControllerImpl<TCheckpointCoordinator>::OnWakeup)
9494

9595
hFunc(NActors::TEvInterconnect::TEvNodeDisconnected, Handle)
96-
hFunc(NActors::TEvInterconnect::TEvNodeConnected, Handle),
96+
hFunc(NActors::TEvInterconnect::TEvNodeConnected, Handle)
97+
hFunc(NActors::TEvents::TEvUndelivered, Handle)
9798

98-
ExceptionFunc(std::exception, HandleException)
99+
, ExceptionFunc(std::exception, HandleException)
99100
)
100101

101102
static constexpr char ActorName[] = "YQ_CHECKPOINT_COORDINATOR";

ydb/core/kqp/host/kqp_host.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1508,11 +1508,11 @@ class TKqpHost : public IKqpHost {
15081508
state->CredentialsFactory = FederatedQuerySetup->CredentialsFactory;
15091509
state->Configuration->WriteThroughDqIntegration = true;
15101510
state->Configuration->AllowAtomicUploadCommit = queryType == EKikimrQueryType::Script;
1511-
15121511
state->Configuration->Init(FederatedQuerySetup->S3GatewayConfig, TypesCtx);
1512+
state->Gateway = FederatedQuerySetup->HttpGateway;
15131513

1514-
auto dataSource = NYql::CreateS3DataSource(state, FederatedQuerySetup->HttpGateway);
1515-
auto dataSink = NYql::CreateS3DataSink(state, FederatedQuerySetup->HttpGateway);
1514+
auto dataSource = NYql::CreateS3DataSource(state);
1515+
auto dataSink = NYql::CreateS3DataSink(state);
15161516

15171517
TypesCtx->AddDataSource(NYql::S3ProviderName, std::move(dataSource));
15181518
TypesCtx->AddDataSink(NYql::S3ProviderName, std::move(dataSink));

ydb/core/kqp/query_compiler/kqp_query_compiler.cpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -947,11 +947,6 @@ class TKqpQueryCompiler : public IKqpQueryCompiler {
947947
NYql::IDqIntegration* dqIntegration = provider->second->GetDqIntegration();
948948
YQL_ENSURE(dqIntegration, "Unsupported dq source for provider: \"" << dataSourceCategory << "\"");
949949
auto& externalSource = *protoSource->MutableExternalSource();
950-
google::protobuf::Any& settings = *externalSource.MutableSettings();
951-
TString& sourceType = *externalSource.MutableType();
952-
dqIntegration->FillSourceSettings(source.Ref(), settings, sourceType);
953-
YQL_ENSURE(!settings.type_url().empty(), "Data source provider \"" << dataSourceCategory << "\" did't fill dq source settings for its dq source node");
954-
YQL_ENSURE(sourceType, "Data source provider \"" << dataSourceCategory << "\" did't fill dq source settings type for its dq source node");
955950

956951
// Partitioning
957952
TVector<TString> partitionParams;
@@ -976,6 +971,12 @@ class TKqpQueryCompiler : public IKqpQueryCompiler {
976971
externalSource.SetAuthInfo(CreateStructuredTokenParser(token).ToBuilder().RemoveSecrets().ToJson());
977972
CreateStructuredTokenParser(token).ListReferences(SecretNames);
978973
}
974+
975+
google::protobuf::Any& settings = *externalSource.MutableSettings();
976+
TString& sourceType = *externalSource.MutableType();
977+
dqIntegration->FillSourceSettings(source.Ref(), settings, sourceType, maxTasksPerStage);
978+
YQL_ENSURE(!settings.type_url().empty(), "Data source provider \"" << dataSourceCategory << "\" didn't fill dq source settings for its dq source node");
979+
YQL_ENSURE(sourceType, "Data source provider \"" << dataSourceCategory << "\" didn't fill dq source settings type for its dq source node");
979980
}
980981
}
981982

ydb/library/yql/dq/actors/compute/dq_compute_actor_checkpoints.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,7 @@ STRICT_STFUNC_EXC(TDqComputeActorCheckpoints::StateFunc,
151151
hFunc(TEvDqCompute::TEvRun, Handle);
152152
hFunc(NActors::TEvInterconnect::TEvNodeDisconnected, Handle);
153153
hFunc(NActors::TEvInterconnect::TEvNodeConnected, Handle);
154+
hFunc(NActors::TEvents::TEvUndelivered, Handle);
154155
hFunc(TEvRetryQueuePrivate::TEvRetry, Handle);
155156
hFunc(TEvents::TEvWakeup, Handle);
156157
cFunc(TEvents::TEvPoisonPill::EventType, PassAway);,
@@ -393,6 +394,13 @@ void TDqComputeActorCheckpoints::Handle(NActors::TEvInterconnect::TEvNodeConnect
393394
EventsQueue.HandleNodeConnected(ev->Get()->NodeId);
394395
}
395396

397+
void TDqComputeActorCheckpoints::Handle(NActors::TEvents::TEvUndelivered::TPtr& ev) {
398+
LOG_D("Handle undelivered");
399+
if (!EventsQueue.HandleUndelivered(ev)) {
400+
LOG_E("TEvUndelivered: " << ev->Get()->SourceType);
401+
}
402+
}
403+
396404
void TDqComputeActorCheckpoints::Handle(TEvRetryQueuePrivate::TEvRetry::TPtr& ev) {
397405
Y_UNUSED(ev);
398406
EventsQueue.Retry();

ydb/library/yql/dq/actors/compute/dq_compute_actor_checkpoints.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@ class TDqComputeActorCheckpoints : public NActors::TActor<TDqComputeActorCheckpo
127127
void Handle(NActors::TEvents::TEvPoison::TPtr&);
128128
void Handle(NActors::TEvInterconnect::TEvNodeDisconnected::TPtr& ev);
129129
void Handle(NActors::TEvInterconnect::TEvNodeConnected::TPtr& ev);
130+
void Handle(NActors::TEvents::TEvUndelivered::TPtr& ev);
130131
void Handle(TEvRetryQueuePrivate::TEvRetry::TPtr& ev);
131132
void Handle(NActors::TEvents::TEvWakeup::TPtr& ev);
132133
void HandleException(const std::exception& err);

ydb/library/yql/dq/actors/compute/retry_queue.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,16 @@ void TRetryEventsQueue::HandleNodeConnected(ui32 nodeId) {
4747
}
4848
}
4949

50+
bool TRetryEventsQueue::HandleUndelivered(NActors::TEvents::TEvUndelivered::TPtr& ev) {
51+
if (ev->Sender == RecipientId && ev->Get()->Reason == NActors::TEvents::TEvUndelivered::Disconnected) {
52+
Connected = false;
53+
ScheduleRetry();
54+
return true;
55+
}
56+
57+
return false;
58+
}
59+
5060
void TRetryEventsQueue::Retry() {
5161
RetryScheduled = false;
5262
if (!Connected) {

ydb/library/yql/dq/actors/compute/retry_queue.h

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,9 +121,15 @@ class TRetryEventsQueue {
121121
return false;
122122
}
123123

124+
bool RemoveConfirmedEvents() {
125+
RemoveConfirmedEvents(MyConfirmedSeqNo);
126+
return !Events.empty();
127+
}
128+
124129
void OnNewRecipientId(const NActors::TActorId& recipientId, bool unsubscribe = true);
125130
void HandleNodeConnected(ui32 nodeId);
126131
void HandleNodeDisconnected(ui32 nodeId);
132+
bool HandleUndelivered(NActors::TEvents::TEvUndelivered::TPtr& ev);
127133
void Retry();
128134
void Unsubscribe();
129135

@@ -160,7 +166,7 @@ class TRetryEventsQueue {
160166
THolder<T> ev = MakeHolder<T>();
161167
ev->Record = Event->Record;
162168
ev->Record.MutableTransportMeta()->SetConfirmedSeqNo(confirmedSeqNo);
163-
return MakeHolder<NActors::IEventHandle>(Recipient, Sender, ev.Release(), 0, Cookie);
169+
return MakeHolder<NActors::IEventHandle>(Recipient, Sender, ev.Release(), NActors::IEventHandle::FlagTrackDelivery, Cookie);
164170
}
165171

166172
private:

ydb/library/yql/dq/integration/yql_dq_integration.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ class IDqIntegration {
6262
virtual bool CanBlockRead(const NNodes::TExprBase& node, TExprContext& ctx, TTypeAnnotationContext& typesCtx) = 0;
6363
virtual void RegisterMkqlCompiler(NCommon::TMkqlCallableCompilerBase& compiler) = 0;
6464
virtual bool CanFallback() = 0;
65-
virtual void FillSourceSettings(const TExprNode& node, ::google::protobuf::Any& settings, TString& sourceType) = 0;
65+
virtual void FillSourceSettings(const TExprNode& node, ::google::protobuf::Any& settings, TString& sourceType, size_t maxPartitions) = 0;
6666
virtual void FillSinkSettings(const TExprNode& node, ::google::protobuf::Any& settings, TString& sinkType) = 0;
6767
virtual void FillTransformSettings(const TExprNode& node, ::google::protobuf::Any& settings) = 0;
6868
virtual void Annotate(const TExprNode& node, THashMap<TString, TString>& params) = 0;

ydb/library/yql/providers/clickhouse/provider/yql_clickhouse_dq_integration.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ class TClickHouseDqIntegration: public TDqIntegrationBase {
7575
return 0ULL;
7676
}
7777

78-
void FillSourceSettings(const TExprNode& node, ::google::protobuf::Any& protoSettings, TString& sourceType) override {
78+
void FillSourceSettings(const TExprNode& node, ::google::protobuf::Any& protoSettings, TString& sourceType, size_t) override {
7979
const TDqSource source(&node);
8080
if (const auto maySettings = source.Settings().Maybe<TClSourceSettings>()) {
8181
const auto settings = maySettings.Cast();

0 commit comments

Comments
 (0)