Skip to content

Commit fb31079

Browse files
authored
Use the whole TTableDescription to describe an indexImplTable in TIndexDescription (#6280)
The purpose of the change is to prepare for multiple indexImplTables for vector indices. Other changes are more or less cosmetic.
1 parent bbe1921 commit fb31079

10 files changed

+116
-98
lines changed

ydb/core/grpc_services/rpc_describe_table.cpp

+8-1
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,14 @@ class TDescribeTableRPC : public TRpcSchemeRequestActor<TDescribeTableRPC, TEvDe
9292
return Reply(Ydb::StatusIds::INTERNAL_ERROR, ctx);
9393
}
9494

95-
FillIndexDescription(describeTableResult, tableDescription, splitKeyType);
95+
try {
96+
FillIndexDescription(describeTableResult, tableDescription);
97+
} catch (const std::exception& ex) {
98+
LOG_ERROR(ctx, NKikimrServices::GRPC_SERVER, "Unable to fill index description: %s", ex.what());
99+
Request_->RaiseIssue(NYql::ExceptionToIssue(ex));
100+
return Reply(Ydb::StatusIds::INTERNAL_ERROR, ctx);
101+
}
102+
96103
FillChangefeedDescription(describeTableResult, tableDescription);
97104

98105
if (GetProtoRequest()->include_table_stats()) {

ydb/core/protos/flat_scheme_op.proto

+2-11
Original file line numberDiff line numberDiff line change
@@ -982,10 +982,6 @@ enum EIndexState {
982982
EIndexStateWriteOnly = 3;
983983
}
984984

985-
message TExplicitPartitions {
986-
repeated TSplitBoundary SplitBoundary = 1;
987-
}
988-
989985
message TIndexDescription {
990986
optional string Name = 1;
991987
optional uint64 LocalPathId = 2;
@@ -1000,15 +996,10 @@ message TIndexDescription {
1000996
optional uint64 PathOwnerId = 7;
1001997

1002998
repeated string DataColumnNames = 8;
999+
10031000
// DataSize + IndexSize of indexImplTable
10041001
optional uint64 DataSize = 9;
1005-
1006-
// indexImplTable settings
1007-
oneof Partitions {
1008-
uint32 UniformPartitions = 10;
1009-
TExplicitPartitions ExplicitPartitions = 11;
1010-
}
1011-
optional TPartitioningPolicy PartitioningPolicy = 12;
1002+
repeated TTableDescription IndexImplTableDescriptions = 10;
10121003
}
10131004

10141005
message TIndexCreationConfig {

ydb/core/tx/datashard/export_common.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -55,11 +55,11 @@ TMaybe<Ydb::Table::CreateTableRequest> GenYdbScheme(
5555

5656
try {
5757
FillTableBoundary(scheme, tableDesc, mkqlKeyType);
58+
FillIndexDescription(scheme, tableDesc);
5859
} catch (const yexception&) {
5960
return Nothing();
6061
}
6162

62-
FillIndexDescription(scheme, tableDesc, mkqlKeyType);
6363
FillStorageSettings(scheme, tableDesc);
6464
FillColumnFamilies(scheme, tableDesc);
6565
FillAttributes(scheme, pathDesc);

ydb/core/tx/schemeshard/schemeshard__operation_initiate_build_index.cpp

+3-1
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,9 @@ class TConfigureParts: public TSubOperationState {
8888
found = true;
8989

9090
Y_ABORT_UNLESS(index->AlterData);
91-
context.SS->DescribeTableIndex(childPathId, childName, index->AlterData, *initiate->MutableIndexDescription());
91+
context.SS->DescribeTableIndex(childPathId, childName, index->AlterData, false, false,
92+
*initiate->MutableIndexDescription()
93+
);
9294
}
9395

9496
txState->ClearShardsInProgress();

ydb/core/tx/schemeshard/schemeshard_impl.cpp

+3-1
Original file line numberDiff line numberDiff line change
@@ -6675,7 +6675,9 @@ void TSchemeShard::FillTableDescriptionForShardIdx(
66756675
case NKikimrSchemeOp::EPathTypeTableIndex: {
66766676
Y_ABORT_UNLESS(Indexes.contains(childPathId));
66776677
auto info = Indexes.at(childPathId);
6678-
DescribeTableIndex(childPathId, childName, newTable ? info->AlterData : info, *tableDescr->MutableTableIndexes()->Add());
6678+
DescribeTableIndex(childPathId, childName, newTable ? info->AlterData : info, false, false,
6679+
*tableDescr->MutableTableIndexes()->Add()
6680+
);
66796681
break;
66806682
}
66816683

ydb/core/tx/schemeshard/schemeshard_impl.h

+6-2
Original file line numberDiff line numberDiff line change
@@ -1016,8 +1016,12 @@ class TSchemeShard
10161016

10171017
void DescribeTable(const TTableInfo::TPtr tableInfo, const NScheme::TTypeRegistry* typeRegistry,
10181018
bool fillConfig, bool fillBoundaries, NKikimrSchemeOp::TTableDescription* entry) const;
1019-
void DescribeTableIndex(const TPathId& pathId, const TString& name, NKikimrSchemeOp::TIndexDescription& entry);
1020-
void DescribeTableIndex(const TPathId& pathId, const TString& name, TTableIndexInfo::TPtr indexInfo, NKikimrSchemeOp::TIndexDescription& entry);
1019+
void DescribeTableIndex(const TPathId& pathId, const TString& name,
1020+
bool fillConfig, bool fillBoundaries, NKikimrSchemeOp::TIndexDescription& entry
1021+
) const;
1022+
void DescribeTableIndex(const TPathId& pathId, const TString& name, TTableIndexInfo::TPtr indexInfo,
1023+
bool fillConfig, bool fillBoundaries, NKikimrSchemeOp::TIndexDescription& entry
1024+
) const;
10211025
void DescribeCdcStream(const TPathId& pathId, const TString& name, NKikimrSchemeOp::TCdcStreamDescription& desc);
10221026
void DescribeCdcStream(const TPathId& pathId, const TString& name, TCdcStreamInfo::TPtr info, NKikimrSchemeOp::TCdcStreamDescription& desc);
10231027
void DescribeSequence(const TPathId& pathId, const TString& name,

ydb/core/tx/schemeshard/schemeshard_path_describer.cpp

+34-22
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,16 @@
88

99
#include <util/stream/format.h>
1010

11+
namespace {
12+
13+
void FillPartitionConfig(const NKikimrSchemeOp::TPartitionConfig& in, NKikimrSchemeOp::TPartitionConfig& out) {
14+
out.CopyFrom(in);
15+
NKikimr::NSchemeShard::TPartitionConfigMerger::DeduplicateColumnFamiliesById(out);
16+
out.MutableStorageRooms()->Clear();
17+
}
18+
19+
}
20+
1121
namespace NKikimr {
1222
namespace NSchemeShard {
1323

@@ -364,7 +374,7 @@ void TPathDescriber::DescribeTable(const TActorContext& ctx, TPathId pathId, TPa
364374

365375
switch (childPath->PathType) {
366376
case NKikimrSchemeOp::EPathTypeTableIndex:
367-
Self->DescribeTableIndex(childPathId, childName, *entry->AddTableIndexes());
377+
Self->DescribeTableIndex(childPathId, childName, returnConfig, false, *entry->AddTableIndexes());
368378
break;
369379
case NKikimrSchemeOp::EPathTypeCdcStream:
370380
Self->DescribeCdcStream(childPathId, childName, *entry->AddCdcStreams());
@@ -586,8 +596,12 @@ void TPathDescriber::DescribeRtmrVolume(TPathId pathId, TPathElement::TPtr pathE
586596
}
587597

588598
void TPathDescriber::DescribeTableIndex(const TPath& path) {
589-
Self->DescribeTableIndex(path.Base()->PathId, path.Base()->Name,
590-
*Result->Record.MutablePathDescription()->MutableTableIndex());
599+
bool returnConfig = Params.GetReturnPartitionConfig();
600+
bool returnBoundaries = Params.HasOptions() && Params.GetOptions().GetReturnBoundaries();
601+
602+
Self->DescribeTableIndex(path.Base()->PathId, path.Base()->Name, returnConfig, returnBoundaries,
603+
*Result->Record.MutablePathDescription()->MutableTableIndex()
604+
);
591605
DescribeChildren(path);
592606
}
593607

@@ -1175,9 +1189,7 @@ void TSchemeShard::DescribeTable(const TTableInfo::TPtr tableInfo, const NScheme
11751189
}
11761190

11771191
if (fillConfig) {
1178-
entry->MutablePartitionConfig()->CopyFrom(tableInfo->PartitionConfig());
1179-
TPartitionConfigMerger::DeduplicateColumnFamiliesById(*entry->MutablePartitionConfig());
1180-
entry->MutablePartitionConfig()->MutableStorageRooms()->Clear();
1192+
FillPartitionConfig(tableInfo->PartitionConfig(), *entry->MutablePartitionConfig());
11811193
}
11821194

11831195
if (fillBoundaries) {
@@ -1196,17 +1208,17 @@ void TSchemeShard::DescribeTable(const TTableInfo::TPtr tableInfo, const NScheme
11961208
}
11971209

11981210
void TSchemeShard::DescribeTableIndex(const TPathId& pathId, const TString& name,
1199-
NKikimrSchemeOp::TIndexDescription& entry)
1211+
bool fillConfig, bool fillBoundaries, NKikimrSchemeOp::TIndexDescription& entry) const
12001212
{
12011213
auto it = Indexes.FindPtr(pathId);
12021214
Y_ABORT_UNLESS(it, "TableIndex is not found");
12031215
TTableIndexInfo::TPtr indexInfo = *it;
12041216

1205-
DescribeTableIndex(pathId, name, indexInfo, entry);
1217+
DescribeTableIndex(pathId, name, indexInfo, fillConfig, fillBoundaries, entry);
12061218
}
12071219

12081220
void TSchemeShard::DescribeTableIndex(const TPathId& pathId, const TString& name, TTableIndexInfo::TPtr indexInfo,
1209-
NKikimrSchemeOp::TIndexDescription& entry)
1221+
bool fillConfig, bool fillBoundaries, NKikimrSchemeOp::TIndexDescription& entry) const
12101222
{
12111223
Y_ABORT_UNLESS(indexInfo, "Empty index info");
12121224

@@ -1226,23 +1238,23 @@ void TSchemeShard::DescribeTableIndex(const TPathId& pathId, const TString& name
12261238
*entry.MutableDataColumnNames()->Add() = dataColumns;
12271239
}
12281240

1229-
Y_ABORT_UNLESS(PathsById.contains(pathId));
1230-
auto indexPath = PathsById.at(pathId);
1231-
1232-
Y_ABORT_UNLESS(indexPath->GetChildren().size() == 1);
1233-
const auto& indexImplPathId = indexPath->GetChildren().begin()->second;
1241+
auto* indexPath = PathsById.FindPtr(pathId);
1242+
Y_ABORT_UNLESS(indexPath);
1243+
Y_ABORT_UNLESS((*indexPath)->GetChildren().size() == 1);
1244+
const auto& indexImplTablePathId = (*indexPath)->GetChildren().begin()->second;
12341245

1235-
Y_ABORT_UNLESS(Tables.contains(indexImplPathId));
1236-
auto indexImplTable = Tables.at(indexImplPathId);
1246+
auto* tableInfo = Tables.FindPtr(indexImplTablePathId);
1247+
Y_ABORT_UNLESS(tableInfo);
12371248

1238-
const auto& tableStats = indexImplTable->GetStats().Aggregated;
1249+
const auto& tableStats = (*tableInfo)->GetStats().Aggregated;
12391250
entry.SetDataSize(tableStats.DataSize + tableStats.IndexSize);
12401251

1241-
*entry.MutablePartitioningPolicy() = indexImplTable->PartitionConfig().GetPartitioningPolicy();
1242-
if (const auto& explicitPartitions = indexImplTable->TableDescription.GetSplitBoundary();
1243-
!explicitPartitions.empty()
1244-
) {
1245-
*entry.MutableExplicitPartitions()->MutableSplitBoundary() = explicitPartitions;
1252+
auto* tableDescription = entry.AddIndexImplTableDescriptions();
1253+
if (fillConfig) {
1254+
FillPartitionConfig((*tableInfo)->PartitionConfig(), *tableDescription->MutablePartitionConfig());
1255+
}
1256+
if (fillBoundaries) {
1257+
FillTableBoundaries(*tableInfo, *tableDescription->MutableSplitBoundary());
12461258
}
12471259
}
12481260

ydb/core/tx/schemeshard/ut_restore/ut_restore.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ namespace {
4848

4949
scheme.mutable_primary_key()->CopyFrom(tableDesc.GetKeyColumnNames());
5050
FillColumnDescription(scheme, mkqlKeyType, tableDesc);
51-
FillIndexDescription(scheme, tableDesc, mkqlKeyType);
51+
FillIndexDescription(scheme, tableDesc);
5252
FillStorageSettings(scheme, tableDesc);
5353
FillColumnFamilies(scheme, tableDesc);
5454
FillAttributes(scheme, pathDesc);

ydb/core/ydb_convert/table_description.cpp

+56-56
Original file line numberDiff line numberDiff line change
@@ -719,10 +719,9 @@ bool FillColumnDescription(NKikimrSchemeOp::TColumnTableDescription& out,
719719

720720
template <typename TYdbProto>
721721
void FillTableBoundaryImpl(TYdbProto& out,
722-
const google::protobuf::RepeatedPtrField<NKikimrSchemeOp::TSplitBoundary>& boundaries,
723-
const NKikimrMiniKQL::TType& splitKeyType
724-
) {
725-
for (const auto& boundary : boundaries) {
722+
const NKikimrSchemeOp::TTableDescription& in, const NKikimrMiniKQL::TType& splitKeyType) {
723+
724+
for (const auto& boundary : in.GetSplitBoundary()) {
726725
if (boundary.HasSerializedKeyPrefix()) {
727726
throw NYql::TErrorException(NKikimrIssues::TIssuesIds::DEFAULT_ERROR)
728727
<< "Unexpected serialized response from txProxy";
@@ -756,12 +755,12 @@ void FillTableBoundaryImpl(TYdbProto& out,
756755

757756
void FillTableBoundary(Ydb::Table::DescribeTableResult& out,
758757
const NKikimrSchemeOp::TTableDescription& in, const NKikimrMiniKQL::TType& splitKeyType) {
759-
FillTableBoundaryImpl<Ydb::Table::DescribeTableResult>(out, in.GetSplitBoundary(), splitKeyType);
758+
FillTableBoundaryImpl<Ydb::Table::DescribeTableResult>(out, in, splitKeyType);
760759
}
761760

762761
void FillTableBoundary(Ydb::Table::CreateTableRequest& out,
763762
const NKikimrSchemeOp::TTableDescription& in, const NKikimrMiniKQL::TType& splitKeyType) {
764-
FillTableBoundaryImpl<Ydb::Table::CreateTableRequest>(out, in.GetSplitBoundary(), splitKeyType);
763+
FillTableBoundaryImpl<Ydb::Table::CreateTableRequest>(out, in, splitKeyType);
765764
}
766765

767766
template <typename TYdbProto>
@@ -802,38 +801,50 @@ void FillPartitioningSettings(TYdbProto& out, const NKikimrSchemeOp::TPartitioni
802801
}
803802
}
804803

804+
template <typename TYdbProto>
805+
void FillPartitioningSettingsImpl(TYdbProto& out,
806+
const NKikimrSchemeOp::TTableDescription& in) {
807+
808+
auto& outPartSettings = *out.mutable_partitioning_settings();
809+
810+
if (!in.HasPartitionConfig()) {
811+
FillDefaultPartitioningSettings(outPartSettings);
812+
return;
813+
}
814+
815+
const auto& partConfig = in.GetPartitionConfig();
816+
if (!partConfig.HasPartitioningPolicy()) {
817+
FillDefaultPartitioningSettings(outPartSettings);
818+
return;
819+
}
820+
821+
FillPartitioningSettings(outPartSettings, partConfig.GetPartitioningPolicy());
822+
}
823+
805824
void FillGlobalIndexSettings(Ydb::Table::GlobalIndexSettings& settings,
806-
const NKikimrSchemeOp::TIndexDescription& tableIndex,
807-
const NKikimrMiniKQL::TType& splitKeyType) {
825+
const google::protobuf::RepeatedPtrField<NKikimrSchemeOp::TTableDescription>& indexImplTables
826+
) {
827+
if (indexImplTables.empty()) {
828+
return;
829+
}
830+
const auto& indexImplTableDescription = indexImplTables.Get(0);
808831

809-
switch (tableIndex.GetPartitionsCase()) {
810-
case NKikimrSchemeOp::TIndexDescription::kUniformPartitions:
811-
settings.set_uniform_partitions(tableIndex.GetUniformPartitions());
812-
break;
813-
case NKikimrSchemeOp::TIndexDescription::kExplicitPartitions:
814-
FillTableBoundaryImpl(*settings.mutable_partition_at_keys(),
815-
tableIndex.GetExplicitPartitions().GetSplitBoundary(),
832+
if (indexImplTableDescription.SplitBoundarySize()) {
833+
NKikimrMiniKQL::TType splitKeyType;
834+
Ydb::Table::DescribeTableResult unused;
835+
FillColumnDescription(unused, splitKeyType, indexImplTableDescription);
836+
FillTableBoundaryImpl(
837+
*settings.mutable_partition_at_keys(),
838+
indexImplTableDescription,
816839
splitKeyType
817840
);
818-
break;
819-
default:
820-
break;
821841
}
822842

823-
auto& partitioningSettings = *settings.mutable_partitioning_settings();
824-
if (tableIndex.HasPartitioningPolicy()) {
825-
FillPartitioningSettings(
826-
partitioningSettings,
827-
tableIndex.GetPartitioningPolicy()
828-
);
829-
} else {
830-
FillDefaultPartitioningSettings(partitioningSettings);
831-
}
843+
FillPartitioningSettingsImpl(settings, indexImplTableDescription);
832844
}
833845

834846
template <typename TYdbProto>
835-
void FillIndexDescriptionImpl(TYdbProto& out,
836-
const NKikimrSchemeOp::TTableDescription& in, const NKikimrMiniKQL::TType& splitKeyType) {
847+
void FillIndexDescriptionImpl(TYdbProto& out, const NKikimrSchemeOp::TTableDescription& in) {
837848

838849
for (const auto& tableIndex : in.GetTableIndexes()) {
839850
auto index = out.add_indexes();
@@ -852,13 +863,22 @@ void FillIndexDescriptionImpl(TYdbProto& out,
852863

853864
switch (tableIndex.GetType()) {
854865
case NKikimrSchemeOp::EIndexType::EIndexTypeGlobal:
855-
FillGlobalIndexSettings(*index->mutable_global_index()->mutable_settings(), tableIndex, splitKeyType);
866+
FillGlobalIndexSettings(
867+
*index->mutable_global_index()->mutable_settings(),
868+
tableIndex.GetIndexImplTableDescriptions()
869+
);
856870
break;
857871
case NKikimrSchemeOp::EIndexType::EIndexTypeGlobalAsync:
858-
FillGlobalIndexSettings(*index->mutable_global_async_index()->mutable_settings(), tableIndex, splitKeyType);
872+
FillGlobalIndexSettings(
873+
*index->mutable_global_async_index()->mutable_settings(),
874+
tableIndex.GetIndexImplTableDescriptions()
875+
);
859876
break;
860877
case NKikimrSchemeOp::EIndexType::EIndexTypeGlobalUnique:
861-
FillGlobalIndexSettings(*index->mutable_global_unique_index()->mutable_settings(), tableIndex, splitKeyType);
878+
FillGlobalIndexSettings(
879+
*index->mutable_global_unique_index()->mutable_settings(),
880+
tableIndex.GetIndexImplTableDescriptions()
881+
);
862882
break;
863883
default:
864884
break;
@@ -876,13 +896,13 @@ void FillIndexDescriptionImpl(TYdbProto& out,
876896
}
877897

878898
void FillIndexDescription(Ydb::Table::DescribeTableResult& out,
879-
const NKikimrSchemeOp::TTableDescription& in, const NKikimrMiniKQL::TType& splitKeyType) {
880-
FillIndexDescriptionImpl(out, in, splitKeyType);
899+
const NKikimrSchemeOp::TTableDescription& in) {
900+
FillIndexDescriptionImpl(out, in);
881901
}
882902

883903
void FillIndexDescription(Ydb::Table::CreateTableRequest& out,
884-
const NKikimrSchemeOp::TTableDescription& in, const NKikimrMiniKQL::TType& splitKeyType) {
885-
FillIndexDescriptionImpl(out, in, splitKeyType);
904+
const NKikimrSchemeOp::TTableDescription& in) {
905+
FillIndexDescriptionImpl(out, in);
886906
}
887907

888908
bool FillIndexDescription(NKikimrSchemeOp::TIndexedTableCreationConfig& out,
@@ -1262,26 +1282,6 @@ void FillAttributes(Ydb::Table::CreateTableRequest& out,
12621282
FillAttributesImpl(out, in);
12631283
}
12641284

1265-
template <typename TYdbProto>
1266-
void FillPartitioningSettingsImpl(TYdbProto& out,
1267-
const NKikimrSchemeOp::TTableDescription& in) {
1268-
1269-
auto& outPartSettings = *out.mutable_partitioning_settings();
1270-
1271-
if (!in.HasPartitionConfig()) {
1272-
FillDefaultPartitioningSettings(outPartSettings);
1273-
return;
1274-
}
1275-
1276-
const auto& partConfig = in.GetPartitionConfig();
1277-
if (!partConfig.HasPartitioningPolicy()) {
1278-
FillDefaultPartitioningSettings(outPartSettings);
1279-
return;
1280-
}
1281-
1282-
FillPartitioningSettings(outPartSettings, partConfig.GetPartitioningPolicy());
1283-
}
1284-
12851285
void FillPartitioningSettings(Ydb::Table::DescribeTableResult& out,
12861286
const NKikimrSchemeOp::TTableDescription& in) {
12871287
FillPartitioningSettingsImpl(out, in);

ydb/core/ydb_convert/table_description.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -65,9 +65,9 @@ void FillTableBoundary(Ydb::Table::CreateTableRequest& out,
6565

6666
// out
6767
void FillIndexDescription(Ydb::Table::DescribeTableResult& out,
68-
const NKikimrSchemeOp::TTableDescription& in, const NKikimrMiniKQL::TType& splitKeyType);
68+
const NKikimrSchemeOp::TTableDescription& in);
6969
void FillIndexDescription(Ydb::Table::CreateTableRequest& out,
70-
const NKikimrSchemeOp::TTableDescription& in, const NKikimrMiniKQL::TType& splitKeyType);
70+
const NKikimrSchemeOp::TTableDescription& in);
7171
// in
7272
bool FillIndexDescription(NKikimrSchemeOp::TIndexedTableCreationConfig& out,
7373
const Ydb::Table::CreateTableRequest& in, Ydb::StatusIds::StatusCode& status, TString& error);

0 commit comments

Comments
 (0)