Skip to content

Commit

Permalink
Fix infinite cycle
Browse files Browse the repository at this point in the history
  • Loading branch information
molotkov-and committed Feb 18, 2025
1 parent 8ec1ecf commit 55dcad7
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 15 deletions.
8 changes: 4 additions & 4 deletions ydb/core/tx/schemeshard/schemeshard__data_erasure.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -236,8 +236,8 @@ struct TSchemeShard::TTxRunDataErasure : public TSchemeShard::TRwTxBase {
}
Self->DataErasureQueue->Enqueue(pathId);
Self->ActiveDataErasureTenants[pathId] = EDataErasureStatus::IN_PROGRESS;
db.Table<Schema::DataErasureScheduler>().Key(Self->DataErasureGeneration).Update<Schema::DataErasureScheduler::Status,
Schema::DataErasureScheduler::StartTime>(static_cast<ui32>(Self->DataErasureScheduler->GetStatus()),
db.Table<Schema::DataErasureStarts>().Key(Self->DataErasureGeneration).Update<Schema::DataErasureStarts::Status,
Schema::DataErasureStarts::StartTime>(static_cast<ui32>(Self->DataErasureScheduler->GetStatus()),
StartTime.MicroSeconds());
db.Table<Schema::ActiveDataErasureTenants>().Key(pathId.OwnerId, pathId.LocalPathId).Update<Schema::ActiveDataErasureTenants::Status>(static_cast<ui32>(Self->ActiveDataErasureTenants[pathId]));
}
Expand Down Expand Up @@ -303,8 +303,8 @@ struct TSchemeShard::TTxDataErasureSchedulerInit : public TSchemeShard::TRwTxBas
LOG_DEBUG_S(ctx, NKikimrServices::FLAT_TX_SCHEMESHARD,
"TTxDataErasureSchedulerInit Execute at schemeshard: " << Self->TabletID());
NIceDb::TNiceDb db(txc.DB);
db.Table<Schema::DataErasureScheduler>().Key(0).Update<Schema::DataErasureScheduler::Status,
Schema::DataErasureScheduler::StartTime>(static_cast<ui32>(TDataErasureScheduler::EStatus::COMPLETED), AppData(ctx)->TimeProvider->Now().MicroSeconds());
db.Table<Schema::DataErasureStarts>().Key(0).Update<Schema::DataErasureStarts::Status,
Schema::DataErasureStarts::StartTime>(static_cast<ui32>(TDataErasureScheduler::EStatus::COMPLETED), AppData(ctx)->TimeProvider->Now().MicroSeconds());
}

void DoComplete(const TActorContext& ctx) override {
Expand Down
30 changes: 23 additions & 7 deletions ydb/core/tx/schemeshard/schemeshard__init.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1869,7 +1869,7 @@ struct TSchemeShard::TTxInit : public TTransactionBase<TSchemeShard> {
{
if (Self->IsDomainSchemeShard) {
{
auto rowset = db.Table<Schema::DataErasureScheduler>().Range().Select();
auto rowset = db.Table<Schema::DataErasureStarts>().Range().Select();
if (!rowset.IsReady()) {
return false;
}
Expand All @@ -1880,16 +1880,20 @@ struct TSchemeShard::TTxInit : public TTransactionBase<TSchemeShard> {
TInstant startTime;
TDataErasureScheduler::EStatus status = TDataErasureScheduler::EStatus::COMPLETED;
while (!rowset.EndOfSet()) {
ui64 generation = rowset.GetValue<Schema::DataErasureScheduler::Generation>();
ui64 generation = rowset.GetValue<Schema::DataErasureStarts::Generation>();
if (generation >= currentGeneration) {
currentGeneration = generation;
startTime = TInstant::FromValue(rowset.GetValue<Schema::DataErasureScheduler::StartTime>());
ui32 statusValue = rowset.GetValue<Schema::DataErasureScheduler::Status>();
startTime = TInstant::FromValue(rowset.GetValue<Schema::DataErasureStarts::StartTime>());
ui32 statusValue = rowset.GetValue<Schema::DataErasureStarts::Status>();
if (statusValue >= static_cast<ui32>(TDataErasureScheduler::EStatus::UNSPECIFIED) &&
statusValue <= static_cast<ui32>(TDataErasureScheduler::EStatus::IN_PROGRESS_BSC)) {
status = static_cast<TDataErasureScheduler::EStatus>(statusValue);
}
}

if (!rowset.Next()) {
return false;
}
}
Self->DataErasureScheduler->Restore({.IsInitialized = true,
.Generation = currentGeneration,
Expand Down Expand Up @@ -1921,26 +1925,34 @@ struct TSchemeShard::TTxInit : public TTransactionBase<TSchemeShard> {
}

Self->ActiveDataErasureTenants[pathId] = status;

if (!rowset.Next()) {
return false;
}
}
}
} else {
{
auto rowset = db.Table<Schema::TenantDataErasure>().Range().Select();
auto rowset = db.Table<Schema::TenantDataErasureStarts>().Range().Select();
if (!rowset.IsReady()) {
return false;
}
while (!rowset.EndOfSet()) {
ui64 generation = rowset.GetValue<Schema::TenantDataErasure::Generation>();
ui64 generation = rowset.GetValue<Schema::TenantDataErasureStarts::Generation>();
if (generation > Self->DataErasureGeneration) {
Self->DataErasureGeneration = generation;
ui32 statusValue = rowset.GetValue<Schema::TenantDataErasure::Status>();
ui32 statusValue = rowset.GetValue<Schema::TenantDataErasureStarts::Status>();
EDataErasureStatus status = TSchemeShard::EDataErasureStatus::COMPLETED;
if (statusValue >= static_cast<ui32>(TSchemeShard::EDataErasureStatus::UNSPECIFIED) &&
statusValue <= static_cast<ui32>(TSchemeShard::EDataErasureStatus::IN_PROGRESS)) {
status = static_cast<TSchemeShard::EDataErasureStatus>(statusValue);
}
Self->DataErasureStatus = status;
}

if (!rowset.Next()) {
return false;
}
}
}

Expand All @@ -1961,6 +1973,10 @@ struct TSchemeShard::TTxInit : public TTransactionBase<TSchemeShard> {
status = static_cast<TSchemeShard::EDataErasureStatus>(statusValue);
}
Self->ActiveDataErasureShards[shardId] = status;

if (!rowset.Next()) {
return false;
}
}
}
}
Expand Down
8 changes: 4 additions & 4 deletions ydb/core/tx/schemeshard/schemeshard_schema.h
Original file line number Diff line number Diff line change
Expand Up @@ -1921,7 +1921,7 @@ struct Schema : NIceDb::Schema {
>;
};

struct DataErasureScheduler : Table<114> {
struct DataErasureStarts : Table<114> {
struct Generation : Column<1, NScheme::NTypeIds::Uint64> {};
struct Status : Column<2, NScheme::NTypeIds::Uint32> {};
struct StartTime : Column<3, NScheme::NTypeIds::Timestamp> {};
Expand All @@ -1947,7 +1947,7 @@ struct Schema : NIceDb::Schema {
>;
};

struct TenantDataErasure : Table<116> {
struct TenantDataErasureStarts : Table<116> {
struct Generation : Column<1, NScheme::NTypeIds::Uint64> {};
struct Status : Column<2, NScheme::NTypeIds::Uint32> {};

Expand Down Expand Up @@ -2084,9 +2084,9 @@ struct Schema : NIceDb::Schema {
BackupCollection,
KMeansTreeState,
KMeansTreeSample,
DataErasureScheduler,
DataErasureStarts,
ActiveDataErasureTenants,
TenantDataErasure,
TenantDataErasureStarts,
ActiveDataErasureShards
>;

Expand Down

0 comments on commit 55dcad7

Please sign in to comment.