diff --git a/ydb/core/blobstorage/nodewarden/node_warden_impl.cpp b/ydb/core/blobstorage/nodewarden/node_warden_impl.cpp index 4ab4133d39a3..0cc42ece29d7 100644 --- a/ydb/core/blobstorage/nodewarden/node_warden_impl.cpp +++ b/ydb/core/blobstorage/nodewarden/node_warden_impl.cpp @@ -193,10 +193,6 @@ void TNodeWarden::Bootstrap() { icb->RegisterSharedControl(DefaultHugeGarbagePerMille, "VDiskControls.DefaultHugeGarbagePerMille"); icb->RegisterSharedControl(HugeDefragFreeSpaceBorderPerMille, "VDiskControls.HugeDefragFreeSpaceBorderPerMille"); icb->RegisterSharedControl(MaxChunksToDefragInflight, "VDiskControls.MaxChunksToDefragInflight"); - icb->RegisterSharedControl(EnableExplicitCompactionAfterDefrag, "VDiskControls.EnableExplicitCompactionAfterDefrag"); - icb->RegisterSharedControl(FreshCompMaxInFlightWrites, "VDiskControls.FreshCompMaxInFlightWrites"); - icb->RegisterSharedControl(HullCompMaxInFlightWrites, "VDiskControls.HullCompMaxInFlightWrites"); - icb->RegisterSharedControl(HullCompMaxInFlightReads, "VDiskControls.HullCompMaxInFlightReads"); icb->RegisterSharedControl(CostMetricsParametersByMedia[NPDisk::DEVICE_TYPE_ROT].BurstThresholdNs, "VDiskControls.BurstThresholdNsHDD"); diff --git a/ydb/core/blobstorage/nodewarden/node_warden_impl.h b/ydb/core/blobstorage/nodewarden/node_warden_impl.h index 0d4237201dd2..1002ab8746d6 100644 --- a/ydb/core/blobstorage/nodewarden/node_warden_impl.h +++ b/ydb/core/blobstorage/nodewarden/node_warden_impl.h @@ -142,10 +142,6 @@ namespace NKikimr::NStorage { TControlWrapper DefaultHugeGarbagePerMille; TControlWrapper HugeDefragFreeSpaceBorderPerMille; TControlWrapper MaxChunksToDefragInflight; - TControlWrapper EnableExplicitCompactionAfterDefrag; - TControlWrapper FreshCompMaxInFlightWrites; - TControlWrapper HullCompMaxInFlightWrites; - TControlWrapper HullCompMaxInFlightReads; TReplQuoter::TPtr ReplNodeRequestQuoter; TReplQuoter::TPtr ReplNodeResponseQuoter; diff --git a/ydb/core/blobstorage/nodewarden/node_warden_vdisk.cpp b/ydb/core/blobstorage/nodewarden/node_warden_vdisk.cpp index 92e255cf9e69..6d8a566dea3c 100644 --- a/ydb/core/blobstorage/nodewarden/node_warden_vdisk.cpp +++ b/ydb/core/blobstorage/nodewarden/node_warden_vdisk.cpp @@ -182,10 +182,6 @@ namespace NKikimr::NStorage { vdiskConfig->DefaultHugeGarbagePerMille = DefaultHugeGarbagePerMille; vdiskConfig->HugeDefragFreeSpaceBorderPerMille = HugeDefragFreeSpaceBorderPerMille; vdiskConfig->MaxChunksToDefragInflight = MaxChunksToDefragInflight; - vdiskConfig->EnableExplicitCompactionAfterDefrag = EnableExplicitCompactionAfterDefrag; - vdiskConfig->FreshCompMaxInFlightWrites = FreshCompMaxInFlightWrites; - vdiskConfig->HullCompMaxInFlightWrites = HullCompMaxInFlightWrites; - vdiskConfig->HullCompMaxInFlightReads = HullCompMaxInFlightReads; vdiskConfig->EnableLocalSyncLogDataCutting = EnableLocalSyncLogDataCutting; if (deviceType == NPDisk::EDeviceType::DEVICE_TYPE_ROT) { diff --git a/ydb/core/blobstorage/vdisk/common/vdisk_config.cpp b/ydb/core/blobstorage/vdisk/common/vdisk_config.cpp index d226f25736e3..d9fa9ee01442 100644 --- a/ydb/core/blobstorage/vdisk/common/vdisk_config.cpp +++ b/ydb/core/blobstorage/vdisk/common/vdisk_config.cpp @@ -81,11 +81,7 @@ namespace NKikimr { HandoffTimeout = TDuration::Seconds(10); RunRepl = !baseInfo.ReadOnly; - if (const auto& perf = VDiskPerformance.find(baseInfo.DeviceType); perf != VDiskPerformance.end()) { - ReplMaxTimeToMakeProgress = perf->second.ReplMaxTimeToMakeProgress; - } else { - ReplMaxTimeToMakeProgress = TDuration::Minutes(180); - } + ReplMaxTimeToMakeProgress = VDiskPerformance.at(baseInfo.DeviceType).ReplMaxTimeToMakeProgress; SkeletonFrontGets_MaxInFlightCount = 24; SkeletonFrontGets_MaxInFlightCost = 200000000; // 200ms diff --git a/ydb/core/blobstorage/vdisk/common/vdisk_config.h b/ydb/core/blobstorage/vdisk/common/vdisk_config.h index d882d3d6ea92..37a99c427377 100644 --- a/ydb/core/blobstorage/vdisk/common/vdisk_config.h +++ b/ydb/core/blobstorage/vdisk/common/vdisk_config.h @@ -126,9 +126,9 @@ namespace NKikimr { ui32 HullCompSortedPartsNum; double HullCompLevelRateThreshold; double HullCompFreeSpaceThreshold; - TControlWrapper FreshCompMaxInFlightWrites; - TControlWrapper HullCompMaxInFlightWrites; - TControlWrapper HullCompMaxInFlightReads; + ui32 FreshCompMaxInFlightWrites; + ui32 HullCompMaxInFlightWrites; + ui32 HullCompMaxInFlightReads; double HullCompReadBatchEfficiencyThreshold; ui64 AnubisOsirisMaxInFly; bool AddHeader; @@ -239,7 +239,6 @@ namespace NKikimr { TControlWrapper DefaultHugeGarbagePerMille = 300; TControlWrapper HugeDefragFreeSpaceBorderPerMille = 260; TControlWrapper MaxChunksToDefragInflight = 10; - TControlWrapper EnableExplicitCompactionAfterDefrag = 1; ///////////// COST METRICS SETTINGS //////////////// bool UseCostTracker = true; diff --git a/ydb/core/blobstorage/vdisk/defrag/defrag_actor.cpp b/ydb/core/blobstorage/vdisk/defrag/defrag_actor.cpp index 7423df0fb323..873a03bfea68 100644 --- a/ydb/core/blobstorage/vdisk/defrag/defrag_actor.cpp +++ b/ydb/core/blobstorage/vdisk/defrag/defrag_actor.cpp @@ -269,7 +269,7 @@ namespace NKikimr { InProgress = true; ActiveActors.Insert(ctx.Register(CreateDefragQuantumActor(DCtx, GInfo->GetVDiskId(DCtx->VCtx->ShortSelfVDisk), - std::visit([](auto& r) { return GetChunksToDefrag(r); }, task.Request), DCtx->VCfg->EnableExplicitCompactionAfterDefrag)), __FILE__, __LINE__, + std::visit([](auto& r) { return GetChunksToDefrag(r); }, task.Request))), __FILE__, __LINE__, ctx, NKikimrServices::BLOBSTORAGE); } diff --git a/ydb/core/blobstorage/vdisk/defrag/defrag_quantum.cpp b/ydb/core/blobstorage/vdisk/defrag/defrag_quantum.cpp index c7edf3e719d7..9f3cb4006e1b 100644 --- a/ydb/core/blobstorage/vdisk/defrag/defrag_quantum.cpp +++ b/ydb/core/blobstorage/vdisk/defrag/defrag_quantum.cpp @@ -19,7 +19,6 @@ namespace NKikimr { std::shared_ptr DCtx; const TVDiskID SelfVDiskId; std::optional ChunksToDefrag; - bool NeedCompaction; enum { EvResume = EventSpaceBegin(TEvents::ES_PRIVATE) @@ -29,12 +28,11 @@ namespace NKikimr { public: TDefragQuantum(const std::shared_ptr& dctx, const TVDiskID& selfVDiskId, - std::optional chunksToDefrag, bool needCompaction) + std::optional chunksToDefrag) : TActorCoroImpl(64_KB, true) , DCtx(dctx) , SelfVDiskId(selfVDiskId) , ChunksToDefrag(std::move(chunksToDefrag)) - , NeedCompaction(needCompaction) {} void ProcessUnexpectedEvent(TAutoPtr ev) { @@ -94,9 +92,7 @@ namespace NKikimr { stat.RewrittenRecs = ev->Get()->RewrittenRecs; stat.RewrittenBytes = ev->Get()->RewrittenBytes; - if (NeedCompaction) { - Compact(); - } + Compact(); auto hugeStat = GetHugeStat(); Y_DEBUG_ABORT_UNLESS(hugeStat.LockedChunks.size() < 100); @@ -133,8 +129,8 @@ namespace NKikimr { }; IActor *CreateDefragQuantumActor(const std::shared_ptr& dctx, const TVDiskID& selfVDiskId, - std::optional chunksToDefrag, bool needCompaction) { - return new TActorCoro(MakeHolder(dctx, selfVDiskId, std::move(chunksToDefrag), needCompaction), + std::optional chunksToDefrag) { + return new TActorCoro(MakeHolder(dctx, selfVDiskId, std::move(chunksToDefrag)), NKikimrServices::TActivity::BS_DEFRAG_QUANTUM); } diff --git a/ydb/core/blobstorage/vdisk/defrag/defrag_quantum.h b/ydb/core/blobstorage/vdisk/defrag/defrag_quantum.h index d74c84015013..bc07685b5480 100644 --- a/ydb/core/blobstorage/vdisk/defrag/defrag_quantum.h +++ b/ydb/core/blobstorage/vdisk/defrag/defrag_quantum.h @@ -35,7 +35,7 @@ namespace NKikimr { struct TChunksToDefrag; IActor *CreateDefragQuantumActor(const std::shared_ptr& dctx, const TVDiskID& selfVDiskId, - std::optional chunksToDefrag, bool needCompaction); + std::optional chunksToDefrag); } // NKikimr diff --git a/ydb/core/blobstorage/vdisk/hulldb/base/blobstorage_hulldefs.cpp b/ydb/core/blobstorage/vdisk/hulldb/base/blobstorage_hulldefs.cpp index dcb4bc62d026..ad5f8d223f08 100644 --- a/ydb/core/blobstorage/vdisk/hulldb/base/blobstorage_hulldefs.cpp +++ b/ydb/core/blobstorage/vdisk/hulldb/base/blobstorage_hulldefs.cpp @@ -85,12 +85,12 @@ namespace NKikimr { str << "{Id# " << Id << "}"; } - THullCtx::THullCtx(TVDiskContextPtr vctx, const TIntrusivePtr vcfg, ui32 chunkSize, ui32 compWorthReadSize, - bool freshCompaction, bool gcOnlySynced, bool allowKeepFlags, bool barrierValidation, ui32 hullSstSizeInChunksFresh, - ui32 hullSstSizeInChunksLevel, double hullCompFreeSpaceThreshold, double hullCompReadBatchEfficiencyThreshold, + THullCtx::THullCtx(TVDiskContextPtr vctx, ui32 chunkSize, ui32 compWorthReadSize, bool freshCompaction, + bool gcOnlySynced, bool allowKeepFlags, bool barrierValidation, ui32 hullSstSizeInChunksFresh, + ui32 hullSstSizeInChunksLevel, double hullCompFreeSpaceThreshold, ui32 freshCompMaxInFlightWrites, + ui32 hullCompMaxInFlightWrites, ui32 hullCompMaxInFlightReads, double hullCompReadBatchEfficiencyThreshold, TDuration hullCompStorageRatioCalcPeriod, TDuration hullCompStorageRatioMaxCalcDuration, bool addHeader) : VCtx(std::move(vctx)) - , VCfg(vcfg) , IngressCache(TIngressCache::Create(VCtx->Top, VCtx->ShortSelfVDisk)) , ChunkSize(chunkSize) , CompWorthReadSize(compWorthReadSize) @@ -101,6 +101,9 @@ namespace NKikimr { , HullSstSizeInChunksFresh(hullSstSizeInChunksFresh) , HullSstSizeInChunksLevel(hullSstSizeInChunksLevel) , HullCompFreeSpaceThreshold(hullCompFreeSpaceThreshold) + , FreshCompMaxInFlightWrites(freshCompMaxInFlightWrites) + , HullCompMaxInFlightWrites(hullCompMaxInFlightWrites) + , HullCompMaxInFlightReads(hullCompMaxInFlightReads) , HullCompReadBatchEfficiencyThreshold(hullCompReadBatchEfficiencyThreshold) , HullCompStorageRatioCalcPeriod(hullCompStorageRatioCalcPeriod) , HullCompStorageRatioMaxCalcDuration(hullCompStorageRatioMaxCalcDuration) diff --git a/ydb/core/blobstorage/vdisk/hulldb/base/blobstorage_hulldefs.h b/ydb/core/blobstorage/vdisk/hulldb/base/blobstorage_hulldefs.h index 3bdbf6a2ba9f..72406faee5ab 100644 --- a/ydb/core/blobstorage/vdisk/hulldb/base/blobstorage_hulldefs.h +++ b/ydb/core/blobstorage/vdisk/hulldb/base/blobstorage_hulldefs.h @@ -121,7 +121,6 @@ namespace NKikimr { /////////////////////////////////////////////////////////////////////////////////////// struct THullCtx : public TThrRefBase { TVDiskContextPtr VCtx; - const TIntrusivePtr VCfg; const TIntrusivePtr IngressCache; const ui32 ChunkSize; const ui32 CompWorthReadSize; @@ -132,6 +131,9 @@ namespace NKikimr { const ui32 HullSstSizeInChunksFresh; const ui32 HullSstSizeInChunksLevel; const double HullCompFreeSpaceThreshold; + const ui32 FreshCompMaxInFlightWrites; + const ui32 HullCompMaxInFlightWrites; + const ui32 HullCompMaxInFlightReads; const double HullCompReadBatchEfficiencyThreshold; const TDuration HullCompStorageRatioCalcPeriod; const TDuration HullCompStorageRatioMaxCalcDuration; @@ -142,7 +144,6 @@ namespace NKikimr { THullCtx( TVDiskContextPtr vctx, - const TIntrusivePtr vcfg, ui32 chunkSize, ui32 compWorthReadSize, bool freshCompaction, @@ -152,6 +153,9 @@ namespace NKikimr { ui32 hullSstSizeInChunksFresh, ui32 hullSstSizeInChunksLevel, double hullCompFreeSpaceThreshold, + ui32 freshCompMaxInFlightWrites, + ui32 hullCompMaxInFlightWrites, + ui32 hullCompMaxInFlightReads, double hullCompReadBatchEfficiencyThreshold, TDuration hullCompStorageRatioCalcPeriod, TDuration hullCompStorageRatioMaxCalcDuration, diff --git a/ydb/core/blobstorage/vdisk/hulldb/base/hullds_ut.h b/ydb/core/blobstorage/vdisk/hulldb/base/hullds_ut.h index 94620df576b9..28bbf5d1a0bd 100644 --- a/ydb/core/blobstorage/vdisk/hulldb/base/hullds_ut.h +++ b/ydb/core/blobstorage/vdisk/hulldb/base/hullds_ut.h @@ -12,13 +12,11 @@ namespace NKikimr { : ChunkSize(chunkSize) , CompWorthReadSize(compWorthReadSize) , GroupInfo(TBlobStorageGroupType::ErasureMirror3, 2, 4) - , VCfg(TVDiskConfig::TBaseInfo::SampleForTests()) , VCtx(new TVDiskContext(TActorId(), GroupInfo.PickTopology(), new ::NMonitoring::TDynamicCounters(), TVDiskID(), nullptr, NPDisk::DEVICE_TYPE_UNKNOWN)) , HullCtx( new THullCtx( VCtx, - MakeIntrusive(VCfg), ChunkSize, CompWorthReadSize, true, @@ -28,10 +26,13 @@ namespace NKikimr { 1, // HullSstSizeInChunksFresh 1, // HullSstSizeInChunksLevel 2.0, + 10, // FreshCompMaxInFlightWrites + 10, // HullCompMaxInFlightWrites + 20, // HullCompMaxInFlightReads 0.5, TDuration::Minutes(5), TDuration::Seconds(1), - true))// AddHeader + true)) // AddHeader , LevelIndexSettings( HullCtx, 8u, // Level0MaxSstsAtOnce @@ -59,7 +60,6 @@ namespace NKikimr { const ui32 ChunkSize; const ui64 CompWorthReadSize; TBlobStorageGroupInfo GroupInfo; - TVDiskConfig VCfg; TVDiskContextPtr VCtx; THullCtxPtr HullCtx; TLevelIndexSettings LevelIndexSettings; diff --git a/ydb/core/blobstorage/vdisk/hullop/blobstorage_hullcompactworker.h b/ydb/core/blobstorage/vdisk/hullop/blobstorage_hullcompactworker.h index ecd30e0df3f4..7ebfb73f63d0 100644 --- a/ydb/core/blobstorage/vdisk/hullop/blobstorage_hullcompactworker.h +++ b/ydb/core/blobstorage/vdisk/hullop/blobstorage_hullcompactworker.h @@ -148,9 +148,15 @@ namespace NKikimr { // number of currently unresponded write requests ui32 InFlightWrites = 0; + // maximum number of such requests + ui32 MaxInFlightWrites; + // number of currently unresponded read requests ui32 InFlightReads = 0; + // maximum number of such requests + ui32 MaxInFlightReads; + // vector of freed huge blobs TDiskPartVec FreedHugeBlobs; @@ -289,10 +295,14 @@ namespace NKikimr { { if (IsFresh) { ChunksToUse = HullCtx->HullSstSizeInChunksFresh; + MaxInFlightWrites = HullCtx->FreshCompMaxInFlightWrites; + MaxInFlightReads = 0; ReadsInFlight = nullptr; WritesInFlight = &LevelIndex->FreshCompWritesInFlight; } else { ChunksToUse = HullCtx->HullSstSizeInChunksLevel; + MaxInFlightWrites = HullCtx->HullCompMaxInFlightWrites; + MaxInFlightReads = HullCtx->HullCompMaxInFlightReads; ReadsInFlight = &LevelIndex->HullCompReadsInFlight; WritesInFlight = &LevelIndex->HullCompWritesInFlight; } @@ -401,7 +411,7 @@ namespace NKikimr { case EState::FlushingSST: // do not continue processing if there are too many writes in flight - if (InFlightWrites >= GetMaxInFlightWrites()) { + if (InFlightWrites >= MaxInFlightWrites) { return false; } // try to flush SST @@ -663,7 +673,7 @@ namespace NKikimr { bool FlushSST(TVector>& msgsForYard) { // try to flush some more data; if the flush fails, it means that we have reached in flight write limit and // there is nothing to do here now, so we return - const bool flushDone = WriterPtr->FlushNext(FirstLsn, LastLsn, GetMaxInFlightWrites() - InFlightWrites); + const bool flushDone = WriterPtr->FlushNext(FirstLsn, LastLsn, MaxInFlightWrites - InFlightWrites); ProcessPendingMessages(msgsForYard); if (!flushDone) { return false; @@ -687,7 +697,7 @@ namespace NKikimr { // send new messages until we reach in flight limit std::unique_ptr msg; - while (InFlightWrites < GetMaxInFlightWrites() && (msg = WriterPtr->GetPendingMessage())) { + while (InFlightWrites < MaxInFlightWrites && (msg = WriterPtr->GetPendingMessage())) { HullCtx->VCtx->CountCompactionCost(*msg); Statistics.Update(msg.get()); msgsForYard.push_back(std::move(msg)); @@ -696,7 +706,7 @@ namespace NKikimr { } std::unique_ptr readMsg; - while (InFlightReads < GetMaxInFlightReads() && (readMsg = ReadBatcher.GetPendingMessage( + while (InFlightReads < MaxInFlightReads && (readMsg = ReadBatcher.GetPendingMessage( PDiskCtx->Dsk->Owner, PDiskCtx->Dsk->OwnerRound, NPriRead::HullComp))) { HullCtx->VCtx->CountCompactionCost(*readMsg); Statistics.Update(readMsg.get()); @@ -714,14 +724,6 @@ namespace NKikimr { ChunkReservePending += num; return std::make_unique(PDiskCtx->Dsk->Owner, PDiskCtx->Dsk->OwnerRound, num); } - - ui32 GetMaxInFlightWrites() { - return IsFresh ? HullCtx->VCfg->FreshCompMaxInFlightWrites : HullCtx->VCfg->HullCompMaxInFlightWrites; - } - - ui32 GetMaxInFlightReads() { - return IsFresh ? (ui32) 0 : (ui32) HullCtx->VCfg->HullCompMaxInFlightReads; - } }; } // NKikimr diff --git a/ydb/core/blobstorage/vdisk/localrecovery/localrecovery_public.cpp b/ydb/core/blobstorage/vdisk/localrecovery/localrecovery_public.cpp index fe7a98c05ac9..ab40800fd481 100644 --- a/ydb/core/blobstorage/vdisk/localrecovery/localrecovery_public.cpp +++ b/ydb/core/blobstorage/vdisk/localrecovery/localrecovery_public.cpp @@ -480,7 +480,6 @@ namespace NKikimr { Y_ABORT_UNLESS(LocRecCtx->VCtx && LocRecCtx->VCtx->Top); auto hullCtx = MakeIntrusive( LocRecCtx->VCtx, - Config, ui32(LocRecCtx->PDiskCtx->Dsk->ChunkSize), ui32(LocRecCtx->PDiskCtx->Dsk->PrefetchSizeBytes), Config->FreshCompaction && !Config->BaseInfo.ReadOnly, @@ -490,6 +489,9 @@ namespace NKikimr { Config->HullSstSizeInChunksFresh, Config->HullSstSizeInChunksLevel, Config->HullCompFreeSpaceThreshold, + Config->FreshCompMaxInFlightWrites, + Config->HullCompMaxInFlightWrites, + Config->HullCompMaxInFlightReads, Config->HullCompReadBatchEfficiencyThreshold, Config->HullCompStorageRatioCalcPeriod, Config->HullCompStorageRatioMaxCalcDuration, diff --git a/ydb/core/blobstorage/vdisk/repl/blobstorage_hullreplwritesst_ut.cpp b/ydb/core/blobstorage/vdisk/repl/blobstorage_hullreplwritesst_ut.cpp index 0f8abf066954..e4c184ed8551 100644 --- a/ydb/core/blobstorage/vdisk/repl/blobstorage_hullreplwritesst_ut.cpp +++ b/ydb/core/blobstorage/vdisk/repl/blobstorage_hullreplwritesst_ut.cpp @@ -38,9 +38,8 @@ TVDiskContextPtr CreateVDiskContext(const TBlobStorageGroupInfo& info) { } TIntrusivePtr CreateHullCtx(const TBlobStorageGroupInfo& info, ui32 chunkSize, ui32 compWorthReadSize) { - auto baseInfo = TVDiskConfig::TBaseInfo::SampleForTests(); - return MakeIntrusive(CreateVDiskContext(info), MakeIntrusive(baseInfo), chunkSize, compWorthReadSize, true, true, true, true, 1u, - 1u, 2.0, 0.5, TDuration::Minutes(5), TDuration::Seconds(1), true); + return MakeIntrusive(CreateVDiskContext(info), chunkSize, compWorthReadSize, true, true, true, true, 1u, + 1u, 2.0, 10u, 10u, 20u, 0.5, TDuration::Minutes(5), TDuration::Seconds(1), true); } TIntrusivePtr CreateHullDs(const TBlobStorageGroupInfo& info) { diff --git a/ydb/core/protos/config.proto b/ydb/core/protos/config.proto index 883bf8fe61b4..aec397656363 100644 --- a/ydb/core/protos/config.proto +++ b/ydb/core/protos/config.proto @@ -1352,36 +1352,6 @@ message TImmediateControlsConfig { MinValue: 1, MaxValue: 50, DefaultValue: 10 }]; - - optional uint64 EnableExplicitCompactionAfterDefrag = 28 [(ControlOptions) = { - Description: "Enable explicit compaction call after defragmentation", - MinValue: 0, - MaxValue: 1, - DefaultValue: 1 }]; - - optional uint64 FreshCompMaxInFlightWrites = 29 [(ControlOptions) = { - Description: "Max writes inflight for fresh level compaction", - MinValue: 1, - MaxValue: 1000, - DefaultValue: 10 }]; - - optional uint64 FreshCompMaxInFlightReads = 30 [(ControlOptions) = { - Description: "Max reads inflight for fresh level compaction", - MinValue: 1, - MaxValue: 1000, - DefaultValue: 10 }]; - - optional uint64 HullCompMaxInFlightWrites = 31 [(ControlOptions) = { - Description: "Max writes inflight for level compaction", - MinValue: 1, - MaxValue: 1000, - DefaultValue: 10 }]; - - optional uint64 HullCompMaxInFlightReads = 32 [(ControlOptions) = { - Description: "Max reads inflight for level compaction", - MinValue: 1, - MaxValue: 1000, - DefaultValue: 20 }]; } message TTabletControls {