|
| 1 | +#include "flat_dbase_sz_env.h" |
1 | 2 | #include "flat_executor_ut_common.h"
|
2 | 3 |
|
3 | 4 | namespace NKikimr {
|
@@ -4979,6 +4980,41 @@ Y_UNIT_TEST_SUITE(TFlatTableSnapshotWithCommits) {
|
4979 | 4980 |
|
4980 | 4981 | Y_UNIT_TEST_SUITE(TFlatTableExecutorIndexLoading) {
|
4981 | 4982 |
|
| 4983 | + struct TTxCalculateReadSize : public ITransaction { |
| 4984 | + ui32 Attempt = 0; |
| 4985 | + TVector<ui64>& ReadSizes; |
| 4986 | + ui64 MinKey, MaxKey; |
| 4987 | + |
| 4988 | + TTxCalculateReadSize(TVector<ui64>& readSizes, ui64 minKey, ui64 maxKey) |
| 4989 | + : ReadSizes(readSizes) |
| 4990 | + , MinKey(minKey) |
| 4991 | + , MaxKey(maxKey) |
| 4992 | + { |
| 4993 | + ReadSizes.clear(); |
| 4994 | + } |
| 4995 | + |
| 4996 | + |
| 4997 | + bool Execute(TTransactionContext &txc, const TActorContext &) override |
| 4998 | + { |
| 4999 | + UNIT_ASSERT_LE(++Attempt, 10); |
| 5000 | + |
| 5001 | + const auto minKey = NScheme::TInt64::TInstance(MinKey); |
| 5002 | + const auto maxKey = NScheme::TInt64::TInstance(MaxKey); |
| 5003 | + const TVector<NTable::TTag> tags{ { TRowsModel::ColumnKeyId, TRowsModel::ColumnValueId } }; |
| 5004 | + |
| 5005 | + auto sizeEnv = txc.DB.CreateSizeEnv(); |
| 5006 | + txc.DB.CalculateReadSize(sizeEnv, TRowsModel::TableId, { minKey }, { maxKey }, tags, 0, 0, 0); |
| 5007 | + ReadSizes.push_back(sizeEnv.GetSize()); |
| 5008 | + |
| 5009 | + return txc.DB.Precharge(TRowsModel::TableId, { minKey }, { maxKey }, tags, 0, 0, 0); |
| 5010 | + } |
| 5011 | + |
| 5012 | + void Complete(const TActorContext &ctx) override |
| 5013 | + { |
| 5014 | + ctx.Send(ctx.SelfID, new NFake::TEvReturn); |
| 5015 | + } |
| 5016 | + }; |
| 5017 | + |
4982 | 5018 | struct TTxPrechargeAndSeek : public ITransaction {
|
4983 | 5019 | ui32 Attempt = 0;
|
4984 | 5020 | bool Pinned = false;
|
@@ -5020,6 +5056,43 @@ Y_UNIT_TEST_SUITE(TFlatTableExecutorIndexLoading) {
|
5020 | 5056 | }
|
5021 | 5057 | };
|
5022 | 5058 |
|
| 5059 | + void ZeroSharedCache(TMyEnvBase &env) { |
| 5060 | + env.Env.GetMemObserver()->NotifyStat({1, 1, 1}); |
| 5061 | + TDispatchOptions options; |
| 5062 | + options.FinalEvents.push_back(TDispatchOptions::TFinalEventCondition(NSharedCache::EvMem, 1)); |
| 5063 | + env->DispatchEvents(options); |
| 5064 | + } |
| 5065 | + |
| 5066 | + Y_UNIT_TEST(CalculateReadSize_FlatIndex) { |
| 5067 | + TMyEnvBase env; |
| 5068 | + TRowsModel rows; |
| 5069 | + const ui32 rowsCount = 1024; |
| 5070 | + |
| 5071 | + env.FireTablet(env.Edge, env.Tablet, [&env](const TActorId &tablet, TTabletStorageInfo *info) { |
| 5072 | + return new TTestFlatTablet(env.Edge, tablet, info); |
| 5073 | + }); |
| 5074 | + env.WaitForWakeUp(); |
| 5075 | + ZeroSharedCache(env); |
| 5076 | + |
| 5077 | + env.SendSync(rows.MakeScheme(new TCompactionPolicy(), false)); |
| 5078 | + |
| 5079 | + env.SendSync(rows.MakeRows(rowsCount, 10*1024)); |
| 5080 | + |
| 5081 | + env.SendSync(new NFake::TEvCompact(TRowsModel::TableId)); |
| 5082 | + env.WaitFor<NFake::TEvCompacted>(); |
| 5083 | + |
| 5084 | + TVector<ui64> sizes; |
| 5085 | + |
| 5086 | + env.SendSync(new NFake::TEvExecute{ new TTxCalculateReadSize(sizes, 0, 1) }); |
| 5087 | + UNIT_ASSERT_VALUES_EQUAL(sizes, (TVector<ui64>{20566, 20566})); |
| 5088 | + |
| 5089 | + env.SendSync(new NFake::TEvExecute{ new TTxCalculateReadSize(sizes, 100, 200) }); |
| 5090 | + UNIT_ASSERT_VALUES_EQUAL(sizes, (TVector<ui64>{1048866, 1048866})); |
| 5091 | + |
| 5092 | + env.SendSync(new NFake::TEvExecute{ new TTxCalculateReadSize(sizes, 300, 700) }); |
| 5093 | + UNIT_ASSERT_VALUES_EQUAL(sizes, (TVector<ui64>{4133766, 4133766})); |
| 5094 | + } |
| 5095 | + |
5023 | 5096 | Y_UNIT_TEST(TestPrechargeAndSeek) {
|
5024 | 5097 | TMyEnvBase env;
|
5025 | 5098 | TRowsModel rows;
|
|
0 commit comments