Skip to content

Commit

Permalink
issue-2854: TVector -> TArrayRef
Browse files Browse the repository at this point in the history
  • Loading branch information
vladstepanyuk committed Feb 6, 2025
1 parent 9be6254 commit 29c4671
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 67 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ namespace {
template <typename TMethod>
NSplitRequest::TSplittedRequest<TMethod> SplitRequestGeneralRead(
const TRequestRecordType<TMethod>& originalRequest,
const TVector<TBlockRange64>& blockRangeSplittedByDeviceBorders,
TVector<TVector<TActorId>> partitionsPerDevice)
TArrayRef<const TBlockRange64> blockRangeSplittedByDeviceBorders,
TArrayRef<TVector<TActorId>> partitionsPerDevice)
{
NSplitRequest::TSplittedRequest<TMethod> result;
result.reserve(blockRangeSplittedByDeviceBorders.size());
Expand All @@ -39,25 +39,25 @@ NSplitRequest::TSplittedRequest<TMethod> SplitRequestGeneralRead(

TSplittedRequest<TEvService::TReadBlocksMethod> SplitRequestRead(
const NProto::TReadBlocksRequest& originalRequest,
const TVector<TBlockRange64>& blockRangeSplittedByDeviceBorders,
TVector<TVector<NActors::TActorId>> partitionsPerDevice)
TArrayRef<const TBlockRange64> blockRangeSplittedByDeviceBorders,
TArrayRef<TVector<NActors::TActorId>> partitionsPerDevice)
{
return SplitRequestGeneralRead<TEvService::TReadBlocksMethod>(
originalRequest,
blockRangeSplittedByDeviceBorders,
std::move(partitionsPerDevice));
partitionsPerDevice);
}

std::optional<TSplittedRequest<TEvService::TReadBlocksLocalMethod>>
SplitRequestReadLocal(
const NProto::TReadBlocksLocalRequest& originalRequest,
const TVector<TBlockRange64>& blockRangeSplittedByDeviceBorders,
TVector<TVector<NActors::TActorId>> partitionsPerDevice)
TArrayRef<const TBlockRange64> blockRangeSplittedByDeviceBorders,
TArrayRef<TVector<NActors::TActorId>> partitionsPerDevice)
{
auto result = SplitRequestGeneralRead<TEvService::TReadBlocksLocalMethod>(
originalRequest,
blockRangeSplittedByDeviceBorders,
std::move(partitionsPerDevice));
partitionsPerDevice);

auto guard = originalRequest.Sglist.Acquire();
if (!guard) {
Expand Down Expand Up @@ -95,7 +95,7 @@ SplitRequestReadLocal(
}

NProto::TReadBlocksResponse UnifyResponsesRead(
const TVector<TUnifyResponsesContext<TEvService::TReadBlocksMethod>>&
TArrayRef<const TUnifyResponsesContext<TEvService::TReadBlocksMethod>>
responsesToUnify,
bool fillZeroResponses,
size_t blockSize)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,20 +38,20 @@ using TSplittedRequest = TVector<TRequestToPartitions<TMethod>>;

TSplittedRequest<TEvService::TReadBlocksMethod> SplitRequestRead(
const NProto::TReadBlocksRequest& originalRequest,
const TVector<TBlockRange64>& blockRangeSplittedByDeviceBorders,
TVector<TVector<NActors::TActorId>> partitionsPerDevice);
TArrayRef<const TBlockRange64> blockRangeSplittedByDeviceBorders,
TArrayRef<TVector<NActors::TActorId>> partitionsPerDevice);

std::optional<TSplittedRequest<TEvService::TReadBlocksLocalMethod>>
SplitRequestReadLocal(
const NProto::TReadBlocksLocalRequest& originalRequest,
const TVector<TBlockRange64>& blockRangeSplittedByDeviceBorders,
TVector<TVector<NActors::TActorId>> partitionsPerDevice);
TArrayRef<const TBlockRange64> blockRangeSplittedByDeviceBorders,
TArrayRef<TVector<NActors::TActorId>> partitionsPerDevice);

template <typename TMethod>
std::optional<TSplittedRequest<TMethod>> SplitRequest(
const TRequestRecordType<TMethod>& originalRequest,
const TVector<TBlockRange64>& blockRangeSplittedByDeviceBorders,
TVector<TVector<NActors::TActorId>> partitionsPerDevice)
TArrayRef<const TBlockRange64> blockRangeSplittedByDeviceBorders,
TArrayRef<TVector<NActors::TActorId>> partitionsPerDevice)
{
if constexpr (std::is_same_v<TMethod, TEvService::TReadBlocksMethod>) {
return SplitRequestRead(
Expand All @@ -77,25 +77,25 @@ struct TUnifyResponsesContext
};

NProto::TReadBlocksResponse UnifyResponsesRead(
const TVector<TUnifyResponsesContext<TEvService::TReadBlocksMethod>>&
TArrayRef<const TUnifyResponsesContext<TEvService::TReadBlocksMethod>>
responsesToUnify,
bool fillZeroResponses,
size_t blockSize);

template <typename TMethod>
TResponseRecordType<TMethod> UnifyResponses(
const TVector<TUnifyResponsesContext<TMethod>>& responsesToUnify,
TArrayRef<const TUnifyResponsesContext<TMethod>> responsesToUnify,
size_t blockSize)
{
if constexpr (std::is_same_v<TMethod, TEvService::TReadBlocksMethod>) {
return UnifyResponsesRead(
std::move(responsesToUnify),
responsesToUnify,
true, // fillZeroResponses
blockSize);
} else if constexpr (std::is_same_v<TMethod, TEvService::TReadBlocksMethod>)
{
return UnifyResponsesRead(
std::move(responsesToUnify),
responsesToUnify,
false, // fillZeroResponses
blockSize);
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,28 +28,6 @@ TSgList UnifySglist(const TSgList& sglist)
return result;
}

TStringBuf ConvertBitMapToStringBuf(const TDynBitMap& bitmap)
{
auto size = bitmap.Size() / 8;
Y_ABORT_UNLESS(bitmap.GetChunkCount() * sizeof(TDynBitMap::TChunk) == size);
return {reinterpret_cast<const char*>(bitmap.GetChunks()), size};
}

TDynBitMap GetBitMap(const TString& s)
{
TDynBitMap mask;

if (s) {
mask.Reserve(s.size() * 8);
Y_ABORT_UNLESS(
mask.GetChunkCount() * sizeof(TDynBitMap::TChunk) == s.size());
auto* dst = const_cast<TDynBitMap::TChunk*>(mask.GetChunks());
memcpy(dst, s.data(), s.size());
}

return mask;
}

} // namespace

Y_UNIT_TEST_SUITE(TSplitRequestTest)
Expand All @@ -76,7 +54,7 @@ Y_UNIT_TEST_SUITE(TSplitRequestTest)
TBlockRange64::WithLength(12, 1),
};

TVector<THashSet<TActorId>> actorsForEachRequests{
TVector<TVector<TActorId>> actorsForEachRequests{
{MakeActorId(0), MakeActorId(1)},
{MakeActorId(2), MakeActorId(3)},
{MakeActorId(4), MakeActorId(5)},
Expand Down Expand Up @@ -106,7 +84,7 @@ Y_UNIT_TEST_SUITE(TSplitRequestTest)
partSplitted.Partitions.size(),
actorsForEachRequests[i].size());
for (const auto& actorId: partSplitted.Partitions) {
UNIT_ASSERT(actorsForEachRequests[i].contains(actorId));
UNIT_ASSERT(FindPtr(actorsForEachRequests[i], actorId));
}

UNIT_ASSERT_VALUES_EQUAL(
Expand Down Expand Up @@ -168,7 +146,7 @@ Y_UNIT_TEST_SUITE(TSplitRequestTest)
TBlockRange64::WithLength(12, 1),
};

TVector<THashSet<TActorId>> actorsForEachRequests{
TVector<TVector<TActorId>> actorsForEachRequests{
{MakeActorId(0), MakeActorId(1)},
{MakeActorId(2), MakeActorId(3)},
{MakeActorId(4), MakeActorId(5)},
Expand Down Expand Up @@ -199,7 +177,7 @@ Y_UNIT_TEST_SUITE(TSplitRequestTest)
partSplitted.Partitions.size(),
actorsForEachRequests[i].size());
for (const auto& actorId: partSplitted.Partitions) {
UNIT_ASSERT(actorsForEachRequests[i].contains(actorId));
UNIT_ASSERT(FindPtr(actorsForEachRequests[i], actorId));
}

UNIT_ASSERT_VALUES_EQUAL(
Expand Down Expand Up @@ -282,15 +260,15 @@ Y_UNIT_TEST_SUITE(TSplitRequestTest)
TBlockRange64::WithLength(0, 3),
};

TVector<THashSet<TActorId>> actorsForEachRequests{
TVector<TVector<TActorId>> actorsForEachRequests{
{MakeActorId(0), MakeActorId(1)},
};

auto maybeSplittedRequest =
NSplitRequest::SplitRequest<TEvService::TReadBlocksLocalMethod>(
request,
blockRangeSplittedByDeviceBorders,
actorsForEachRequests);
std::move(actorsForEachRequests));

UNIT_ASSERT(!maybeSplittedRequest.has_value());
}
Expand Down Expand Up @@ -328,7 +306,7 @@ Y_UNIT_TEST_SUITE(TSplitRequestTest)
TBlockRange64::WithLength(0, 3),
};

TVector<THashSet<TActorId>> actorsForEachRequests{
TVector<TVector<TActorId>> actorsForEachRequests{
{MakeActorId(0), MakeActorId(1)},
};

Expand Down Expand Up @@ -369,23 +347,20 @@ Y_UNIT_TEST_SUITE(TSplitRequestTest)
map.Flip();
}

response.MutableUnencryptedBlockMask()->assign(
ConvertBitMapToStringBuf(map));

response.SetThrottlerDelay(blocksCount);
response.SetAllZeroes(false);
responses.push_back({std::move(response), blocksCount});
}

auto unifiedResponse = UnifyResponses(responses, blockSize);
auto unifiedResponse =
UnifyResponses(MakeConstArrayRef(responses), blockSize);
UNIT_ASSERT(!HasError(unifiedResponse.GetError()));
UNIT_ASSERT_VALUES_EQUAL(
unifiedResponse.GetThrottlerDelay(),
iterationsCount);
UNIT_ASSERT(!unifiedResponse.GetAllZeroes());

size_t blocksReviewed = 0;
auto map = GetBitMap(unifiedResponse.GetUnencryptedBlockMask());
for (size_t blocksCount = 1; blocksCount <= iterationsCount;
++blocksCount)
{
Expand All @@ -395,9 +370,6 @@ Y_UNIT_TEST_SUITE(TSplitRequestTest)
UNIT_ASSERT_VALUES_EQUAL(
block,
TString(blockSize, '0' + blocksCount));
UNIT_ASSERT_VALUES_EQUAL(
map.Get(blocksReviewed),
blocksCount % 2 == 1);

++blocksReviewed;
}
Expand All @@ -411,12 +383,10 @@ Y_UNIT_TEST_SUITE(TSplitRequestTest)
NProto::TReadBlocksResponse resp1;
resp1.ClearBlocks();
resp1.SetAllZeroes(true);
resp1.MutableUnencryptedBlockMask()->assign('\0');

NProto::TReadBlocksResponse resp2;
resp2.ClearBlocks();
resp2.SetAllZeroes(false);
resp2.MutableUnencryptedBlockMask()->assign('\0');
resp2.MutableBlocks()->AddBuffers(TString(blockSize, '1'));

TVector<NSplitRequest::TUnifyResponsesContext<
Expand All @@ -426,7 +396,8 @@ Y_UNIT_TEST_SUITE(TSplitRequestTest)
{.Response = resp2, .BlocksCountRequested = 1},
};

auto unifiedResponse = UnifyResponses(responses, blockSize);
auto unifiedResponse =
UnifyResponses(MakeConstArrayRef(responses), blockSize);

UNIT_ASSERT_VALUES_EQUAL(unifiedResponse.GetBlocks().BuffersSize(), 2);
UNIT_ASSERT_VALUES_EQUAL(
Expand All @@ -444,12 +415,10 @@ Y_UNIT_TEST_SUITE(TSplitRequestTest)
NProto::TReadBlocksResponse resp1;
resp1.ClearBlocks();
resp1.SetAllZeroes(true);
resp1.MutableUnencryptedBlockMask()->assign('\0');

NProto::TReadBlocksResponse resp2;
resp2.ClearBlocks();
resp2.SetAllZeroes(true);
resp2.MutableUnencryptedBlockMask()->assign('\0');

TVector<NSplitRequest::TUnifyResponsesContext<
TEvService::TReadBlocksMethod>>
Expand All @@ -458,11 +427,10 @@ Y_UNIT_TEST_SUITE(TSplitRequestTest)
{.Response = resp2, .BlocksCountRequested = 1},
};

auto unifiedResponse = UnifyResponses(responses, blockSize);
auto unifiedResponse =
UnifyResponses(MakeConstArrayRef(responses), blockSize);

UNIT_ASSERT_VALUES_EQUAL(
unifiedResponse.GetBlocks().BuffersSize(),
0);
UNIT_ASSERT_VALUES_EQUAL(unifiedResponse.GetBlocks().BuffersSize(), 0);
UNIT_ASSERT(unifiedResponse.GetAllZeroes());
}

Expand All @@ -476,7 +444,6 @@ Y_UNIT_TEST_SUITE(TSplitRequestTest)
NProto::TReadBlocksResponse resp2;
resp2.ClearBlocks();
resp2.SetAllZeroes(true);
resp2.MutableUnencryptedBlockMask()->assign('\0');

TVector<NSplitRequest::TUnifyResponsesContext<
TEvService::TReadBlocksMethod>>
Expand All @@ -485,7 +452,8 @@ Y_UNIT_TEST_SUITE(TSplitRequestTest)
{.Response = resp2, .BlocksCountRequested = 1},
};

auto unifiedResponse = UnifyResponses(responses, blockSize);
auto unifiedResponse =
UnifyResponses(MakeConstArrayRef(responses), blockSize);

UNIT_ASSERT_VALUES_EQUAL(
unifiedResponse.GetError().GetCode(),
Expand Down

0 comments on commit 29c4671

Please sign in to comment.