Skip to content

Commit 33fd676

Browse files
committed
almost ready message to SchemeShard
1 parent a6712c3 commit 33fd676

File tree

3 files changed

+119
-82
lines changed

3 files changed

+119
-82
lines changed

ydb/core/ydb_convert/table_description.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -280,6 +280,25 @@ bool BuildAlterTableModifyScheme(const Ydb::Table::AlterTableRequest* req, NKiki
280280
}
281281
}
282282

283+
// TO DO: redo to if, because it the fields are not repeated, for is meaningless, it just overwrites what's been written
284+
for (const auto& alterIndex : req->alter_indexes()) {
285+
modifyScheme->SetOperationType(NKikimrSchemeOp::EOperationType::ESchemeOpAlterTable);
286+
modifyScheme->SetWorkingDir(workingDir + "/" + name + "/" + alterIndex.name());
287+
auto* desc = modifyScheme->MutableAlterTable();
288+
desc->SetName("indexImplTable");
289+
if (!FillPartitioningPolicy(
290+
[&desc]() {
291+
return desc->MutablePartitionConfig()->MutablePartitioningPolicy();
292+
},
293+
alterIndex.partitioning_settings(),
294+
code,
295+
error
296+
)
297+
) {
298+
return false;
299+
}
300+
}
301+
283302
for (const auto& drop : req->drop_indexes()) {
284303
modifyScheme->SetOperationType(NKikimrSchemeOp::EOperationType::ESchemeOpDropIndex);
285304
auto desc = modifyScheme->MutableDropIndex();

ydb/core/ydb_convert/table_settings.cpp

Lines changed: 94 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -215,98 +215,110 @@ bool FillCreateTableSettingsDesc(NKikimrSchemeOp::TTableDescription& tableDesc,
215215
return true;
216216
}
217217

218-
bool FillAlterTableSettingsDesc(NKikimrSchemeOp::TTableDescription& tableDesc,
219-
const Ydb::Table::AlterTableRequest& proto,
220-
Ydb::StatusIds::StatusCode& code, TString& error, bool changed)
221-
{
222-
bool hadPartitionConfig = tableDesc.HasPartitionConfig();
223-
auto &partitionConfig = *tableDesc.MutablePartitionConfig();
224-
225-
if (proto.has_alter_partitioning_settings()) {
226-
auto& alterSettings = proto.alter_partitioning_settings();
227-
228-
switch (alterSettings.partitioning_by_size()) {
229-
case Ydb::FeatureFlag::STATUS_UNSPECIFIED:
230-
if (alterSettings.partition_size_mb()) {
231-
auto &policy = *partitionConfig.MutablePartitioningPolicy();
232-
policy.SetSizeToSplit((1 << 20) * alterSettings.partition_size_mb());
233-
changed = true;
234-
}
235-
break;
236-
case Ydb::FeatureFlag::ENABLED:
237-
{
238-
auto &policy = *partitionConfig.MutablePartitioningPolicy();
239-
if (alterSettings.partition_size_mb()) {
240-
policy.SetSizeToSplit((1 << 20) * alterSettings.partition_size_mb());
241-
} else {
242-
policy.SetSizeToSplit(defaultSizeToSplit);
243-
}
244-
if (!alterSettings.min_partitions_count()) {
245-
policy.SetMinPartitionsCount(defaultMinPartitions);
246-
}
247-
changed = true;
248-
break;
249-
}
250-
case Ydb::FeatureFlag::DISABLED:
251-
{
252-
if (alterSettings.partition_size_mb()) {
253-
code = Ydb::StatusIds::BAD_REQUEST;
254-
error = TStringBuilder() << "Auto partitioning partition size is set while "
255-
"auto partitioning by size is disabled";
256-
return false;
257-
}
258-
auto &policy = *partitionConfig.MutablePartitioningPolicy();
259-
policy.SetSizeToSplit(0);
260-
changed = true;
261-
break;
218+
bool FillPartitioningPolicy(
219+
// TO DO: rename from Getter to GetOrCreate
220+
std::function<NKikimrSchemeOp::TPartitioningPolicy*()>&& partitioningPolicyGetter,
221+
const Ydb::Table::PartitioningSettings& alterSettings,
222+
Ydb::StatusIds::StatusCode& code,
223+
TString& error
224+
) {
225+
switch (alterSettings.partitioning_by_size()) {
226+
case Ydb::FeatureFlag::STATUS_UNSPECIFIED:
227+
if (alterSettings.partition_size_mb()) {
228+
partitioningPolicyGetter()->SetSizeToSplit((1 << 20) * alterSettings.partition_size_mb());
262229
}
263-
default:
264-
code = Ydb::StatusIds::BAD_REQUEST;
265-
error = TStringBuilder() << "Unknown auto partitioning by size feature flag status: '"
266-
<< (ui32)alterSettings.partitioning_by_size() << "'";
267-
return false;
230+
break;
231+
case Ydb::FeatureFlag::ENABLED:
232+
{
233+
auto* policy = partitioningPolicyGetter();
234+
if (alterSettings.partition_size_mb()) {
235+
policy->SetSizeToSplit((1 << 20) * alterSettings.partition_size_mb());
236+
} else {
237+
policy->SetSizeToSplit(defaultSizeToSplit);
268238
}
269239

270-
switch (alterSettings.partitioning_by_load()) {
271-
case Ydb::FeatureFlag::STATUS_UNSPECIFIED:
272-
{
273-
changed = true;
274-
break;
275-
}
276-
case Ydb::FeatureFlag::ENABLED:
277-
{
278-
auto &policy = *partitionConfig.MutablePartitioningPolicy();
279-
policy.MutableSplitByLoadSettings()->SetEnabled(true);
280-
if (!alterSettings.min_partitions_count()) {
281-
policy.SetMinPartitionsCount(defaultMinPartitions);
282-
}
283-
changed = true;
284-
break;
285-
}
286-
case Ydb::FeatureFlag::DISABLED:
287-
{
288-
auto &policy = *partitionConfig.MutablePartitioningPolicy();
289-
policy.MutableSplitByLoadSettings()->SetEnabled(false);
290-
changed = true;
291-
break;
240+
if (!alterSettings.min_partitions_count()) {
241+
policy->SetMinPartitionsCount(defaultMinPartitions);
292242
}
293-
default:
243+
break;
244+
}
245+
case Ydb::FeatureFlag::DISABLED:
246+
{
247+
if (alterSettings.partition_size_mb()) {
294248
code = Ydb::StatusIds::BAD_REQUEST;
295-
error = TStringBuilder() << "Unknown auto partitioning by load feature flag status: '"
296-
<< (ui32)alterSettings.partitioning_by_load() << "'";
249+
error = TStringBuilder() << "Auto partitioning partition size is set while "
250+
"auto partitioning by size is disabled";
297251
return false;
298252
}
253+
partitioningPolicyGetter()->SetSizeToSplit(0);
254+
break;
255+
}
256+
default:
257+
code = Ydb::StatusIds::BAD_REQUEST;
258+
error = TStringBuilder() << "Unknown auto partitioning by size feature flag status: '"
259+
<< (ui32)alterSettings.partitioning_by_size() << "'";
260+
return false;
261+
}
299262

300-
if (alterSettings.min_partitions_count()) {
301-
auto &policy = *partitionConfig.MutablePartitioningPolicy();
302-
policy.SetMinPartitionsCount(alterSettings.min_partitions_count());
303-
changed = true;
263+
switch (alterSettings.partitioning_by_load()) {
264+
case Ydb::FeatureFlag::STATUS_UNSPECIFIED:
265+
{
266+
// allocates the protobuf
267+
partitioningPolicyGetter();
268+
break;
269+
}
270+
case Ydb::FeatureFlag::ENABLED:
271+
{
272+
auto* policy = partitioningPolicyGetter();
273+
policy->MutableSplitByLoadSettings()->SetEnabled(true);
274+
if (!alterSettings.min_partitions_count()) {
275+
policy->SetMinPartitionsCount(defaultMinPartitions);
304276
}
277+
break;
278+
}
279+
case Ydb::FeatureFlag::DISABLED:
280+
{
281+
partitioningPolicyGetter()->MutableSplitByLoadSettings()->SetEnabled(false);
282+
break;
283+
}
284+
default:
285+
code = Ydb::StatusIds::BAD_REQUEST;
286+
error = TStringBuilder() << "Unknown auto partitioning by load feature flag status: '"
287+
<< (ui32)alterSettings.partitioning_by_load() << "'";
288+
return false;
289+
}
305290

306-
if (alterSettings.max_partitions_count()) {
307-
auto &policy = *partitionConfig.MutablePartitioningPolicy();
308-
policy.SetMaxPartitionsCount(alterSettings.max_partitions_count());
309-
changed = true;
291+
if (alterSettings.min_partitions_count()) {
292+
partitioningPolicyGetter()->SetMinPartitionsCount(alterSettings.min_partitions_count());
293+
}
294+
295+
if (alterSettings.max_partitions_count()) {
296+
partitioningPolicyGetter()->SetMaxPartitionsCount(alterSettings.max_partitions_count());
297+
}
298+
299+
return true;
300+
}
301+
302+
bool FillAlterTableSettingsDesc(NKikimrSchemeOp::TTableDescription& tableDesc,
303+
const Ydb::Table::AlterTableRequest& proto,
304+
Ydb::StatusIds::StatusCode& code, TString& error, bool changed)
305+
{
306+
bool hadPartitionConfig = tableDesc.HasPartitionConfig();
307+
auto &partitionConfig = *tableDesc.MutablePartitionConfig();
308+
309+
if (proto.has_alter_partitioning_settings()) {
310+
if (!FillPartitioningPolicy(
311+
[&partitionConfig, &changed]() {
312+
// changed at least because the partitioning policy is allocated
313+
changed = true;
314+
return partitionConfig.MutablePartitioningPolicy();
315+
},
316+
proto.alter_partitioning_settings(),
317+
code,
318+
error
319+
)
320+
) {
321+
return false;
310322
}
311323
}
312324

ydb/core/ydb_convert/table_settings.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,12 @@ bool FillCreateTableSettingsDesc(NKikimrSchemeOp::TTableDescription& out,
1414
const Ydb::Table::CreateTableRequest& in,
1515
Ydb::StatusIds::StatusCode& code, TString& error, TList<TString>& warnings, bool tableProfileSet);
1616

17+
bool FillPartitioningPolicy(
18+
std::function<NKikimrSchemeOp::TPartitioningPolicy*()>&& partitioningPolicyGetter,
19+
const Ydb::Table::PartitioningSettings& alterSettings,
20+
Ydb::StatusIds::StatusCode& code,
21+
TString& error);
22+
1723
bool FillAlterTableSettingsDesc(NKikimrSchemeOp::TTableDescription& out,
1824
const Ydb::Table::AlterTableRequest& in,
1925
Ydb::StatusIds::StatusCode& code, TString& error, bool changed);

0 commit comments

Comments
 (0)