diff options
| author | chertus <[email protected]> | 2023-02-01 17:12:48 +0300 | 
|---|---|---|
| committer | chertus <[email protected]> | 2023-02-01 17:12:48 +0300 | 
| commit | ecf351de6516286e9540d05907f2230f04d6eea3 (patch) | |
| tree | 1dce4678fb87ad00b7cc424eba34abe24a060ac6 | |
| parent | 03856e2c27d01cfcf4bec122adfa26463c0461d9 (diff) | |
do not block tablet activation by tiers metadata
| -rw-r--r-- | ydb/core/tx/columnshard/columnshard.cpp | 7 | ||||
| -rw-r--r-- | ydb/core/tx/columnshard/columnshard__export.cpp | 18 | ||||
| -rw-r--r-- | ydb/core/tx/columnshard/columnshard__write_index.cpp | 20 | ||||
| -rw-r--r-- | ydb/core/tx/columnshard/columnshard_impl.cpp | 16 | ||||
| -rw-r--r-- | ydb/core/tx/columnshard/columnshard_impl.h | 5 | ||||
| -rw-r--r-- | ydb/core/tx/tiering/common.h | 4 | ||||
| -rw-r--r-- | ydb/core/tx/tiering/manager.cpp | 4 | ||||
| -rw-r--r-- | ydb/core/tx/tiering/manager.h | 6 | 
8 files changed, 35 insertions, 45 deletions
diff --git a/ydb/core/tx/columnshard/columnshard.cpp b/ydb/core/tx/columnshard/columnshard.cpp index 733552b3419..444164d5739 100644 --- a/ydb/core/tx/columnshard/columnshard.cpp +++ b/ydb/core/tx/columnshard/columnshard.cpp @@ -29,15 +29,10 @@ void TColumnShard::SwitchToWork(const TActorContext& ctx) {      IndexingActor = ctx.Register(CreateIndexingActor(TabletID(), ctx.SelfID));      CompactionActor = ctx.Register(CreateCompactionActor(TabletID(), ctx.SelfID));      EvictionActor = ctx.Register(CreateEvictionActor(TabletID(), ctx.SelfID)); -    ui32 tieringsCount = 0;      for (auto&& i : Tables) {          ActivateTiering(i.first, i.second.TieringUsage); -        tieringsCount += (i.second.TieringUsage ? 1 : 0); -    } -    TieringWaiting = tieringsCount; -    if (!TieringWaiting) { -        SignalTabletActive(ctx);      } +    SignalTabletActive(ctx);  }  void TColumnShard::OnActivateExecutor(const TActorContext& ctx) { diff --git a/ydb/core/tx/columnshard/columnshard__export.cpp b/ydb/core/tx/columnshard/columnshard__export.cpp index 2caf42183a8..9c52b288a43 100644 --- a/ydb/core/tx/columnshard/columnshard__export.cpp +++ b/ydb/core/tx/columnshard/columnshard__export.cpp @@ -99,26 +99,23 @@ void TTxExportFinish::Complete(const TActorContext& ctx) {      auto& msg = *Ev->Get();      Y_VERIFY(!msg.TierName.empty()); -    Self->ActiveEviction = false;      if (!BlobsToForget.empty()) {          Self->ForgetBlobs(ctx, msg.TierName, std::move(BlobsToForget));      } + +    Y_VERIFY(Self->ActiveEvictions, "Unexpected active evictions count at tablet %lu", Self->TabletID()); +    --Self->ActiveEvictions;  }  void TColumnShard::Handle(TEvPrivate::TEvExport::TPtr& ev, const TActorContext& ctx) {      auto status = ev->Get()->Status; -    Y_VERIFY(!ActiveTtl, "TTL already in progress at tablet %lu", TabletID()); -    Y_VERIFY(!ActiveEviction || status != NKikimrProto::UNKNOWN, "Eviction in progress at tablet %lu", TabletID()); +    Y_VERIFY(ActiveEvictions, "Unexpected active evictions count at tablet %lu", TabletID());      ui64 exportNo = ev->Get()->ExportNo;      auto& tierName = ev->Get()->TierName; -    if (status == NKikimrProto::ERROR) { -        LOG_S_WARN("Export (fail): " << exportNo << " tier '" << tierName << "' error: " -            << ev->Get()->SerializeErrorsToString() << "' at tablet " << TabletID()); -        ActiveEviction = false; -    } else if (status == NKikimrProto::UNKNOWN) { +    if (status == NKikimrProto::UNKNOWN) {          LOG_S_DEBUG("Export (write): " << exportNo << " tier '" << tierName << "' at tablet " << TabletID());          auto& tierBlobs = ev->Get()->Blobs;          Y_VERIFY(tierBlobs.size()); @@ -126,10 +123,13 @@ void TColumnShard::Handle(TEvPrivate::TEvExport::TPtr& ev, const TActorContext&      } else if (status == NKikimrProto::OK) {          LOG_S_DEBUG("Export (apply): " << exportNo << " tier '" << tierName << "' at tablet " << TabletID());          Execute(new TTxExportFinish(this, ev), ctx); +    } else if (status == NKikimrProto::ERROR) { +        LOG_S_WARN("Export (fail): " << exportNo << " tier '" << tierName << "' error: " +            << ev->Get()->SerializeErrorsToString() << "' at tablet " << TabletID()); +        --ActiveEvictions;      } else {          Y_VERIFY(false);      } -    ActiveEviction = true;  }  } diff --git a/ydb/core/tx/columnshard/columnshard__write_index.cpp b/ydb/core/tx/columnshard/columnshard__write_index.cpp index 109507625b7..84dfc8cf81f 100644 --- a/ydb/core/tx/columnshard/columnshard__write_index.cpp +++ b/ydb/core/tx/columnshard/columnshard__write_index.cpp @@ -33,7 +33,6 @@ private:      };      TEvPrivate::TEvWriteIndex::TPtr Ev; -    THashMap<TUnifiedBlobId, NOlap::TPortionEvictionFeatures> BlobsToExport;      THashMap<TString, TPathIdBlobs> ExportTierBlobs;      THashMap<TString, std::vector<NOlap::TEvictedBlob>> TierBlobsToForget;      ui64 ExportNo = 0; @@ -49,6 +48,7 @@ bool TTxWriteIndex::Execute(TTransactionContext& txc, const TActorContext& ctx)      ui64 blobsWritten = 0;      ui64 bytesWritten = 0; +    THashMap<TUnifiedBlobId, NOlap::TPortionEvictionFeatures> blobsToExport;      auto changes = Ev->Get()->IndexChanges;      Y_VERIFY(changes); @@ -141,8 +141,8 @@ bool TTxWriteIndex::Execute(TTransactionContext& txc, const TActorContext& ctx)                  if (tManager.NeedExport()) {                      for (auto& rec : portionInfo.Records) {                          auto& blobId = rec.BlobRange.BlobId; -                        if (!BlobsToExport.count(blobId)) { -                            BlobsToExport.emplace(blobId, evictionFeatures); +                        if (!blobsToExport.count(blobId)) { +                            blobsToExport.emplace(blobId, evictionFeatures);                              NKikimrTxColumnShard::TEvictMetadata meta;                              meta.SetTierName(tierName); @@ -195,7 +195,7 @@ bool TTxWriteIndex::Execute(TTransactionContext& txc, const TActorContext& ctx)                  Self->IncCounter(COUNTER_BYTES_ERASED, blobId.BlobSize());              }              for (const auto& blobId : blobsToEvict) { -                if (BlobsToExport.count(blobId)) { +                if (blobsToExport.count(blobId)) {                      // DS to S3 eviction. Keep source blob in DS till EEvictState::EXTERN state.                      continue;                  } @@ -223,16 +223,16 @@ bool TTxWriteIndex::Execute(TTransactionContext& txc, const TActorContext& ctx)              << ") cannot write index blobs at tablet " << Self->TabletID());      } -    if (BlobsToExport.size()) { -        size_t numBlobs = BlobsToExport.size(); -        for (auto& [blobId, evFeatures] : BlobsToExport) { +    if (blobsToExport.size()) { +        size_t numBlobs = blobsToExport.size(); +        for (auto& [blobId, evFeatures] : blobsToExport) {              auto it = ExportTierBlobs.find(evFeatures.TargetTierName);              if (it == ExportTierBlobs.end()) {                  it = ExportTierBlobs.emplace(evFeatures.TargetTierName, TPathIdBlobs(evFeatures.PathId)).first;              }              it->second.Blobs.emplace(blobId);          } -        BlobsToExport.clear(); +        blobsToExport.clear();          ExportNo = Self->LastExportNo + 1;          Self->LastExportNo += ExportTierBlobs.size(); @@ -274,6 +274,10 @@ bool TTxWriteIndex::Execute(TTransactionContext& txc, const TActorContext& ctx)      } else if (changes->IsTtl()) {          Self->ActiveTtl = false; +        // Do not start new TTL till we evict current PortionsToEvict. We could evict them twice otherwise +        Y_VERIFY(!Self->ActiveEvictions, "Unexpected active evictions count at tablet %lu", Self->TabletID()); +        Self->ActiveEvictions = ExportTierBlobs.size(); +          Self->IncCounter(ok ? COUNTER_TTL_SUCCESS : COUNTER_TTL_FAIL);          Self->IncCounter(COUNTER_EVICTION_BLOBS_WRITTEN, blobsWritten);          Self->IncCounter(COUNTER_EVICTION_BYTES_WRITTEN, bytesWritten); diff --git a/ydb/core/tx/columnshard/columnshard_impl.cpp b/ydb/core/tx/columnshard/columnshard_impl.cpp index 21ae0d0ed73..f5a70716e53 100644 --- a/ydb/core/tx/columnshard/columnshard_impl.cpp +++ b/ydb/core/tx/columnshard/columnshard_impl.cpp @@ -869,6 +869,10 @@ std::unique_ptr<TEvPrivate::TEvEviction> TColumnShard::SetupTtl(const THashMap<u          LOG_S_DEBUG("TTL already in progress at tablet " << TabletID());          return {};      } +    if (ActiveEvictions) { +        LOG_S_DEBUG("Do not start TTL while eviction is in progress at tablet " << TabletID()); +        return {}; +    }      if (!PrimaryIndex) {          LOG_S_NOTICE("TTL not started. No index for TTL at tablet " << TabletID());          return {}; @@ -1082,18 +1086,10 @@ TActorId TColumnShard::GetS3ActorForTier(const TString& tierId) const {      return Tiers->GetStorageActorId(tierId);  } -void TColumnShard::Handle(NTiers::TEvTiersManagerReadyForUsage::TPtr& /*ev*/) { -    Y_VERIFY(Tiers); -    Y_VERIFY(Tiers->IsReadyForUsage()); -    if (TieringWaiting) { -        TieringWaiting = false; -        SignalTabletActive(TActivationContext::AsActorContext()); -    } -} -  void TColumnShard::Handle(NMetadata::NProvider::TEvRefreshSubscriberData::TPtr& ev) {      Y_VERIFY(Tiers); -    ALS_INFO(NKikimrServices::TX_COLUMNSHARD) << "test handle NMetadata::NProvider::TEvRefreshSubscriberData" << ev->Get()->GetSnapshot()->SerializeToString(); +    ALS_INFO(NKikimrServices::TX_COLUMNSHARD) << "test handle NMetadata::NProvider::TEvRefreshSubscriberData" +        << ev->Get()->GetSnapshot()->SerializeToString();      Tiers->TakeConfigs(ev->Get()->GetSnapshot(), nullptr);  } diff --git a/ydb/core/tx/columnshard/columnshard_impl.h b/ydb/core/tx/columnshard/columnshard_impl.h index 53317909e84..cdf4b7346ae 100644 --- a/ydb/core/tx/columnshard/columnshard_impl.h +++ b/ydb/core/tx/columnshard/columnshard_impl.h @@ -126,7 +126,6 @@ class TColumnShard      void Handle(TEvPrivate::TEvForget::TPtr& ev, const TActorContext& ctx);      void Handle(TEvBlobStorage::TEvCollectGarbageResult::TPtr& ev, const TActorContext& ctx);      void Handle(NMetadata::NProvider::TEvRefreshSubscriberData::TPtr& ev); -    void Handle(NTiers::TEvTiersManagerReadyForUsage::TPtr& ev);      ITransaction* CreateTxInitSchema(); @@ -229,7 +228,6 @@ protected:              HFunc(TEvPrivate::TEvScanStats, Handle);              HFunc(TEvPrivate::TEvReadFinished, Handle);              HFunc(TEvPrivate::TEvPeriodicWakeup, Handle); -            hFunc(NTiers::TEvTiersManagerReadyForUsage, Handle);          default:              if (!HandleDefaultEvents(ev, ctx)) {                  LOG_S_WARN("TColumnShard.StateWork at " << TabletID() @@ -360,7 +358,6 @@ private:      TActorId EvictionActor;      TActorId StatsReportPipe; -    bool TieringWaiting = false;      std::shared_ptr<TTiersManager> Tiers;      std::unique_ptr<TTabletCountersBase> TabletCountersPtr;      TTabletCountersBase* TabletCounters; @@ -389,7 +386,7 @@ private:      bool ActiveIndexingOrCompaction = false;      bool ActiveCleanup = false;      bool ActiveTtl = false; -    bool ActiveEviction = false; +    ui32 ActiveEvictions = 0;      std::unique_ptr<TBlobManager> BlobManager;      TInFlightReadsTracker InFlightReadsTracker;      TSettings Settings; diff --git a/ydb/core/tx/tiering/common.h b/ydb/core/tx/tiering/common.h index 83a5a3139ed..a00601a7346 100644 --- a/ydb/core/tx/tiering/common.h +++ b/ydb/core/tx/tiering/common.h @@ -16,9 +16,5 @@ enum EEvents {      EvEnd  }; -class TEvTiersManagerReadyForUsage: public TEventLocal<TEvTiersManagerReadyForUsage, EvTiersManagerReadyForUsage> { - -}; -  static_assert(EEvents::EvEnd < EventSpaceEnd(TKikimrEvents::ES_TIERING), "expect EvEnd < EventSpaceEnd(TKikimrEvents::ES_TIERING)");  } diff --git a/ydb/core/tx/tiering/manager.cpp b/ydb/core/tx/tiering/manager.cpp index 78ed9e33b05..360f9974930 100644 --- a/ydb/core/tx/tiering/manager.cpp +++ b/ydb/core/tx/tiering/manager.cpp @@ -162,8 +162,6 @@ void TTiersManager::TakeConfigs(NMetadata::NFetcher::ISnapshot::TPtr snapshotExt          auto& manager = Managers.emplace(i.second.GetTierName(), std::move(localManager)).first->second;          manager.Start(Secrets);      } -    ReadyForUsageFlag = true; -    TActivationContext::AsActorContext().Send(TabletActorId, new NTiers::TEvTiersManagerReadyForUsage);  }  TActorId TTiersManager::GetStorageActorId(const TString& tierId) { @@ -216,7 +214,7 @@ NMetadata::NFetcher::ISnapshotsFetcher::TPtr TTiersManager::GetExternalDataManip  THashMap<ui64, NKikimr::NOlap::TTiering> TTiersManager::GetTiering() const {      THashMap<ui64, NKikimr::NOlap::TTiering> result; -    if (!Snapshot) { +    if (!IsReady()) {          return result;      }      auto snapshotPtr = std::dynamic_pointer_cast<NTiers::TConfigsSnapshot>(Snapshot); diff --git a/ydb/core/tx/tiering/manager.h b/ydb/core/tx/tiering/manager.h index 1ddf79da156..258058fe279 100644 --- a/ydb/core/tx/tiering/manager.h +++ b/ydb/core/tx/tiering/manager.h @@ -41,7 +41,6 @@ private:      TActor* Actor = nullptr;      std::unordered_map<ui64, TString> PathIdTiering;      YDB_READONLY_DEF(TManagers, Managers); -    YDB_READONLY_FLAG(ReadyForUsage, false);      std::shared_ptr<NMetadata::NSecret::TSnapshot> Secrets;      NMetadata::NFetcher::ISnapshot::TPtr Snapshot; @@ -62,6 +61,11 @@ public:      void DisablePathId(const ui64 pathId) {          PathIdTiering.erase(pathId);      } + +    bool IsReady() const { +        return !!Snapshot; +    } +      TTiersManager& Start(std::shared_ptr<TTiersManager> ownerPtr);      TTiersManager& Stop();      TActorId GetStorageActorId(const TString& tierId);  | 
