@@ -81,7 +81,7 @@ TColumnShard::TColumnShard(TTabletStorageInfo* info, const TActorId& tablet)
8181 , PeriodicWakeupActivationPeriod(NYDBTest::TControllers::GetColumnShardController()->GetPeriodicWakeupActivationPeriod ())
8282 , StatsReportInterval(NYDBTest::TControllers::GetColumnShardController()->GetStatsReportInterval())
8383 , InFlightReadsTracker(StoragesManager, Counters.GetRequestsTracingCounters())
84- , TablesManager(StoragesManager, std::make_shared<NOlap::NDataAccessorControl::TLocalManager>(), info->TabletID)
84+ , TablesManager(StoragesManager, std::make_shared<NOlap::NDataAccessorControl::TLocalManager>(nullptr ), info->TabletID)
8585 , Subscribers(std::make_shared<NSubscriber::TManager>(*this ))
8686 , PipeClientCache(NTabletPipe::CreateBoundedClientCache(new NTabletPipe::TBoundedClientCacheConfig(), GetPipeClientConfig()))
8787 , InsertTable(std::make_unique<NOlap::TInsertTable>())
@@ -1218,23 +1218,36 @@ void TColumnShard::Handle(NOlap::NDataSharing::NEvents::TEvFinishedFromSource::T
12181218class TTxAskPortionChunks : public TTransactionBase <TColumnShard> {
12191219private:
12201220 using TBase = TTransactionBase<TColumnShard>;
1221- std::shared_ptr<NOlap::TDataAccessorsRequest> Request ;
1221+ std::shared_ptr<NOlap::NDataAccessorControl::IAccessorCallback> FetchCallback ;
12221222 THashMap<ui64, std::vector<NOlap::TPortionInfo::TConstPtr>> PortionsByPath;
1223- THashMap<ui64, std::vector<NOlap::TPortionDataAccessor>> Accessors;
1224- NOlap::TDataAccessorsResult Result;
1223+ std::vector<NOlap::TPortionDataAccessor> FetchedAccessors;
12251224
12261225public:
1227- TTxAskPortionChunks (TColumnShard* self, const std::shared_ptr<NOlap::TDataAccessorsRequest>& request)
1226+ TTxAskPortionChunks (TColumnShard* self, const std::shared_ptr<NOlap::NDataAccessorControl::IAccessorCallback>& fetchCallback,
1227+ THashMap<ui64, NOlap::TPortionInfo::TConstPtr>&& portions)
12281228 : TBase(self)
1229- , Request(request ) {
1230- for (auto && i : Request-> GetPathIds () ) {
1231- PortionsByPath. emplace (i, Request-> StartFetching (i) );
1229+ , FetchCallback(fetchCallback ) {
1230+ for (auto && i : portions ) {
1231+ PortionsByPath[i. second -> GetPathId ()]. emplace_back (i. second );
12321232 }
12331233 }
12341234
12351235 bool Execute (TTransactionContext& txc, const TActorContext& /* ctx*/ ) override {
12361236 NIceDb::TNiceDb db (txc.DB );
12371237 TBlobGroupSelector selector (Self->Info ());
1238+ bool reask = false ;
1239+ for (auto && i : PortionsByPath) {
1240+ for (auto && p : i.second ) {
1241+ auto rowset = db.Table <NColumnShard::Schema::IndexColumnsV1>().Prefix (p->GetPathId (), p->GetPortionId ()).Select ();
1242+ if (!rowset.IsReady ()) {
1243+ reask = true ;
1244+ }
1245+ }
1246+ }
1247+ if (reask) {
1248+ return false ;
1249+ }
1250+
12381251 for (auto && i : PortionsByPath) {
12391252 while (i.second .size ()) {
12401253 auto p = i.second .back ();
@@ -1264,26 +1277,23 @@ class TTxAskPortionChunks: public TTransactionBase<TColumnShard> {
12641277 }
12651278 }
12661279 }
1267- NOlap::TPortionDataAccessor accessor =
1268- NOlap::TPortionAccessorConstructor::BuildForLoading (p, std::move (records), std::move (indexes));
1269- Accessors[i.first ].emplace_back (accessor);
1280+ FetchedAccessors.emplace_back (NOlap::TPortionAccessorConstructor::BuildForLoading (p, std::move (records), std::move (indexes)));
12701281 i.second .pop_back ();
12711282 }
12721283 }
1284+
1285+ FetchCallback->OnAccessorsFetched (std::move (FetchedAccessors));
12731286 return true ;
12741287 }
12751288 void Complete (const TActorContext& /* ctx*/ ) override {
1276- for (auto && i : Accessors) {
1277- Request->AddData (i.first , std::move (i.second ));
1278- }
12791289 }
12801290 TTxType GetTxType () const override {
12811291 return TXTYPE_WRITE_INDEX;
12821292 }
12831293};
12841294
1285- void TColumnShard::Handle (NOlap::NDataAccessorControl::TEvAskDataAccessors ::TPtr& ev, const TActorContext& /* ctx*/ ) {
1286- Execute (new TTxAskPortionChunks (this , ev->Get ()->GetRequest ( )));
1295+ void TColumnShard::Handle (NOlap::NDataAccessorControl::TEvAskTabletDataAccessors ::TPtr& ev, const TActorContext& /* ctx*/ ) {
1296+ Execute (new TTxAskPortionChunks (this , ev->Get ()->GetCallback (), std::move (ev-> Get ()-> MutablePortions () )));
12871297}
12881298
12891299void TColumnShard::Handle (NOlap::NDataSharing::NEvents::TEvAckFinishFromInitiator::TPtr& ev, const TActorContext& ctx) {
@@ -1384,7 +1394,7 @@ void TColumnShard::ActivateTiering(const ui64 pathId, const TString& useTiering)
13841394
13851395void TColumnShard::Enqueue (STFUNC_SIG) {
13861396 const TLogContextGuard gLogging = NActors::TLogContextBuilder::Build (NKikimrServices::TX_COLUMNSHARD)(" tablet_id" , TabletID ())(
1387- " self_id" , SelfId ())(" process" , " Enqueue" )(" ev" , ev->ToString ());
1397+ " self_id" , SelfId ())(" process" , " Enqueue" )(" ev" , ev->GetTypeName ());
13881398 switch (ev->GetTypeRewrite ()) {
13891399 HFunc (TEvPrivate::TEvTieringModified, Handle);
13901400 HFunc (TEvPrivate::TEvNormalizerResult, Handle);
0 commit comments