@@ -12,6 +12,7 @@ class ISourcesCollection {
12
12
virtual std::shared_ptr<IDataSource> DoExtractNext () = 0;
13
13
virtual bool DoCheckInFlightLimits () const = 0;
14
14
virtual void DoOnSourceFinished (const std::shared_ptr<IDataSource>& source) = 0;
15
+ virtual void DoOnIntervalResult (const std::shared_ptr<arrow::Table>& table, const std::shared_ptr<IDataSource>& source) = 0;
15
16
virtual void DoClear () = 0;
16
17
17
18
TPositiveControlInteger SourcesInFlightCount;
@@ -30,6 +31,10 @@ class ISourcesCollection {
30
31
return DoBuildCursor (source, readyRecords);
31
32
}
32
33
34
+ void OnIntervalResult (const std::shared_ptr<arrow::Table>& table, const std::shared_ptr<IDataSource>& source) {
35
+ return DoOnIntervalResult (table, source);
36
+ }
37
+
33
38
TString DebugString () const {
34
39
return DoDebugString ();
35
40
}
@@ -87,6 +92,8 @@ class TNotSortedCollection: public ISourcesCollection {
87
92
virtual bool DoCheckInFlightLimits () const override {
88
93
return InFlightCount < InFlightLimit;
89
94
}
95
+ virtual void DoOnIntervalResult (const std::shared_ptr<arrow::Table>& /* table*/ , const std::shared_ptr<IDataSource>& /* source*/ ) override {
96
+ }
90
97
virtual void DoOnSourceFinished (const std::shared_ptr<IDataSource>& source) override {
91
98
if (!source->GetResultRecordsCount () && InFlightLimit * 2 < GetMaxInFlight ()) {
92
99
InFlightLimit *= 2 ;
@@ -103,8 +110,7 @@ class TNotSortedCollection: public ISourcesCollection {
103
110
TNotSortedCollection (const std::shared_ptr<TSpecialReadContext>& context, std::deque<TSourceConstructor>&& sources,
104
111
const std::shared_ptr<IScanCursor>& cursor, const std::optional<ui32> limit)
105
112
: TBase(context)
106
- , Limit(limit)
107
- {
113
+ , Limit(limit) {
108
114
if (Limit) {
109
115
InFlightLimit = 1 ;
110
116
} else {
@@ -141,6 +147,8 @@ class TSortedFullScanCollection: public ISourcesCollection {
141
147
virtual std::shared_ptr<IScanCursor> DoBuildCursor (const std::shared_ptr<IDataSource>& source, const ui32 readyRecords) const override {
142
148
return std::make_shared<TSimpleScanCursor>(source->GetStartPKRecordBatch (), source->GetSourceId (), readyRecords);
143
149
}
150
+ virtual void DoOnIntervalResult (const std::shared_ptr<arrow::Table>& /* table*/ , const std::shared_ptr<IDataSource>& /* source*/ ) override {
151
+ }
144
152
virtual std::shared_ptr<IDataSource> DoExtractNext () override {
145
153
AFL_VERIFY (HeapSources.size ());
146
154
auto result = HeapSources.front ().Construct (Context);
@@ -192,6 +200,13 @@ class TScanWithLimitCollection: public ISourcesCollection {
192
200
, SourceId(source->GetSourceId ())
193
201
, SourceIdx(source->GetSourceIdx ()) {
194
202
}
203
+
204
+ TFinishedDataSource (const std::shared_ptr<IDataSource>& source, const ui32 partSize)
205
+ : RecordsCount(partSize)
206
+ , SourceId(source->GetSourceId ())
207
+ , SourceIdx(source->GetSourceIdx ()) {
208
+ AFL_VERIFY (partSize < source->GetResultRecordsCount ());
209
+ }
195
210
};
196
211
197
212
std::deque<TSourceConstructor> HeapSources;
@@ -203,6 +218,7 @@ class TScanWithLimitCollection: public ISourcesCollection {
203
218
std::map<TCompareKeyForScanSequence, TFinishedDataSource> FinishedSources;
204
219
std::set<TCompareKeyForScanSequence> FetchingInFlightSources;
205
220
221
+ virtual void DoOnIntervalResult (const std::shared_ptr<arrow::Table>& table, const std::shared_ptr<IDataSource>& source) override ;
206
222
virtual std::shared_ptr<IScanCursor> DoBuildCursor (const std::shared_ptr<IDataSource>& source, const ui32 readyRecords) const override {
207
223
return std::make_shared<TSimpleScanCursor>(source->GetStartPKRecordBatch (), source->GetSourceId (), readyRecords);
208
224
}
@@ -214,7 +230,8 @@ class TScanWithLimitCollection: public ISourcesCollection {
214
230
}
215
231
virtual std::shared_ptr<IDataSource> DoExtractNext () override ;
216
232
virtual bool DoCheckInFlightLimits () const override {
217
- return (FetchingInFlightCount < GetMaxInFlight ()) && (FullIntervalsFetchingCount < InFlightLimit);
233
+ return (FetchingInFlightCount < InFlightLimit);
234
+ // &&(FullIntervalsFetchingCount < InFlightLimit);
218
235
}
219
236
virtual void DoOnSourceFinished (const std::shared_ptr<IDataSource>& source) override ;
220
237
ui32 GetInFlightIntervalsCount (const TCompareKeyForScanSequence& from, const TCompareKeyForScanSequence& to) const ;
0 commit comments