Skip to content

Cs to stable 24 3 #9268

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 102 commits into from
Sep 16, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
102 commits
Select commit Hold shift + click to select a range
f7f06ef
Turn on GCCountersNormalizer (#8166)
zverevgeny Sep 15, 2024
2ad4a75
Revert "Ignore stored GCBarrierPreparation (#7473)"
zverevgeny Sep 15, 2024
ee1e9a5
delete unused ISSTransactionOperator (#6908)
zverevgeny Jul 22, 2024
20cce76
Fix flaky KqpOlapScheme.DropTable (#6795)
swalrus1 Jul 22, 2024
7f84ced
increase CS read timeout (#6963)
zverevgeny Jul 24, 2024
2d473d5
add stats test for internal column table from tables store (#6684)
ivanmorozov333 Jul 26, 2024
3282d3c
implement sparse data accessor (#7055)
ivanmorozov333 Jul 28, 2024
e7b4620
additional test and addressing fixes (#7168)
ivanmorozov333 Jul 29, 2024
a7fdd7c
tx operations start unification (#7178)
ivanmorozov333 Jul 29, 2024
e489c11
asymmetric access for sorted key on find position (#7177)
ivanmorozov333 Jul 29, 2024
f6e6f5f
improve performace for stat requests (sysview) (#7211)
ivanmorozov333 Jul 30, 2024
0472dd5
speed up merging with correct pointers operation (#7230)
ivanmorozov333 Jul 30, 2024
332a1d0
speed up tables manager in schemeshard (#7229)
ivanmorozov333 Jul 30, 2024
c66255f
fix pk checker (#7266)
ivanmorozov333 Jul 31, 2024
298fd8d
correct not null flags usage in tests (#7293)
ivanmorozov333 Jul 31, 2024
a654a12
signals for tablet initialization (#7281)
ivanmorozov333 Jul 31, 2024
326e728
fix unused
zverevgeny Sep 15, 2024
c84ed2c
[KIKIMR-21472] Output the final AST in explain query (#6487)
abyss7 Jul 15, 2024
4b75c4c
switch on aggregations pushdown into CS (#7305)
ivanmorozov333 Jul 31, 2024
01105b5
fix columns normalization for absent (#7340)
ivanmorozov333 Aug 1, 2024
b31b2a8
Move new flag to env from config for compatibility with musty arc rec…
zverevgeny Aug 1, 2024
120d53b
add missing table stats for column shards (#7140)
swalrus1 Aug 1, 2024
fddf95e
fix clickbench with CS (#7393)
zverevgeny Aug 2, 2024
fa088bc
move test TShardReader to a common place (#7441)
zverevgeny Aug 4, 2024
e8dd09e
Overlimit read memory (#7408)
ivanmorozov333 Aug 4, 2024
0b9c841
make local internal CS persistent snapshot pinger (#7431)
ivanmorozov333 Aug 4, 2024
7fd01cf
Blob memory interval limit (#7444)
ivanmorozov333 Aug 5, 2024
1c2191f
Fix KqpOlapAggregations.Aggregation_ResultCountAll_Filter (#7423)
fexolm Aug 5, 2024
6ac00b5
add tx progress counters (#7407)
swalrus1 Aug 6, 2024
b0b32a0
add missing monitoring metrics for column shards (#7314)
swalrus1 Aug 7, 2024
ec0a6c2
fix segfault in deserializer stream usage (#7542)
ivanmorozov333 Aug 8, 2024
6b27423
Add simple stability test for olap queries (#7543)
fexolm Aug 8, 2024
0bf9944
Fix integer overflow in TTimeSliceLogic::DoCalcWeight (#7606)
fexolm Aug 9, 2024
f763f98
change memory planner for CS scan (#7372)
ivanmorozov333 Aug 12, 2024
0170869
delete non-existing ut from muted (#7672)
zverevgeny Aug 12, 2024
3576d13
different request variants need different memory profiles (#7664)
ivanmorozov333 Aug 13, 2024
72cc2ba
unmute incorrectly muted olap tests (#7680)
zverevgeny Aug 14, 2024
df951ed
fix snapshot tracing signals (#7821)
ivanmorozov333 Aug 15, 2024
f6d44ee
fix snapshot control in case sys view requests (#7824)
ivanmorozov333 Aug 15, 2024
a1bc96c
dont use cpu for not abortable chunks (#7865)
ivanmorozov333 Aug 16, 2024
ad97351
Show RuntimeFeatures on portion_stats sys-view (#7673)
swalrus1 Aug 16, 2024
4a2ab87
speed up compilation for request processing (#7900)
ivanmorozov333 Aug 16, 2024
a248aa6
Fix kikimr_runner for ubuntu 20.04 (#7895)
fexolm Aug 16, 2024
9359f79
fix race on scan start with indexation cleaning blobs (#7968)
ivanmorozov333 Aug 19, 2024
8a135c2
refactoring for ranges control (#7758)
ivanmorozov333 Aug 19, 2024
22cd3a3
Add a scenario test for altering tiering config (#7636)
swalrus1 Aug 20, 2024
1000240
multi heads allocations manager (#8126)
ivanmorozov333 Aug 22, 2024
de1c1e4
Add unit-test for data eviction in tiering (#7971)
swalrus1 Aug 22, 2024
2747082
correct portions index usage for control memory scan intervals (#8135)
ivanmorozov333 Aug 22, 2024
d4df63b
Don't skip null values on COUNT(*) in column shards (#8024)
swalrus1 Aug 22, 2024
0ed6fd9
Add scan/insert while alter test (#8094)
fexolm Aug 22, 2024
e70c070
Add column shard Controller parameters to AppData (#8000)
swalrus1 Aug 22, 2024
b043843
Added sparsed columns tests for standalone tables (#8167)
aavdonkin Aug 23, 2024
4b389f3
Forbid creating empty tiering rules in column shards (#8154)
swalrus1 Aug 23, 2024
b22741b
dont create temporary sparsed array on merging (#8174)
ivanmorozov333 Aug 24, 2024
6254bb4
speed up merging for sparsed columns (#8365)
ivanmorozov333 Aug 28, 2024
1bd3a7c
signals about long_tx writing (#8407)
ivanmorozov333 Aug 29, 2024
9e7109e
Fix table stats aggregation for OLAP tables (#8417)
swalrus1 Aug 29, 2024
67fa670
Multicolumn sparsed test (#8284)
aavdonkin Aug 30, 2024
1ec4f77
validations for prevent incorrect data in local db (#8477)
ivanmorozov333 Sep 1, 2024
bf76e55
Add unit test: drop then add column with different type (#8446)
swalrus1 Sep 1, 2024
be015a8
[Stable 24 3 8 analytics] EvWrite & CTAS (#8861)
nikvas0 Sep 9, 2024
946d6ed
tx interactions manager (#8050)
ivanmorozov333 Sep 2, 2024
33195d6
pacify py linter
zverevgeny Sep 15, 2024
81cfb86
Add registrator to TTxChainSession (#8535)
fexolm Sep 2, 2024
ac87240
Fix column livecycle (#8580)
ivanmorozov333 Sep 2, 2024
9eb4be2
provide correct path id to lock info (#8591)
ivanmorozov333 Sep 2, 2024
3b7cffb
fix race on enqueue tx_commit in case long synchronization (#8588)
ivanmorozov333 Sep 2, 2024
76776b2
remove validation throught available reask in timeout (#8609)
ivanmorozov333 Sep 2, 2024
c238cd1
we have to notify cs at first to add lock information (#8614)
ivanmorozov333 Sep 2, 2024
967ef2d
Add UpsertWhileSplitTest (#8472)
fexolm Sep 3, 2024
5d0de00
immediate writing with no tx (#8697)
ivanmorozov333 Sep 4, 2024
409b1df
reduce logging rate for stats info (#8683)
ivanmorozov333 Sep 4, 2024
6d466e8
switch on mkql factory for cs (#8682)
ivanmorozov333 Sep 4, 2024
bd94901
Fix partition count in column table description (#8589)
swalrus1 Sep 4, 2024
c8fd05f
remove blob columns not present in current scheme
swalrus1 Sep 4, 2024
6ad40f2
use ss tablet id for schemeshard and sender for tx_proxy (#8684)
ivanmorozov333 Sep 4, 2024
904f59d
Fix broken txs (#8714)
ivanmorozov333 Sep 4, 2024
4db66fa
fix case indexation removed table (#8713)
ivanmorozov333 Sep 4, 2024
e684d2f
split factor increased to avoid tests interaction by timeout (#8728)
ivanmorozov333 Sep 4, 2024
0bf4a40
additional signals for commit timings control (#8729)
ivanmorozov333 Sep 4, 2024
b8363e1
Add EnableAlterSharding option (#8707)
fexolm Sep 4, 2024
75674bf
add feature flag: enable olap tiering (#8719)
swalrus1 Sep 5, 2024
0574a22
fix import build (#8769)
ivanmorozov333 Sep 5, 2024
c2501b4
add missing enum value to win-specific code (#8854)
swalrus1 Sep 6, 2024
742ee28
Olap TableStore read/write test (#8858)
nikvas0 Sep 7, 2024
f330c16
remove table only for empty insert table (#8822)
ivanmorozov333 Sep 8, 2024
66a4344
Fix write ids usage (#8909)
ivanmorozov333 Sep 9, 2024
ac39ecc
speed up column ids checkers and finder (#8906)
ivanmorozov333 Sep 9, 2024
829626e
Add PARTITIONS_COUNT setting to yql (#7602)
fexolm Sep 9, 2024
a37654b
Implemented limit on olap table columnt count (#8742)
aavdonkin Sep 9, 2024
a417462
skip long tx writing to in control locks (#8924)
ivanmorozov333 Sep 10, 2024
cc39e87
Fix PARTITION_COUNT option name and add tests (#9012)
fexolm Sep 10, 2024
fad182f
Add feature flag: enable olap compression (#8726)
Sep 10, 2024
5e70546
Normalizer insert records (#9010)
ivanmorozov333 Sep 11, 2024
7b7094b
correct EvWrite locks processing (#8931)
ivanmorozov333 Sep 11, 2024
4f8fa3d
Add decimal tests for columnshard (#8959)
fexolm Sep 11, 2024
e9a63fe
Disable CTAS by default (#9057)
nikvas0 Sep 11, 2024
7f6818a
speed up logging exp (#9087)
ivanmorozov333 Sep 12, 2024
55aac64
Sparsed columns are disabled by default and can be optionally enabled…
aavdonkin Sep 12, 2024
f0f7681
speed up scan initialization (#9086)
ivanmorozov333 Sep 12, 2024
f58e2d5
remove dep to count_min_sketch from ut
zverevgeny Sep 15, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
12 changes: 6 additions & 6 deletions .github/config/muted_ya.txt
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,15 @@ ydb/core/keyvalue/ut_trace TKeyValueTracingTest.*
ydb/core/kqp/provider/ut KikimrIcGateway.TestLoadBasicSecretValueFromExternalDataSourceMetadata
ydb/core/kqp/ut/olap KqpOlapBlobsSharing.*
ydb/core/kqp/ut/olap KqpOlapStatistics.StatsUsageWithTTL
ydb/core/kqp/ut/olap KqpOlapAggregations.Aggregation_ResultCountAll_FilterL
ydb/core/kqp/ut/olap KqpOlapWrite.WriteDeleteCleanGC
ydb/core/kqp/ut/pg KqpPg.CreateIndex
ydb/core/kqp/ut/tx KqpLocksTricky.TestNoLocksIssueInteractiveTx+withSink
ydb/core/kqp/ut/tx KqpLocksTricky.TestNoLocksIssue+withSink
ydb/core/kqp/ut/tx KqpSnapshotRead.ReadOnlyTxWithIndexCommitsOnConcurrentWrite+withSink
ydb/core/kqp/ut/tx KqpSinkTx.InvalidateOnError
ydb/core/kqp/ut/query KqpLimits.QueryReplySize
ydb/core/kqp/ut/query KqpQuery.QueryTimeout
ydb/core/kqp/ut/scan KqpRequestContext.TraceIdInErrorMessage
ydb/core/kqp/ut/scheme KqpOlapScheme.TenThousandColumns
ydb/core/kqp/ut/scheme KqpOlap.OlapRead_GenericQuerys
ydb/core/kqp/ut/scheme KqpOlap.OlapRead_StreamGenericQuery
ydb/core/kqp/ut/scheme KqpOlap.OlapRead_UsesGenericQueryOnJoinWithDataShardTable
ydb/core/kqp/ut/scheme KqpOlapScheme.DropTable
ydb/core/kqp/ut/scheme KqpScheme.AlterAsyncReplication
ydb/core/kqp/ut/scheme KqpScheme.QueryWithAlter
ydb/core/kqp/ut/scheme [14/50]*
Expand Down Expand Up @@ -106,4 +104,6 @@ ydb/tests/functional/tenants test_storage_config.py.TestStorageConfig.*
ydb/tests/functional/tenants test_tenants.py.*
ydb/tests/functional/ydb_cli test_ydb_impex.py.TestImpex.test_big_dataset*
ydb/tests/tools/pq_read/test test_timeout.py.TestTimeout.test_timeout
ydb/core/kqp/ut/olap KqpDecimalColumnShard.TestFilterCompare
ydb/core/kqp/ut/olap KqpDecimalColumnShard.TestAggregation
ydb/tests/functional/rename [test_rename.py */10] chunk chunk
2 changes: 2 additions & 0 deletions ydb/core/base/events.h
Original file line number Diff line number Diff line change
Expand Up @@ -179,6 +179,8 @@ struct TKikimrEvents : TEvents {
ES_TX_BACKGROUND = 4256,
ES_SS_BG_TASKS = 4257,
ES_LIMITER = 4258,
//ES_MEMORY = 4259, NB. exists in main
ES_GROUPED_ALLOCATIONS_MANAGER = 4260,
};
};

Expand Down
23 changes: 23 additions & 0 deletions ydb/core/driver_lib/run/kikimr_services_initializers.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,9 @@
#include <ydb/core/tx/limiter/usage/config.h>
#include <ydb/core/tx/limiter/usage/service.h>

#include <ydb/core/tx/limiter/grouped_memory/usage/config.h>
#include <ydb/core/tx/limiter/grouped_memory/usage/service.h>

#include <ydb/core/backup/controller/tablet.h>

#include <ydb/services/ext_index/common/config.h>
Expand Down Expand Up @@ -2180,6 +2183,26 @@ void TKqpServiceInitializer::InitializeServices(NActors::TActorSystemSetup* setu
}
}

TGroupedMemoryLimiterInitializer::TGroupedMemoryLimiterInitializer(const TKikimrRunConfig& runConfig)
: IKikimrServicesInitializer(runConfig) {
}

void TGroupedMemoryLimiterInitializer::InitializeServices(NActors::TActorSystemSetup* setup, const NKikimr::TAppData* appData) {
NOlap::NGroupedMemoryManager::TConfig serviceConfig;
Y_ABORT_UNLESS(serviceConfig.DeserializeFromProto(Config.GetGroupedMemoryLimiterConfig()));

if (serviceConfig.IsEnabled()) {
TIntrusivePtr<::NMonitoring::TDynamicCounters> tabletGroup = GetServiceCounters(appData->Counters, "tablets");
TIntrusivePtr<::NMonitoring::TDynamicCounters> countersGroup = tabletGroup->GetSubgroup("type", "TX_GROUPED_MEMORY_LIMITER");

auto service = NOlap::NGroupedMemoryManager::TScanMemoryLimiterOperator::CreateService(serviceConfig, countersGroup);

setup->LocalServices.push_back(std::make_pair(
NOlap::NGroupedMemoryManager::TScanMemoryLimiterOperator::MakeServiceId(NodeId),
TActorSetupCmd(service, TMailboxType::HTSwap, appData->UserPoolId)));
}
}

TCompDiskLimiterInitializer::TCompDiskLimiterInitializer(const TKikimrRunConfig& runConfig)
: IKikimrServicesInitializer(runConfig) {
}
Expand Down
6 changes: 6 additions & 0 deletions ydb/core/driver_lib/run/kikimr_services_initializers.h
Original file line number Diff line number Diff line change
Expand Up @@ -397,6 +397,12 @@ class TCompDiskLimiterInitializer: public IKikimrServicesInitializer {
void InitializeServices(NActors::TActorSystemSetup* setup, const NKikimr::TAppData* appData) override;
};

class TGroupedMemoryLimiterInitializer: public IKikimrServicesInitializer {
public:
TGroupedMemoryLimiterInitializer(const TKikimrRunConfig& runConfig);
void InitializeServices(NActors::TActorSystemSetup* setup, const NKikimr::TAppData* appData) override;
};

class TCompConveyorInitializer: public IKikimrServicesInitializer {
public:
TCompConveyorInitializer(const TKikimrRunConfig& runConfig);
Expand Down
4 changes: 4 additions & 0 deletions ydb/core/driver_lib/run/run.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1554,6 +1554,10 @@ TIntrusivePtr<TServiceInitializersList> TKikimrRunner::CreateServiceInitializers
sil->AddServiceInitializer(new TCompDiskLimiterInitializer(runConfig));
}

if (serviceMask.EnableGroupedMemoryLimiter) {
sil->AddServiceInitializer(new TGroupedMemoryLimiterInitializer(runConfig));
}

if (serviceMask.EnableScanConveyor) {
sil->AddServiceInitializer(new TScanConveyorInitializer(runConfig));
}
Expand Down
1 change: 1 addition & 0 deletions ydb/core/driver_lib/run/service_mask.h
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,7 @@ union TBasicKikimrServicesMask {
bool EnableDatabaseMetadataCache:1;
bool EnableGraphService:1;
bool EnableCompDiskLimiter:1;
bool EnableGroupedMemoryLimiter:1;
};

struct {
Expand Down
1 change: 1 addition & 0 deletions ydb/core/driver_lib/run/ya.make
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,7 @@ PEERDIR(
ydb/core/tx/coordinator
ydb/core/tx/conveyor/service
ydb/core/tx/limiter/service
ydb/core/tx/limiter/grouped_memory/usage
ydb/core/tx/datashard
ydb/core/tx/long_tx_service
ydb/core/tx/long_tx_service/public
Expand Down
163 changes: 163 additions & 0 deletions ydb/core/formats/arrow/accessor/abstract/accessor.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,163 @@
#include "accessor.h"

#include <ydb/core/formats/arrow/arrow_helpers.h>
#include <ydb/core/formats/arrow/permutations.h>
#include <ydb/core/formats/arrow/save_load/saver.h>
#include <ydb/core/formats/arrow/size_calcer.h>
#include <ydb/core/formats/arrow/splitter/simple.h>
#include <ydb/core/formats/arrow/switch/compare.h>
#include <ydb/core/formats/arrow/switch/switch_type.h>

#include <ydb/library/actors/core/log.h>

namespace NKikimr::NArrow::NAccessor {

void IChunkedArray::TReader::AppendPositionTo(arrow::ArrayBuilder& builder, const ui64 position, ui64* recordSize) const {
auto address = GetReadChunk(position);
AFL_VERIFY(NArrow::Append(builder, *address.GetArray(), address.GetPosition(), recordSize));
}

std::shared_ptr<arrow::Array> IChunkedArray::TReader::CopyRecord(const ui64 recordIndex) const {
auto address = GetReadChunk(recordIndex);
return NArrow::CopyRecords(address.GetArray(), { address.GetPosition() });
}

std::shared_ptr<arrow::ChunkedArray> IChunkedArray::Slice(const ui32 offset, const ui32 count) const {
AFL_VERIFY(offset + count <= (ui64)GetRecordsCount())("offset", offset)("count", count)("length", GetRecordsCount());
ui32 currentOffset = offset;
ui32 countLeast = count;
std::vector<std::shared_ptr<arrow::Array>> chunks;
auto address = GetChunkSlow(offset);
while (countLeast) {
address = GetChunk(address.GetAddress(), currentOffset);
const ui64 internalPos = address.GetAddress().GetLocalIndex(currentOffset);
if (internalPos + countLeast <= (ui64)address.GetArray()->length()) {
chunks.emplace_back(address.GetArray()->Slice(internalPos, countLeast));
break;
} else {
const ui32 deltaCount = address.GetArray()->length() - internalPos;
chunks.emplace_back(address.GetArray()->Slice(internalPos, deltaCount));
AFL_VERIFY(countLeast >= deltaCount);
countLeast -= deltaCount;
currentOffset += deltaCount;
}
}
return std::make_shared<arrow::ChunkedArray>(chunks, DataType);
}

NKikimr::NArrow::NAccessor::IChunkedArray::TFullDataAddress IChunkedArray::GetChunk(
const std::optional<TAddressChain>& chunkCurrent, const ui64 position) const {
AFL_VERIFY(position < GetRecordsCount());
std::optional<TCommonChunkAddress> address;

if (IsDataOwner()) {
if (chunkCurrent) {
AFL_VERIFY(chunkCurrent->GetSize() == 1)("size", chunkCurrent->GetSize());
}
auto localAddress = GetLocalData(address, position);
TAddressChain addressChain;
addressChain.Add(localAddress.GetAddress());
AFL_VERIFY(addressChain.Contains(position));
return TFullDataAddress(localAddress.GetArray(), std::move(addressChain));
} else {
auto chunkedArrayAddress = GetArray(chunkCurrent, position, nullptr);
if (chunkCurrent) {
AFL_VERIFY(chunkCurrent->GetSize() == 1 + chunkedArrayAddress.GetAddress().GetSize())("current", chunkCurrent->GetSize())(
"chunked", chunkedArrayAddress.GetAddress().GetSize());
}
auto localAddress = chunkedArrayAddress.GetArray()->GetLocalData(address, chunkedArrayAddress.GetAddress().GetLocalIndex(position));
auto fullAddress = std::move(chunkedArrayAddress.MutableAddress());
fullAddress.Add(localAddress.GetAddress());
AFL_VERIFY(fullAddress.Contains(position));
return TFullDataAddress(localAddress.GetArray(), std::move(fullAddress));
}
}

IChunkedArray::TFullChunkedArrayAddress IChunkedArray::GetArray(
const std::optional<TAddressChain>& chunkCurrent, const ui64 position, const std::shared_ptr<IChunkedArray>& selfPtr) const {
AFL_VERIFY(position < GetRecordsCount());
if (IsDataOwner()) {
AFL_VERIFY(selfPtr);
TAddressChain chain;
chain.Add(TCommonChunkAddress(0, GetRecordsCount(), 0));
return IChunkedArray::TFullChunkedArrayAddress(selfPtr, std::move(chain));
}
TAddressChain addressChain;

auto* currentLevel = this;
ui32 currentPosition = position;
ui32 idx = 0;
std::vector<std::shared_ptr<IChunkedArray>> chainForTemporarySave;
while (!currentLevel->IsDataOwner()) {
std::optional<TCommonChunkAddress> currentAddress;
if (chunkCurrent) {
currentAddress = chunkCurrent->GetAddress(idx);
}
auto nextChunkedArray = currentLevel->GetLocalChunkedArray(currentAddress, currentPosition);
chainForTemporarySave.emplace_back(nextChunkedArray.GetArray());
currentLevel = chainForTemporarySave.back().get();
addressChain.Add(nextChunkedArray.GetAddress());
AFL_VERIFY(nextChunkedArray.GetAddress().GetStartPosition() <= currentPosition);
currentPosition -= nextChunkedArray.GetAddress().GetStartPosition();
++idx;
}
AFL_VERIFY(!chunkCurrent || chunkCurrent->GetSize() - idx <= 1)("idx", idx)("size", chunkCurrent->GetSize());
return TFullChunkedArrayAddress(chainForTemporarySave.back(), std::move(addressChain));
}

TString IChunkedArray::TReader::DebugString(const ui32 position) const {
auto address = GetReadChunk(position);
return NArrow::DebugString(address.GetArray(), address.GetPosition());
}

std::partial_ordering IChunkedArray::TReader::CompareColumns(
const std::vector<TReader>& l, const ui64 lPosition, const std::vector<TReader>& r, const ui64 rPosition) {
AFL_VERIFY(l.size() == r.size());
for (ui32 i = 0; i < l.size(); ++i) {
const TAddress lAddress = l[i].GetReadChunk(lPosition);
const TAddress rAddress = r[i].GetReadChunk(rPosition);
auto cmp = lAddress.Compare(rAddress);
if (std::is_neq(cmp)) {
return cmp;
}
}
return std::partial_ordering::equivalent;
}

IChunkedArray::TAddress IChunkedArray::TReader::GetReadChunk(const ui64 position) const {
AFL_VERIFY(position < ChunkedArray->GetRecordsCount());
if (CurrentChunkAddress && CurrentChunkAddress->GetAddress().Contains(position)) {
} else {
CurrentChunkAddress = ChunkedArray->GetChunk(CurrentChunkAddress, position);
}
return IChunkedArray::TAddress(CurrentChunkAddress->GetArray(), CurrentChunkAddress->GetAddress().GetLocalIndex(position));
}

const std::partial_ordering IChunkedArray::TAddress::Compare(const TAddress& item) const {
return TComparator::TypedCompare<true>(*Array, Position, *item.Array, item.Position);
}

TChunkedArraySerialized::TChunkedArraySerialized(const std::shared_ptr<IChunkedArray>& array, const TString& serializedData)
: Array(array)
, SerializedData(serializedData) {
AFL_VERIFY(serializedData);
AFL_VERIFY(Array);
AFL_VERIFY(Array->GetRecordsCount());
}

std::partial_ordering IChunkedArray::TFullDataAddress::Compare(
const ui64 position, const TFullDataAddress& item, const ui64 itemPosition) const {
AFL_VERIFY(Address.Contains(position))("pos", position)("start", Address.DebugString());
AFL_VERIFY(item.Address.Contains(itemPosition))("pos", itemPosition)("start", item.Address.DebugString());
return TComparator::TypedCompare<true>(*Array, Address.GetLocalIndex(position), *item.Array, item.Address.GetLocalIndex(itemPosition));
}

std::shared_ptr<arrow::Array> IChunkedArray::TFullDataAddress::CopyRecord(const ui64 recordIndex) const {
return NArrow::CopyRecords(Array, { Address.GetLocalIndex(recordIndex) });
}

TString IChunkedArray::TFullDataAddress::DebugString(const ui64 position) const {
return NArrow::DebugString(Array, Address.GetLocalIndex(position));
}

} // namespace NKikimr::NArrow::NAccessor
Loading
Loading