@@ -163,19 +163,15 @@ struct TEvS3FileQueue {
163
163
struct TEvUpdateConsumersCount :
164
164
public TEventPB<TEvUpdateConsumersCount, NS3::FileQueue::TEvUpdateConsumersCount, EvUpdateConsumersCount> {
165
165
166
- TEvUpdateConsumersCount () {
167
- Record.SetConsumersCountDelta (0 );
168
- }
169
-
170
- explicit TEvUpdateConsumersCount (ui64 consumersCountDelta) {
166
+ explicit TEvUpdateConsumersCount (ui64 consumersCountDelta = 0 ) {
171
167
Record.SetConsumersCountDelta (consumersCountDelta);
172
168
}
173
169
};
174
170
175
171
struct TEvAck :
176
172
public TEventPB<TEvAck, NS3::FileQueue::TEvAck, EvAck> {
177
173
178
- TEvAck () {}
174
+ TEvAck () = default ;
179
175
180
176
explicit TEvAck (const TMessageTransportMeta& transportMeta) {
181
177
Record.MutableTransportMeta ()->CopyFrom (transportMeta);
@@ -205,7 +201,7 @@ struct TEvS3FileQueue {
205
201
struct TEvObjectPathReadError :
206
202
public NActors::TEventPB<TEvObjectPathReadError, NS3::FileQueue::TEvObjectPathReadError, EvObjectPathReadError> {
207
203
208
- TEvObjectPathReadError () {}
204
+ TEvObjectPathReadError () = default ;
209
205
210
206
TEvObjectPathReadError (TIssues issues, const TMessageTransportMeta& transportMeta) {
211
207
IssuesToMessage (issues, Record.MutableIssues ());
@@ -441,7 +437,7 @@ class TS3FileQueueActor : public TActorBootstrapped<TS3FileQueueActor> {
441
437
hFunc (TEvS3FileQueue::TEvGetNextBatch, HandleGetNextBatch);
442
438
hFunc (TEvPrivatePrivate::TEvNextListingChunkReceived, HandleNextListingChunkReceived);
443
439
cFunc (TEvPrivatePrivate::EvRoundRobinStageTimeout, HandleRoundRobinStageTimeout);
444
- cFunc (TEvents::TSystem::Poison, PassAway );
440
+ cFunc (TEvents::TSystem::Poison, HandlePoison );
445
441
default :
446
442
MaybeIssues = TIssues{TIssue{TStringBuilder () << " An event with unknown type has been received: '" << etype << " '" }};
447
443
TransitToErrorState ();
@@ -541,7 +537,7 @@ class TS3FileQueueActor : public TActorBootstrapped<TS3FileQueueActor> {
541
537
hFunc (TEvS3FileQueue::TEvUpdateConsumersCount, HandleUpdateConsumersCount);
542
538
hFunc (TEvS3FileQueue::TEvGetNextBatch, HandleGetNextBatchForEmptyState);
543
539
cFunc (TEvPrivatePrivate::EvRoundRobinStageTimeout, HandleRoundRobinStageTimeout);
544
- cFunc (TEvents::TSystem::Poison, PassAway );
540
+ cFunc (TEvents::TSystem::Poison, HandlePoison );
545
541
default :
546
542
MaybeIssues = TIssues{TIssue{TStringBuilder () << " An event with unknown type has been received: '" << etype << " '" }};
547
543
TransitToErrorState ();
@@ -566,7 +562,7 @@ class TS3FileQueueActor : public TActorBootstrapped<TS3FileQueueActor> {
566
562
hFunc (TEvS3FileQueue::TEvUpdateConsumersCount, HandleUpdateConsumersCount);
567
563
hFunc (TEvS3FileQueue::TEvGetNextBatch, HandleGetNextBatchForErrorState);
568
564
cFunc (TEvPrivatePrivate::EvRoundRobinStageTimeout, HandleRoundRobinStageTimeout);
569
- cFunc (TEvents::TSystem::Poison, PassAway );
565
+ cFunc (TEvents::TSystem::Poison, HandlePoison );
570
566
default :
571
567
MaybeIssues = TIssues{TIssue{TStringBuilder () << " An event with unknown type has been received: '" << etype << " '" }};
572
568
break ;
@@ -603,12 +599,14 @@ class TS3FileQueueActor : public TActorBootstrapped<TS3FileQueueActor> {
603
599
}
604
600
}
605
601
602
+ void HandlePoison () {
603
+ AnswerPendingRequests ();
604
+ PassAway ();
605
+ }
606
+
606
607
void PassAway () override {
608
+ PrintBackTrace ();
607
609
LOG_D (" TS3FileQueueActor" , " PassAway" );
608
-
609
- AnswerPendingRequests ();
610
- Objects.clear ();
611
- Directories.clear ();
612
610
TBase::PassAway ();
613
611
}
614
612
@@ -1004,7 +1002,7 @@ class TS3ReadActor : public TActorBootstrapped<TS3ReadActor>, public IDqComputeA
1004
1002
return FilesRemained && (*FilesRemained == 0 );
1005
1003
}
1006
1004
1007
- STRICT_STFUNC (StateFunc,
1005
+ STRICT_STFUNC_EXC (StateFunc,
1008
1006
hFunc (TEvPrivate::TEvReadResult, Handle);
1009
1007
hFunc (TEvPrivate::TEvReadError, Handle);
1010
1008
hFunc (TEvS3FileQueue::TEvObjectPathBatch, HandleObjectPathBatch);
@@ -1013,11 +1011,19 @@ class TS3ReadActor : public TActorBootstrapped<TS3ReadActor>, public IDqComputeA
1013
1011
hFunc (NYql::NDq::TEvRetryQueuePrivate::TEvRetry, Handle);
1014
1012
hFunc (NActors::TEvInterconnect::TEvNodeDisconnected, Handle);
1015
1013
hFunc (NActors::TEvInterconnect::TEvNodeConnected, Handle);
1014
+ hFunc (NActors::TEvents::TEvUndelivered, Handle);
1015
+ , catch (const std::exception& e) {
1016
+ TIssues issues{TIssue{TStringBuilder () << " An unknown exception has occurred: '" << e.what () << " '" }};
1017
+ Send (ComputeActorId, new TEvAsyncInputError (InputIndex, issues, NYql::NDqProto::StatusIds::INTERNAL_ERROR));
1018
+ }
1016
1019
)
1017
1020
1018
1021
void HandleObjectPathBatch (TEvS3FileQueue::TEvObjectPathBatch::TPtr& objectPathBatch) {
1022
+ if (!FileQueueEvents.OnEventReceived (objectPathBatch)) {
1023
+ return ;
1024
+ }
1025
+
1019
1026
Y_ENSURE (IsWaitingFileQueueResponse);
1020
- FileQueueEvents.OnEventReceived (objectPathBatch);
1021
1027
IsWaitingFileQueueResponse = false ;
1022
1028
auto & objectBatch = objectPathBatch->Get ()->Record ;
1023
1029
ListedFiles += objectBatch.GetObjectPaths ().size ();
@@ -1038,7 +1044,10 @@ class TS3ReadActor : public TActorBootstrapped<TS3ReadActor>, public IDqComputeA
1038
1044
}
1039
1045
}
1040
1046
void HandleObjectPathReadError (TEvS3FileQueue::TEvObjectPathReadError::TPtr& result) {
1041
- FileQueueEvents.OnEventReceived (result);
1047
+ if (!FileQueueEvents.OnEventReceived (result)) {
1048
+ return ;
1049
+ }
1050
+
1042
1051
IsFileQueueEmpty = true ;
1043
1052
if (!IsConfirmedFileQueueFinish) {
1044
1053
SendPathBatchRequest ();
@@ -1177,10 +1186,18 @@ class TS3ReadActor : public TActorBootstrapped<TS3ReadActor>, public IDqComputeA
1177
1186
}
1178
1187
1179
1188
void Handle (NActors::TEvInterconnect::TEvNodeConnected::TPtr& ev) {
1180
- LOG_T (" TS3ReadActor" ," Handle connected FileQueue " << ev->Get ()->NodeId );
1189
+ LOG_T (" TS3ReadActor" , " Handle connected FileQueue " << ev->Get ()->NodeId );
1181
1190
FileQueueEvents.HandleNodeConnected (ev->Get ()->NodeId );
1182
1191
}
1183
1192
1193
+ void Handle (NActors::TEvents::TEvUndelivered::TPtr& ev) {
1194
+ LOG_T (" TS3ReadActor" , " Handle undelivered FileQueue " );
1195
+ if (!FileQueueEvents.HandleUndelivered (ev)) {
1196
+ TIssues issues{TIssue{TStringBuilder () << " FileQueue was lost" }};
1197
+ Send (ComputeActorId, new TEvAsyncInputError (InputIndex, issues, NYql::NDqProto::StatusIds::INTERNAL_ERROR));
1198
+ }
1199
+ }
1200
+
1184
1201
// IActor & IDqComputeActorAsyncInput
1185
1202
void PassAway () override { // Is called from Compute Actor
1186
1203
LOG_D (" TS3ReadActor" , " PassAway" );
@@ -2117,13 +2134,17 @@ class TS3ReadCoroImpl : public TActorCoroImpl {
2117
2134
LOG_CORO_D (" RunCoroBlockArrowParserOverFile - FINISHED" );
2118
2135
}
2119
2136
2120
- STRICT_STFUNC (StateFunc,
2137
+ STRICT_STFUNC_EXC (StateFunc,
2121
2138
hFunc (TEvPrivate::TEvReadStarted, Handle);
2122
2139
hFunc (TEvPrivate::TEvDataPart, Handle);
2123
2140
hFunc (TEvPrivate::TEvReadFinished, Handle);
2124
2141
hFunc (TEvPrivate::TEvContinue, Handle);
2125
2142
hFunc (TEvPrivate::TEvReadResult2, Handle);
2126
2143
hFunc (NActors::TEvents::TEvPoison, Handle);
2144
+ , catch (const std::exception& e) {
2145
+ TIssues issues{TIssue{TStringBuilder () << " An unknown exception has occurred: '" << e.what () << " '" }};
2146
+ Send (ComputeActorId, new IDqComputeActorAsyncInput::TEvAsyncInputError (InputIndex, issues, NYql::NDqProto::StatusIds::INTERNAL_ERROR));
2147
+ }
2127
2148
)
2128
2149
2129
2150
void ProcessOneEvent () {
@@ -2836,7 +2857,7 @@ class TS3StreamReadActor : public TActorBootstrapped<TS3StreamReadActor>, public
2836
2857
TActorBootstrapped<TS3StreamReadActor>::PassAway ();
2837
2858
}
2838
2859
2839
- STRICT_STFUNC (StateFunc,
2860
+ STRICT_STFUNC_EXC (StateFunc,
2840
2861
hFunc (TEvPrivate::TEvRetryEventFunc, HandleRetry);
2841
2862
hFunc (TEvPrivate::TEvNextBlock, HandleNextBlock);
2842
2863
hFunc (TEvPrivate::TEvNextRecordBatch, HandleNextRecordBatch);
@@ -2847,11 +2868,19 @@ class TS3StreamReadActor : public TActorBootstrapped<TS3StreamReadActor>, public
2847
2868
hFunc (NYql::NDq::TEvRetryQueuePrivate::TEvRetry, Handle);
2848
2869
hFunc (NActors::TEvInterconnect::TEvNodeDisconnected, Handle);
2849
2870
hFunc (NActors::TEvInterconnect::TEvNodeConnected, Handle);
2871
+ hFunc (NActors::TEvents::TEvUndelivered, Handle);
2872
+ , catch (const std::exception& e) {
2873
+ TIssues issues{TIssue{TStringBuilder () << " An unknown exception has occurred: '" << e.what () << " '" }};
2874
+ Send (ComputeActorId, new TEvAsyncInputError (InputIndex, issues, NYql::NDqProto::StatusIds::INTERNAL_ERROR));
2875
+ }
2850
2876
)
2851
2877
2852
2878
void HandleObjectPathBatch(TEvS3FileQueue::TEvObjectPathBatch::TPtr& objectPathBatch) {
2879
+ if (!FileQueueEvents.OnEventReceived (objectPathBatch)) {
2880
+ return ;
2881
+ }
2882
+
2853
2883
Y_ENSURE (IsWaitingFileQueueResponse);
2854
- FileQueueEvents.OnEventReceived (objectPathBatch);
2855
2884
IsWaitingFileQueueResponse = false ;
2856
2885
auto & objectBatch = objectPathBatch->Get ()->Record ;
2857
2886
ListedFiles += objectBatch.GetObjectPaths ().size ();
@@ -2877,7 +2906,10 @@ class TS3StreamReadActor : public TActorBootstrapped<TS3StreamReadActor>, public
2877
2906
}
2878
2907
2879
2908
void HandleObjectPathReadError (TEvS3FileQueue::TEvObjectPathReadError::TPtr& result) {
2880
- FileQueueEvents.OnEventReceived (result);
2909
+ if (!FileQueueEvents.OnEventReceived (result)) {
2910
+ return ;
2911
+ }
2912
+
2881
2913
IsFileQueueEmpty = true ;
2882
2914
if (!IsConfirmedFileQueueFinish) {
2883
2915
LOG_T (" TS3StreamReadActor" , " Sending finish confirmation to FileQueue" );
@@ -2981,8 +3013,7 @@ class TS3StreamReadActor : public TActorBootstrapped<TS3StreamReadActor>, public
2981
3013
FileQueueEvents.OnEventReceived (ev);
2982
3014
}
2983
3015
2984
- void Handle (const NYql::NDq::TEvRetryQueuePrivate::TEvRetry::TPtr& ev) {
2985
- Y_UNUSED (ev);
3016
+ void Handle (const NYql::NDq::TEvRetryQueuePrivate::TEvRetry::TPtr&) {
2986
3017
FileQueueEvents.Retry ();
2987
3018
}
2988
3019
@@ -2992,10 +3023,17 @@ class TS3StreamReadActor : public TActorBootstrapped<TS3StreamReadActor>, public
2992
3023
}
2993
3024
2994
3025
void Handle (NActors::TEvInterconnect::TEvNodeConnected::TPtr& ev) {
2995
- LOG_T (" TS3StreamReadActor" ," Handle connected FileQueue " << ev->Get ()->NodeId );
3026
+ LOG_T (" TS3StreamReadActor" , " Handle connected FileQueue " << ev->Get ()->NodeId );
2996
3027
FileQueueEvents.HandleNodeConnected (ev->Get ()->NodeId );
2997
3028
}
2998
3029
3030
+ void Handle (NActors::TEvents::TEvUndelivered::TPtr& ev) {
3031
+ LOG_T (" TS3StreamReadActor" , " Handle undelivered FileQueue " );
3032
+ if (!FileQueueEvents.HandleUndelivered (ev)) {
3033
+ TIssues issues{TIssue{TStringBuilder () << " FileQueue was lost" }};
3034
+ Send (ComputeActorId, new TEvAsyncInputError (InputIndex, issues, NYql::NDqProto::StatusIds::INTERNAL_ERROR));
3035
+ }
3036
+ }
2999
3037
bool LastFileWasProcessed () const {
3000
3038
return Blocks.empty () && (ListedFiles == CompletedFiles) && IsFileQueueEmpty;
3001
3039
}
0 commit comments