Skip to content

Commit ac8db1c

Browse files
committed
Fixes
1 parent 5a8e755 commit ac8db1c

File tree

4 files changed

+87
-21
lines changed

4 files changed

+87
-21
lines changed

ydb/core/tx/schemeshard/schemeshard__operation_consistent_copy_tables.cpp

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,13 +115,33 @@ TVector<ISubOperation::TPtr> CreateConsistentCopyTables(TOperationId nextId, con
115115
TPath dstPath = TPath::Resolve(dstStr, context.SS);
116116
TPath dstParentPath = dstPath.Parent();
117117

118+
THashSet<TString> sequences;
119+
for (const auto& child: srcPath.Base()->GetChildren()) {
120+
auto name = child.first;
121+
auto pathId = child.second;
122+
123+
TPath childPath = srcPath.Child(name);
124+
if (!childPath.IsSequence() || childPath.IsDeleted()) {
125+
continue;
126+
}
127+
128+
Y_ABORT_UNLESS(childPath.Base()->PathId == pathId);
129+
130+
TSequenceInfo::TPtr sequenceInfo = context.SS->Sequences.at(pathId);
131+
const auto& sequenceDesc = sequenceInfo->Description;
132+
const auto& sequenceName = sequenceDesc.GetName();
133+
134+
sequences.emplace(sequenceName);
135+
}
136+
118137
result.push_back(CreateCopyTable(NextPartId(nextId, result),
119-
CopyTableTask(srcPath, dstPath, descr.GetOmitFollowers(), descr.GetIsBackup())));
138+
CopyTableTask(srcPath, dstPath, descr.GetOmitFollowers(), descr.GetIsBackup()), sequences));
120139

121140
if (descr.GetOmitIndexes()) {
122141
continue;
123142
}
124143

144+
TVector<NKikimrSchemeOp::TSequenceDescription> sequenceDescriptions;
125145
for (const auto& child: srcPath.Base()->GetChildren()) {
126146
const auto& name = child.first;
127147
const auto& pathId = child.second;
@@ -133,6 +153,13 @@ TVector<ISubOperation::TPtr> CreateConsistentCopyTables(TOperationId nextId, con
133153
continue;
134154
}
135155

156+
if (srcIndexPath.IsSequence()) {
157+
TSequenceInfo::TPtr sequenceInfo = context.SS->Sequences.at(pathId);
158+
const auto& sequenceDesc = sequenceInfo->Description;
159+
sequenceDescriptions.push_back(sequenceDesc);
160+
continue;
161+
}
162+
136163
if (!srcIndexPath.IsTableIndex()) {
137164
continue;
138165
}
@@ -151,6 +178,17 @@ TVector<ISubOperation::TPtr> CreateConsistentCopyTables(TOperationId nextId, con
151178
result.push_back(CreateCopyTable(NextPartId(nextId, result),
152179
CopyTableTask(srcImplTable, dstImplTable, descr.GetOmitFollowers(), descr.GetIsBackup())));
153180
}
181+
182+
for (auto&& sequenceDescription : sequenceDescriptions) {
183+
auto scheme = TransactionTemplate(
184+
dstPath.PathString(),
185+
NKikimrSchemeOp::EOperationType::ESchemeOpCreateSequence);
186+
scheme.SetFailOnExist(true);
187+
188+
*scheme.MutableSequence() = std::move(sequenceDescription);
189+
190+
result.push_back(CreateNewSequence(NextPartId(nextId, result), scheme));
191+
}
154192
}
155193

156194
return result;

ydb/core/tx/schemeshard/schemeshard_import_flow_proposals.cpp

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ THolder<TEvSchemeShard::TEvModifySchemeTransaction> CreateTablePropose(
4343

4444
Y_ABORT_UNLESS(ss->TableProfilesLoaded);
4545
Ydb::StatusIds::StatusCode status;
46-
if (!FillTableDescription(modifyScheme, item.Scheme, ss->TableProfiles, status, error)) {
46+
if (!FillTableDescription(modifyScheme, item.Scheme, ss->TableProfiles, status, error, true)) {
4747
return nullptr;
4848
}
4949

@@ -54,12 +54,24 @@ THolder<TEvSchemeShard::TEvModifySchemeTransaction> CreateTablePropose(
5454

5555
auto seqDesc = indexedTable->MutableSequenceDescription()->Add();
5656
seqDesc->SetName(fromSequence.name());
57-
seqDesc->SetMinValue(fromSequence.min_value());
58-
seqDesc->SetMaxValue(fromSequence.max_value());
59-
seqDesc->SetStartValue(fromSequence.start_value());
60-
seqDesc->SetCache(fromSequence.cache());
61-
seqDesc->SetIncrement(fromSequence.increment());
62-
seqDesc->SetCycle(fromSequence.cycle());
57+
if (fromSequence.has_min_value()) {
58+
seqDesc->SetMinValue(fromSequence.min_value());
59+
}
60+
if (fromSequence.has_max_value()) {
61+
seqDesc->SetMaxValue(fromSequence.max_value());
62+
}
63+
if (fromSequence.has_start_value()) {
64+
seqDesc->SetStartValue(fromSequence.start_value());
65+
}
66+
if (fromSequence.has_cache()) {
67+
seqDesc->SetCache(fromSequence.cache());
68+
}
69+
if (fromSequence.has_increment()) {
70+
seqDesc->SetIncrement(fromSequence.increment());
71+
}
72+
if (fromSequence.has_cycle()) {
73+
seqDesc->SetCycle(fromSequence.cycle());
74+
}
6375

6476
break;
6577
}

ydb/core/ydb_convert/table_description.cpp

Lines changed: 28 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1339,21 +1339,27 @@ void FillReadReplicasSettings(Ydb::Table::CreateTableRequest& out,
13391339

13401340
bool FillTableDescription(NKikimrSchemeOp::TModifyScheme& out,
13411341
const Ydb::Table::CreateTableRequest& in, const TTableProfiles& profiles,
1342-
Ydb::StatusIds::StatusCode& status, TString& error)
1342+
Ydb::StatusIds::StatusCode& status, TString& error, bool indexedTable)
13431343
{
1344-
auto& tableDesc = *out.MutableCreateTable();
13451344

1346-
if (!FillColumnDescription(tableDesc, in.columns(), status, error)) {
1345+
NKikimrSchemeOp::TTableDescription* tableDesc = nullptr;
1346+
if (indexedTable) {
1347+
tableDesc = out.MutableCreateIndexedTable()->MutableTableDescription();
1348+
} else {
1349+
tableDesc = out.MutableCreateTable();
1350+
}
1351+
1352+
if (!FillColumnDescription(*tableDesc, in.columns(), status, error)) {
13471353
return false;
13481354
}
13491355

1350-
tableDesc.MutableKeyColumnNames()->CopyFrom(in.primary_key());
1356+
tableDesc->MutableKeyColumnNames()->CopyFrom(in.primary_key());
13511357

1352-
if (!profiles.ApplyTableProfile(in.profile(), tableDesc, status, error)) {
1358+
if (!profiles.ApplyTableProfile(in.profile(), *tableDesc, status, error)) {
13531359
return false;
13541360
}
13551361

1356-
TColumnFamilyManager families(tableDesc.MutablePartitionConfig());
1362+
TColumnFamilyManager families(tableDesc->MutablePartitionConfig());
13571363
if (in.has_storage_settings() && !families.ApplyStorageSettings(in.storage_settings(), &status, &error)) {
13581364
return false;
13591365
}
@@ -1370,7 +1376,7 @@ bool FillTableDescription(NKikimrSchemeOp::TModifyScheme& out,
13701376
}
13711377

13721378
TList<TString> warnings;
1373-
if (!FillCreateTableSettingsDesc(tableDesc, in, status, error, warnings, false)) {
1379+
if (!FillCreateTableSettingsDesc(*tableDesc, in, status, error, warnings, false)) {
13741380
return false;
13751381
}
13761382

@@ -1392,11 +1398,21 @@ void FillSequenceDescription(Ydb::Table::CreateTableRequest& out, const NKikimrS
13921398

13931399
const auto& sequenceDescription = sequences.at(fromSequence->name());
13941400

1395-
fromSequence->set_min_value(sequenceDescription.GetMinValue());
1396-
fromSequence->set_max_value(sequenceDescription.GetMaxValue());
1397-
fromSequence->set_start_value(sequenceDescription.GetStartValue());
1398-
fromSequence->set_cache(sequenceDescription.GetCache());
1399-
fromSequence->set_increment(sequenceDescription.GetIncrement());
1401+
if (sequenceDescription.HasMinValue()) {
1402+
fromSequence->set_min_value(sequenceDescription.GetMinValue());
1403+
}
1404+
if (sequenceDescription.HasMaxValue()) {
1405+
fromSequence->set_max_value(sequenceDescription.GetMaxValue());
1406+
}
1407+
if (sequenceDescription.HasStartValue()) {
1408+
fromSequence->set_start_value(sequenceDescription.GetStartValue());
1409+
}
1410+
if (sequenceDescription.HasCache()) {
1411+
fromSequence->set_cache(sequenceDescription.GetCache());
1412+
}
1413+
if (sequenceDescription.HasIncrement()) {
1414+
fromSequence->set_increment(sequenceDescription.GetIncrement());
1415+
}
14001416
break;
14011417
}
14021418
case Ydb::Table::ColumnMeta::kFromLiteral: {

ydb/core/ydb_convert/table_description.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ void FillReadReplicasSettings(Ydb::Table::CreateTableRequest& out,
125125
// in
126126
bool FillTableDescription(NKikimrSchemeOp::TModifyScheme& out,
127127
const Ydb::Table::CreateTableRequest& in, const TTableProfiles& profiles,
128-
Ydb::StatusIds::StatusCode& status, TString& error);
128+
Ydb::StatusIds::StatusCode& status, TString& error, bool indexedTable = false);
129129

130130
// out
131131
void FillSequenceDescription(Ydb::Table::CreateTableRequest& out,

0 commit comments

Comments
 (0)