|
| 1 | +#include "flat_dbase_sz_env.h" |
1 | 2 | #include "flat_executor_ut_common.h" |
2 | 3 |
|
3 | 4 | namespace NKikimr { |
@@ -5008,6 +5009,41 @@ Y_UNIT_TEST_SUITE(TFlatTableSnapshotWithCommits) { |
5008 | 5009 |
|
5009 | 5010 | Y_UNIT_TEST_SUITE(TFlatTableExecutorIndexLoading) { |
5010 | 5011 |
|
| 5012 | + struct TTxCalculateReadSize : public ITransaction { |
| 5013 | + ui32 Attempt = 0; |
| 5014 | + TVector<ui64>& ReadSizes; |
| 5015 | + ui64 MinKey, MaxKey; |
| 5016 | + |
| 5017 | + TTxCalculateReadSize(TVector<ui64>& readSizes, ui64 minKey, ui64 maxKey) |
| 5018 | + : ReadSizes(readSizes) |
| 5019 | + , MinKey(minKey) |
| 5020 | + , MaxKey(maxKey) |
| 5021 | + { |
| 5022 | + ReadSizes.clear(); |
| 5023 | + } |
| 5024 | + |
| 5025 | + |
| 5026 | + bool Execute(TTransactionContext &txc, const TActorContext &) override |
| 5027 | + { |
| 5028 | + UNIT_ASSERT_LE(++Attempt, 10); |
| 5029 | + |
| 5030 | + const auto minKey = NScheme::TInt64::TInstance(MinKey); |
| 5031 | + const auto maxKey = NScheme::TInt64::TInstance(MaxKey); |
| 5032 | + const TVector<NTable::TTag> tags{ { TRowsModel::ColumnKeyId, TRowsModel::ColumnValueId } }; |
| 5033 | + |
| 5034 | + auto sizeEnv = txc.DB.CreateSizeEnv(); |
| 5035 | + txc.DB.CalculateReadSize(sizeEnv, TRowsModel::TableId, { minKey }, { maxKey }, tags, 0, 0, 0); |
| 5036 | + ReadSizes.push_back(sizeEnv.GetSize()); |
| 5037 | + |
| 5038 | + return txc.DB.Precharge(TRowsModel::TableId, { minKey }, { maxKey }, tags, 0, 0, 0); |
| 5039 | + } |
| 5040 | + |
| 5041 | + void Complete(const TActorContext &ctx) override |
| 5042 | + { |
| 5043 | + ctx.Send(ctx.SelfID, new NFake::TEvReturn); |
| 5044 | + } |
| 5045 | + }; |
| 5046 | + |
5011 | 5047 | struct TTxPrechargeAndSeek : public ITransaction { |
5012 | 5048 | ui32 Attempt = 0; |
5013 | 5049 | bool Pinned = false; |
@@ -5056,6 +5092,76 @@ Y_UNIT_TEST_SUITE(TFlatTableExecutorIndexLoading) { |
5056 | 5092 | env->DispatchEvents(options); |
5057 | 5093 | } |
5058 | 5094 |
|
| 5095 | + Y_UNIT_TEST(CalculateReadSize_FlatIndex) { |
| 5096 | + TMyEnvBase env; |
| 5097 | + TRowsModel rows; |
| 5098 | + const ui32 rowsCount = 1024; |
| 5099 | + |
| 5100 | + auto &appData = env->GetAppData(); |
| 5101 | + appData.FeatureFlags.SetEnableLocalDBBtreeIndex(false); |
| 5102 | + appData.FeatureFlags.SetEnableLocalDBFlatIndex(true); |
| 5103 | + |
| 5104 | + env.FireTablet(env.Edge, env.Tablet, [&env](const TActorId &tablet, TTabletStorageInfo *info) { |
| 5105 | + return new TTestFlatTablet(env.Edge, tablet, info); |
| 5106 | + }); |
| 5107 | + env.WaitForWakeUp(); |
| 5108 | + ZeroSharedCache(env); |
| 5109 | + |
| 5110 | + env.SendSync(rows.MakeScheme(new TCompactionPolicy(), false)); |
| 5111 | + |
| 5112 | + env.SendSync(rows.MakeRows(rowsCount, 10*1024)); |
| 5113 | + |
| 5114 | + env.SendSync(new NFake::TEvCompact(TRowsModel::TableId)); |
| 5115 | + env.WaitFor<NFake::TEvCompacted>(); |
| 5116 | + |
| 5117 | + TVector<ui64> sizes; |
| 5118 | + |
| 5119 | + env.SendSync(new NFake::TEvExecute{ new TTxCalculateReadSize(sizes, 0, 1) }); |
| 5120 | + UNIT_ASSERT_VALUES_EQUAL(sizes, (TVector<ui64>{20566, 20566})); |
| 5121 | + |
| 5122 | + env.SendSync(new NFake::TEvExecute{ new TTxCalculateReadSize(sizes, 100, 200) }); |
| 5123 | + UNIT_ASSERT_VALUES_EQUAL(sizes, (TVector<ui64>{1048866, 1048866})); |
| 5124 | + |
| 5125 | + env.SendSync(new NFake::TEvExecute{ new TTxCalculateReadSize(sizes, 300, 700) }); |
| 5126 | + UNIT_ASSERT_VALUES_EQUAL(sizes, (TVector<ui64>{4133766, 4133766})); |
| 5127 | + } |
| 5128 | + |
| 5129 | + Y_UNIT_TEST(CalculateReadSize_BTreeIndex) { |
| 5130 | + TMyEnvBase env; |
| 5131 | + TRowsModel rows; |
| 5132 | + const ui32 rowsCount = 1024; |
| 5133 | + |
| 5134 | + auto &appData = env->GetAppData(); |
| 5135 | + appData.FeatureFlags.SetEnableLocalDBBtreeIndex(true); |
| 5136 | + appData.FeatureFlags.SetEnableLocalDBFlatIndex(false); |
| 5137 | + |
| 5138 | + env.FireTablet(env.Edge, env.Tablet, [&env](const TActorId &tablet, TTabletStorageInfo *info) { |
| 5139 | + return new TTestFlatTablet(env.Edge, tablet, info); |
| 5140 | + }); |
| 5141 | + env.WaitForWakeUp(); |
| 5142 | + ZeroSharedCache(env); |
| 5143 | + |
| 5144 | + auto policy = MakeIntrusive<TCompactionPolicy>(); |
| 5145 | + policy->MinBTreeIndexNodeSize = 128; |
| 5146 | + env.SendSync(rows.MakeScheme(std::move(policy))); |
| 5147 | + |
| 5148 | + env.SendSync(rows.MakeRows(rowsCount, 10*1024)); |
| 5149 | + |
| 5150 | + env.SendSync(new NFake::TEvCompact(TRowsModel::TableId)); |
| 5151 | + env.WaitFor<NFake::TEvCompacted>(); |
| 5152 | + |
| 5153 | + TVector<ui64> sizes; |
| 5154 | + |
| 5155 | + env.SendSync(new NFake::TEvExecute{ new TTxCalculateReadSize(sizes, 0, 1) }); |
| 5156 | + UNIT_ASSERT_VALUES_EQUAL(sizes, (TVector<ui64>{0, 0, 0, 0, 20566, 20566})); |
| 5157 | + |
| 5158 | + env.SendSync(new NFake::TEvExecute{ new TTxCalculateReadSize(sizes, 100, 200) }); |
| 5159 | + UNIT_ASSERT_VALUES_EQUAL(sizes, (TVector<ui64>{0, 0, 0, 0, 1048866, 1048866})); |
| 5160 | + |
| 5161 | + env.SendSync(new NFake::TEvExecute{ new TTxCalculateReadSize(sizes, 300, 700) }); |
| 5162 | + UNIT_ASSERT_VALUES_EQUAL(sizes, (TVector<ui64>{0, 0, 0, 0, 4133766, 4133766})); |
| 5163 | + } |
| 5164 | + |
5059 | 5165 | Y_UNIT_TEST(PrechargeAndSeek_FlatIndex) { |
5060 | 5166 | TMyEnvBase env; |
5061 | 5167 | TRowsModel rows; |
|
0 commit comments